При настройке правил обмена в Конвертации данных 2.0 часто возникают ситуации, когда запрос в ПВД (Правилах выгрузки данных) отбирает множество объектов, но в итоговый файл обмена попадает только один из них. Эта проблема связана с механизмом регистрации выгруженных объектов, который пытается оптимизировать процесс, но в определенных случаях приводит к ошибкам. Давайте разберем, почему это происходит и как это исправить.
В КД 2.0 при использовании произвольного алгоритма в ПВД система по умолчанию стремится отслеживать уже выгруженные объекты. Это сделано для того, чтобы избежать дублирования данных и повторной обработки одних и тех же элементов в рамках одного сеанса выгрузки. Если Конвертация данных не может однозначно идентифицировать объекты как разные, она «схлопывает» их, считая, что один объект был выгружен, а остальные — это дубли.
Чаще всего это случается, когда для объектов выборки не задан уникальный Ключ выгружаемых данных, или когда система интерпретирует набор объектов как тождественный по внутренним признакам. В результате обработчик выгрузки просто прекращает работу после первого же успешно обработанного элемента.
Самый быстрый и простой способ решить проблему — изменить настройки самого ПВД. В карточке правила выгрузки данных существует флаг «Не запоминать выгруженные». Установка этой галочки отключает внутренний кэш обработчика выгрузки.
При активации этого параметра:
Важное замечание: Будьте осторожны при использовании этого метода. Если в процессе выгрузки один и тот же объект может попасть в выборку несколько раз (например, из-за особенностей логики запроса), он будет выгружен повторно. Это может привести к созданию дублей в базе-приемнике, если правила ККО (Правил конвертации объектов) не настроены на корректное обновление существующего объекта по поиску.
Если вы хотите сохранить преимущество оптимизации и предотвратить возможные дубли, используйте более профессиональный подход — явное заполнение Ключа выгружаемых данных. Ключ — это строка, по которой система идентифицирует объект. Если ключ пустой, система пытается «угадать» идентификатор, что и приводит к ошибкам.
Разберем, как это реализовать. В вашем алгоритме ПВД, где вы перебираете выборку, необходимо для каждого объекта принудительно задать уникальное значение ключа. В качестве ключа лучше всего использовать GUID (Уникальный идентификатор) объекта или его уникальный код.
Посмотрим на пример логики, которую следует внедрить:
// В цикле выборки данных
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Задаем уникальный ключ для каждого объекта,
// чтобы КД не считала их дублями
КлючВыгружаемыхДанных = Строка(Выборка.Ссылка.УникальныйИдентификатор());
// Далее вызываем выгрузку
ВыгрузитьПоПравилу(Выборка.Ссылка, , , , "ИмяВашегоПКО");
КонецЦикла;
Таким образом, мы даем системе четкую инструкцию, что каждый объект в нашей выборке уникален. Это позволяет системе корректно различать записи, сохраняя при этом работоспособность механизмов оптимизации КД 2.0.
Если вы столкнулись с тем, что выгрузка «схлопывается» и передает только одну запись, проанализируйте свой алгоритм:
ПВД.Ключ выгружаемых данных уникальным идентификатором в коде.Работа с Конвертацией данных требует внимательности к деталям идентификации объектов. Использование описанных методов позволит вам избежать типичных ошибок и обеспечить корректную выгрузку всех необходимых данных из вашей учетной системы. Для быстрой проверки содержимого результирующего XML-файла до загрузки в приемник можно использовать обработку для анализа состава выгруженных данных.