Как исправить ошибки при обмене данными между УТ 11 и БП 3.0 через универсальный формат

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

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

Причина 1: Несоответствие версий формата (Поле объекта не обнаружено)

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

Рассмотрим пути решения:

  1. Синхронное обновление: Убедимся, что обе конфигурации обновлены до актуальных релизов. 1С выпускает обновления для УТ и БП парами, чтобы схемы обмена совпадали.
  2. Понижение версии формата: Если обновить вторую базу невозможно, перейдем в настройки синхронизации, выберем «Параметры подключения» и попробуем вручную установить более низкую версию состава данных (например, вместо 1.5 выбрать 1.3). Это заставит систему исключить новые поля из выгрузки.

Причина 2: Ошибка проверки данных XDTO (ДанныеНоменклатуры)

Разберем ситуацию, когда в журнале регистрации появляется сообщение: Ошибка проверки данных XDTO: Структура объекта '/Товары/Строка[1]' не соответствует типу... Не установлено значение одного из следующих свойств: ДанныеНоменклатуры. Это означает, что обязательный узел в XML-файле обмена пуст, хотя схема требует его заполнения.

Проанализируем основные причины этой проблемы на уровне данных:

  1. Пустые аналитики в Видах запасов: В УТ 11 данные для обмена часто берутся не напрямую из табличной части документа, а из регистра ВидыЗапасов. Если в документе была изменена номенклатура, а виды запасов не пересчитались, возникает "битая" ссылка.
  2. Проблемы с единицами измерения: Если у номенклатуры не заполнена единица хранения или она повреждена, свойство ДанныеНоменклатуры не сможет сформироваться корректно.
  3. Тип номенклатуры: Проверим, не затесалась ли в документ перемещения или сборки услуга. Универсальный формат в этих типах документов строго ожидает товарную позицию.

Методика исправления данных по Видам запасов

Если мы выяснили, что проблема в пустой аналитике номенклатуры (как описано в решении одного из пользователей), выполним следующие действия:

Для исправления воспользуемся встроенным механизмом 1С. В конфигурациях на базе УТ 11/ERP существует специальная обработка. Найдем её через «Функции для технического специалиста» (ранее «Все функции»), введя в поиске «Исправление ошибок в данных по видам запасов».

Посмотрим на алгоритм работы с обработкой:

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

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

Проанализируем пример кода, который исправляет неверное обращение к результату запроса:


// В расширении для процедуры ПКО_Документ_СборкаТоваров_ПриОтправкеДанных
Если ДанныеИБ.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СборкаТоваров Тогда
    // Если операция - сборка, используем первый индекс таблицы товаров
    НомерТаблТовары = 1;
Иначе 
    // Для разборки - второй
    НомерТаблТовары = 2;
КонецЕсли;

// Важно убедиться, что РезультатЗапроса содержит нужные данные
Если РезультатЗапроса.Количество() >= НомерТаблТовары Тогда
    ДанныеXDTO.Вставить("Товары", РезультатЗапроса[НомерТаблТовары].Выгрузить());
КонецЕсли;

Использование ДанныеXDTO.Вставить требует, чтобы структура передаваемой таблицы значений (ТЗ) полностью соответствовала именам свойств в XDTO-пакете. Если колонка будет называться Товар вместо Номенклатура, валидация XDTO не пройдет.

Особенности разработки в Конвертации данных 3.0

При написании собственных правил в КД 3.0 программисты часто сталкиваются с тем, что прямая выгрузка табличной части из ДанныеИБ (объекта документа) приводит к ошибкам. Выясним, почему выгрузка через запрос работает стабильнее.

Когда мы выгружаем данные запросом, мы можем явно типизировать колонки и гарантировать наличие всех необходимых полей для XDTO. Рассмотрим правильный подход в обработчике:


Процедура ПКО_Документ_ПеремещениеТоваров_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Т.Номенклатура КАК Номенклатура,
        |   Т.Количество КАК Количество,
        |   Т.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения
        |ИЗ
        |   Документ.ПеремещениеТоваров.Товары КАК Т
        |ГДЕ
        |   Т.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", ДанныеИБ.Ссылка);
    ТЗТовары = Запрос.Выполнить().Выгрузить();
    
    // Передаем подготовленную таблицу в структуру XDTO
    ДанныеXDTO.Вставить("Товары", ТЗТовары);
    
КонецПроцедуры;

Этот метод позволяет избежать передачи "сырых" данных объекта, в которых могут быть пустые или неопределенные значения, вызывающие сбой ОбъектXDTO.Проверить().

Общие рекомендации по диагностике

Если вышеуказанные способы не помогают, выполним следующие действия:

  1. Очистка кэша правил: В настройках синхронизации нажмите «Загрузить правила обмена». Выберите пункт «Из конфигурации». Это обновит внутренние схемы XDTO, которые могли закэшироваться с ошибкой после обновления.
  2. Тестирование и исправление: Запустите процедуру ТИИ (Тестирование и исправление) для базы УТ. Особое внимание уделите пункту «Проверка логической целостности» и «Пересчет итогов».
  3. Ручная проверка документа: Откройте проблемный документ (ссылка на который указана в ошибке), перевыберите в нем номенклатуру в "проблемной" строке (указана в индексе Строка[N]) и перепроведите его. Это принудительно обновит записи в регистрах сведений и накопления, участвующих в обмене.

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

← На главную