Переход на ставку НДС 22%
01.01.2026 поменяются ставки НДС:
Появятся новые ставки 22% и 22%/122%.
Ставка 20% и 20%/120% останется для отправки документов за прошлые периоды.
Вернутся ставки 18% и 18%/118% для отправки документов за прошлые периоды.
Для работы с новыми ставками НДС обновите следующее:
Конфигурация 1С.
Подключаемый модуль.
Основной модуль.
Примечание
Подключаемый модуль можно обновить до обновления конфигурации 1С и основного модуля.
Обновление конфигурации 1С
Чтобы модуль работал с новыми ставками НДС, добавьте их в информационную базу.
По информации от фирмы 1С, она выпустит обновления только для поддерживаемых версий. Снятые с поддержки конфигурации обновляться не будут.
Выполните одно из действий:
Обновите конфигурацию до поддерживаемой версии.
Добавьте новую ставку НДС в конфигурацию, соблюдая существующие правила наименования элементов перечисления СтавкиНДС.
Ставка |
НДС 22% |
НДС 18% |
НДС 22/122 |
НДС 18/118 |
|---|---|---|---|---|
Имя в конфигурации |
НДС22 |
НДС18 |
НДС22_122 |
НДС18_118 |
Синоним в конфигурации |
22% |
18% |
22/122 |
18/118 |
Обновление подключаемого модуля
В подключаемом модуле часто встречается код по преобразованию ставок НДС.
Для входящих:
СтавкиНДС_ПеречислениеИзПредставления
НоваяСтрока.СтавкаНДС = СтавкиНДС_ПеречислениеИзПредставления(СтрокаДанных.СтавкаНДС);
Функция СтавкиНДС_ПеречислениеИзПредставления(СтавкаНДС)
ЗначениеНДС = Неопределено;
ПеречислениеМенеджер = Вычислить("Перечисления.СтавкиНДС");
Если ТипЗнч(СтавкаНДС) = Тип("Строка") Тогда
ПредставлениеСтавкиНДС = СтавкаНДС;
ИначеЕсли ТипЗнч(СтавкаНДС) = Тип("Число") Тогда
ПредставлениеСтавкиНДС = Строка(СтавкаНДС);
Иначе // неправильный тип
ПредставлениеСтавкиНДС = Неопределено;
КонецЕсли;
Если ПредставлениеСтавкиНДС = Неопределено ИЛИ ВРЕГ(ПредставлениеСтавкиНДС) = "БЕЗ НДС" Тогда
ЗначениеНДС = ПеречислениеМенеджер.БезНДС;
ИначеЕсли ПредставлениеСтавкиНДС = "0" ИЛИ ПредставлениеСтавкиНДС = "0%" Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС0;
ИначеЕсли Найти("10#0.1#0,1#0.10#0,10#10%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС10;
ИначеЕсли Найти("20#0.2#0,2#0.20#0,20#20%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС20;
ИначеЕсли Найти("18#0.18#0,18#0.18#0,18#18%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС18;
ИначеЕсли Найти("10/110#10% / 110%#10%/110%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС10_110;
ИначеЕсли Найти("20/120#20% / 120%#20%/120%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС20_120;
ИначеЕсли Найти("18/118#18% / 118%#18%/118%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС18_118;
КонецЕсли;
Возврат ЗначениеНДС;
КонецФункции
Для исходящих:
ПредставлениеСтавкиНДС
СтавкаНДС = ПредставлениеСтавкиНДС(ТекСтрока.СтавкаНДС);
Функция ПредставлениеСтавкиНДС(СтавкаНДС)
Если НЕ ЗначениеЗаполнено(СтавкаНДС) Тогда
Возврат "";
КонецЕсли;
Если ТипЗнч(СтавкаНДС) = Тип("Строка") Тогда
Возврат СтавкаНДС;
КонецЕсли;
НаименованияСтавок = Новый Соответствие;
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС0 , "0");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС10 , "10");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС18 , "18");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС20 , "20");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.БезНДС , "без НДС");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС10_110, "10/110");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС18_118, "18/118");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС20_120, "20/120");
Результат = НаименованияСтавок.Получить(СтавкаНДС);
Если Не ЗначениеЗаполнено(Результат) Тогда
// Представление ставки НДС получить не удалось,
// поэтому возвращаем признак ошибки через зарезервированную строку "##".
// Такую строку умеет обрабатывать валидация контента.
Результат = "##";
КонецЕсли;
Возврат Результат;
КонецФункции
Существуют 2 сценария обновления:
Используйте публичные методы универсального модуля.
Допишите новые ставки в имеющийся алгоритм.
Примечание
Рекомендуем использовать публичные методы. При дальнейших изменениях ставок НДС, не потребуется обновлять подключаемый модуль.
Достаточно будет обновить основной модуль и конфигурацию 1С.
Код по преобразованию ставок НДС замените на обращение в публичные методы:
Примечание
Публичный метод нужно применять, если:
Работа с текущей конфигурацией поддерживается модулем Диадок 1С и в настройках подключен типовой интеграционный модуль.
Интеграционный модуль не подключен, но в конфигурации присутствует перечисление с именем «СтавкиНДС» и отсутствует справочник с именем «СтавкиНДС».
Подробные условия применимости методов смотрите в описании публичных методов.
При использовании публичных методов, код примет следующий вид.
Для входящих:
ЭДО_ЗначениеСтавкиНДС
НоваяСтрока.СтавкаНДС = СтавкиНДС_ЗначениеИзПредставления(СтрокаДанных.СтавкаНДС);
Функция СтавкиНДС_ЗначениеИзПредставления(ПредставлениеСтавкиНДС)
Результат = ОсновнойМодуль.ЭДО_ЗначениеСтавкиНДС(ПредставлениеСтавкиНДС);
Возврат Результат;
КонецФункции
Для исходящих:
ЭДО_ПредставлениеСтавкиНДС
СтавкаНДС = СтавкиНДС_ПредставлениеИзЗначения(ТекСтрока.СтавкаНДС);
Функция СтавкиНДС_ПредставлениеИзЗначения(СтавкаНДС)
Результат = ОсновнойМодуль.ЭДО_ПредставлениеСтавкиНДС(СтавкаНДС);
Если Результат = Неопределено Тогда
// Представление ставки НДС получить не удалось,
// поэтому возвращаем признак ошибки через зарезервированную строку "##".
// Такую строку умеет обрабатывать валидация контента.
Результат = "##";
КонецЕсли;
Возврат Результат;
КонецФункции
Если технические ограничения не позволяют перейти на публичные методы, измените алгоритм в текущих методах.
Для входящих:
СтавкиНДС_ПеречислениеИзПредставления
Функция СтавкиНДС_ПеречислениеИзПредставления(СтавкаНДС)
ЗначениеНДС = Неопределено;
ПеречислениеМенеджер = Вычислить("Перечисления.СтавкиНДС");
Если ТипЗнч(СтавкаНДС) = Тип("Строка") Тогда
ПредставлениеСтавкиНДС = СтавкаНДС;
ИначеЕсли ТипЗнч(СтавкаНДС) = Тип("Число") Тогда
ПредставлениеСтавкиНДС = Строка(СтавкаНДС);
Иначе // неправильный тип
ПредставлениеСтавкиНДС = Неопределено;
КонецЕсли;
Если ПредставлениеСтавкиНДС = Неопределено ИЛИ ВРЕГ(ПредставлениеСтавкиНДС) = "БЕЗ НДС" Тогда
ЗначениеНДС = ПеречислениеМенеджер.БезНДС;
ИначеЕсли ПредставлениеСтавкиНДС = "0" ИЛИ ПредставлениеСтавкиНДС = "0%" Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС0;
ИначеЕсли Найти("10#0.1#0,1#0.10#0,10#10%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС10;
ИначеЕсли Найти("20#0.2#0,2#0.20#0,20#20%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС20;
ИначеЕсли Найти("18#0.18#0,18#0.18#0,18#18%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС18;
ИначеЕсли Найти("22#0.22#0,22#0.22#0,22#22%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС22;
ИначеЕсли Найти("10/110#10% / 110%#10%/110%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС10_110;
ИначеЕсли Найти("20/120#20% / 120%#20%/120%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС20_120;
ИначеЕсли Найти("18/118#18% / 118%#18%/118%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС18_118;
ИначеЕсли Найти("22/122#22% / 122%#22%/122%", ПредставлениеСтавкиНДС) > 0 Тогда
ЗначениеНДС = ПеречислениеМенеджер.НДС22_122;
КонецЕсли;
Возврат ЗначениеНДС;
КонецФункции
Для исходящих:
ПредставлениеСтавкиНДС
Функция ПредставлениеСтавкиНДС(СтавкаНДС)
Если НЕ ЗначениеЗаполнено(СтавкаНДС) Тогда
Возврат "";
КонецЕсли;
Если ТипЗнч(СтавкаНДС) = Тип("Строка") Тогда
Возврат СтавкаНДС;
КонецЕсли;
НаименованияСтавок = Новый Соответствие;
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС0 , "0");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС10 , "10");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС18 , "18");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС20 , "20");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС22 , "22");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.БезНДС , "без НДС");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС10_110, "10/110");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС18_118, "18/118");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС20_120, "20/120");
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС22_122, "22/122");
Результат = НаименованияСтавок.Получить(СтавкаНДС);
Если Не ЗначениеЗаполнено(Результат) Тогда
// Представление ставки НДС получить не удалось,
// поэтому возвращаем признак ошибки через зарезервированную строку "##".
// Такую строку умеет обрабатывать валидация контента.
Результат = "##";
КонецЕсли;
Возврат Результат;
КонецФункции
Примечание
Не удаляйте ставку 20%. Она может использоваться для отправки документов за прошлые периоды.
Если в конфигурации, в перечислении «СтавкиНДС» еще нет новых ставок НДС, добавьте проверку наличия метаданных.
СуществуетЗначениеПеречисленияСтавкиНДС
Если СуществуетЗначениеПеречисленияСтавкиНДС("НДС22") Тогда
НаименованияСтавок.Вставить(Перечисления.СтавкиНДС.НДС22, "22");
КонецЕсли
Функция СуществуетЗначениеПеречисленияСтавкиНДС(ИмяЗначенияСтавкаНДС)
ЗначенияПеречисления = Метаданные.Перечисления.СтавкиНДС.ЗначенияПеречисления;
Результат = (ЗначенияПеречисления.Найти(ИмяЗначенияСтавкаНДС) <> Неопределено);
Возврат Результат;
КонецФункции
После добавления ставок НДС в конфигурацию рекомендуем удалить проверку наличия метаданных. Избыточные проверки снижают производительность модуля Диадок.
Обновление основного модуля
С версии 4.59 модуль Диадок поддержит работу с новыми ставками НДС в интеграционных модулях и публичных методах.
Обновите основной модуль, чтобы отправлять документы с новыми ставками НДС.