Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема розпочата: Uukrul від Лютий 15, 2010, 04:21:50 ПП
SSF_FUNCTION_MODULE_NAME - Получить имя функционального модуля смартформы. В общем виде имена функциональных модулей интерфейса для смартформ генерируются автоматически, будет что-то типа /1BCDWB/SF00000032 при этом в системе разработки и в системе продуктива имена вероятнее всего будут разные. поэтому в своих программах где печатаются какие-то выходные формы сначала узнаем имя функционального модуля интерфейса для смартформы, а уже дальше делаем его вызов. Примерно где-то так:
DATA: l_fm_name type rs38l_fnam.
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = 'Z_SMART_FORM'
* VARIANT = ' '
* DIRECT_CALL = ' '
importing
fm_name = l_fm_name
exceptions
no_form = 1
no_function_module = 2
others = 3.
if sy-subrc <> 0.
* Типа не нашли такой смартформы
message i263 with 'Z_SMART_FORM'.
exit.
endif.
* Вывод печатной формы по найденому имени.
call function l_fm_name
* EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
* CONTROL_PARAMETERS =
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
* OUTPUT_OPTIONS =
* USER_SETTINGS = 'X'
* IMPORTING
* DOCUMENT_OUTPUT_INFO =
* JOB_OUTPUT_INFO =
* JOB_OUTPUT_OPTIONS =
tables
lt_matnr = lt_matnr_prn
exceptions
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
others = 5.
Добавлю и свои 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.