Как исправить ошибку «Отсутствует обязательное свойство» при выгрузке через EnterpriseData

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

При разработке собственных механизмов обмена данными на базе технологии EnterpriseData программисты часто сталкиваются с жесткой проверкой данных на соответствие схеме XDTO. Одной из самых распространенных и неприятных ошибок является сообщение: «Ошибка проверки данных XDTO: Структура объекта не соответствует типу... Отсутствует обязательное свойство». Особенно часто это происходит при попытке выгрузить табличные части документов. В этой статье мы подробно разберем, почему возникает эта проблема, как правильно описывать правила конвертации вручную и на какие настройки в пакете XDTO стоит обратить внимание.

Проанализируем причину возникновения ошибки

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

Разберем основные причины, по которым это происходит:

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

Шаг 1. Проверяем правила конвертации табличной части (ПКТЧ)

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


ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
ПравилоКонвертации.ИмяПКО = "Дмн_Документ_ЗаявкаНаЗакупку";
ПравилоКонвертации.ОбъектДанных = Метаданные.Документы.дмн_СлужебнаяЗапискаЗакупки;
ПравилоКонвертации.ОбъектФормата = "Документ.дмн_СлужебнаяЗапискаЗакупки";

СвойстваШапки = ПравилоКонвертации.Свойства;
// Добавление свойств шапки...
ДобавитьПКС(СвойстваШапки, "Номер", "Номер");

// Ошибка часто кроется здесь:
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "Проекты"); 
ДобавитьПКС(СвойстваТЧ, "", "Проект", , "Справочник_УУ_Проекты_Отправка_Закупки");
ДобавитьПКС(СвойстваТЧ, "", "Сумма", , );

Выясним причину ошибки в данном фрагменте. Обратите внимание на функцию ДобавитьПКТЧ(ПравилоКонвертации, "", "Проекты"). Второй параметр — это имя источника (имя табличной части в метаданных 1С). Если передать туда пустую строку "", движок обмена не будет знать, из какой таблицы брать данные. В результате таблица в XML не попадет, и мы получим ошибку «Отсутствует обязательное свойство», так как валидатор ожидает узел Проекты.

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


// Правильное описание ТЧ
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "ТабличнаяЧастьПроекты", "Проекты");

Шаг 2. Настройка алгоритмов конвертации

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

Если источник (второй параметр) пустой, система ожидает, что данные будут подложены в структуру в обработчике ПередВыгрузкой. По умолчанию этот параметр может принимать значение 0 (Ложь) или 1 (Истина). Если вы программно заполняете колонку, установите значение 1. Однако помните: если данных нет совсем, таблица все равно может не выгрузиться.

Шаг 3. Корректировка пакета XDTO

Проанализируем технические настройки самого пакета XDTO в конфигураторе. Это фундамент, на котором строится весь обмен EnterpriseData. Чтобы избежать ошибки при пустых данных, необходимо правильно настроить Bounds (Границы).

Откройте ваш пакет XDTO и найдите нужное свойство (вашу табличную часть):

Шаг 4. Решение проблемы «Исчезновения таблицы»

Иногда после исправления ошибки обязательности программист сталкивается с другой проблемой: ошибка пропадает, но таблица просто перестает выгружаться в XML. Это происходит потому, что движок EnterpriseData считает: «Раз данных нет и свойство не обязательное — я просто не буду создавать этот узел».

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

  1. Проверим соответствие типов. Если в ПКС указано правило конвертации (ПКО) для значения колонки (например, ссылка на справочник Проекты), убедитесь, что это ПКО инициализировано и работает корректно.
  2. Используйте отладчик в модуле ОбменДаннымиXDTOСервер. Точка остановки в методе, где происходит обход табличных частей, поможет увидеть, видит ли система строки вашей таблицы.
  3. Проверьте регистр символов. XDTO-пакеты крайне чувствительны к регистру. Проекты и проекты — это разные объекты для валидатора.

Итоговые рекомендации

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

  1. Всегда проверяйте, что в ДобавитьПКТЧ указан верный источник данных из метаданных.
  2. Если таблица может быть пустой, в схеме XDTO для этого свойства обязательно ставьте Минимальное количество = 0.
  3. Если вы используете «Конвертацию данных 3.0», старайтесь генерировать модуль менеджера через нее — это минимизирует количество опечаток в именах свойств.
  4. При программном формировании данных в обработчике ПередВыгрузкой, убедитесь, что структура Данные содержит ключ с именем вашей табличной части, и этот ключ содержит массив структур или таблицу значений.

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

← На главную