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

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

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

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

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

Чаще всего это случается, когда для объектов выборки не задан уникальный Ключ выгружаемых данных, или когда система интерпретирует набор объектов как тождественный по внутренним признакам. В результате обработчик выгрузки просто прекращает работу после первого же успешно обработанного элемента.

Решение №1: Использование флага «Не запоминать выгруженные»

Самый быстрый и простой способ решить проблему — изменить настройки самого ПВД. В карточке правила выгрузки данных существует флаг «Не запоминать выгруженные». Установка этой галочки отключает внутренний кэш обработчика выгрузки.

При активации этого параметра:

  1. Система перестает проверять, был ли объект уже выгружен ранее.
  2. Каждая итерация цикла в вашем алгоритме выполняется независимо.
  3. Все объекты, попавшие в вашу выборку, гарантированно попадут в файл обмена. Для настройки регулярного выполнения этой задачи по расписанию на основе подготовленных правил применяется автоматический обмен данными между базами 1С.

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

Решение №2: Явное указание ключа выгружаемых данных

Если вы хотите сохранить преимущество оптимизации и предотвратить возможные дубли, используйте более профессиональный подход — явное заполнение Ключа выгружаемых данных. Ключ — это строка, по которой система идентифицирует объект. Если ключ пустой, система пытается «угадать» идентификатор, что и приводит к ошибкам.

Разберем, как это реализовать. В вашем алгоритме ПВД, где вы перебираете выборку, необходимо для каждого объекта принудительно задать уникальное значение ключа. В качестве ключа лучше всего использовать GUID (Уникальный идентификатор) объекта или его уникальный код.

Посмотрим на пример логики, которую следует внедрить:


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

Таким образом, мы даем системе четкую инструкцию, что каждый объект в нашей выборке уникален. Это позволяет системе корректно различать записи, сохраняя при этом работоспособность механизмов оптимизации КД 2.0.

Заключение и рекомендации

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

Работа с Конвертацией данных требует внимательности к деталям идентификации объектов. Использование описанных методов позволит вам избежать типичных ошибок и обеспечить корректную выгрузку всех необходимых данных из вашей учетной системы. Для быстрой проверки содержимого результирующего XML-файла до загрузки в приемник можно использовать обработку для анализа состава выгруженных данных.

← На главную