Повторное выполнение последней операции

*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     VALUE(IV_RECORD_ID) TYPE  /TRL/XDE_HEADER-RECORD_ID
*"     VALUE(IV_ONLY_CHECK) TYPE  XFELD OPTIONAL
*"  EXPORTING
*"     VALUE(ES_RETURN) TYPE  /TRL/XDE_RETURN
*"----------------------------------------------------------------------

Функциональный модуль /TRL/XDE_API_SHIPM_SEND_AGAIN выполняет повторно последнюю операцию, завершившуюся с ошибкой. Отправка должна быть в статусе E. Список возможных операций для повторного выполнения:

  • подписание/отклонение входящей отправки;

  • подтверждение/отклонение запроса на аннулирование;

  • исходящая отправка документов;

  • создание запроса на аннулирование.

Таблица 104 Описание интерфейса функционального модуля /TRL/XDE_API_SHIPM_SEND_AGAIN

Параметр

Описание

IMPORTING

IV_RECORD_ID

Уникальный идентификатор отправки.

IV_ONLY_CHECK

Если равен «X», то выполняется проверка возможности повторного выполнения операции, завершившейся с ошибкой. При этом повторного выполнения операции не выполняется.

EXPORTING

ES_RETURN

Код и описание ошибки в случае, если операцию выполнить не удалось.

Если ФМ запущен не в режиме проверки – ставим блокировку по номеру отправления.

  • Если блокировка не удалась, то es_return-code присваивается «1011» (ошибка блокирования записи). Также в es_return-text записывается текущее системное сообщение, после этого происходит выход из ФМ.

Получаем данные по номеру отправления с помощью ФМ /TRL/XDE_GET_SHIPMENTS.

  • Проверка результата работы ФМ /TRL/XDE_GET_SHIPMENTS. Если результат не успешен – es_return-code заполняется значением «1106» (Не удалось найти отправление). Поле es_return-text заполняется текстом «Внутренняя ошибка. Не удалось найти объект «Отправление»». Снимаем блокировки и выходим из ФМ /TRL/XDE_API_SHIPM_SEND_AGAIN.

Проверяем полномочия на действие «18» (Отправить документ повторно).

  • Если результат проверки не успешен – поле es_return-code заполняется значением «1013» (Проверка не пройдена). Поле es_return-text заполняется сообщением «Нет полномочий на выполнение операции». Снимаем блокировки и выходим из ФМ /TRL/XDE_API_SHIPM_SEND_AGAIN.

Вызов метода для определения типа доступа для операции с помощью настроек, сделанных в таблице условий /TRL/XDE_CONDIT.

  • Если в результате работы метода получим, что тип доступа 03 (Операция запрещена) или 04 (Операция невозможна) – запишем в es_return-code «9999» (Критическая ошибка). В es_return-text попадет «Операция невозможна». Снимаем блокировки и выходим из ФМ /TRL/XDE_API_SHIPM_SEND_AGAIN.

С помощью множественного вызова метода для получения имени статуса по имени настройки – получаем данные о технических названиях статусов. Проверяем, что в списке статусов первым стоит подходящий статус (Ожидает отправки контрагенту(подписан), ожидает отправки контрагенту(отклонен), готов к отправке контрагенту(исходящие). Либо вторая запись должна быть статусом «готов к отправке контрагенту(исходящие)».

  • Во всех остальных случаях заполняем поле es_return-code значением «9999» (Критическая ошибка). Поле es_return-text заполняется текстом «В текущем статусе операция невозможна». Снимаем блокировки и выходим из ФМ /TRL/XDE_API_SHIPM_SEND_AGAIN.

Если для данного статус стоит флаг «Содержит комментарий» - считываем текст у бизнес-объекта по ключу и идентификатору текста.

Далее, если для данного оператора стоит настройка «обработать весь пакет» - ищем все отправления, ставим на них блокировку и выполняем проверку полномочий.

Далее, в зависимости от кода статуса отправки выполняем разные действия.

Если код статуса отправки «Аннулирование подтверждено» или «Ожидает отправки контрагенту(подписан)» и ФМ запущен не в режиме проверки – вызывается ФМ /TRL/XDE_API_SIGN_IN. Этот ФМ подписывает входящую отправку. Внутри ФМ выполняет проверки возможности выполнить необходимую операцию, находит настраиваемые ФМ для отклонения/подтверждения запроса аннулирования, для согласования входящего документа, для отложенной отправки (только подписание) и в зависимости от условий – вызывает нужный ФМ.

Если код статуса отправки «Ожидает отправки контрагенту(отклонен)» или «Аннулирование отклонено» и ФМ запущен не в режиме проверки – вызывается ФМ /TRL/XDE_API_SIGN_IN с той разницей, что в этот раз флаг согласования/отклонения не заполнен. Этот ФМ подписывает входящую отправку. Внутри ФМ выполняет проверки возможности выполнить необходимую операцию, находит настраиваемые ФМ для отклонения/подтверждения запроса аннулирования, для согласования входящего документа, для отложенной отправки (только подписание) и в зависимости от условий – вызывает нужный ФМ.

Если код статуса отправки «Ожидает отправки контрагенту (исходящие)», «Готов к отправке контрагенту (исходящие)», «Ожидание ответа от ИМ» и если ФМ запущен не в режиме проверки – запускается цикл по отправлениям и для каждого запускается ФМ /TRL/XDE_SET_STATUS_FOR_SHIPM, который добавляет статус для отправки. Внутри выполняются проверки, что для данной отправки можно установить такой статус, проверяются уровни статусов, сохраняется комментарий и обновляются таблицы /TRL/XDE_HEADER, /TRL/XDE_HDR_ATR, /TRL/XDE_STATUS, /TRL/XDE_SIGN.

  • Если в ходе выполнения ФМ /TRL/XDE_SET_STATUS_FOR_SHIPM возникли какие-либо особые ситуации – заполняем поле es_return-code значением «9999» (критическая ошибка). Если текущее системное сообщение имеется – выводим его в поле es_return-text, иначе выводим сообщение «Не удалось обновить статус отправления. Обратитесь в службу поддержки.».

Если код статуса отправки «Ожидает отправки контрагенту(подписан)» или «Ожидает отправки контрагенту(отклонен)» – получаем отпечаток сертификата, получаем данные по отправлению и данные документов для взаимодействия с ИМ. Затем вызывается ФМ /TRL/XDE_IM_SEND_IN, который подписывает/отклоняет входящий документ (в зависимости от настроек работы с ИМ). Затем, в случае серверного подписания – выбираются данные по отправлению и выполняется поиск настроенного ФМ для подписания/отклонения и происходит, собственно, вызов ФМ. В случае локального подписания – вызываются ФМ /TRL/XDE_AcceptPacLocalSign или /TRL/XDE_RejectPacLocalSign. Если же настроена интеграция через WebAPI – ищем в настройках класс, реализующий интеграцию через WS. Если класс найден – вызываем метод SIGN_IN для серверного подписания или SIGN_IN_DOCUMENT_LOC_ACC для локального согласования, SIGN_IN_DOCUMENT_LOC_REJ для локального отклонения.

Затем вызывается ФМ /TRL/XDE_SET_STATUS_FOR_SHIPM, который меняет статус документа.

Если код статуса отправки «Отправлен запрос на аннулирование» и ФМ запущен не в режиме проверки – вызывается ФМ /TRL/XDE_API_SHIPM_REVOKE_REQ. Описание ФМ можно найти в предыдущем пункте.

В конце работы ФМ снимаются блокировки. На этом работа ФМ заканчивается.

Данная API функция предусматривает точки расширения для заказчика.

Важно

При использовании явных или неявных операторов COMMIT WORK и ROLLBACK WORK в расширениях корректная работа API-функций не гарантируется!

Функциональный модуль сортировки статусов

Имя функционального модуля сортировки статусов находится в таблице /TRL/XDE_CUST по имени настройки FM_SORT_STATUS_NEW.

Настройка ``FM_SORT_STATUS_NEW``

Правила для ФМ из этой настройки касаются интерфейса ФМ, см. в таблице ниже.

Таблица 105 Параметры модуля сортировки статусов

Наименование параметра

Тип

Название словарного типа или класс

IMPORTING (попадают в ФМ)

I_RECORD_ID

Тип

/TRL/XDE_ED_RECORD_ID_EXT

I_COMMENT

Тип

STRING

IS_CERT

Тип

/TRL/XDE_S_SAP_DOC_TYPE_CERT

I_ONLY_CHECK

Тип

XFELD

I_UNAME

Тип

SYUNAME

I_ACCEPT

Тип

XFELD

EXPORTING (результаты ФМ на выходе)

ES_RETURN

Тип

/TRL/XDE_RETURN

E_COMMENT

Тип

STRING

Функциональный модуль может иметь и другие параметры, но они должны быть необязательными.

Функциональный модуль, используемый по умолчанию, содержит внедрение BAdI /TRL/XDE_CHECK_BADI для выполнения кастомных проверок после проверок, выполняемых в Продукте, выполняемых в методах CHECK_IN_REVOKE_ACCEPT и CHECK_IN_REVOKE_REJECT. Кроме того, функциональный модуль, используемый по умолчанию, содержит внедрение BAdI /TRL/XDE_SHIPMENT_BADI для работы с отправлениями, а именно для возможности создания комментария перед выводом диалогового окна пользователю. Создания комментария выполняется в методе SET_COMMENT.

Функциональный модуль подписания входящих сообщений

Имя ФМ подписания входящих сообщений хранится в таблице /TRL/XDE_CUST по имени настройки FM_SHIP_IN_SIGN.

Настройка ``FM_SHIP_IN_SIGN``

Правила для ФМ из этой настройки касаются интерфейса ФМ, см. в таблице ниже.

Таблица 106 Параметры модуля подписания входящих сообщений

Наименование параметра

Тип

Название словарного типа или класс

IMPORTING (попадают в ФМ)

I_RECORD_ID

Тип

/TRL/XDE_ED_RECORD_ID_EXT

I_COMMENT

Тип

STRING

IS_CERT

Тип

/TRL/XDE_S_SAP_DOC_TYPE_CERT

I_ONLY_CHECK

Тип

XFELD

I_UNAME

Тип

SYUNAME

I_ACCEPT

Тип

XFELD

I_SIGN_ONLY

Тип

/TRL/XDE_ED_FLAG_SIGN

EXPORTING (результаты ФМ на выходе)

ES_RETURN

Тип

/TRL/XDE_RETURN

E_COMMENT

Тип

STRING

Функциональный модуль может иметь и другие параметры, но они должны быть необязательными.

Функциональный модуль отложенной отправки

Имя ФМ определения отложенной отправки находится в таблице /TRL/XDE_CUST по имени настройки FM_SHIP_SIGN_ONLY.

Настройка ``FM_SHIP_SIGN_ONLY``

Правила для ФМ из этой настройки касаются интерфейса ФМ, см. в таблице ниже.

Таблица 107 Параметры модуля отложенной отправки

Наименование параметра

Тип

Название словарного типа или класс

IMPORTING (попадают в ФМ)

IS_HEADER

Тип

/TRL/XDE_HEADER

EXPORTING (на выход ФМ)

EV_SIGN_ONLY

Тип

/TRL/XDE_ED_FLAG_SIGN

Функциональный модуль может иметь и другие параметры, но они должны быть необязательными.

Функциональный модуль обработки события смены статуса отправления

Имя ФМ обработки события смены статуса отправления находится в таблице /TRL/XDE_CUST по имени настройки FM_SET_EVENT.

Настройка ``FM_SET_EVENT``

Правила для ФМ из этой настройки касаются интерфейса ФМ, см. в таблице ниже.

Таблица 108 Параметры модуля обработки события смены статуса отправления

Наименование параметра

Тип

Название словарного типа или класс

IMPORTING (попадают в ФМ)

IS_HEADER

Тип

/TRL/XDE_HEADER

IS_STATUS

Тип

/TRL/XDE_STATUS

TABLES (табличные параметры)

IT_DOCUMENTS

Тип

/TRL/XDE_T_DOCUMENTS

Функциональный модуль может иметь и другие параметры, но они должны быть необязательными.

Функциональный модуль для обработки после выставления статуса

Имя функционального модуля для обработки после выставления статуса содержится в таблице /TRL/XDE_STATE, поле FMAST.

Поле ``FMAST``

Правила для ФМ из этой настройки касаются интерфейса ФМ, см. в таблице ниже.

Таблица 109 Параметры модуля для обработки после выставления статуса

Наименование параметра

Тип

Название словарного типа или класс

IMPORTING (попадают в ФМ)

IS_HEADER

Тип

/TRL/XDE_HEADER

IS_STATUS

Тип

/TRL/XDE_STATUS

Функциональный модуль может иметь и другие параметры, но они должны быть необязательными.

Функциональный модуль интеграционного модуля по подписанию/отклонению входящей отправки

Имя ФМ интеграционного модуля по подписанию/отклонению входящей отправки хранится в таблице /TRL/XDE_CUST по имени настройки IM.FM_I_SIGN.

Настройка ``IM.FM_I_SIGN``

Правила для ФМ из этой настройки касаются интерфейса ФМ, см. в таблице ниже.

Таблица 110 Параметры модуля интеграционного модуля по подписанию/отклонению входящей отправки

Наименование параметра

Тип

Название словарного типа или класс

IMPORTING (попадают в ФМ)

IV_DOCUMENT_ID

Тип

/TRL/XDE_ED_RECORD_ID_EXT

IV_COMMENT

Тип

CHAR (длиной 2048 символов)

IV_CERT_NUM

Тип

/TRL/XDE_ED_THUMBPRINT

IV_ACCEPT

Тип

XFELD

IT_SIGNEDDOCUMENTS

Тип

/TRL/XDE_T_DOCUMENTS_IM

EXPORTING (на выход ФМ)

ES_RETURN

Тип

/TRL/XDE_RETURN

Функциональный модуль может иметь и другие параметры, но они должны быть необязательными.

Функциональный модуль для реализации интеграции через Web Service

Имя класса для реализации интеграции через Web Service находится в таблице TRL/XDE_CUST по имени настройки IM.WS.FRM_CLASS.

Настройка ``IM.WS.FRM_CLASS``

У этого класса вызывается несколько методов.

Метод SIGN_IN_DOCUMENT для подписания/отклонения

Таблица 111 Параметры метода SIGN_IN_DOCUMENT

Наименование параметра

Тип

Название словарного типа или класс

IMPORTING (попадают в ФМ)

IV_DOCUMENT_ID

Тип

/TRL/XDE_ED_RECORD_ID_EXT

IV_COMMENT

Тип

CHAR (длиной 2048 символов)

IV_CERT_NUM

Тип

/TRL/XDE_ED_THUMBPRINT

IV_ACCEPT

Тип

XFELD

IT_SIGNEDDOCUMENTS

Тип

/TRL/XDE_T_DOCUMENTS_IM

RECEIVING (возвращается как результат)

ES_RETURN

Тип

/TRL/XDE_RETURN

Метод SIGN_IN_DOCUMENT_LOC_ACC для локального подписания (принять)

Таблица 112 Параметры метода SIGN_IN_DOCUMENT_LOC_ACC

Наименование параметра

Тип

Название словарного типа или класс

IMPORTING (попадают в ФМ)

IV_DOCUMENT_ID

Тип

/TRL/XDE_ED_RECORD_ID_EXT

IT_SIGNEDDOCUMENTS

Тип

/TRL/XDE_T_DOCUMENTS_IM

RECEIVING (возвращается как результат)

ES_RETURN

Тип

/TRL/XDE_RETURN

Метод SIGN_IN_DOCUMENT_LOC_REJ для локального подписания (отклонить)

Таблица 113 Параметры метода SIGN_IN_DOCUMENT_LOC_REJ

Наименование параметра

Тип

Название словарного типа или класс

IMPORTING (попадают в ФМ)

IIV_DOCUMENT_ID

Тип

/TRL/XDE_ED_RECORD_ID_EXT

IIT_SIGNEDDOCUMENTS

Тип

/TRL/XDE_T_DOCUMENTS_IM

IRECEIVING (возвращается как результат)

IES_RETURN

Тип

/TRL/XDE_RETURN