СБИС Сапёр - Вызов из программ печати

Материал из razgovorov.ru
Перейти к: навигация, поиск

Общая концепция

Алгоритм формирования электронного документа следующий:

  1. программа печати рассчитывает данные необходимые для печати.
  2. перед вызовом формуляра управление передается в SBIS SAPPER. SAPPER проверяет кто инициатор вызова программы печати.
    1. Если это не SAPPER, то он возвращает управление программе печати (все как обычно).
    2. Если это 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

Особенности вызова из формуляров - в необходимости прервать работу формуляра и корректно завершить основную программу после выхода из формуляра.