При работе со старыми или сильно модифицированными конфигурациями, такими как 1С:Управление торговлей 11.2, пользователи часто сталкиваются с техническими сложностями при синхронизации данных с актуальными версиями 1С:Бухгалтерия предприятия 3.0. Одной из самых острых проблем стал переход на ставку НДС 20%. Поскольку в версии 11.2 эта ставка изначально отсутствовала в схемах обмена, система выдает ошибку Несоответствие типов XDTO. Проанализируем причины этой ошибки и разберем по шагам, как восстановить работоспособность обмена.
Ошибка возникает в момент формирования XML-файла сообщения обмена. Рассмотрим текст исключения подробнее: Ошибка проверки данных XDTO: Значение: 'НДС20' не соответствует простому типу. Это происходит потому, что в конфигурации используется технология EnterpriseData, которая опирается на XDTO-пакеты. Эти пакеты представляют собой жесткую схему (аналог XSD), где перечислены все допустимые значения для каждого поля. Если в метаданных вашей базы (в перечислении СтавкиНДС) значение НДС20 уже появилось, а в XDTO-пакете EnterpriseData_1_3_X оно отсутствует, фабрика XDTO не сможет создать объект, так как значение «НДС20» не проходит валидацию по фасету перечисления.
Самый надежный способ — актуализировать описание форматов в вашей конфигурации УТ 11.2. Для этого нам понадобится файл конфигурации или база БП 3.0, где поддержка НДС 20% уже реализована в полном объеме.
EnterpriseData_1_3_... (например, EnterpriseData_1_3_20). Если в вашей УТ используется более старая версия (например, 1.3.2), необходимо добавить более свежую версию из БП.ExchangeMessage. Он описывает структуру заголовка сообщения и часто требует обновления вместе с основным пакетом данных.Важный момент: если ваша конфигурация сильно изменена, простое удаление старого пакета может привести к ошибкам в коде. В этом случае лучше добавить новый пакет рядом и перенастроить код на работу с ним.
Если мы не хотим вносить масштабные изменения, можно точечно отредактировать существующий пакет. Для этого выполним следующие действия:
EnterpriseData_1_3_X (версия, которая используется в вашем обмене).СтавкиНДС.НДС20.После этого фабрика XDTO перестанет выдавать ошибку валидации, однако этого может быть недостаточно для корректного сопоставления данных в коде.
Даже если XDTO-пакет «научился» понимать строку «НДС20», система должна знать, как преобразовать ссылку на перечисление из базы 1С в это строковое значение и обратно. За это отвечает Менеджер обмена через универсальный формат. Проанализируем, какие правки необходимо внести в общий модуль МенеджерОбменаЧерезУниверсальныйФормат (или аналогичный, используемый в вашем узле обмена).
Нам необходимо найти функции, отвечающие за конвертацию перечислений. Обычно они называются ЗаполнитьПравилаКонвертацииПредопределенныхДанных. Нам нужно добавить соответствие для новой ставки.
Рассмотрим пример кода, который нужно внедрить (используем поиск по контексту "НДС18"):
// В функции, описывающей правила конвертации перечисления СтавкиНДС
// Добавляем строку для НДС 20%
НастройкаКонвертации = ПравилаКонвертации.Добавить();
НастройкаКонвертации.ЗначениеBBase = Перечисления.СтавкиНДС.НДС20;
НастройкаКонвертации.ЗначениеВФормате = "НДС20";
Также важно проверить функцию ОпределитьСтавкуНДС_Отправка. В старых версиях УТ логика подбора ставки может быть жестко зашита. Добавим обработку новой ставки:
Функция ОпределитьСтавкуНДС_Отправка(ЗначениеСтавки)
Если ЗначениеСтавки = Перечисления.СтавкиНДС.НДС20 Тогда
Возврат "НДС20";
ИначеЕсли ЗначениеСтавки = Перечисления.СтавкиНДС.НДС18 Тогда
Возврат "НДС18";
// ... остальная логика
КонецЕсли;
КонецФункции
Иногда ошибка сохраняется даже после правок в коде. Это может быть связано с тем, что в настройках синхронизации данных (в режиме «1С:Предприятие») для конкретного узла обмена установлена старая версия формата. Разберем, как это проверить:
1.2, а поддержка НДС 20% добавлена нами в пакет версии 1.3, обмен работать не будет.Поскольку УТ 11.2 поддерживает механизм расширений, мы рекомендуем не изменять типовую конфигурацию напрямую. Рассмотрим преимущества использования расширения для решения этой задачи:
&Вместо вы можете переопределить только нужные функции сопоставления ставок НДС, не затрагивая остальной код обмена.После внесения всех правок обязательно выполним регистрацию изменений для документов, которые ранее выдавали ошибку. Это можно сделать через обработку «Регистрация изменений для обмена данными». Выберем нужные документы и добавим их в план обмена заново, чтобы система инициировала их повторную выгрузку уже с применением новых правил и обновленного XDTO-пакета.