Получение всех отправок для заданной отправки ============================================= .. code:: abap *"-------------------------------------------------------------------- *"*"Локальный интерфейс: *" IMPORTING *" VALUE(IV_RECORD_ID) TYPE /TRL/XDE_HEADER-RECORD_ID *" VALUE(IV_REL_TYPE) TYPE /TRL/XDE_SHIP_RL-RTYPE DEFAULT *" 'RSP' *" VALUE(IV_MAX_LEVEL) TYPE I DEFAULT 1 *" EXPORTING *" VALUE(ET_RELATIONS) TYPE /TRL/XDE_T_RECORD_ID *"-------------------------------------------------------------------- Функциональный модуль ``/TRL/XDE_API_SHIPM_GET_RELATS`` предназначен для получения всех связанных (родительских, дочерних или без указания иерархии) отправок для заданной отправки. .. attention:: Для работы со связанными документами создан новый функциональный модуль ``/TRL/XDE_API_SHIPM_GET_RELATS2``, принцип работы которого не изменился, но изменился выходной параметр ``ET_RELATIONS``. В новом ФМ помимо списка идентификаторов возвращается и идентификатор документа, тип связи из идентификатор связанного документа. .. table:: Описание интерфейса функционального модуля ``/TRL/XDE_API_SHIPM_GET_RELATS`` :align: center :widths: 2 8 +------------------------------------+-------------------------------------------------------------------------------------------------------+ | Параметр | Описание | +====================================+=======================================================================================================+ | ``IMPORTING`` | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IV_RECORD_ID`` | Уникальный идентификатор отправки, для которой выполняется поиск связанных отправок. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IV_REL_TYPE`` | Тип связи между отправками. | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``IV_MAX_LEVEL`` | Максимальная глубина поиска. Если указано значение больше 1, то выполняется рекурсивный поиск | | | («дочерние к дочерним», «родительская к родительской»). | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``EXPORTING`` | +------------------------------------+-------------------------------------------------------------------------------------------------------+ | ``ET_RELATIONS`` | Список связанных отправок. Содержит все записи из ET_CHILDREN, ET_PARENTS и ET_LINKS | +------------------------------------+-------------------------------------------------------------------------------------------------------+ Сразу вызывается ФМ ``/TRL/XDE_GET_SHIPMENTS_RELATS``. Этот ФМ определяет связи с другими поставками до определенного максимального уровня. Если окажется, что текущий уровень выше максимального, работа ФМ закончится. Также ФМ является рекурсивным, т.е. вызывается сам в себе. Вызывается ФМ ``/TRL/XDE_API_SHIPM_GET_PARENTS``. Этот ФМ получает все родительские пакеты и также является рекурсивным. Логика поиска связанных документов основана на выборке из таблицы ``/TRL/XDE_SHIP_RL``. В результате работы ФМ мы получим внутреннюю таблицу ``lt_parents``. Вызывается ФМ ``/TRL/XDE_API_SHIPM_GET_SHILD``. Этот ФМ получает все дочерние пакеты и также является рекурсивным. Логика поиска связанных документов основана на выборке из таблицы ``/TRL/XDE_SHIP_RL``. В результате работы ФМ мы получим внутреннюю таблицу ``lt_children``. Вызывается ФМ ``/TRL/XDE_API_SHIPM_GET_LINKS``. Этот ФМ получает все связанные документы без указания иерархии. Логика поиска связанных документов основана на выборке из таблицы ``/TRL/XDE_SHIP_RL``. В результате работы ФМ мы получим внутреннюю таблицу ``lt_links``. Из полученных ``lt_children``, ``lt_parents`` и ``lt_links`` удаляются все записи по текущей отправке, после этого записи из этих таблиц добавляются в выходную таблицу ``et_reations``. Далее увеличиваем текущий уровень и в цикле по родительским пакетам и дочерним пакетам – запускаем для каждой записи ФМ ``/TRL/XDE_GET_SHIPMENT_RELATS``, но уже с указанием уровня. Таким образом будет развернута вся цепочка родительских и дочерних пакетов. После всех манипуляций, когда программа вернется в первый по очереди вызов ФМ, произойдет заключительная сортировка выходящей таблицы ``et_relations`` и удаление дубликатов.