Массовое подписание исходящей отправки и постановка в очередь
=============================================================

.. code:: abap

    *"----------------------------------------------------------------------
    *"*"Локальный интерфейс:
    *"  IMPORTING
    *"     VALUE(IT_RECORD_ID) TYPE  /TRL/XDE_T_RECORD_ID
    *"     VALUE(IT_CERTIFICATE) TYPE  /TRL/XDE_T_SAP_DOC_TYPE_CERT
    *"       OPTIONAL
    *"     VALUE(IV_STATUS_READY) TYPE  /TRL/XDE_HEADER-STATE OPTIONAL
    *"  EXPORTING
    *"     VALUE(ES_RETURN) TYPE  /TRL/XDE_RETURN
    *"     VALUE(ES_HEADER) TYPE  /TRL/XDE_HEADER
    *"----------------------------------------------------------------------

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

.. table:: Описание интерфейса функционального модуля ``/TRL/XDE_API_SHIPM_SIGN_OUT2``
   :align: center
   :widths: 2 8
    
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | Параметр                           | Описание                                                                                              |
   +====================================+=======================================================================================================+
   | ``IMPORTING``                                                                                                                              |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``IT_RECORD_ID``                   | Набор уникальных идентификаторов отправки.                                                            |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``IT_CERTIFICATE``                 | Таблица сертификатов в разрезе видов документов SAP.                                                  |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``IV_STATUS_READY``                | Статус, который присваивается отправке после подписания.                                              |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``EXPORTING``                                                                                                                              |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``ES_RETURN``                      | Код и описание ошибки в случае, если операцию выполнить не удалось.                                   |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+
   | ``ES_HEADER``                      | Заголовок отправки.                                                                                   |
   +------------------------------------+-------------------------------------------------------------------------------------------------------+   

Получаем все отправления для пакета с помощью ФМ ``/TRL/XDE_API_PACK_GET_ALL_SHIP``. Запускается цикл по найденным отправлениям и для каждого выполняется поиск данных с помощью ФМ ``/TRL/XDE_GET_SHIPMENTS``.

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

Проверяются полномочия и возможность подписания через настроечную таблицу ``/TRL/XDE_STATE``. 

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

Далее блокируется отправление.

* Если не удалось заблокировать – в ``es_return-code`` попадет «1011», в ``es_return-text`` попадет текст текущего системного сообщения. Снимаются блокировки, происходит выход из ФМ.

Далее нужно определить сертификат. Если нет данных по сертификату во входных параметрах – определяется ФМ определения способа подписания и сертификата. 
Имя этого ФМ хранится в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_GET_CERT``.
Если ФМ найден и существует в системе – будет выполнен его вызов.

* Если ФМ не найден или не существует в системе – в ``es_return-code`` попадет «1108», в ``es_return-text`` попадет ««& & Не задан ФМ Определения сертификата для подписания»». Снимаются блокировки, происходит выход из ФМ.
* Если в ходе выполнения найденного ФМ произошла ошибка – в ``es_return-code`` попадет «1005», в ``es_return-text`` попадет текущее системное сообщение. Снимаются блокировки, происходит выход из ФМ.

Происходит поиск среди найденных сертификатов нужного по виду документа SAP.

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

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

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


В цикле по списку отправлений находится имя ФМ для подписания исходящего отправления, которое хранится в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_SHIP_OUT_SIGN``.
Если имя ФМ найдено и ФМ существует в системе – происходит вызов ФМ подписания исходящего отправления. Имя ФМ не обязательно нужно, если используется серверное подписание.

* Если ФМ не найден и нет возможности использовать серверное подписание – в ``es_return-code`` попадает «1008», в ``es_return-text`` попадет «& & & Не задан ФМ подписания». Выполняется ``ROLLBACK``, происходит выход из ФМ.

Документы сохраняются  в архив с помощью ФМ ``/TRL/XDE_SHIP_OUT_ARCHIVE_DOCS``.

* Если в ходе выполнения ФМ возникли ошибки – в ``es_return-code`` попадает «1014», в ``es_return-text`` попадет текущее системное сообщение. Выполняется ``ROLLBACK``, происходит выход из ФМ.

Далее обновляются документы с помощью двух ФМ – ``/TRL/XDE_SHIPM_BEFORE_UPD_DOCS`` и ``/TRL/XDE_SHIPMENT_UPD_DOCS``. На этом цикл закончится.

Снова запускается цикл по отправлениям. Обновляются данные в ``/TRL/XDE_HEADER``. 

* Если в ходе обновления данных возникли ошибки – в ``es_return-code`` попадает «1014», в ``es_return-text`` попадет текущее системное сообщение. Выполняется ``ROLLBACK``, происходит выход из ФМ.

Считываются настройки оператора, технические имена статусов и добавляется статус для отправки с помощью ФМ ``/TRL/XDE_SET_STATUS_FOR_SHIPM``. 

* Если в ходе обновления данных возникли ошибки – в ``es_return-code`` попадает «1014», в ``es_return-text`` попадет текущее системное сообщение. Выполняется ``ROLLBACK``, происходит выход из ФМ.

Цикл заканчивается.

Снимаются блокировки и происходит выход из ФМ.

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

.. important::

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

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

.. image:: ris34.png
   :scale: 78
   :align: center
   :alt: Настройка ``FM_GET_CERT``

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

.. table:: Параметры модуля определения способа подписания и сертификата
   :align: center
   :widths: 2 1 4
   
   +----------------------------+-------+------------------------------------+
   | Наименование параметра     | Тип   | Название словарного типа или класс |
   +============================+=======+====================================+
   | ``IMPORTING`` (попадают в ФМ)                                           |
   +----------------------------+-------+------------------------------------+
   | ``I_UNAME``                | Тип   | ``SYST_UNAME``                     |
   +----------------------------+-------+------------------------------------+  
   | ``IT_SAP_DOC_TYP``         | Тип   | ``/TRL/XDE_T_SAP_DOC_TYPE``        |
   +----------------------------+-------+------------------------------------+
   | ``I_ID_OED``               | Тип   | ``/TRL/XDE_ED_ID_OED``             |
   +----------------------------+-------+------------------------------------+
   | ``I_BUKRS``                | Тип   | ``BUKRS``                          |
   +----------------------------+-------+------------------------------------+
   | ``I_LIFNR``                | Тип   | ``/TRL/XDE_ED_SENDER``             |
   +----------------------------+-------+------------------------------------+
   | ``I_KUNNR``                | Тип   | ``/TRL/XDE_ED_RECIEVER``           |
   +----------------------------+-------+------------------------------------+
   | ``I_SKIP_CACHE``           | Тип   | ``CLIKE``                          |
   +----------------------------+-------+------------------------------------+
   | ``EXPORTING`` параметры (на выход ФМ)                                   |
   +----------------------------+-------+------------------------------------+
   | ``ET_CERTS``               | Тип   | ``/TRL/XDE_T_SAP_DOC_TYPE_CERT``   |
   +----------------------------+-------+------------------------------------+

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


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

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

.. image:: ris35.png
   :scale: 86
   :align: center
   :alt: Настройка ``FM_SHIP_OUT_SIGN``


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

.. table:: Параметры модуля подписания исходящего отправления
   :align: center
   :widths: 2 1 4
   
   +----------------------------+-------+------------------------------------+
   | Наименование параметра     | Тип   | Название словарного типа или класс |
   +============================+=======+====================================+
   | ``IMPORTING`` (попадают в ФМ)                                           |
   +----------------------------+-------+------------------------------------+
   | ``IS_HEADER``              | Тип   | ``/TRL/XDE_HEADER``                |
   +----------------------------+-------+------------------------------------+
   | ``IT_HEADER``              | Тип   | ``/TRL/XDE_T_HEADER``              |
   +----------------------------+-------+------------------------------------+   
   | ``IS_CERT``                | Тип   | ``/TRL/XDE_S_SAP_DOC_TYPE_CERT``   |
   +----------------------------+-------+------------------------------------+
   | ``EXPORTING`` параметры (на выход ФМ)                                   |
   +----------------------------+-------+------------------------------------+
   | ``ET_CERT_NUM``            | Тип   | ``/TRL/XDE_T_RECORD_CERT``         |
   +----------------------------+-------+------------------------------------+
   | ``ES_HEADER``              | Тип   | ``/TRL/XDE_HEADER``                |
   +----------------------------+-------+------------------------------------+   
   | ``CHANGING`` параметры (изменяемые параметры ФМ)                        |
   +----------------------------+-------+------------------------------------+
   | ``CT_DOCUMENTS``           | Тип   | ``/TRL/XDE_T_DOCUMENTS_W_CONTENT`` |
   +----------------------------+-------+------------------------------------+

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

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

Имя функционального модуля для получения данных их архива хранится в таблице ``/TRL/XDE_AS_CUST`` поле ``FM_DOC_GET``.

.. image:: ris36.png
   :scale: 100 %
   :align: center
   :alt: Поле ``FM_DOC_GET``


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

.. table:: Параметры модуля получения данных их архива
   :align: center
   :widths: 2 1 4
   
   +----------------------------+-------+------------------------------------+
   | Наименование параметра     | Тип   | Название словарного типа или класс |
   +============================+=======+====================================+
   | ``IMPORTING`` (попадают в ФМ)                                           |
   +----------------------------+-------+------------------------------------+
   | ``I_LINK``                 | Тип   | ``/TRL/XDE_ED_LINK``               |
   +----------------------------+-------+------------------------------------+
   | ``I_ASTYPE``               | Тип   | ``/TRL/XDE_ED_ASTYPE``             |
   +----------------------------+-------+------------------------------------+
   | ``EXPORTING`` параметры (на выход ФМ)                                   |
   +----------------------------+-------+------------------------------------+
   | ``E_FILE_NAME``            | Тип   | ``/TRL/XDE_ED_ARC_FILE_NAME``      |
   +----------------------------+-------+------------------------------------+
   | ``E_FILE_SIZE``            | Тип   | ``/TRL/XDE_ED_FILE_SIZE``          |
   +----------------------------+-------+------------------------------------+
   | ``ES_RETURN``              | Тип   | ``/TRL/XDE_RETURN``                |
   +----------------------------+-------+------------------------------------+
   | ``TABLES`` параметры (табличные параметры ФМ)                           |
   +----------------------------+-------+------------------------------------+
   | ``ET_BIN_DATA``            | Тип   | ``/TRL/XDE_T_SOLIX_TAB``           |
   +----------------------------+-------+------------------------------------+

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

Функциональный модуль удаления из архива
----------------------------------------

Имя функционального модуля удаления из архива лежит в таблице ``/TRL/XDE_AS_CUST`` поле ``FM_DOC_DEL``.

.. image:: ris37.png
   :scale: 100 %
   :align: center
   :alt: Поле ``FM_DOC_GET``


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

.. table:: Параметры модуля удаления из архива
   :align: center
   :widths: 2 1 4
   
   +----------------------------+-------+------------------------------------+
   | Наименование параметра     | Тип   | Название словарного типа или класс |
   +============================+=======+====================================+
   | ``IMPORTING`` (попадают в ФМ)                                           |
   +----------------------------+-------+------------------------------------+
   | ``I_LINK``                 | Тип   | ``/TRL/XDE_ED_LINK``               |
   +----------------------------+-------+------------------------------------+
   | ``I_ASTYPE``               | Тип   | ``/TRL/XDE_ED_ASTYPE``             |
   +----------------------------+-------+------------------------------------+
   | ``EXPORTING`` параметры (на выход ФМ)                                   |
   +----------------------------+-------+------------------------------------+
   | ``ES_RETURN``              | Тип   | ``/TRL/XDE_RETURN``                |
   +----------------------------+-------+------------------------------------+
   
Функциональный модуль может иметь и другие параметры, но они должны быть необязательными.

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

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


.. image:: ris38.png
   :scale: 88
   :align: center
   :alt: Настройка ``FM_SET_EVENT``


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

.. table:: Параметры модуля обработки события смены статуса отправления
   :align: center
   :widths: 2 1 4
   
   +----------------------------+-------+------------------------------------+
   | Наименование параметра     | Тип   | Название словарного типа или класс |
   +============================+=======+====================================+
   | ``IMPORTING`` (попадают в ФМ)                                           |
   +----------------------------+-------+------------------------------------+
   | ``IS_HEADER``              | Тип   | ``/TRL/XDE_HEADER``                |
   +----------------------------+-------+------------------------------------+
   | ``IS_STATUS``              | Тип   | ``/TRL/XDE_STATUS``                |
   +----------------------------+-------+------------------------------------+
   | ``TABLES`` (таблицы)                                                    |
   +----------------------------+-------+------------------------------------+
   | ``IT_DOCUMENTS``           | Тип   | ``/TRL/XDE_DOCUM``                 |
   +----------------------------+-------+------------------------------------+
   
Функциональный модуль сортировки статусов
-----------------------------------------
   
Имя функционального модуля сортировки статусов находится в таблице ``/TRL/XDE_CUST`` по имени настройки ``FM_SORT_STATUS_NEW``.

.. image:: ris39.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``              |
   +----------------------------+-------+------------------------------------+