Как исправить ошибки синхронизации данных в УТ 11.5.21 при выгрузке поступлений от хранителей?

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

При переходе на новые релизы конфигурации 1С:Управление торговлей 11.5.21.x многие пользователи и разработчики столкнулись с критической проблемой при попытке синхронизации данных с 1С:Бухгалтерией предприятия. Ошибка проявляется при выгрузке документа ПоступлениеТоваровОтХранителя. Несмотря на то что документ в исходной базе заполнен корректно, механизм обмена выдает сообщения о незаполненных обязательных полях (Ставка НДС, Вид ставки, Валюта, Вид операции), что блокирует передачу данных.

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

Причина возникновения ошибки: конфликт метаданных и схемы XDTO

Давайте проанализируем ситуацию. В релизе 11.5.21.111 разработчики обновили используемые форматы обмена EnterpriseData до версий 1.16 и 1.17. В этих версиях схемы XDTO стали более жесткими в плане контроля целостности данных. Если раньше некоторые поля могли быть опущены, то теперь они стали обязательными для заполнения (minOccurs="1").

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

Вариант 1: Временное решение через понижение версии формата

Если нам необходимо восстановить работоспособность обмена немедленно и нет возможности оперативно вносить правки в код, рассмотрим вариант с изменением настроек синхронизации. Проанализируем настройки подключения в обеих базах (УТ и БП):

  1. Перейдем в раздел Администрирование — Синхронизация данных — Настройки синхронизации.
  2. Откроем параметры нашего узла обмена.
  3. В настройках формата обмена попробуем установить версию 1.15.

В версии 1.15 требования к полям НДС для документов перемещения и поступления от хранителя менее строгие. Это часто позволяет обойти ошибку проверки XDTO без изменения программного кода.

Вариант 2: Исправление через расширение конфигурации (Программный метод)

Для системного решения проблемы нам потребуется вмешаться в работу модуля менеджера обмена. Разберем по шагам, какие процедуры нуждаются в корректировке. Основное внимание уделим процедуре ПКО_Документ_ПоступлениеТоваровОтХранителяВПеремещениеТоваров_Отправка_ПриОтправкеДанных.

Выясним причину ошибки по валюте и виду операции. Как правило, она возникает из-за того, что в ДанныеXDTO не передается структура ВидОперации, которую ожидает принимающая сторона для корректного отражения на счетах учета.

Рассмотрим пример кода, который необходимо модифицировать в расширении. Нам нужно принудительно заполнить структуру НДС для каждой строки выгружаемых товаров, даже если в исходном документе НДС не предусмотрен. Посмотрим на фрагмент кода в процедуре ПриОтправкеДанных:


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

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

КонецПроцедуры

Обратите внимание, что использование СтрокаТовара.Вставить позволяет динамически расширить структуру XDTO перед ее сериализацией в XML. Это критически важно, так как стандартная обработка ЗаполнитьСобственныеТоварыВТексте из типового кода не знает о необходимости этих полей для данного типа документа.

Разбор типовой ошибки с "Направлением: Отправка"

Если в журнале регистрации мы видим ошибку "ПОД: Документ_ПоступлениеТоваровОтХранителя. ПКО: Документ_ВозвратОтКомиссионера_Отправка", это сигнализирует о неверном выборе правила обработки данных. Система пытается применить логику возврата от комиссионера к поступлению от хранителя.

Выясним причину в процедуре ПОД_Документ_ПоступлениеТоваровОтХранителя_Отправка_ПриОбработке. Нам нужно четко сопоставить хозяйственную операцию документа и ПКО. Рассмотрим пример правильной настройки:


Процедура ПОД_Документ_ПоступлениеТоваровОтХранителя_Отправка_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена)
    ИспользованиеПКО.Очистить();
    
    // Явно указываем правило конвертации для перемещения
    ИспользованиеПКО.Вставить("Документ_ПоступлениеТоваровОтХранителяВПеремещениеТоваров_Отправка", Истина);
    
    // Если документ должен уходить как возврат, добавляем условие:
    // ИспользованиеПКО.Вставить("Документ_ВозвратОтКомиссионера_Отправка", Ложь); 
КонецПроцедуры

Такая жесткая установка ПКО гарантирует, что документ не "свалится" в ошибочное правило конвертации, где ожидаются совсем другие реквизиты (например, данные о комиссионном вознаграждении).

Рекомендации по использованию патчей

Поскольку проблема носит массовый характер в релизе 11.5.21.111, фирма "1С" регулярно выпускает оперативные исправления (патчи). Рекомендуем проверить наличие установленных патчей в разделе Обслуживание — Обновление программы — Установленные исправления. Ищите патчи с описанием "Ошибка синхронизации данных EnterpriseData" или по номеру ошибки EF_0016xxxx.

Важный момент: если вы используете расширение для исправления этой ошибки, обязательно отключите его после обновления на следующий релиз (например, 11.5.22), так как разработчики могут изменить структуру объектов ПКО, и ваше расширение может вызвать конфликт имен процедур.

Заключение

Мы рассмотрели сложную техническую проблему, связанную с эволюцией формата EnterpriseData. Подведем итог: ошибки возникают из-за разрыва между требованиями XDTO-схемы и фактическим составом реквизитов документа ПоступлениеТоваровОтХранителя. Самым надежным способом решения остается программное дополнение структуры ДанныеXDTO значениями по умолчанию для НДС и вида операции в расширении конфигурации.

← На главную