Как исправить ошибку загрузки при неправильном порядке выгрузки реквизитов в 1С?

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

Часто при настройке обмена данными между конфигурациями 1С через Конвертацию данных 2.1 и Универсальный обмен данными XML возникает ситуация, когда подчиненные объекты (например, БанковскиеСчета) пытаются записаться в базу-приемник раньше, чем их Владелец (например, Контрагент). Это приводит к ошибкам записи, так как система не может корректно привязать подчиненный объект к отсутствующему в базе родителю.

Анализ проблемы

Рассмотрим ситуацию: вы настраиваете выгрузку из 1С:Управление торговлей 10.3 в 1С:Бухгалтерия 3.0. В файле выгрузки XML сначала идет БанковскийСчет, а только потом Контрагент. При стандартной попытке записи объекта 1С выполняет проверки, которые требуют наличия владельца. Если контрагент еще не был создан в базе, процесс загрузки прерывается с ошибкой.

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

Решение проблемы через режим загрузки

Самый эффективный и правильный способ обойти проблему обязательной проверки владельца при загрузке — это использование флага ОбменДанными.Загрузка = Истина. Разберем, почему это работает и как это применить.

  1. Отключение проверок: В режиме ОбменДанными.Загрузка = Истина платформа 1С отключает большинство встроенных проверок заполнения реквизитов, которые обычно срабатывают при записи объекта пользователем через интерфейс.
  2. Игнорирование подписок на события: Многие подписки, которые инициируют сложную логику при записи (например, проверки уникальности или расчеты), перестают блокировать процесс записи объекта.
  3. Обогащение данных: Если объект успешно записан без владельца, то при последующем чтении контрагента из того же файла обмена система автоматически свяжет их, если настроены правила поиска.

Как реализовать в коде

При использовании Универсального обмена данными важно убедиться, что запись объектов происходит в нужном режиме. Если вы используете типовые обработки, данный функционал часто уже заложен в логику работы правил. Если же вы пишете собственную логику обмена, необходимо явно указать:


ОбъектСсылка = ПолучитьОбъект(); // Получение объекта из данных XML
ОбъектСсылка.ОбменДанными.Загрузка = Истина;
ОбъектСсылка.Записать();

Важные замечания по настройке Конвертации данных

Часто в КД 2.1 интерфейс может быть перегружен, и нужные настройки скрыты. Если вы не видите вкладку «Дополнительно» в ПКО, выполните следующее:

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

Поскольку при использовании режима ОбменДанными.Загрузка = Истина документы загружаются без проведения, их необходимо провести постфактум. Рассмотрим варианты решения этой задачи:

  1. Типовое групповое перепроведение: Используйте обработку «Групповое перепроведение документов», которая доступна в разделе «Администрирование». Это самый простой способ, так как система сама выстроит цепочку документов в правильном порядке.
  2. Регламентные задания: В современных конфигурациях, таких как БП 3.0, существуют механизмы отложенного проведения. Система может автоматически поставить загруженные документы в очередь на проведение.
  3. Программное проведение: Если необходимо автоматизировать процесс полностью, создайте обработку, которая после обмена перебирает загруженные ссылки и вызывает метод проведения:

ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
Если ДокументОбъект <> Неопределено Тогда
    ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;

Подводя итог: не пытайтесь изменить физический порядок объектов в XML-файле — это не является надежным решением. Используйте стандартные возможности платформы по управлению режимом записи объекта, и обмен будет проходить стабильно и без ошибок.

← На главную