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