Ошибка синхронизации документа Отчет переработчика и боль типового обмена (УНФ — БП)
В данной статье поделюсь доработкой, а точней исправлением типового обмена УНФ — БП, документа «Отчет переработчика», и заодно опишу подход к решению подобных задач. Здесь не будет описано, что такое «МенеджерОбменаЧерезУниверсальныйФормат», «xdto», «EnterpriseData», по этим пунктам должны быть базовые знания.
- Описание
- Подробнее
Описание
Пришел в компанию тот день, когда мы начали использовать давальческую схему переработки материалов, в частности документ "Отчет переработчика", и выгружать это все добро в БП. Если с первым проблем не возникло, то по второму пункту столкнулись с проблемой. Открыв документ в БП, обнаружили, что табличная часть "Услуги" не переносится.
Так выглядит документ в УНФ:

Такой результат ожидает в БП:

Для решения данной проблемы предлагаю следующие ходы на стороне УНФ:
- Убедимся, что универсальный формат поддерживает передачу данной табличной части, для этого найдем наш документ в xdto-пакете EnterpriseData

Здесь мы видим, что формат поддерживает все необходимые реквизиты табличной части "Услуги"
2. Проанализировать код модуля "МенеджерОбменаЧерезУниверсальныйФормат"
Для решения таких моментов настоятельно рекомендую, особенно кто только начинает работать с доработкой универсального формата обмена, загрузить типовые настройки правил конвертации в КД 3.0. Это можно сделать по инструкции из стартового помощника в КД 3.0, также написано уже немало статей по этому поводу.
В КД 3.0 весь модуль "МенеджерОбменаЧерезУниверсальныйФормат" будет структурирован, по документам, объектам, свойствам и вам горазде легче будет понимать логику, чем просто смотреть бесконечный, однотипный код самого модуля.
В КД 3.0 быстро нахожу необходимый документ


Внутри правила конвертации находим нашу табличную часть, и видим, что для всех реквизитов табличной части используется алгоритм конвертации, это означает, что вся логика по формированию вынесена в событие "ПриОтправке".
Логику этой процедуры мы можем найти тут же, на вкладке "Обработчики событий", а также название процедуры для поиска в модуле

Анализируя код процедуры, находим код, который отвечает за заполнение нашей ТЧ

Теперь нам надо найти функцию, которая определяет "РасширенныеДанныеИБ"
РасширенныеДанныеИБ = ДанныеДокументаОтчетПереработчика(ДанныеИБ);
В Данной функции находится текст запроса, который собирает данные документа, вот мы и приблизились к корню проблемы.

В данной функции таблица услуг получается вторым пакетом из запроса, если мы взглянем на сам запрос пакета, то увидим, что он берет данные из реквизитов документа, получение данных из ТЧ "Услуги" не поддерживается в принципе. Проблема найдена, остается последний шаг.
3. Исправить Текст запроса получения данных документа.
Директивой "ИзменениеИКонтроль" заимствую функцию "ДанныеДокументаОтчетПереработчика", переопределяю текст запроса, чтоб данные брались из табличной части документа.

Здесь приведу весь текст доработанного модуля
