Интеграция с информационной системой

Формирование xml-документов с помощью программ печати

Формирование xml-документов с помощью программ печати

СБИС САПЕР использует имеющиеся программы печати для формирование xml-документов. Данная методика позволяет избежать дублирования алгоритма формирования документа.

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

  1. СБИС САПЕР для каждого отправляемого документа SAP вызывает программу печати, указанную в настройках модуля.

  2. Программа печати рассчитывает данные необходимые для печати.
  3. Перед вызовом формуляра, управление передается модулю СБИС САПЕР. Модуль проверяет, что инициирует вызов программы печати. Если инициатор вызова:
    • не САПЕР — модуль возвращает управление программе печати (все как обычно).
    • САПЕР — модуль из подготовленных программой печати данных, выбирает нужные (по настройкам выгрузки) и формирует xml-документ. По окончании возвращает флаг, сигнализирующий о необходимости прервать программу печати.

Данный алгоритм работает на любом SAP, с любыми типами документов и отчетов (не зависит от функционала, реализованного SAP для журнала электронных счетов фактур из российского Add-on)

Доработка программ печати:

Прежде чем, вносить изменения в программу печати, сделайте ее копию. Рекомендуемый шаблон названия копии программы [ZSBIS_][Старое название программы]. Вместо копий программ печати можно использовать стандартные BADI в программах печати (например, J_3R_TORG12_BADI для программы печати накладной J_3RV_DELIV_PDF, J_3R_INV_BADI для программы печати фактуры J_3RV_INV_A).

В программу печати (или ее копию) добавьте вызов метода СБИС САПЕР, который завершает действия программы печати после формирования электронного документа.

Возможные доработки программ печати:

  • В программе печати данные, необходимые для корректного формирования xml, должны храниться в отдельных полях. Например, в программе печати данные о контрагенте содераться в одном поле, а в печатной форме документа название контрагента, его ИНН и КПП должны отображаться в одтельных строках.

Стандартные программы печати

Пример кода, который необходимо добавить перед вызовом формуляра в каждую программу печати.

Если в формулярах печатных форм есть логика расчета данных документа, то ее желательно перенести в программу печати.

Если у вас Z-программы печати, в которых используются подпрограммы, то вызов СБИС САПЕР чуть более сложный:

  • Сначала запускается подпрограмма ENTRY. Это оболочка для подпрограммы PROCESSING, передает код возврата, в ней изменения не понадобятся:
  • Вызов печати обычно находится в теле подпрограммы PROCESSING.
  • Поэтому до вызова печати (PRINT) необходимо вставить СБИС-код формирования электронных документов.

Таким образом в зависимости от флага gv_not_print мы либо печатаем, либо выходим из программы с правильным кодом возврата.

Вызов из BADI

В СБИС САПЕР имеются реализации стандартных BADI и точек расширения для программ печати:

  • класс /SBIS/CL_J_3R_INV_BADI — для печати накладных,
  • класс /SBIS/CL_J3R_TORG12_BADI — для печати фактур,
  • точка расширения /SBIS/ENHI_J_3RV_TORG12_BIL — для печати актов.

Проверьте, что BADI: J_3R_TORG12_BADI, J_3R_INV_BADI и точка расширения ESJ_3RV_FORM_UPDATE активированы. Используейте готовые решения, реализованные в данных классах.

Если BADI активированы, установлен статус «Внедрение вызывается».

Пример вызова из BADI для программы печати накладной ТОРГ-12. В зависимости от флага gv_not_print мы либо печатаем, либо выходим из BADI и из программы печати.

Вызов из формуляра SMARTFORM

Необходим, когда в системе нет отдельной программы печати (например, в отраслевых решениях), или когда значительная часть логики перенесена в формуляр.

Особенности вызова из формуляров

  • Из программы печати вызывается формуляр. Из него необходимо вызвать код СБИС и выйти из формуляра, а потом выйти из программы.

  • Данные формуляра, которые передаются в САПЕР, должны быть объявлены глобально.
  • Вставить вызов кода СБИС необходимо в элемент смартформы «строки программы», где есть доступ к подготовленным данным печати. Например, в основной цикл по позициям. В инициализацию вставлять не имеет смысла — там у СБИС САПЕР нет доступа через assign к глобальным переменным формуляра, а также не обеспечивается корректный выход из формуляра/ФМ с rc=0.

Пример кода СБИС:

Как правило, программа печати не требует изменений и сама формирует необходимый код возврата.

Вызов из формуляра PDF

Требуется в случаях, когда в системе нет отдельной программы печати (например, в отраслевых решениях), или когда значительная часть логики перенесена в формуляр.

Особенности вызова из формуляров

  • Из программы печати вызывается формуляр. Из него необходимо вызвать код СБИС и выйти из формуляра, а потом выйти из программы.
  • Вставить вызов кода СБИС необходимо в интерфейсе формуляра в код инициализации или в подпрограмму, где есть доступ к подготовленным данным печати.

Пример кода СБИС:

В программе печати необходимо предусмотреть корректный выход с правильным кодом возврата. Пример кода: