Почему в Конвертации данных 2.0 не выгружаются реквизиты ссылочного типа при использовании произвольного алгоритма?

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

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

Разбор причин проблемы

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

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

Шаг 1: Создание ПКО для ссылочного типа

Частая ошибка — попытка «передать» ссылку без создания правил для самого справочника. Даже если вы ранее переносили контрагентов в рамках других задач, в текущем наборе правил должно существовать ПКО для этого справочника. Без него система не знает, как сопоставить объект приемника с объектом источника.

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

ТолькоПолучитьУзелСсылки = Истина;

Шаг 2: Правильная передача данных через ИсходящиеДанные

Для корректной работы с произвольным алгоритмом в ПВД, мы рекомендуем использовать структуру ИсходящиеДанные. Это «золотой стандарт» при работе с кастомными выборками. Давайте рассмотрим, как правильно организовать цикл выгрузки.

Вместо прямой записи значений, мы формируем структуру, которую Конвертация данных сможет «понять» и соотнести с правилами конвертации свойств:


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

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

Шаг 3: Настройка ПКС

После того как вы подготовили структуру и вызвали выгрузку, необходимо проверить ПКС в ПКО основного объекта. Убедитесь, что для свойства «Контрагент»:

Именно этот флаг сообщает системе: «не ищи значение в самом объекте источника, а возьми его из той структуры, которую мы подготовили в ПВД».

Резюме по исправлению ошибки

Если после выполнения алгоритма вы все равно получаете «пустоту» в приемнике, пройдитесь по этому чек-листу:

  1. Создано ли ПКО для ссылочного объекта?
  2. Указано ли в ПКО поле для поиска (код/наименование)?
  3. В ПВД (произвольный алгоритм) вы действительно заполняете структуру ИсходящиеДанные?
  4. В ПКС основного объекта стоит флаг Получить из входящих данных?
  5. Правильно ли указано имя ПКО в методе ВыгрузитьПоПравилу?

Соблюдение этих простых правил позволит избежать потери ссылочных данных и обеспечит корректную связь между объектами в базе приемнике.

← На главную