Как исправить ошибку «Структура объекта /Контрагент не соответствует типу» при обмене УТ 11.2 и БП 3.0 через универсальный формат

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

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

Выясним причину ошибки валидации XDTO

Когда мы выполняем обмен через универсальный формат, данные сначала выгружаются во временный XML-файл, структура которого должна строго соответствовать XDTO-пакету EnterpriseData. В отличие от старых правил обмена (на базе КД 2.0), универсальный формат крайне чувствителен к заполнению обязательных реквизитов. Если в схеме указано, что поле должно быть заполнено, а в базе данных 1С оно пустое или содержит некорректный тип, выгрузка прервется ошибкой.

Рассмотрим типичную ситуацию: выгрузка контрагента. Ошибка часто указывает на свойство ЮридическоеФизическоеЛицо. Основная сложность заключается в том, что в интерфейсе программы поле может выглядеть заполненным, но на уровне базы данных значение может отсутствовать или ссылаться на битый элемент перечисления.

Шаг 1. Диагностика проблемных объектов с помощью запроса

Прежде чем что-то исправлять, нам нужно точно определить, какие именно записи справочника Контрагенты вызывают сбой. Проанализируем ситуацию с помощью консоли запросов или специально написанной обработки. Нам важно проверить не только само значение, но и его тип.

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Контрагенты.Ссылка КАК Ссылка,
    |	Контрагенты.Код КАК Код,
    |	Контрагенты.ЮридическоеФизическоеЛицо КАК ЮридическоеФизическоеЛицо,
    |	ТИПЗНАЧЕНИЯ(Контрагенты.ЮридическоеФизическоеЛицо) КАК ТипРеквизита
    |ИЗ
    |	Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |	Контрагенты.ЭтоГруппа = ЛОЖЬ
    |	И (Контрагенты.ЮридическоеФизическоеЛицо = ЗНАЧЕНИЕ(Перечисление.ЮридическоеФизическоеЛицо.ПустаяСсылка)
    |		ИЛИ Контрагенты.ЮридическоеФизическоеЛицо ЕСТЬ NULL)";

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл
    Сообщить("Для контрагента: " + Выборка.Код + " " + Выборка.Ссылка + " не заполнено Юр/Физ лицо!");
КонецЦикла;

Важный нюанс: в некоторых версиях конфигураций после обновлений реквизит мог быть переименован (например, в УдалитьЮридическоеФизическоеЛицо), а вместо него добавлен новый. Если данные переносились программно, новый реквизит мог остаться пустым, что и вызывает ошибку при попытке выгрузки через EnterpriseData.

Шаг 2. Массовое исправление данных

Если проблемных объектов много, мы можем воспользоваться стандартным механизмом «Групповое изменение реквизитов» (находится в разделе НСИ и Администрирование — Обслуживание — Корректировка данных).

  1. Выберем объект Контрагенты.
  2. Добавим отбор по тем элементам, у которых ЮридическоеФизическоеЛицо не заполнено.
  3. Установим верное значение (например, "Юридическое лицо").
  4. Выполним изменение.

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

Шаг 3. Решение проблемы с «копеечными» суммами и ставками НДС

Часто при обмене УТ 11.2 и БП 3.0 возникает ошибка соответствия типа в табличных частях документов (например, РасшифровкаПлатежа). Система может ругаться на свойство СтавкаНДС или Сумма. Это случается, если в документе есть строки с нулевыми суммами или суммами меньше рубля (например, 0.13 коп.), которые XDTO-валидатор считает недопустимыми для данной схемы.

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

  1. Создадим внешнюю обработку и назовем ее МенеджерОбменаНовый.
  2. Скопируем в модуль объекта этой обработки содержимое общего модуля МенеджерОбменаЧерезУниверсальныйФормат.
  3. Найдем процедуру, отвечающую за выгрузку нужного документа (например, ПКО_Документ_ПоступлениеБезналичныхДенежныхСредств_Отправка_ПриОтправкеДанных).
  4. Внесем корректировку, которая будет игнорировать строки с нулевой суммой или округлять их.
  5. В настройках синхронизации данных (раздел «Служебная информация») укажем путь к нашей внешней обработке в поле «Менеджер обмена».

Шаг 4. Отладка через точку останова

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

  1. Откроем конфигуратор и найдем общий модуль ОбменДаннымиXDTOСервер.
  2. Найдем метод Проверить() (обычно это вызов ОбъектXDTO.Проверить()).
  3. Установим точку останова на строке с этим вызовом.
  4. В момент остановки в окне «Вычислить выражение» посмотрим содержимое переменной ОбъектXDTO. Метод Проверить() не возвращает подробностей в пользовательский интерфейс, но при пошаговой отладке можно увидеть, на каком именно свойстве спотыкается валидатор.

Используйте следующий прием для вывода подробностей в журнал регистрации:


Попытка
    ОбъектXDTO.Проверить();
Исключение
    ЗаписьЖурналаРегистрации("ОбменДаннымиXDTO", УровеньЖурналаРегистрации.Ошибка, , , 
        "Ошибка валидации объекта: " + Строка(ДанныеИБ.Ссылка) + Символы.ПС + ОписаниеОшибки());
    ВызватьИсключение;
КонецПопытки;

Резюме и практические советы

Мы проанализировали основные причины сбоев при выгрузке из УТ 11.2 в БП 3.0. Подведем итоги:

Помните, что универсальный формат требует гораздо более высокого качества ведения НСИ, чем старые обмены по правилам конвертации. Регулярный аудит справочников поможет избежать подобных проблем в будущем.

← На главную