Добавлю и свои 5 копеек (сразу скажу, что системы под рукой нет, пишу по сохраненным в файл программам, если будут ошибки, пишите).
Итак, данный FM удобно использовать в своих программах печати, например у меня, есть несколько программ, которые выводят на печать несколько форм.
Глобальные данные, например в начале программы:
FORMNAME type TDSFNAME. " Глобальная переменная для имени формы, можно конечно и передавать в perform
fm1 type RS38L_FNAM. " Имя функционального модуля смартформы, у Уукрула - l_fm_name - имя функционального модуля смартформы
z_bwart like mseg-bwart. " Переменная с видом движения
"определение параметров, которые передаются в смартформу
data: OUTP type SSFCTRLOP.
data: z_mblnr type mseg-mblnr.
data: z_tax type mseg-dmbtr.
"................
!!! Важно, что бы передать в cмартформу табличку, в интерфейсе смартформы, должна быть объявлена таблица,
в объявлении используется существующая структура (создавать в SE11 ;-)). см. рисунок 1.
С этим же типом, в программе объявляем внутреннюю таблицу:
" объявление таблицы, с использованием существующей структуры
" вроде бы так, если ошибся, подправьте
GT_ITEMS type standart table of z_print_items.
Для удобства использования, FM упакована в отдельную форму:
form ssf.
call function 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = FORMNAME
IMPORTING
FM_NAME = fm1
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
endform. "ssf
Пример использования, в зависимости от, например вида движения, выводится либо та, либо иная форма.
Выборка и подготовка данных, для простоты примера пропущена, думаю, кто захочет - сможет наваять.
case z_bwart.
when '101'. " Приход
FORMNAME = 'ZF_INCOME'.
perform ssf.
perform smpr101.
when '311'. " Перемещение
FORMNAME = 'ZF_MOVE'.
perform ssf.
perform smpr311.
endcase.
Ну и код вывода печатной формы (на печать или предварительный просмотр)
form smpr101.
"Парметры вывода, см подробнее структуру SSFCTRLOP
outp-no_dialog = 'X'.
outp-preview = 'X'.
call function fm1
EXPORTING
CONTROL_PARAMETERS = OUTP " определено в SmartForm"е
I_MBLNR = Z_MBLNR
" I_TAX = Z_TAX
" .......
" Другие параметры объявленные в интерфейсе смартформы (секция Интерфейс формуляра)
" .......
TABLES
I_ITEMS = GT_ITEMS " См. выше
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
else.
endif.