Синхронизация данных между конфигурациями «1С:Управление торговлей» (УТ) и «1С:Бухгалтерия предприятия» (БП) — это процесс, который часто преподносит сюрпризы после обновлений. Одной из самых распространенных проблем является ошибка проверки данных XDTO. Она возникает в момент, когда система пытается сформировать XML-пакет для отправки, но обнаруживает, что данные конкретного объекта не соответствуют жестким требованиям схемы обмена.
В этой статье мы подробно разберем ситуацию, когда при обмене выпадает ошибка в журнале регистрации, указывающая на модуль ОбменДаннымиXDTOСервер и отсутствие обязательного свойства, такого как ЕдиницаИзмерения или СтавкаНДС. Мы вместе пройдем по шагам от локализации проблемы до её полного устранения.
Первым делом проанализируем типичное сообщение об ошибке, которое фиксируется в журнале регистрации. Чаще всего оно выглядит следующим образом:
Событие: Отправка.
ПОД: Справочник_Номенклатура_Отправка.
ПКО: Справочник_Номенклатура_Отправка.
Объект: Справочник объект: Номенклатура, Инженерное обслуживание.
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(572)}: Ошибка при вызове метода контекста (Проверить)
ОбъектXDTO.Проверить; по причине: Ошибка проверки данных XDTO:
Структура объекта не соответствует типу. Не установлено значение одного из следующих свойств: ЕдиницаИзмерения
Разберем, что это значит. Метод Проверить сравнивает данные 1С с описанием типа в XDTO-пакете. Если в схеме обмена (EnterpriseData) поле помечено как обязательное (минимальное количество вхождений — 1), а в базе данных 1С это поле не заполнено, система прерывает выгрузку всего пакета. Важно понимать: даже одна некорректная позиция номенклатуры может заблокировать передачу сотен документов.
Рассмотрим ситуацию на примере позиции «Инженерное обслуживание». Несмотря на то что это может быть услуга, правила формата EnterpriseData требуют наличия базовой единицы измерения для любого элемента справочника Номенклатура.
Выясним причину отсутствия данных:
Важный нюанс: Иногда ошибка указывает на свойство СтавкаНДС. В «Бухгалтерии предприятия» требования к ставкам налога гораздо строже. Если в УТ указана специфическая ставка или значение не выбрано вовсе, XDTO-пакет не пройдет валидацию. Убедитесь, что ставка НДС соответствует актуальным значениям из перечисления.
Проанализируем ситуацию, когда по одной организации обмен проходит успешно, а по другой — возникает ошибка. Это происходит из-за механизма регистрации изменений на планах обмена.
В 1С данные не выгружаются целиком при каждом сеансе. Система отправляет только те объекты, которые были изменены или использованы в документах с момента последнего успешного обмена. Если номенклатура «Инженерное обслуживание» была выбрана в счете или реализации по Организации №1, она попадает в таблицу регистрации изменений. Если по Организации №2 движений с этой номенклатурой не было, система даже не пытается её выгружать, и ошибка не проявляется.
Чтобы увидеть полную картину, воспользуемся стандартным инструментом:
Номенклатура.Выясним, почему ошибка могла появиться внезапно, если «раньше всё работало». Основная причина — обновление одной из конфигураций (УТ или БП) без обновления правил обмена.
С каждым релизом формат EnterpriseData (например, переход с версии 1.3 на 1.15) может менять требования к обязательности полей. Рассмотрим алгоритм действий при несоответствии правил:
EnterpriseDataConversion.zip, который находится в папке шаблонов обновления вашей конфигурации (обычно путь вида .../tmplts/1c/trade/11_x_x_x/Синхронизация данных/...).Если визуально данные в порядке, а ошибка сохраняется, программисту стоит проверить, как данные преобразуются в модуле ОбменДаннымиXDTOСервер. Рассмотрим пример того, как система подготавливает значение для передачи:
// Пример логики в общем модуле
ЗначениеСвойства = ДанныеОбъекта.ЕдиницаИзмерения;
Если НЕ ЗначениеЗаполнено(ЗначениеСвойства) Тогда
// Если поле обязательно в XDTO, метод Проверить() вызовет исключение
ОбъектXDTO.СтавкаНДС = Справочники.СтавкиНДС.ПустаяСсылка();
КонецЕсли;
Проанализируем поведение системы: если в правилах обработки (ПОД/ПКО) прописано жесткое соответствие, а в исходных данных пустота, процедура ЗаписатьОбъектXDTO сформирует невалидный XML. В таких случаях помогает использование обработки «Универсальный обмен данными в формате XML» в режиме отладки, чтобы поймать конкретный объект в момент выгрузки.
Подведем итоги и составим план действий для быстрого восстановления обмена:
Единица измерения и Ставка НДС. Помните, что для услуг единица измерения также обязательна для бухгалтерского учета.Соблюдение этих правил позволит вам не только решить текущую проблему с «Инженерным обслуживанием», но и предотвратить возникновение подобных ошибок XDTO при дальнейшей эксплуатации систем 1С:Предприятие 8.3.