Синхронизация данных между конфигурациями 1С:Управление нашей фирмой (УНФ) и 1С:Бухгалтерия предприятия (БП) — один из наиболее критичных бизнес-процессов в автоматизации учета. Любой сбой на этом этапе может привести к задержкам в формировании регламентированной отчетности и расхождениям в остатках. Очень часто после проведения очередного обновления баз пользователи сталкиваются с неприятной ошибкой выгрузки данных, которая полностью блокирует отправку информации.
В этой статье мы подробно разберем природу ошибки проверки данных XDTO, связанной со свойством ТипНоменклатуры, выясним причины её внезапного появления и рассмотрим практические способы её устранения как через пользовательский интерфейс, так и с помощью программных инструментов.
Давайте проанализируем фрагмент стека ошибки, который возникает в процессе обмена:
Ошибка проверки данных XDTO: Структура объекта '/ВидНоменклатуры' не соответствует типу: { Проверка свойства 'ТипНоменклатуры': форма: Элемент имя: { тип: { Отсутствует обязательное свойство
Что это означает на практике? Обмен данными между современными конфигурациями 1С выполняется посредством универсального формата обмена (EnterpriseData), основанного на XML/XDTO-пакетах. При выгрузке данных платформа преобразует объекты базы данных (в нашем случае номенклатуру и её категории) в формат XDTO по строго определенным правилам (XSD-схемам).
В 1С:УНФ отсутствует привычный для 1С:БП справочник ВидыНоменклатуры, вместо него используется справочник КатегорииНоменклатуры. При выгрузке категории сопоставляются с видами номенклатуры в базе-приемнике. Согласно XML-схеме формата EnterpriseData, для XML-элемента ВидНоменклатуры свойство ТипНоменклатуры (тип данных, определяющий, является ли позиция товаром, услугой, работой и т.д.) является строго обязательным. Если в 1С:УНФ у какой-то категории этот тип не заполнен, XDTO-сериализатор пытается передать пустое значение. Проверка схемы (метод Проверить()) определяет это как нарушение структуры пакета и прерывает выгрузку данных.
Многие пользователи отмечают, что до обновления конфигураций обмен работал стабильно, хотя данные в базе не менялись. Этому есть логичное техническое объяснение:
Для того чтобы исправить ошибку, нам необходимо локализовать те самые «Категории номенклатуры», у которых не заполнено поле типа. Рассмотрим несколько удобных способов диагностики.
Если у вас есть доступ к функциям для технического специалиста, мы можем быстро написать простой запрос, который выведет список всех проблемных категорий номенклатуры:
ВЫБРАТЬ
Категории.Ссылка КАК НекорректнаяКатегория,
Категории.ТипНоменклатурыПоУмолчанию КАК ТипНоменклатуры
ИЗ
Справочник.КатегорииНоменклатуры КАК Категории
ГДЕ
Категории.ТипНоменклатурыПоУмолчанию = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.ПустаяСсылка)
ИЛИ Категории.ТипНоменклатурыПоУмолчанию ЕСТЬ NULL
Этот запрос мгновенно покажет элементы, из-за которых падает весь обмен данными.
Рассмотрим вариант ручной проверки через стандартный интерфейс программы:
Если категорий с пустым типом оказалось слишком много, ручное исправление займет много времени. Проанализируем способы быстрого группового исправления данных.
Это самый безопасный и простой способ массового исправления реквизитов непосредственно в пользовательском режиме:
Категории номенклатуры.Тип номенклатуры по умолчанию — Не заполнено.Тип номенклатуры по умолчанию (или аналогичное системное имя реквизита типа), установим флажок и выберем значение по умолчанию (например, Запас или Товар).Если вам требуется выполнить операцию через внешнюю обработку или консоль кода, мы можем применить следующий алгоритм на встроенном языке 1С:
Выборка = Справочники.КатегорииНоменклатуры.Выбрать();
Пока Выборка.Следующий() Цикл
Если Не ЗначениеЗаполнено(Выборка.ТипНоменклатурыПоУмолчанию) Тогда
ОбъектКатегории = Выборка.ПолучитьОбъект();
// Устанавливаем тип по умолчанию, например "Запас"
ОбъектКатегории.ТипНоменклатурыПоУмолчанию = Перечисления.ТипыНоменклатуры.Запас;
Попытка
ОбъектКатегории.Записать();
Сообщить("Успешно заполнен тип для категории: " + ОбъектКатегории.Наименование);
Исключение
Сообщить("Ошибка записи категории: " + ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;
КонецЕсли;
КонецЦикла;
Даже после успешного исправления всех категорий в базе, первая попытка синхронизации может снова завершиться с ошибкой. Это связано с тем, что в плане обмена уже зарегистрированы «старые» версии объектов для отправки.
Давайте разберем по шагам, как актуализировать регистрацию данных:
Справочник.КатегорииНоменклатуры (или Виды номенклатуры).ТипНоменклатуры уже гарантированно заполнен.Важное примечание для последующего учета: незаполнение типов номенклатуры чревато не только ошибками обмена. В базе-приемнике 1С:Бухгалтерия на основании вида номенклатуры автоматически определяются счета учета номенклатуры (например, 41.01 для товаров, 10.01 для материалов или 20.01 для услуг). Своевременный контроль заполнения категорий в 1С:УНФ убережет бухгалтерию от некорректных проводок и ручной работы с документами.