Как исправить ошибку обмена между УТ 11.2 и БП 3.0 при добавлении ставки НДС 20%

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

При работе со старыми или сильно модифицированными конфигурациями, такими как 1С:Управление торговлей 11.2, пользователи часто сталкиваются с техническими сложностями при синхронизации данных с актуальными версиями 1С:Бухгалтерия предприятия 3.0. Одной из самых острых проблем стал переход на ставку НДС 20%. Поскольку в версии 11.2 эта ставка изначально отсутствовала в схемах обмена, система выдает ошибку Несоответствие типов XDTO. Проанализируем причины этой ошибки и разберем по шагам, как восстановить работоспособность обмена.

Выясняем причину ошибки

Ошибка возникает в момент формирования XML-файла сообщения обмена. Рассмотрим текст исключения подробнее: Ошибка проверки данных XDTO: Значение: 'НДС20' не соответствует простому типу. Это происходит потому, что в конфигурации используется технология EnterpriseData, которая опирается на XDTO-пакеты. Эти пакеты представляют собой жесткую схему (аналог XSD), где перечислены все допустимые значения для каждого поля. Если в метаданных вашей базы (в перечислении СтавкиНДС) значение НДС20 уже появилось, а в XDTO-пакете EnterpriseData_1_3_X оно отсутствует, фабрика XDTO не сможет создать объект, так как значение «НДС20» не проходит валидацию по фасету перечисления.

Способ 1: Обновление XDTO-пакетов через сравнение и объединение

Самый надежный способ — актуализировать описание форматов в вашей конфигурации УТ 11.2. Для этого нам понадобится файл конфигурации или база БП 3.0, где поддержка НДС 20% уже реализована в полном объеме.

  1. Откроем конфигуратор УТ 11.2 и выберем пункт меню Конфигурация — Сравнить, объединить с конфигурацией из файла (или из базы БП 3.0).
  2. В дереве объектов снимем все галочки.
  3. Развернем ветку Общие — XDTO-пакеты.
  4. Найдем пакеты с именами EnterpriseData_1_3_... (например, EnterpriseData_1_3_20). Если в вашей УТ используется более старая версия (например, 1.3.2), необходимо добавить более свежую версию из БП.
  5. Также обратим внимание на пакет ExchangeMessage. Он описывает структуру заголовка сообщения и часто требует обновления вместе с основным пакетом данных.
  6. Выполним объединение выбранных объектов.

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

Способ 2: Ручная правка фасетов XDTO-пакета

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

  1. Найдем в дереве объектов XDTO-пакет EnterpriseData_1_3_X (версия, которая используется в вашем обмене).
  2. Раскроем пакет и перейдем к разделу Типы объектов или Типы значений (в зависимости от структуры пакета).
  3. Найдем тип СтавкиНДС.
  4. В свойствах этого типа (в окне свойств справа) найдем коллекцию Варианты перечисления (Enumeration facets).
  5. Добавим новое значение с именем НДС20.

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

Способ 3: Настройка Модуля менеджера обмена

Даже если XDTO-пакет «научился» понимать строку «НДС20», система должна знать, как преобразовать ссылку на перечисление из базы 1С в это строковое значение и обратно. За это отвечает Менеджер обмена через универсальный формат. Проанализируем, какие правки необходимо внести в общий модуль МенеджерОбменаЧерезУниверсальныйФормат (или аналогичный, используемый в вашем узле обмена).

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

Рассмотрим пример кода, который нужно внедрить (используем поиск по контексту "НДС18"):


// В функции, описывающей правила конвертации перечисления СтавкиНДС
// Добавляем строку для НДС 20%
НастройкаКонвертации = ПравилаКонвертации.Добавить();
НастройкаКонвертации.ЗначениеBBase = Перечисления.СтавкиНДС.НДС20;
НастройкаКонвертации.ЗначениеВФормате = "НДС20";

Также важно проверить функцию ОпределитьСтавкуНДС_Отправка. В старых версиях УТ логика подбора ставки может быть жестко зашита. Добавим обработку новой ставки:


Функция ОпределитьСтавкуНДС_Отправка(ЗначениеСтавки)
    Если ЗначениеСтавки = Перечисления.СтавкиНДС.НДС20 Тогда
        Возврат "НДС20";
    ИначеЕсли ЗначениеСтавки = Перечисления.СтавкиНДС.НДС18 Тогда
        Возврат "НДС18";
    // ... остальная логика
    КонецЕсли;
КонецФункции

Способ 4: Проверка версии формата в настройках синхронизации

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

  1. Зайдем в раздел Администрирование — Синхронизация данных — Настройки синхронизации.
  2. Откроем настройки нужного узла.
  3. Проверим поле Версия формата. Если там стоит 1.2, а поддержка НДС 20% добавлена нами в пакет версии 1.3, обмен работать не будет.
  4. Попробуем переключить версию на более актуальную (если код это поддерживает) или убедимся, что наши правки внесены именно в ту версию пакета, которая выбрана в настройках.

Рекомендации по использованию расширений

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

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

← На главную