СБИС Сапёр - Вызов из программ печати — различия между версиями
(→Вызов из формуляра SMART FORM) |
|||
Строка 2: | Строка 2: | ||
Алгоритм формирования электронного документа следующий: | Алгоритм формирования электронного документа следующий: | ||
# программа печати рассчитывает данные необходимые для печати. | # программа печати рассчитывает данные необходимые для печати. | ||
− | # перед вызовом формуляра управление передается в SBIS SAPPER. SAPPER проверяет кто инициатор вызова программы печати | + | # перед вызовом формуляра управление передается в SBIS SAPPER. SAPPER проверяет кто инициатор вызова программы печати. |
− | # SAPPER по настройкам маппинга из таблицы /SBIS/SETTINGS получает данные из подготовленных программой печати | + | ##Если это не SAPPER, то он возвращает управление программе печати (все как обычно). |
+ | ##Если это SAPPER, то он по настройкам маппинга из таблицы /SBIS/SETTINGS получает данные из подготовленных программой печати. На основе этих данных формирует XML файл. По окончании возвращает флаг, сигнализирующий о необходимости прервать программу печати. | ||
+ | |||
==Стандартные программы печати== | ==Стандартные программы печати== | ||
+ | Сначала запускается подпрограмма ENTRY - это оболочка для PROCESSING и передает код возврата, в ней изменения не понадобятся: | ||
+ | |||
+ | <source lang=ABAP> | ||
+ | FORM entry USING return_code us_screen. "#EC CALLED | ||
+ | CLEAR retcode. | ||
+ | xscreen = us_screen. | ||
+ | PERFORM processing USING us_screen. | ||
+ | IF retcode NE 0. | ||
+ | return_code = 1. | ||
+ | ELSE. | ||
+ | return_code = 0. | ||
+ | ENDIF. | ||
+ | CLEAR status. | ||
+ | ENDFORM. | ||
+ | </source> | ||
+ | |||
+ | Вызов непосредственно печати обычно находится в теле подпрограммы PROCESSING. | ||
+ | |||
+ | <source lang=ABAP> | ||
+ | FORM processing USING proc_screen. | ||
+ | PERFORM get_data. | ||
+ | PERFORM print_form. | ||
+ | ENDFORM. | ||
+ | </source> | ||
+ | |||
+ | Поэтому до вызова печати (PRINT_FORM) необходимо вставить код: | ||
+ | |||
+ | <source lang=ABAP> | ||
+ | TRY. | ||
+ | DATA lv_not_print TYPE c VALUE ''. | ||
+ | DATA cl_mapping TYPE REF TO /sbis/cl_mapping. | ||
+ | CREATE OBJECT cl_mapping. | ||
+ | CALL METHOD cl_mapping->calc_doc | ||
+ | EXPORTING | ||
+ | is_nast = nast | ||
+ | IMPORTING | ||
+ | ev_not_print = lv_not_print. | ||
+ | IF lv_not_print = 'X'. | ||
+ | EXIT. | ||
+ | ENDIF. | ||
+ | DATA cx_root TYPE REF TO cx_root. | ||
+ | CATCH cx_root INTO cx_root. | ||
+ | * your code... | ||
+ | ENDTRY. | ||
+ | </source> | ||
+ | |||
+ | Т.о. в зависимости от флага lv_not_print мы либо печатаем, либо выходим из программы с правильным кодом возврата. | ||
==Вызов из подпрограммы== | ==Вызов из подпрограммы== | ||
− | Особенности вызова из подпрограммы заключается в том, что дополнительно необходимо прервать | + | Особенности вызова из подпрограммы заключается в том, что дополнительно необходимо прервать несколько подпрограмм. Для этого признак делается глобальным и проверяется после выхода из подпрограмм непосредственно перед печатью. |
− | == | + | |
− | + | <source lang=ABAP> | |
+ | DATA gv_not_print TYPE c . " TENSOR SBIS EDO | ||
+ | |||
+ | FORM processing USING proc_screen. | ||
+ | |||
+ | PERFORM checks. | ||
+ | PERFORM init_data. | ||
+ | PERFORM get_data. | ||
+ | PERFORM sbis_edi. " TENSOR SBIS EDO | ||
+ | CHECK gv_not_print IS INITIAL. " TENSOR SBIS EDO | ||
+ | PERFORM print. | ||
+ | |||
+ | ENDFORM. | ||
+ | |||
+ | FORM sbis_edi . | ||
+ | * TENSOR SBIS EDO | ||
+ | TRY. | ||
+ | DATA cx_root TYPE REF TO cx_root. | ||
+ | DATA cl_mapping TYPE REF TO /sbis/cl_mapping. | ||
+ | CREATE OBJECT cl_mapping. | ||
+ | CALL METHOD cl_mapping->calc_doc | ||
+ | EXPORTING | ||
+ | is_nast = nast | ||
+ | IMPORTING | ||
+ | ev_not_print = gv_not_print. | ||
+ | CATCH cx_root INTO cx_root. | ||
+ | * your code... | ||
+ | ENDTRY. | ||
+ | ENDFORM. | ||
+ | </source> | ||
+ | |||
− | |||
− | |||
− | |||
==Вызов из BADI== | ==Вызов из BADI== | ||
− | из BADI вызвать SBIS SAPPER нельзя, т.к. в BADI | + | из BADI вызвать SBIS SAPPER нельзя, т.к. в BADI нет доступа к глобальному контексту программы печати. |
+ | |||
+ | ==Вызов из формуляра SMARTFORM== | ||
+ | Особенности вызова из формуляров - в необходимости прервать работу формуляра и корректно завершить основную программу после выхода из формуляра. | ||
+ | |||
+ | ==Вызов из формуляра PDF== | ||
+ | Особенности вызова из формуляров - в необходимости прервать работу формуляра и корректно завершить основную программу после выхода из формуляра. | ||
+ | |||
[[Категория:SAP]] | [[Категория:SAP]] | ||
[[Категория:SAPPER]] | [[Категория:SAPPER]] |
Версия 16:37, 23 июня 2017
Содержание
Общая концепция
Алгоритм формирования электронного документа следующий:
- программа печати рассчитывает данные необходимые для печати.
- перед вызовом формуляра управление передается в SBIS SAPPER. SAPPER проверяет кто инициатор вызова программы печати.
- Если это не SAPPER, то он возвращает управление программе печати (все как обычно).
- Если это SAPPER, то он по настройкам маппинга из таблицы /SBIS/SETTINGS получает данные из подготовленных программой печати. На основе этих данных формирует XML файл. По окончании возвращает флаг, сигнализирующий о необходимости прервать программу печати.
Стандартные программы печати
Сначала запускается подпрограмма ENTRY - это оболочка для PROCESSING и передает код возврата, в ней изменения не понадобятся:
FORM entry USING return_code us_screen. "#EC CALLED
CLEAR retcode.
xscreen = us_screen.
PERFORM processing USING us_screen.
IF retcode NE 0.
return_code = 1.
ELSE.
return_code = 0.
ENDIF.
CLEAR status.
ENDFORM.
Вызов непосредственно печати обычно находится в теле подпрограммы PROCESSING.
FORM processing USING proc_screen.
PERFORM get_data.
PERFORM print_form.
ENDFORM.
Поэтому до вызова печати (PRINT_FORM) необходимо вставить код:
TRY.
DATA lv_not_print TYPE c VALUE ''.
DATA cl_mapping TYPE REF TO /sbis/cl_mapping.
CREATE OBJECT cl_mapping.
CALL METHOD cl_mapping->calc_doc
EXPORTING
is_nast = nast
IMPORTING
ev_not_print = lv_not_print.
IF lv_not_print = 'X'.
EXIT.
ENDIF.
DATA cx_root TYPE REF TO cx_root.
CATCH cx_root INTO cx_root.
* your code...
ENDTRY.
Т.о. в зависимости от флага lv_not_print мы либо печатаем, либо выходим из программы с правильным кодом возврата.
Вызов из подпрограммы
Особенности вызова из подпрограммы заключается в том, что дополнительно необходимо прервать несколько подпрограмм. Для этого признак делается глобальным и проверяется после выхода из подпрограмм непосредственно перед печатью.
DATA gv_not_print TYPE c . " TENSOR SBIS EDO
FORM processing USING proc_screen.
PERFORM checks.
PERFORM init_data.
PERFORM get_data.
PERFORM sbis_edi. " TENSOR SBIS EDO
CHECK gv_not_print IS INITIAL. " TENSOR SBIS EDO
PERFORM print.
ENDFORM.
FORM sbis_edi .
* TENSOR SBIS EDO
TRY.
DATA cx_root TYPE REF TO cx_root.
DATA cl_mapping TYPE REF TO /sbis/cl_mapping.
CREATE OBJECT cl_mapping.
CALL METHOD cl_mapping->calc_doc
EXPORTING
is_nast = nast
IMPORTING
ev_not_print = gv_not_print.
CATCH cx_root INTO cx_root.
* your code...
ENDTRY.
ENDFORM.
Вызов из BADI
из BADI вызвать SBIS SAPPER нельзя, т.к. в BADI нет доступа к глобальному контексту программы печати.
Вызов из формуляра SMARTFORM
Особенности вызова из формуляров - в необходимости прервать работу формуляра и корректно завершить основную программу после выхода из формуляра.
Вызов из формуляра PDF
Особенности вызова из формуляров - в необходимости прервать работу формуляра и корректно завершить основную программу после выхода из формуляра.