Массовое подписание/отклонение входящей отправки (и запроса на аннулирование)
==============================================================================

.. code:: abap

    *"----------------------------------------------------------------------
    *"*"Локальный интерфейс:
    *"  IMPORTING
    *"     VALUE(IT_RECORD_ID) TYPE  /TRL/XDE_T_RECORD_ID
    *"     VALUE(IV_COMMENT) TYPE  STRING OPTIONAL
    *"     VALUE(IV_ACCEPT) TYPE  XFELD OPTIONAL
    *"     VALUE(IS_CERT) TYPE  /TRL/XDE_S_SAP_DOC_TYPE_CERT OPTIONAL
    *"     VALUE(IV_SIGN_ONLY) TYPE  /TRL/XDE_ED_FLAG_SIGN DEFAULT ''
    *"     VALUE(IV_UNAME) TYPE  SYUNAME DEFAULT SY-UNAME
    *"     VALUE(IV_ONLY_CHECK) TYPE  XFELD OPTIONAL
    *"     VALUE(IT_DOC_TYPE_DATA) TYPE  /TRL/XDE_T_DOC_TYPE_DAT OPTIONAL
    *"     VALUE(IV_UPD_ACCEPT_CODE) TYPE  /TRL/XDE_ED_TIT_RESULT_CODE OPTIONAL
    *"  EXPORTING
    *"     VALUE(ES_RETURN) TYPE  /TRL/XDE_RETURN
    *"     VALUE(EV_COMMENT) TYPE  STRING
    *"     VALUE(ES_HEADER) TYPE  /TRL/XDE_HEADER
    *"----------------------------------------------------------------------

Функциональный модуль ``/TRL/XDE_API_SHIPM_SIGN_IN2`` выполняет массовое подписание/отклонение входящей отправки, а также массовое подтверждение/отклонение 
запроса на аннулирование отправки.

.. table:: Описание интерфейса функционального модуля ``/TRL/XDE_API_SHIPM_SIGN_IN2``
   :align: center
   :widths: 2 8
    
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | Параметр                           | Описание                                                                                              |
   +====================================+=======================================================================================================+
   | ``IMPORTING``                                                                                                                              |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``IT_RECORD_ID``                   | Набор уникальных идентификаторов отправки.                                                            |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``IV_COMMENT``                     | Комментарий – причина отклонения.                                                                     |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``IV_ACCEPT``                      | Если равен «X», то выполняется согласование отправки/подтверждение запроса на аннулирование.          |
   |                                    | Если не равен «X», то выполняется отклонение отправки/запроса на аннулирование.                       |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``IS_CERT``                        | Сертификат для подписания.                                                                            |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``IV_SIGN_ONLY``                   | Если равен «X», то при раздельном подписании выполняется только подписание,                           |
   |                                    | без отправки в систему ОЭД.                                                                           |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``IV_UNAME``                       | Пользователь системы SAP, выполняющий операцию.                                                       |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``IV_ONLY_CHECK``                  | Если равен «X», то выполняется проверка возможности выполнения подписания/отклонения,                 |
   |                                    | при этом непосредственно подписание/отклонение не выполняется.                                        |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``IT_DOC_TYPE_DATA``               | Файлы документов в бинарном виде.                                                                     |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``IV_UPD_ACCEPT_CODE``             | Код итога для УПД(820).                                                                               |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+    
   | ``EXPORTING``                                                                                                                              |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``ES_RETURN``                      | Код и описание ошибки в случае, если операцию выполнить не удалось.                                   |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``EV_COMMENT``                     | Если ``IV_COMMENT`` не заполнен – содержит комментарий, введенный пользователем.                      |
   |                                    | Иначе равен ``IV_COMMENT``.                                                                           |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``ES_HEADER``                      | Заголовок отправки.                                                                                   |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+    

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

* Если возникла ошибка при блокировке – в ``es_return-code`` попадет «1011», в ``es_return-text`` попадает текущее системное сообщение. После этого работа ФМ закончится.

Получаем данные по отправке с помощью ``/TRL/XDE_GET_SHIPMENTS``.

* Если возникла ошибка в ходе выполнения – в ``es_return-code`` попадет «1106», в ``es_return-text`` попадет «Внутренняя ошибка. Не удалось найти объект "Отправление"». Снимаются блокировки и происходит выход из ФМ.

Происходит получение технических значений для статусов по имени настроек ``STATUS_G_ERROR`` и ``STATUS_G_REV_REQ_RECEIVED`` из таблицы ``/TRL/XDE_CUST``.
Проверяется, что код статуса отправки равен значению из настройки ``STATUS_G_REV_REQ_RECEIVED``. Если код статуса отправки равен значению настройки ``STATUS_G_ERROR``
- происходит получение значений настроек ``STATUS_G_REV_REQ_REJECTED`` и ``STATUS_G_REVOKED``. Далее происходит получение данных по статусам по номеру отправления с помощью ФМ ``/TRL/XDE_GET_SHIPMENTS``
и поиск такого, который был бы равен значению из настройки ``STATUS_G_REV_REQ_RECEIVED``. Если какое-либо из этих условий выполнено – нужно выполнять аннулирование, в противном случае – подписание/отклонение.

Выполняется поиск пользовательских маршрутов с кастомными статусами для отправки. В случае ошибки заполняется переменная ``es_return``, блокировки снимаются.
Если маршрут и кастомный статус был найден – снимаются блокировки и происходит выход из функционального модуля.

.. note:: В текущей версии Продукта компонент для работы с кастомными статусами не поддерживается. Выполнение данного алгоритма не влияет на работу текущего функционала.


Для аннулирования ищется ФМ в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_REVOKE_ACPT``. 

* Если ФМ не найден или не существует в системе – в ``es_return-code`` попадет «1008», в ``es_return-text`` попадет «& & & Не задан ФМ обработки аннулирования (/TRL/XDE_OED_TY)». После этого снимаются блокировки и происходит выход из ФМ. 

Для подписания/отклонения нужно проверить, что сообщение является входящим и после этого выполнить поиск ФМ в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_SHIP_IN_SIGN`` или ``FM_SHIP_SIGN_ONLY``, если нужно только подписать.

* Если ФМ не найден или не существует в системе – в ``es_return-code`` попадет «1008», в ``es_return-text`` попадет «& & & Не задан ФМ Согл-ния/отклонения входящего документа (/TRL/XDE_OED_T)». Снимаются блокировки и происходит выход из ФМ.
* Если в ходе вызова ФМ только подписания возникли ошибки – в ``es_return-code`` попадет «1011», в ``es_return-text`` текущее системное сообщение. Снимаются блокировки и происходит выход из ФМ.
* Если действие – не аннулирование и не подписание/отклонение, то в ``es_return-code`` попадет «9999», в ``es_return-text`` попадет «В статусе & операция невозможна». Снимаются блокировки и происходит выход из ФМ.

Выполняется проверка полномочий.

* Если проверка полномочий не пройдена – в ``es_return-code`` попадет «1013», в ``es_return-text`` попадет «Нет полномочий на выполнение операции». Снимаются блокировки и происходит выход из ФМ.

Повторная блокировка и проверка полномочий для всех отправлений пакета, если для этого есть настройки оператора. На этом цикл по отправкам заканчивается.

Далее происходит вызов найденного ФМ (ФМ аннулирования или подписания/отклонения).

Снимаются блокировки.

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

.. important::

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

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

.. image:: ris30.png
   :scale: 73
   :align: center
   :alt: Настройка ``FM_REVOKE_ACPT``

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

.. table:: Параметры модуля подтверждения/отклонения запроса аннулирования
   :align: center
   :widths: 2 1 4
   
   +----------------------------+-------+------------------------------------+
   | Наименование параметра     | Тип   | Название словарного типа или класс |
   +============================+=======+====================================+
   | ``IMPORTING`` (попадают в ФМ)                                           |
   +----------------------------+-------+------------------------------------+
   | ``IT_RECORD_ID``           | РўРёРї   | ``/TRL/XDE_T_RECORD_ID``           |
   +----------------------------+-------+------------------------------------+
   | ``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``                         |
   +----------------------------+-------+------------------------------------+
   | ``ES_HEADER``              | РўРёРї   | ``/TRl/XDE_HEADER``                |
   +----------------------------+-------+------------------------------------+   
   
Функциональный модуль может иметь и другие параметры, но они должны быть необязательными.

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

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

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

.. image:: ris31.png
   :scale: 100 %
   :align: center
   :alt: Настройка ``FM_SHIP_IN_SIGN``

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

.. table:: Параметры модуля подписания входящих сообщений
   :align: center
   :widths: 2 1 4
   
   +----------------------------+-------+------------------------------------+
   | Наименование параметра     | Тип   | Название словарного типа или класс |
   +============================+=======+====================================+
   | ``IMPORTING`` (попадают в ФМ)                                           |
   +----------------------------+-------+------------------------------------+
   | ``IT_RECORD_ID``           | РўРёРї   | ``/TRL/XDE_T_RECORD_ID``           |
   +----------------------------+-------+------------------------------------+
   | ``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``          |
   +----------------------------+-------+------------------------------------+
   | ``IT_DOC_TYPE_DATA``       | РўРёРї   | ``/TRL/XDE_T_DOC_TYPE_DAT``        |   
   +----------------------------+-------+------------------------------------+   
   | ``EXPORTING`` (результаты ФМ на выходе)                                 |
   +----------------------------+-------+------------------------------------+
   | ``ES_RETURN``              | РўРёРї   | ``/TRL/XDE_RETURN``                |
   +----------------------------+-------+------------------------------------+
   | ``E_COMMENT``              | РўРёРї   | ``STRING``                         |
   +----------------------------+-------+------------------------------------+
   | ``ES_HEADER``              | РўРёРї   | ``/TRL/XDE_HEADER``                |
   +----------------------------+-------+------------------------------------+   
   
Функциональный модуль может иметь и другие параметры, но они должны быть необязательными.

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

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

.. image:: ris32.png
   :scale: 100 %
   :align: center
   :alt: Настройка ``FM_SHIP_SIGN_ONLY``

.. table:: Параметры модуля определения отложенной отправки
   :align: center
   :widths: 2 1 4
   
   +----------------------------+-------+------------------------------------+
   | Наименование параметра     | Тип   | Название словарного типа или класс |
   +============================+=======+====================================+
   | ``IMPORTING`` (попадают в ФМ)                                           |
   +----------------------------+-------+------------------------------------+
   | ``IS_HEADER``              | РўРёРї   | ``/TRL/XDE_HEADER``                |
   +----------------------------+-------+------------------------------------+
   | ``EXPORTING`` (на выход ФМ)                                             |
   +----------------------------+-------+------------------------------------+
   | ``EV_SIGN_ONLY``           | РўРёРї   | ``/TRL/XDE_ED_FLAG_SIGN``          |
   +----------------------------+-------+------------------------------------+

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

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

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

.. image:: ris33.png
   :scale: 87
   :align: center
   :alt: Настройка ``FM_SORT_STATUS_NEW``

* Если настройку удалить – не возникнет ошибки.
* Если заполнить некорректно – вызова ФМ не произойдет.

.. table:: Параметры модуля сортировки статусов
   :align: center
   :widths: 2 1 4
   
   +----------------------------+-------+------------------------------------+
   | Наименование параметра     | Тип   | Название словарного типа или класс |
   +============================+=======+====================================+
   | ``IMPORTING`` (попадают в ФМ)                                           |
   +----------------------------+-------+------------------------------------+
   | ``IV_RECORD_ID``           | РўРёРї   | ``/TRL/XDE_ED_RECORD_ID_EXT``      |
   +----------------------------+-------+------------------------------------+
   | ``IT_STATUS``              | РўРёРї   | ``/TRL/XDE_T_STATUS``              |
   +----------------------------+-------+------------------------------------+
   | ``EXPORTING`` (на выход ФМ)                                             |
   +----------------------------+-------+------------------------------------+
   | ``ET_STATUS``              | РўРёРї   | ``/TRL/XDE_T_STATUS``              |
   +----------------------------+-------+------------------------------------+