Как исправить ошибку синхронизации УТ-БП: Отсутствует обязательное свойство Контрагент в XDTO

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

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

Анализируем причину возникновения ошибки

Первым делом проанализируем технический контекст. Ошибка возникает в общем модуле ОбменДаннымиXDTOСервер при вызове метода ОбъектXDTO.Проверить(). Система выполняет валидацию данных перед их отправкой в файл обмена. Если данные в информационной базе не соответствуют жестким правилам XML-схемы (XSD), выгрузка останавливается.

Проблема кроется в переходе на формат EnterpriseData версии 1.17 и выше. Также сложности могут возникнуть в процессе обновления, когда требуется выравнивание остатков после обновления УТ 11.4 на 11.5. В этой версии для ряда объектов, связанных с электронным документооборотом (ЭДО), свойство Контрагент в блоке КлючевыеСвойства стало обязательным. Если в регистре сведений СостоянияПоОбъектамУчетаЭДО существует запись, которая ссылается на документ (например, ПоступлениеТоваровУслуг) с незаполненным контрагентом или на удаленный объект ("Объект не найден"), схема XDTO выдает критическую ошибку.

Рассмотрим основные ситуации, провоцирующие сбой:

  1. Битые ссылки в регистрах: В регистре сведений Состояния по объектам учета ЭДО остались записи, указывающие на удаленные документы.
  2. Ошибки загрузки ЭДО: При получении входящего электронного документа запись в регистре создается до того, как пользователь сформирует учетный документ "Поступление" и заполнит в нем поставщика.
  3. Дублирование объектов: Наличие документов-дублей, один из которых помечен на удаление и не имеет заполненных реквизитов, но зарегистрирован к обмену.

Способ 1. Диагностика и поиск проблемных данных через запрос

Выясним, на каком именно объекте спотыкается синхронизация. Для этого мы можем воспользоваться консолью запросов. Нам необходимо проверить состояние регистра СостоянияПоОбъектамУчетаЭДО в связке с документами-основаниями. Рассмотрим пример запроса, который поможет найти записи с пустым контрагентом:


ВЫБРАТЬ
    СостоянияЭДО.ОбъектУчета КАК Объект,
    СостоянияЭДО.СостояниеЭДО
ИЗ
    РегистрСведений.СостоянияПоОбъектамУчетаЭДО КАК СостоянияЭДО
ГДЕ
    (ВЫРАЗИТЬ(СостоянияЭДО.ОбъектУчета КАК Документ.ПоступлениеТоваровУслуг)).Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
    ИЛИ СостоянияЭДО.ОбъектУчета.Ссылка ЕСТЬ NULL

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

Способ 2. Отмена регистрации объектов к обмену

Разберем самый быстрый способ возобновить работу синхронизации — удаление регистраций проблемных объектов. Это временная мера, которая позволит выгрузить остальные данные.

  1. Перейдем в раздел Администрирование — Синхронизация данных.
  2. Откроем Состав отправляемых данных для нужного узла обмена.
  3. Найдем в списке Регистр сведений набор записей: Состояния по объектам учета ЭДО.
  4. Нажмем правой кнопкой мыши и выберем Отменить регистрацию всех объектов данного типа (или выберите конкретные "битые" записи через отбор).

После очистки регистрации попробуйте запустить синхронизацию снова. Как правило, после удаления этих записей обмен проходит успешно.

Способ 3. Автоматическая очистка и исправление базы

Проанализируем ситуацию, когда ручная очистка не помогает или записей слишком много. В этом случае стоит прибегнуть к стандартным средствам обслуживания 1С. Выполним следующие шаги:

  1. Запустите базу в режиме Конфигуратор.
  2. Сделайте резервную копию (обязательно!).
  3. Выберите пункт меню Администрирование — Тестирование и исправление.
  4. Установите флажки Проверка логической целостности и Проверка ссылочной целостности.
  5. В поле "При наличии ссылок на несуществующие объекты" выберите Очищать объекты.

Это позволит системе автоматически удалить записи из регистра СостоянияПоОбъектамУчетаЭДО, которые ссылаются на "Объект не найден".

Способ 4. Программное решение через расширение (для разработчиков)

Если проблема повторяется регулярно из-за специфики работы с ЭДО в вашей конфигурации, мы можем внедрить "заглушку" в процесс формирования XDTO. Рассмотрим пример логики, которую можно разместить в расширении для подавления ошибки валидации:


&После("ПроверитьОбъектXDTOПоСхеме")
Процедура Ист_ПроверитьОбъектXDTOПоСхеме(ОбъектXDTO, ТипXDTO, Контекст, ОшибкаПроверки)
    // Если ошибка вызвана отсутствием контрагента в специфическом типе данных ЭДО
    Если Найти(ТипXDTO.Имя, "КлючевыеСвойстваПоступлениеТоваровУслуг") > 0 Тогда
        Если ОбъектXDTO.Контрагент = Неопределено Тогда
             // Здесь можно принудительно инициализировать свойство, 
             // чтобы пройти валидацию схемы
             // ОбъектXDTO.Контрагент = ...
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Важно помнить, что использование Расширений для изменения логики обмена требует глубокого понимания структуры метаданных EnterpriseData. Рекомендуется использовать этот метод только в том случае, если обновление конфигурации до последнего релиза не исправило ошибку (в новых патчах 1С разработчики обычно добавляют проверки на заполненность данных перед выгрузкой).

Резюме

Подводя итоги, отметим, что ошибка "Отсутствует обязательное свойство Контрагент" — это следствие ужесточения контроля целостности данных в современных протоколах обмена. Наиболее эффективным решением остается контроль чистоты регистра состояний ЭДО и своевременное удаление регистраций объектов, которые по каким-то причинам не имеют владельца или контрагента.

← На главную