Как правильно передать данные через ИсходящиеДанные во ВходящиеДанные в Конвертации данных 2.0

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе с инструментом «1С:Конвертация данных 2.0» (КД 2.0) начинающие разработчики часто сталкиваются с трудностями при попытке передать дополнительные данные от одного объекта к другому. Типичный сценарий: при выгрузке документа необходимо заполнить реквизит Владелец у справочника, который используется в этом документе, при условии, что в самом справочнике этот владелец не определен или его нужно переопределить контекстом документа. Рассмотрим подробно, как работает механизм ИсходящиеДанные — ВходящиеДанные, разберем типичные ошибки и предложим правильный алгоритм действий.

Суть проблемы и механизм взаимодействия

Рассмотрим ситуацию: у нас есть документ-источник (например, МенюТребование), в котором указана Организация. В этом документе есть реквизит или табличная часть, ссылающаяся на справочник (например, КатегорииДовольствующихся). Нам нужно, чтобы при конвертации этого справочника его реквизит Владелец заполнился той самой организацией из документа. Проблема заключается в том, что когда система начинает конвертировать справочник по правилу (ПКО), она «забывает» контекст документа. Чтобы передать этот контекст «вниз» по иерархии выгрузки, используются специальные коллекции.

Важно понимать логику:

  1. ИсходящиеДанные — это структура, которую мы создаем «сверху» (в ПКС родительского объекта).
  2. ВходящиеДанные — это та же самая структура, которая становится доступна «снизу» (в ПКО подчиненного объекта).

Шаг 1. Подготовка ИсходящихДанных в родителе

Многие совершают ошибку, пытаясь прописать код формирования ИсходящиеДанные непосредственно в ПКО справочника. Это неверно, так как в момент выполнения обработчиков ПКО справочника данные уже должны быть переданы ему извне. Проанализируем правильное место для написания кода.

Необходимо открыть Правила Конвертации Объектов (ПКО) для вашего документа. В списке Правил Конвертации Свойств (ПКС) найдите тот реквизит, который ссылается на нужный справочник. Перейдите в обработчик Перед выгрузкой этого ПКС и пропишите следующий код:


// В обработчике ПКС "КатегорияДовольствующихся" (Документа)
// Формируем структуру, которую передадим в ПКО справочника
ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("Владелец", Источник.Организация);

Таким образом, когда система начнет выгружать ссылку на справочник из документа, она «возьмет с собой» эту структуру данных.

Шаг 2. Настройка ПКО подчиненного справочника

Теперь перейдем к настройке ПКО самого справочника (в нашем примере это КатегорииДовольствующихся). Нам нужно указать системе, что конкретный реквизит (Владелец) должен заполняться не из источника напрямую, а из переданных во ВходящиеДанные значений.

Выполните следующие действия:

  1. Найдите ПКС Владелец в составе ПКО справочника.
  2. Установите флаг «Получить из входящих данных».
  3. Убедитесь, что для этого свойства указано правильное ПКО (например, Организации), так как во входящих данных мы передаем ссылку на организацию, которую также нужно сконвертировать.

В некоторых случаях, вместо установки галочки, можно в обработчике Перед выгрузкой этого ПКС явно прописать:


// В обработчике ПКС "Владелец" (Справочника)
Если ВходящиеДанные <> Неопределено Тогда
    Значение = ВходящиеДанные.Владелец;
КонецЕсли;

Шаг 3. Влияние Правил выгрузки данных (ПВД)

Проанализируем ситуацию, когда все настроено верно, но данные все равно не заполняются или возникает ошибка «Поле объекта не обнаружено». Частой причиной является наличие ПВД (Правила выгрузки данных) для этого справочника.

Если справочник выгружается не только в составе документа, но и сам по себе (как самостоятельный объект через ПВД), то в момент его автономной выгрузки ВходящиеДанные будут равны Неопределено. Система попытается обратиться к ним и вызовет ошибку.

Рекомендации:

Альтернативный вариант: Использование Параметров

Если структура ИсходящиеДанные кажется сложной или не работает в конкретной конфигурации, можно рассмотреть использование коллекции Параметры. Рассмотрим, как это реализовать:

  1. В ПКО документа (источника) в обработчике Перед выгрузкой или При выгрузке записываем данные в глобальную коллекцию: Параметры.Вставить("ТекущаяОрганизацияДляВладельца", Источник.Организация);
  2. В ПКО справочника в ПКС Владелец снимаем галочку «Получать из входящих данных» и в обработчике Перед выгрузкой пишем: Значение = Параметры.ТекущаяОрганизацияДляВладельца;

Важное ограничение: Использование глобальных Параметров удобно, если организация одна на весь процесс обмена. Если же в одном файле передаются документы разных организаций, ИсходящиеДанные предпочтительнее, так как они передаются локально для каждой итерации выгрузки свойства.

Почему возникает ошибка «Поле объекта не обнаружено»?

Разберем основные причины этой ошибки при работе с конвертацией:

Выяснив эти нюансы, мы можем сделать вывод, что залог успеха в КД 2.0 — это строгое соблюдение иерархии передачи данных. Всегда представляйте путь данных от Источника в ПКС родителя до Значения в ПКС подчиненного объекта через «мостик» в виде ВходящихДанных.

← На главную