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

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

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

Анализируем причину: механизмы кэширования и поиска

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

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

Способ 1. Настройка уникальных полей поиска

Самый простой и эффективный способ разделить документы на стороне приемника — добавить в поля поиска уникальный признак. Если вы переносите остатки по счетам и для каждого счета должен создаваться отдельный документ ОперацияБух, необходимо сделать так, чтобы поиск находил их по уникальному сочетанию реквизитов.

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

Проанализируем ситуацию: если мы включим Комментарий в поля поиска и будем писать туда номер счета, система при загрузке поймет, что «Операция от 01.01.2023 с комментарием Счет 01» и «Операция от 01.01.2023 с комментарием Счет 02» — это разные объекты.

Способ 2. Использование КлючаВыгружаемыхДанных

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

Рассмотрим пример кода, который можно разместить в обработчике ПередВыгрузкой:


// Формируем уникальный ключ на основе даты и номера счета
КлючВыгружаемыхДанных = Строка(ОбъектКоллекции.Дата) + "_" + Строка(ОбъектКоллекции.Счет);

// Дополнительно можно указать режим записи для документа
РежимЗаписи = "Проведение";
РежимПроведения = "Неоперативный";

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

Важные технические нюансы

Разберем дополнительные моменты, которые влияют на уникальность объектов:

Заключение

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

← На главную