Переход на новую ставку НДС 20% — это не просто замена одной цифры в справочнике. Для программиста 1С, работающего с доработанной конфигурацией (например, Управление торговлей 11 или УПП 1.3), эта задача превращается в полноценный аудит всей системы. Проблема осложняется тем, что в старых релизах ставки НДС часто были «зашиты» непосредственно в программный код, запросы и макеты отчетов. Рассмотрим подробно, как правильно организовать этот переход, на что обратить внимание и какие программные механизмы лучше всего использовать.
В большинстве типовых конфигураций 1С прошлых лет ставка НДС реализована как Перечисление.СтавкиНДС. Это означает, что для системы значения «18%» и «20%» — это разные объекты метаданных. Простое добавление нового значения в перечисление не заставит систему автоматически использовать его в расчетах. Разберем основные «ловушки», которые встречаются в коде:
ВЫБОР КОГДА для расчета суммы налога прямо в тексте запроса.Если ваша конфигурация сильно изменена и обновление до последнего типового релиза невозможно или слишком дорого, придется вносить изменения вручную. Проанализируем типичный пример «плохого» кода, который можно встретить в УТ 11, и выясним, как его исправить. Рассмотрим фрагмент, где ставки задаются массивом:
Ставки18 = Новый Массив;
Ставки18.Добавить(Перечисления.СтавкиНДС.НДС18);
Ставки18.Добавить(Перечисления.СтавкиНДС.НДС18_118);
ЗначениеСтавки18 = ЦенообразованиеКлиентСервер.ПолучитьСтавкуНДСЧислом(Ставки18[0]);
Запрос.УстановитьПараметр("Ставки18", Ставки18);
Запрос.УстановитьПараметр("ЗначениеСтавки18", ЗначениеСтавки18);
Чтобы адаптировать этот код под переходный период, нам нужно добавить условия по дате. Посмотрим на пример реализации, который применила сама фирма 1С в некоторых переходных релизах:
ТекущаяСтавка = ?(Объект.Дата > '20181231235959',
Перечисления.СтавкиНДС.НДС20,
Перечисления.СтавкиНДС.НДС18);
Однако такой подход требует поиска всех вхождений строки НДС18 по всей конфигурации. Проанализируем ситуацию: в средней базе может быть более 3000 упоминаний ставок. Для поиска рекомендуется использовать глобальный поиск по строке Перечисления.СтавкиНДС.НДС18 и внимательно изучать каждый контекст, особенно в запросах СКД.
Это наиболее правильный и современный подход, который внедрила 1С в последних редакциях Бухгалтерии предприятия 3.0 и УТ 11.4. Суть метода заключается в отказе от хранения конкретного процента в номенклатуре. Вместо этого вводится новая сущность — Вид ставки НДС.
Разберем, как это работает по шагам:
ВидыСтавокНДС со значениями: Общая, Пониженная, Нулевая, БезНДС.Номенклатура добавляется реквизит ВидСтавкиНДС.Перечисления.СтавкиНДС в зависимости от переданной даты.Рассмотрим пример логики такой функции:
Функция ПолучитьСтавкуПоВидуИДате(ВидСтавки, ДатаДокумента) Экспорт
Если ВидСтавки = Перечисления.ВидыСтавокНДС.Общая Тогда
Возврат ?(ДатаДокумента >= '20190101',
Перечисления.СтавкиНДС.НДС20,
Перечисления.СтавкиНДС.НДС18);
КонецЕсли;
// ... логика для остальных видов ставок
КонецФункции
Этот метод позволяет пользователю не менять ставки в карточках товаров вручную в новогоднюю ночь. Система сама «поймет», какой процент подставить в документ, исходя из его даты. Посмотрим на пример кода обработки обновления, которая заполняет новые реквизиты на основе старых данных:
Если СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
ВидСтавкиНДС = Перечисления.ВидыСтавокНДС.Общая;
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда
ВидСтавкиНДС = Перечисления.ВидыСтавокНДС.Пониженная;
КонецЕсли;
При формировании Книги продаж или декларации по НДС запросы становятся очень сложными, так как они должны агрегировать данные по разным ставкам в разные колонки. Проанализируем пример типичного запроса, где ставки разделяются для вывода в отчет:
ВЫБРАТЬ
СУММА(ВЫБОР
КОГДА НДСЗаписиКнигиПродаж.СтавкаНДС В (&СтавкаНДС18, &СтавкаНДС20)
ТОГДА НДСЗаписиКнигиПродаж.СуммаБезНДС
ИНАЧЕ 0
КОНЕЦ) КАК СуммаОбщая,
СУММА(ВЫБОР
КОГДА НДСЗаписиКнигиПродаж.СтавкаНДС В (&СтавкаНДС20)
ТОГДА НДСЗаписиКнигиПродаж.НДС
ИНАЧЕ 0
КОНЕЦ) КАК СуммаНДС20
ИЗ
РегистрНакопления.НДСПродажи КАК НДСЗаписиКнигиПродаж
Важный совет: Не пытайтесь заменить 18 на 20 в старых запросах. Вам нужно именно добавить поддержку новой ставки, сохранив возможность корректного формирования отчетов за прошлые периоды.
В типовых решениях (УПП 1.3, УТ 11.4) 1С выпустила специальную обработку Помощник замены ставки НДС на 20%. Мы рекомендуем проанализировать ее код, прежде чем писать свой велосипед. Помощник делает следующее:
Помните, что замена ставки в номенклатуре — это лишь половина дела. Если у вас есть Заказы клиентов, созданные в 2018 году, но отгружаемые в 2019, вам придется пересчитывать НДС в этих документах. Рассмотрим пример логики пересчета:
Процедура ПересчитатьНДСПриПереходе(СтрокаТЧ, НоваяСтавка)
СтрокаТЧ.СтавкаНДС = НоваяСтавка;
ЗначениеСтавки = ЦенообразованиеКлиентСервер.ПолучитьСтавкуНДСЧислом(НоваяСтавка);
// Сумма с НДС обычно остается неизменной, меняется пропорция
СтрокаТЧ.СуммаНДС = СтрокаТЧ.СуммаСНДС * ЗначениеСтавки / (100 + ЗначениеСтавки);
КонецПроцедуры
Работа с НДС 20% в доработанных базах — это отличный повод навести порядок в коде. Мы рекомендуем придерживаться следующих правил:
МоментВремени или Дата документа.Проанализировав все места использования НДС, вы сможете гарантировать корректность учета и отсутствие претензий со стороны налоговых органов в переходный период.