Настройка и работа с полуформализованными документами
=====================================================

Обмен полуформализованными документами осуществляется на уровне REST 
интеграции. 

.. _halfnonf_opt_new:

Создание нового полуформализованного документа
----------------------------------------------

Для создания и настройки полуформализованных документов в системе SAP создана таблица ``/TRL/XDE_NONF_TY``. 
Таблица является предзаполненной и содержит все типы полуформализованных документов в разрезе операторов, настроенные в xDE для SAP ERP на момент выхода текущей версии Продукта.

Для создания нового полуформализованного документа нужно внести изменения 
в таблицу. Описание полей таблицы ``/TRL/XDE_NONF_TY`` можно найти в разделе :ref:`nonf_ty_tab`.

.. image:: media/pic3.png
   :scale: 60 %
   :align: center

Для ведения настроек полуформализованных документов используется ракурс ведения таблицы ``/TRL/XDE_NONF_TY`` (транзакция ``SM30``), 
который позволяет добавлять новые записи или изменять старые.

Возможны следующие настройки полуформализованных документов:

* Создание новых записей полуформализованных документов в разрезе операторов;
* Изменение названия используемой ABAP структуры для создания атрибутов;
* Изменение названия метода для обработки данных по текущему типу полуформализованного документа;

Поскольку для разных операторов один и тот же документ в SAP может иметь разные имена 
(поле ``OED_NONF_NAME``), то ключевыми полями являются ``SAP_NONF_TYP`` (связь с 
``/TRL/XDE_SHIP_TY-SAP_NONF_TYP``) и идентификатор оператора ``ID_OED``.   

.. important:: Если в таблице ``/TRL/XDE_NONF_TY`` для выбранного оператора не будет 
    найден искомый тип полуформализованного документа – документ будет отправлен как 
    обычный неформализованный документ.

.. note:: Если в таблице ``/TRL/XDE_NONF_TY`` по кастомной настройке "SETTINGS_SET" не будет
    найден полуформализованный документ - поиск будет выполнен с пустой настройкой (задано по умолчанию).
    Если тип полуформализиванного документа не будет найден и в этом случае - документ будет проложен как неформализованный.


Поле ``OED_NONF_NAME`` содержит имя полуформализованного документа на стороне 
оператора. Именно это значение попадает в поле ``CUSTOM_TYPE`` при отправке 
полуформализованного документа.

Поле ``DDIC_STR_NAME`` содержит имя глобальной плоской (без вложенных структур и таблиц) 
ABAP структуры, что используется для передачи атрибутов с определенными 
именами. Каждое поле такой структуры будет являться именем атрибута. Для того, чтобы 
корректно передавать атрибуты в формате JSON, в котором важен регистр букв, реализована 
следующая логика: при преобразовании данных в JSON используется метод ``CONVERSATE`` 
класса ``/TRL/XDE_CL_HALFNONF_PROC``, который сначала переводит имя поля структуры в нижний 
регистр, а затем переводит в верхний регистр те буквы в имени поля, перед которыми 
стоит знак нижнего подчеркивания.

.. image:: media/pic4.png
   :scale: 100 %
   :align: center

Таким образом, поле ``_CONTRACT_PRICE`` (см. рисунок выше) будет преобразован в ``ContractPrice``.

Поле ``METH_NAME`` - метод, который можно создать в пользовательском классе и который 
будет вызван динамически в функциональном модуле, созданном для работы с 
полуформализованными документами ``/TRL/XDE_OUT_HALF_GET_DATA``. Метод должен иметь 
определенный интерфейс. Метод используется для того, чтобы заполнить атрибуты полуформализованного
документа. Описание данного класса приведено в разделе :ref:`nonf_class`.

.. list-table:: Описание параметров метода из поля METH_NAME
   :widths: auto
   :header-rows: 1

   * - Имя параметра
     - Р’РёРґ
     - РўРёРї
     - Описание
   * - IS_HEADER
     - Importing
     - /TRL/XDE_HEADER
     - Заголовок элемента ЭДО
   * - IT_DOCUMENTS
     - Importing
     - /TRL/XDE_T_DOCUMENTS
     - Список документов
   * - IS_CERT
     - Importing
     - /TRL/XDE_S_SAP_DOC_TYPE_CERT
     - Набор сертификатов
   * - IS_NONF_TY
     - Importing
     - /TRL/XDE_NONF_TY
     - Данные полуформализ. документа
   * - ES_RETURN
     - Exporting
     - /TRL/XDE_RETURN
     - Код и текст сообщения 
   * - CR_DATA
     - Changing
     - DATA
     - Данные в любом виде

По умолчанию классом-обработчиком в настройках, в таблице ``/TRL/XDE_CUST``, стоит 
класс ``/TRL/XDE_CL_HALFNONF_DOCS``. Чтобы изменить класс-обработчик, необходимо 
открыть ракурс ведения таблицы ``/TRL/XDE_CUST`` и установить необходимый класс в 
настройку по имени ``HALFNONF_CLASS``, в которой по умолчанию хранится класс 
``/TRL/XDE_CL_HALFNONF_DOCS``.         

Настройка созданного полуформализованного документа
---------------------------------------------------
Для создания нового вида документа SAP необходимо сделать соответствующие настройки в таблице ``/TRL/XDE_SHIP_TY``. 
Для ведения данной таблицы существует ракурс ведения ``/TRL/XDE_SHIP_TY`` (транзакция ``SM30``).

.. image:: media/pic1.png
   :scale: 52 %
   :align: center

При этом необходимо указать в качестве ``OED_DOC_TYPE`` (Операторский тип документа) 
значение «NONF» (Неформализованный документ), а в качестве ``SAP_DOC_TYPE`` (Тип 
документа SAP) - любое название, отличающееся от «NONF». 

В поле ``SAP_NONF_TYP`` необходимо указать имя полуформализованного документа. 
Через поле ``SAP_NONF_TYP`` осуществляется 
связь с таблицей ``/TRL/XDE_NONF_TY`` и проверка данного поля в методе ``CHECK_HALFNONF``.

Кроме того, необходимо добавить данный новый вид документа в таблицу 
``/TRL/XDE_SOUT_OB``, связав таким образом вид документа с бизнес-объектом.
Для этого можно воспользоваться транзакцией ``SM30`` и ракурсом ``/TRL/XDE_SOUT_OB``.

.. image:: media/pic2.png
   :scale: 100 %
   :align: center
   
Изменения в карточке документа
------------------------------

При отправке/получении полуформализованного документа создаются записи в таблице 
``/TRL/XDE_NONF_AT``, если для данного полуформализованного документа имеются атрибуты 
(наличие или отсутствие атрибутов зависит от регламента передачи полуформализованных документов оператором). 
Таким образом, при переходе к карточке документа с главного экрана журналов xDE, 
можно увидеть новую вкладку «Атрибуты».

.. image:: media/pic5.png
   :scale: 100 %
   :align: center

Вкладка «Атрибуты» появляется только для полуформализованных документов, причем если 
для данного документа нет атрибутов, т.е. отсутствуют записи в таблице ``/TRL/XDE_NONF_AT``, 
то вкладка будет отображаться, но данных на вкладке не будет.