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

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

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

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

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

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

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

При установке модуля СБИС SAPPER изменения в стандартных программах печати производятся автоматически. В клиентских программах (Z-программах) необходимо вручную внести изменения. Вы можете сделать это самостоятельно или обратиться к вашему менеджеру, чтобы заказать услуги внедрения.

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

В программу печати или ее копию добавьте вызов метода СБИС SAPPER. Метод должен завершать действия программы печати после формирования электронного документа.

Стандартные программы печати
Стандартные программы печати
Вызов из BADI
Вызов из BADI
Вызов из формуляра SMARTFORM
Вызов из формуляра SMARTFORM
Вызов из формуляра PDF
Вызов из формуляра PDF

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

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

Особенности вызова СБИС SAPPER, если Z-программы печати используют подпрограммы

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

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

В СБИС SAPPER реализованы стандартные 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 и из программы печати.

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

Особенности вызова

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

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

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

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

Особенности вызова

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

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

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

Пример:

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

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

Нашли неточность? Выделите текст с ошибкой и нажмите ctrl + enter.