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