При необходимости отражения ставки НДС 20% в электронных документах пользователи старых или доработанных конфигураций 1С часто сталкиваются с ошибкой валидации: Ошибка установки значения свойства \"НалСт\". Ошибка возникает из-за несоответствия типов XDTO, так как механизмы ЭДО жестко ограничены списком допустимых значений (фасетами), прописанными в XML-схемах. Давайте разберем, как комплексно подойти к решению этой задачи.
Ошибка Несоответствие типов XDTO при попытке передать значение «20%» означает, что встроенная в 1С система проверки данных сравнивает ваше значение с набором допустимых вариантов, заданных в пакете XDTO. Даже если вы добавили элемент в перечисление, сам пакет XDTO остается «неосведомленным» о новом значении. Более того, логика преобразования данных в коде 1С может не содержать алгоритма обработки этой новой ставки.
Первым делом необходимо убедиться, что в метаданных конфигурации созданы соответствующие элементы перечислений. Для корректной работы ЭДО обычно требуется добавить не только ставку 20%, но и ставку для расчетного НДС, если это предусмотрено вашим процессом обмена.
СтавкиНДС).НДС20.НДС20_120.Простого добавления перечисления недостаточно. Необходимо синхронизировать ваш пакет XDTO с изменениями.
Рассмотрим порядок действий:
Пакеты XDTO в дереве конфигурации.НалСт.XDTO перестал блокировать документ.Это самый важный этап, о котором часто забывают. В конфигурациях существуют функции-конвертеры, которые преобразуют внутренние значения 1С (ваши перечисления) в строковые или числовые коды для XML. Если процедура, выполняющая это преобразование, не знает о ставке 20%, она не сможет корректно сформировать ОбъектXDTO.
Найдите в общих модулях (например, ОбменСКонтрагентамиВнутренний) функции, которые выполняют преобразование ставок. Вам нужно добавить условие, при котором новое перечисление будет конвертироваться в требуемую строковую репрезентацию.
Пример логики, которую необходимо дополнить (псевдокод):
Функция ПолучитьПредставлениеСтавкиНДСДляXDTO(Ставка)
Если Ставка = Перечисления.СтавкиНДС.НДС20 Тогда
Возврат \"20%\";
ИначеЕсли Ставка = Перечисления.СтавкиНДС.НДС18 Тогда
Возврат \"18%\";
// И так далее для всех случаев
КонецЕсли;
КонецФункции
Для поиска проблемного места используйте возможности отладчика:
ОбъектXDTO.Установить(ИмяСвойства, Значение).Значение в момент вызова. Если там находится строка или объект, не соответствующий ограничениям схемы XDTO, вы сразу увидите причину ошибки.XDTO используется в текущем контексте, чтобы не менять настройки в неактуальных пакетах.Помните, что ручное изменение пакетов XDTO — это трудоемкая задача, требующая внимательности. Если конфигурация поддерживает автоматическое обновление, старайтесь использовать штатные механизмы поддержки законодательства, так как при следующем обновлении ваши изменения в пакетах могут быть затерты.