При разработке правил обмена в конфигурации Конвертация данных 2.0 часто возникают ошибки, связанные с выполнением запросов и передачей данных. Рассмотрим, почему возникает ошибка неверные параметры в операции сравнения, нельзя сравнивать поля неограниченной длины и как корректно организовать процесс выгрузки дочерних объектов.
Платформа 1С:Предприятие накладывает строгие ограничения на операции сравнения в запросах. Если поле в базе данных определено как Строка (неограниченная), его нельзя напрямую сравнивать в секции ГДЕ или в условии СОЕДИНЕНИЕ. Система не может гарантировать корректное индексирование таких полей.
Чтобы решить эту проблему, используйте функцию ВЫРАЗИТЬ. Это принудительно преобразует данные к фиксированной длине, которую платформа может корректно обработать:
ВЫРАЗИТЬ(МоеПолеНеограниченнойДлины КАК СТРОКА(100))
В обработчиках ПередВыгрузкой переменная Источник является ключевой. Важно понимать, что тип значения этой переменной может меняться в зависимости от контекста выполнения:
Источник — это объект (например, СправочникОбъект), к нему можно обращаться через Источник.Ссылка.Источник — это уже ссылка (СправочникСсылка), обращение к Источник.Ссылка вызовет ошибку Поле объекта не обнаружено.Для отладки используйте функцию ТипЗнч(Источник). Если вы видите, что в обработчик приходит не тот тип, который ожидался, это означает, что правила регистрации или вызова были настроены неверно.
Частая ошибка — попытка реализовать сложную логику выгрузки внутри одного ПКО. Если вам нужно при выгрузке физического лица выгрузить его паспортные данные, лучше действовать по шагам:
ВыгрузитьПоПравилу. Важно: ключи структуры должны в точности соответствовать именам полей или правилам конвертации свойств (ПКС) в принимающем ПКО.ВыгрузитьПоПравилу должен указывать на другое правило (ПКО), которое предназначено специально для выгрузки паспортных данных (например, ДокументыФизическихЛиц).Рассмотрим пример правильного кода в обработчике ПередВыгрузкой:
Если НЕ Источник.ЭтоГруппа Тогда
// Устанавливаем параметры запроса
Запросы.ПаспортныеДанныеФизЛиц.УстановитьПараметр("ФизическоеЛицоСсылка", Источник.Ссылка);
Выборка = Запросы.ПаспортныеДанныеФизЛиц.Выполнить();
РезультатЗапроса = Выборка.Выбрать();
Если РезультатЗапроса.Следующий() Тогда
ИсходящиеДанные = Новый Структура("ФизЛицо, ВидДокумента, ДатаВыдачи, КемВыдан");
ИсходящиеДанные.ФизЛицо = Источник.Ссылка;
ЗаполнитьЗначенияСвойств(ИсходящиеДанные, РезультатЗапроса);
// Выгружаем данные по отдельному правилу
ВыгрузитьПоПравилу(, , ИсходящиеДанные, , "ДокументыФизическихЛиц");
КонецЕсли;
КонецЕсли;
Если вы получаете ошибку получение по индексу для значения не определено, это почти всегда означает, что структура, которую вы передаете в ВыгрузитьПоПравилу, не совпадает с тем, что ожидает правило конвертации объектов (ПКО) на стороне приемника. Проверьте соответствие типов: если в ПКС приемника поле ВидДокумента ожидает ссылку на справочник, а вы передаете строку (наименование), обмен упадет.
Рекомендации по отладке:
Конвертацию данных.Соблюдая эти правила, вы сможете избежать распространенных ошибок и сделать обмен данными между конфигурациями стабильным и предсказуемым.