Система SAP ERP — это все-таки информационная система, а самым используемым функционалом любой информационной системы является отчетность. Сегодня мы напишем простейшую выборку из базы данных на языке ABAP/4 и выведем её результат в виде простейшего списка.

Наверное самое приятное в языке ABAP/4 является то, что SQL в него встроен и не надо формировать запросы в каких-то строковых переменных и передавать их в базу данных специальными методами. SQL, встроенный в ABAP/4 называется OpenSQL (позже мы поговорим о том, как можно писать и в синтаксисе базы данных на, так называемом, Native SQL).

По-моему мнению, такое решение по языку запросов оправдано тем, что система SAP ERP может базироваться на нескольких серверах базы данных и использование OpenSQL дает возможность использования одинакового кода в различных типах инсталляций.

Перейдем к самой программе, давайте используем следующий код (сразу хотелось бы предупредить — здесь мы пишем код, который сейчас редко найдешь в действующих программах, слишком уж он неоптимален и бесполезен):

*&———————————————————————*
*& Report  ZART_TEST
*&
*&———————————————————————*
*&
*&
*&———————————————————————*

REPORT  ZART_TEST.
tables: bkpf.

select * from bkpf
where bukrs = ‘5000’
and belnr = ‘1500000000’
and gjahr = ‘2011’.
write:/ bkpf-bukrs, bkpf-belnr, bkpf-gjahr.
endselect.

Если программы запустить (не забывайте активировать), то получим:

 

Давайте тогда разберемся с кодом, который нам это сделал :).

1. Мы определили таблицу в программе. Раньше таблицы всегда надо было описывать, если мы их собирались использовать, в новых версиях системы это не всегда обязательно делать, но я, например, считаю правилом хорошего тона описать те таблицы, которые используются в программе. Самое интересное, что в данном случае система создает для данной таблицы рабочую область, т.е. некую структурированную переменную, в которую можно поместить значения полей данной таблицы.

2. Пишем запрос по схеме

Select .

… (под троеточием может быть любой кусок кода, он будет отрабатывать внутри select endselect как в цикле, для каждой новой выбранной записи).

endselect.

 

Итак мы даем задание системе выбрать все записи из таблицы BKPF базы данных у которых поле bukrs(балансовая единица) = ‘5000’, поле belnr(номер документа)  = ‘1500000000’, поле gjahr(год) = ‘2012’, это мы написали в разделе where(где). Сивол «*» значит, что из таблицы мы выбираем все поля, которые в ней есть.

Select выбирает нам записи из BKPF (на самом деле одну, т.к. мы указали первичный ключ :) ) и помещает в рабочую область таблицы BKPF (т.к. мы эту таблицы объявили). Это происходит из-за того, что мы не указали системе куда положить данные, в нашем select’е нет раздела into.

Т.к. запись в рабочей области, мы можем их вывести на экран оператором write. Что мы и сделали:

 

Далее закрываем конструкцию запроса оперетором END. Он говорит, что надо выбрать новую запись.

   
© 2013 sap-blog.ru
Яндекс.Метрика