Вызов существующего отчета SAP в ABAP с подавлением GUI

Я хочу представить функциональность программы SAP (транзакции) как BAPI. Мне нужно вызвать отчет и указать фильтры диапазона, чтобы графический интерфейс был обойден.

У кого-нибудь есть рабочий пример конструкции SUBMIT ... WITH ... ABAP или другие предложения о том, как выполнить то, что мне нужно сделать?

4 ответа

Вот рабочий пример:

SUBMIT SAPF140 
    TO SAP-SPOOL                         "optional"
    SPOOL PARAMETERS print_parameters    "optional"
    WITHOUT SPOOL DYNPRO                 "optional (hides the spool pop-up)"
    VIA JOB jobname NUMBER l_number      "optional"
    AND RETURN                           "optional - returns to the calling prog"
    WITH EVENT   =  REVENT
    WITH BUKRS   IN RBUKRS
    WITH BELNR   IN lRBELNR
    WITH GJAHR   IN RGJAHR
    WITH USNAM   =  SY-UNAME
    WITH DATUM   =  SAVE_DATUM
    WITH UZEIT   =  SAVE_UZEIT
    WITH DELDAYS =  RDELDAYS
    WITH KAUTO   =  'X'
    WITH RPDEST  =  SAVE_PDEST
    WITH TITLE   =  TITLE.

Все операторы "WITH" относятся к полям выбора в вызываемой программе, где я использую = это оператор PARAMETER (одно поле), где я использую IN, это оператор SELECT_OPTIONS (диапазон)

Вот простой пример того, как заполнить диапазон:

REFRESH lrbelnr.
lrbelnr-sign = 'I'.
lrbelnr-option = 'EQ'.
lrbelnr-low = HBKORM-belnr.
CLEAR lrbelnr-high.
append lrbelnr.

Если вы хотите подавить эту функцию как BAPI, вы должны обернуть ее в модуль удаленного вызова функций (RFC). Просто внедрите функциональный модуль RFC. В зависимости от того, как реализован отчет, он может использовать объекты ABAP, которые также могут быть вызваны из вашей реализации RFC. Учитывая этот случай у вас есть довольно хорошее решение. Всякий раз, когда отчет корректируется, также ваш BAPI будет отражать изменения. Если это стандартная программа от SAP, которую нельзя обернуть, подумайте о том, чтобы скопировать ее в свое пространство имен и настроить ее. Тем не менее, это может создать определенные трудности, когда SAP выполняет обновление с помощью стека пакетов поддержки, и вы этого не осознаете. Вывод двух методов различен. Кроме того, если вы хотите вызвать его извне, нет ничего другого, кроме как реализовать RFC-модуль.

Отправить отчет не может вернуть значения за пределы. Отчеты всегда предназначены только для функций графического интерфейса, а не для обмена данными. Если в вашем отчете используются опции выбора, вам необходимо каким-то образом реализовать эту функцию "вручную" в вашем RFC, поскольку эти операторы нельзя использовать внутри модулей RFC. Обычно я пытался бы переработать отчет, модульно оформить его и поместить информацию о выборе в центральный класс или, возможно, другой функциональный модуль, который можно вызвать из отчета и вашего функционального модуля BAPI. Фильтры, о которых вы говорите, не могут быть автоматически внедрены в RFC. Вы должны реализовать эти диапазоны вручную. Предупреждение, которое появляется, не может быть подавлено, если вы делаете RFC-вызов из удаленной системы, и появляется всплывающее окно с предупреждением, вы заканчиваете коротким замыканием. Поэтому вы должны переработать отчет и заново реализовать его для своих нужд.

Если вы просто хотите обойти это с помощью планирования заданий, создайте вариант и запланируйте отчет с этим вариантом, но я полагаю, что это не то решение, которое вы ищете.

Вы можете использовать встроенный BAPI, также просто напишите "Range" и нажмите F4.

Вы можете заключить отчет в сеанс BATCH INPUT и выполнить его внутри функции. Единственным недостатком является то, что вам нужно перезаписывать BATCH INPUT каждый раз, когда вы меняете отчет.

Другие вопросы по тегам