При настройке синхронизации данных между конфигурациями 1С (например, ERP и Бухгалтерия предприятия) через формат EnterpriseData пользователи часто сталкиваются с критической ошибкой выгрузки. Система сообщает о несоответствии структуры объекта схеме XDTO, указывая на отсутствие обязательного свойства Контрагент. Рассмотрим детально, почему возникает эта проблема и как ее «вылечить», основываясь на реальном техническом кейсе.
Разберем типичный текст ошибки из лога обмена. Система указывает на метод ОбъектXDTO.Проверить. Это означает, что данные в базе 1С физически записаны, но перед отправкой механизм обмена проверяет их на соответствие международному стандарту EnterpriseData. Если какое-то поле в XML-схеме помечено как обязательное, а в объекте 1С оно не заполнено, валидатор блокирует выгрузку всего пакета.
Проанализируем ключевой фрагмент сообщения:
Ошибка проверки данных XDTO: Структура объекта '/РасшифровкаДопРасходов/Строка[41]/ДокументПоступления/ПоступлениеТоваровУслугСсылка' не соответствует типу... Отсутствует обязательное свойство 'Контрагент'
Выясним причину, по которой это происходит. В современных конфигурациях 1С (ERP, КА 2, УТ 11) документ ПриобретениеТоваровУслуг может содержать дополнительные расходы. Когда мы выбираем статью расходов с распределением на себестоимость, система требует указать аналитику. Если в качестве аналитики выбран другой документ поступления, формат обмена требует передать не только уникальный идентификатор (GUID) этого документа, но и его ключевые реквизиты: номер, дату и контрагента. Это необходимо для того, чтобы в приемнике объект мог быть корректно идентифицирован или создан как «объект-пустышка».
Часто возникает путаница: в сообщении об ошибке указан индекс строки [41], а в самом документе Приобретение товаров и услуг пользователь видит, например, всего 24 строки. Рассмотрим, почему так происходит:
Поэтому при поиске ошибки следует ориентироваться не на номер строки, а на содержимое колонки «Аналитика расходов» в табличной части «Услуги».
Проанализируем ситуацию и выполним следующие действия для исправления документа:
Приобретение товаров и услуг, указанный в ошибке.Важный момент: если документ-аналитика заполнен некорректно (например, он был создан программно или через обмен и не содержит контрагента), его необходимо дозаполнить и провести. Если поле Контрагент в нем пустое, XDTO-валидатор выдаст ошибку, так как не сможет сформировать обязательный узел в XML.
Если подобных документов много, мы можем проанализировать их программно. Рассмотрим пример кода, который поможет найти строки с пустой аналитикой или проблемными документами в табличной части Расходы:
Для Каждого СтрокаТЧ Из Объект.Расходы Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.АналитикаРасходов)
И ТипЗнч(СтрокаТЧ.АналитикаРасходов) = Тип("ДокументСсылка.ПриобретениеТоваровУслуг") Тогда
// Проверяем заполнение контрагента в документе-аналитике
Если СтрокаТЧ.АналитикаРасходов.Контрагент.Пустая() Тогда
Сообщить("В строке " + СтрокаТЧ.НомерСтроки + " у документа аналитики не заполнен контрагент!");
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если вы используете расширение (как в исходном сообщении об ошибке), стоит проверить общий модуль ОбменДаннымиXDTOСервер. Возможно, в расширении переопределены правила выгрузки, которые делают проверку свойств более строгой.
Разберем еще несколько способов устранения подобных сбоев, если ручное исправление не помогает:
Подведем итог: ошибка «Отсутствует обязательное свойство Контрагент» в 90% случаев связана с человеческим фактором — недозаполнением документов, которые выступают в роли аналитики расходов. Тщательная проверка связанных документов в цепочке поставок позволяет быстро восстановить работоспособность обмена без вмешательства в программный код.