Как исправить ошибку XDTO "Отсутствует обязательное свойство ТипНоменклатуры" при обмене УНФ 1.6 — БП 3.0

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

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

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

1. Техническая суть проблемы (анализ XDTO-схемы)

Давайте проанализируем фрагмент стека ошибки, который возникает в процессе обмена:


Ошибка проверки данных XDTO: Структура объекта '/ВидНоменклатуры' не соответствует типу: { Проверка свойства 'ТипНоменклатуры': форма: Элемент имя: { тип: { Отсутствует обязательное свойство

Что это означает на практике? Обмен данными между современными конфигурациями 1С выполняется посредством универсального формата обмена (EnterpriseData), основанного на XML/XDTO-пакетах. При выгрузке данных платформа преобразует объекты базы данных (в нашем случае номенклатуру и её категории) в формат XDTO по строго определенным правилам (XSD-схемам).

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

2. Почему ошибка появилась только после обновления?

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

  1. Повышение версии формата EnterpriseData. В новых релизах конфигураций разработчики 1С повышают поддерживаемую версию формата обмена (например, переход с версии 1.15 на 1.16). Требования к валидности передаваемых данных внутри новых схем становятся более жесткими для исключения хаоса со счетами учета в принимающей бухгалтерии.
  2. Усиление контроля со стороны платформы. Новые версии платформы 1С:Предприятие 8.3 строже контролируют соответствие выгружаемых объектов XDTO-схемам. Если раньше система могла проигнорировать пустую ноду или подставить значение по умолчанию в процессе разбора файла, то теперь транзакция обмена аварийно завершается на этапе формирования файла отправки.

3. Поиск проблемных категорий в базе данных

Для того чтобы исправить ошибку, нам необходимо локализовать те самые «Категории номенклатуры», у которых не заполнено поле типа. Рассмотрим несколько удобных способов диагностики.

Способ А. Использование консоли запросов (для администраторов и программистов)

Если у вас есть доступ к функциям для технического специалиста, мы можем быстро написать простой запрос, который выведет список всех проблемных категорий номенклатуры:


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

Этот запрос мгновенно покажет элементы, из-за которых падает весь обмен данными.

Способ Б. Ручной анализ через справочник

Рассмотрим вариант ручной проверки через стандартный интерфейс программы:

  1. Перейдем в раздел Компания или Продажи, найдем и откроем справочник Категории номенклатуры (в некоторых интерфейсах он доступен через настройки параметров учета или карточку номенклатуры).
  2. Поочередно откроем каждую категорию.
  3. Обратим особое внимание на реквизит Тип номенклатуры (или «Тип номенклатуры по умолчанию»). Часто визуально поле кажется заполненным (например, написано "Запас"), но на уровне базы данных значение может быть битым или очищенным. Попробуем перевыбрать его вручную.
  4. Обязательно проверим скрытые, технические или автоматически созданные категории (такие как "Без категории", "По умолчанию" и т.д.). Даже если вы не привязываете к ним реальные товары, эти системные записи могут быть зарегистрированы к обмену и вызывать сбой.

4. Массовое исправление проблемы

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

Вариант 1. Использование обработки "Групповое изменение реквизитов"

Это самый безопасный и простой способ массового исправления реквизитов непосредственно в пользовательском режиме:

  1. Перейдем в раздел Настройки — Обслуживание — Корректировка данных и откроем обработку Групповое изменение реквизитов.
  2. В поле "Изменять:" выберем объект Категории номенклатуры.
  3. Нажмем "Добавить условие отбора" и настроим правило: Тип номенклатуры по умолчанию — Не заполнено.
  4. В табличной части доступных для изменения реквизитов найдем строчку Тип номенклатуры по умолчанию (или аналогичное системное имя реквизита типа), установим флажок и выберем значение по умолчанию (например, Запас или Товар).
  5. Нажмем кнопку Изменить реквизиты. Система автоматически обновит все некорректные элементы.

Вариант 2. Программное заполнение (для разработчиков)

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


Выборка = Справочники.КатегорииНоменклатуры.Выбрать();
Пока Выборка.Следующий() Цикл
    Если Не ЗначениеЗаполнено(Выборка.ТипНоменклатурыПоУмолчанию) Тогда
        ОбъектКатегории = Выборка.ПолучитьОбъект();
        // Устанавливаем тип по умолчанию, например "Запас"
        ОбъектКатегории.ТипНоменклатурыПоУмолчанию = Перечисления.ТипыНоменклатуры.Запас;
        Попытка
            ОбъектКатегории.Записать();
            Сообщить("Успешно заполнен тип для категории: " + ОбъектКатегории.Наименование);
        Исключение
            Сообщить("Ошибка записи категории: " + ОписаниеОшибки(), СтатусСообщения.Важное);
        КонецПопытки;
    КонецЕсли;
КонецЦикла;

5. Очистка регистрации изменений и повторный запуск обмена

Даже после успешного исправления всех категорий в базе, первая попытка синхронизации может снова завершиться с ошибкой. Это связано с тем, что в плане обмена уже зарегистрированы «старые» версии объектов для отправки.

Давайте разберем по шагам, как актуализировать регистрацию данных:

  1. Откроем параметры синхронизации данных и перейдем в форму Состав отправляемых данных (зарегистрированные изменения).
  2. Найдем в списке узел Справочник.КатегорииНоменклатуры (или Виды номенклатуры).
  3. Проанализируем зарегистрированные к отправке объекты. Чтобы гарантировать передачу корректных данных, мы можем нажать правой кнопкой мыши по разделу категорий и выбрать пункт Зарегистрировать изменения всех объектов этого типа. Это принудительно перезапишет очередь обмена актуальными данными, в которых реквизит ТипНоменклатуры уже гарантированно заполнен.
  4. Запустим повторный сеанс синхронизации. Обмен должен пройти без ошибок валидации XDTO.

Важное примечание для последующего учета: незаполнение типов номенклатуры чревато не только ошибками обмена. В базе-приемнике 1С:Бухгалтерия на основании вида номенклатуры автоматически определяются счета учета номенклатуры (например, 41.01 для товаров, 10.01 для материалов или 20.01 для услуг). Своевременный контроль заполнения категорий в 1С:УНФ убережет бухгалтерию от некорректных проводок и ручной работы с документами.

← На главную