Ошибка синхронизации УТ 11 и БП 3.0: «Контрагент - не заполнено обязательное поле» в Расшифровке доп. расходов

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

При настройке или регулярном выполнении синхронизации между конфигурациями «1С:Управление торговлей» (редакция 11) и «1С:Бухгалтерия предприятия» (редакция 3.0) пользователи и администраторы часто сталкиваются с аппаратными сбоями конвертации данных. Один из наиболее запутанных сбоев — ошибка проверки XDTO-пакета при отправке документов поступления, в которой фигурирует незаполненное обязательное поле Контрагент.

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

Почему документа «ПоступлениеТоваровУслуг» нет в конфигураторе УТ 11?

Первое, с чем сталкивается специалист при анализе логов журнала регистрации — это упоминание объекта Документ.ПоступлениеТоваровУслуг. При попытке найти этот документ в дереве метаданных конфигурации «Управление торговлей» через поиск конфигуратора, система выдает пустой результат. Возникает логичный вопрос: как программа пытается выгрузить то, чего физически не существует в базе данных?

Рассмотрим этот механизм подробнее. Современный обмен между конфигурациями 1С строится на базе технологии EnterpriseData (универсальный формат обмена данными). Этот формат представляет собой стандартизированную схему XML (XDTO-пакет), которая служит «переводчиком» между различными информационными базами. Архитектура обмена выглядит следующим образом: при необходимости полностью автоматизировать эти процессы можно настроить регулярный автоматический обмен между базами 1С по расписанию.

  1. База-источник (УТ 11) преобразует свои внутренние документы в объекты универсального формата XML. В терминологии УТ 11 документ закупки называется ПриобретениеТоваровУслуг. Однако в формате EnterpriseData он транслируется в универсальное имя — Документ.ПоступлениеТоваровУслуг.
  2. Промежуточный файл XML содержит строго структурированные данные, описанные XDTO-схемой.
  3. База-приемник (БП 3.0) читает XML-файл и конвертирует универсальный объект Документ.ПоступлениеТоваровУслуг в свой внутренний документ, который в бухгалтерии называется ПоступлениеТоваровУслуг (в интерфейсе — «Поступление (акты, накладные, УПД)»).

Таким образом, ошибка возникает на этапе **отправки** (конвертации в промежуточный формат XDTO внутри базы УТ). Система пытается заполнить свойства универсальной схемы, но натыкается на пустое обязательное поле.

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

Проанализируем детальный лог ошибки из журнала регистрации:

Не удалось выполнить конвертацию в объект формата "Документ.ПоступлениеТоваровУслуг": Документ.ПоступлениеТоваровУслуг -> РасшифровкаДопРасходов -> Строка[1] -> ДокументПоступления -> ПоступлениеТоваровУслугСсылка -> Контрагент - не заполнено обязательное поле.

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

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

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

Способ 1. Поиск и исправление некорректных данных в пользовательском режиме

Самый быстрый и безопасный способ решить проблему без программирования — провести аудит первичных документов. Выясним причину незаполненного поля по шагам:

  1. Перейдем в базу УТ 11 и найдем документ, указанный в ошибке. В нашем примере это документ Приобретение товаров и услуг УТ00-000008 от 11.02.2019. Для быстрого перехода можно воспользоваться поиском по номеру или навигационной ссылкой вида e1cib/data/Документ.ПриобретениеТоваровУслуг?ref=....
  2. Откроем документ и перейдем на вкладку «Расшифровка расходов» (или проверим связанные строки в табличной части «Товары», если расходы распределяются непосредственно в позициях номенклатуры).
  3. Проанализируем колонку «Документ-основание» (или «Документ партии»). В ней должна быть указана ссылка на другое поступление, на которое относятся дополнительные затраты.
  4. Откроем этот связанный документ-основание. Проверим заполнение реквизитов Поставщик и Контрагент. Если эти поля пусты (например, при оформлении внутреннего перемещения или при техническом сбое ввода данных), система не сможет передать их в файл обмена.
  5. Заполним недостающие реквизиты в документе-основании, перепроведем оба документа и повторим сеанс синхронизации данных.

Способ 2. Ручная регистрация связанных документов к обмену

Иногда ошибка возникает из-за того, что документ-основание физически существует и заполнен в УТ, но база-приемник еще «не знает» о нем, поскольку он не зарегистрирован к отправке в текущем сеансе обмена. Разберем, как исправить это вручную:

  1. В главном меню УТ перейдем в раздел Администрирование -> Синхронизация данных.
  2. Откроем Настройки синхронизации данных и выберем нашу настройку обмена с Бухгалтерией.
  3. Нажмем на кнопку «Состав отправляемых данных» (иконка с изображением монитора и карандаша).
  4. В появившемся дереве объектов найдем ветку Документы -> Приобретение товаров и услуг.
  5. Выполним поиск нашего документа-основания и принудительно зарегистрируем его к обмену, нажав кнопку Зарегистрировать одиночный объект. Это гарантирует, что все связанные сущности попадут в выгружаемый пакет данных вместе с документом дополнительных расходов.

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

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

Выясним причину сбоя в кодовой базе. Все правила конвертации для универсального формата описаны в общем модуле МенеджерОбменаЧерезУниверсальныйФормат. Нам необходимо доработать процедуру, отвечающую за заполнение табличной части дополнительных расходов.

Создадим расширение конфигурации, добавим в него общий модуль МенеджерОбменаЧерезУниверсальныйФормат и переопределим обработчик выгрузки свойств для ссылочных документов. Напишем код, который будет автоматически подставлять технического (пустого или предопределенного) контрагента, если реальный контрагент у документа-основания отсутствует.

Рассмотрим пример кода адаптации обработчика:


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

Этот код предотвращает аварийное завершение обмена. База-приемник успешно загрузит файл, после чего бухгалтер сможет вручную перенаправить распределение расходов в учете БП. Для последующей проверки правильности отражения документов и контроля расхождений в учете после завершения обмена запускают автоматическую сверку проводок между базами 1С.

Способ 4. Обновление конфигурации и установка патчей

Поскольку версии конфигураций УТ 11.4.7.128 и БП 3.0.69.32 относятся к релизам 2019 года, описанная проблема могла быть вызвана зарегистрированной ошибкой платформенных правил обмена. В последующих релизах разработчики фирмы «1С» скорректировали схемы XDTO и логику выгрузки сопутствующих затрат.

Рекомендуется выполнить следующие действия:

  1. Зайти на официальный портал поддержки пользователей «1С:Обновление программ».
  2. Проверить раздел актуальных исправлений (патчей) для релиза УТ 11.4.7.128.
  3. Если патч, исправляющий ошибку выгрузки дополнительных расходов EnterpriseData, найден, установите его через администрирование базы без изменения типовой конфигурации.
  4. Если патчи отсутствуют, запланируйте последовательное обновление конфигураций УТ и БП до поддерживаемых и стабильных версий. Чтобы обезопасить данные и сэкономить время, перед началом работы настраивают автоматическое обновление баз 1С в фоновом режиме.
← На главную