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

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

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

Суть проблемы: несовпадение полей поиска

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

В результате система делает следующий вывод:

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

Шаг 1: Приведение типов и форматов данных

Как показывает практика, чаще всего «виновниками» являются даты или строки с невидимыми символами. Рассмотрим пример с датами. Если в конфигурации приемника реквизит типа Дата имеет состав Дата (без времени), а вы при обмене передаете структуру, где дата содержит время (например, 12:30:45), то поиск работать не будет.

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


// Пример приведения даты к началу дня для корректного поиска
Если ТипЗнч(Данные.ДатаДокумента) = Тип("Дата") Тогда
    Данные.ДатаДокумента = НачалоДня(Данные.ДатаДокумента);
КонецЕсли;

Шаг 2: Настройка поиска в ПКО

При использовании структур данных критически важно правильно настроить Правила Конвертации Объектов (ПКО). Разберем основные правила:

  1. Отключите поиск по внутреннему идентификатору: Поскольку вы передаете не объект, а структуру (у которой нет GUID источника), поиск должен осуществляться ТОЛЬКО по полям поиска.
  2. Настройка полей поиска: Убедитесь, что в ПКО отмечены галочкой нужные поля поиска. В настройках самого ПКО снимите флаг Поиск по внутреннему идентификатору, если вы его используете.
  3. Обработка дублей: Если вы видите, что в систему загружается два документа (один «пустой», а другой «заполненный»), это значит, что при первом проходе поиск не сработал из-за несовпадения формата данных. Исправьте формат (как показано в Шаге 1), и проблема с дублями исчезнет.

Шаг 3: Проверка корректности загрузки через анализ файла обмена

Чтобы убедиться, что проблема именно в загрузке, а не в логике обмена, откройте файл XML обмена. Проанализируйте, какие именно данные передаются в проблемное свойство.

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

Рекомендации по отладке

Рассмотрим алгоритм действий при возникновении подобных ошибок:

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

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

← На главную