При переходе на новые релизы «1С:Бухгалтерия предприятия 3.0» (БП 3.0) многие разработчики и специалисты по внедрению сталкиваются с существенным изменением в архитектуре справочника Номенклатура. Привычный реквизит СтавкаНДС, который раньше ссылался на перечисление с конкретными процентами (18%, 20%), заменен на реквизит ВидСтавкиНДС. Это вызывает сложности при программном создании объектов или конвертации данных из других систем, например, из «Управления торговлей».
В этой статье мы подробно разберем, зачем была реализована такая схема, где теперь физически находятся числовые значения ставок и как правильно писать код для работы с НДС в актуальных версиях 1С.
Рассмотрим причины, по которым разработчики фирмы «1С» решили уйти от прямого указания процентов в карточке товара. Основная причина — гибкость системы в условиях меняющегося законодательства. Проанализируем ситуацию на примере повышения ставки НДС с 18% до 20% в 2019 году. Если бы в каждой карточке номенклатуры была жестко прописана ставка «18%», то пользователям пришлось бы массово редактировать тысячи элементов справочника при наступлении нового года.
В текущей реализации в номенклатуре указывается абстрактный вид ставки (например, «Общая»). Программа сама определяет на лету, что для даты до 01.01.2019 под «Общей» понимается 18%, а после — 20%. Это также позволило легко внедрить специфические региональные ставки (как это было в Крыму и Севастополе) и подготовить систему к налоговой реформе 2025 года, вводящей ставки 5% и 7% для упрощенцев.
Для понимания логики разберем два ключевых объекта в конфигурации:
Номенклатура. Его значения: Общая, ОбщаяРасчетная, Пониженная, ПониженнаяРасчетная, Нулевая, БезНДС.Выясним, как программа связывает их между собой. Посмотрим на форму элемента номенклатуры. Пользователь по-прежнему видит в поле выбора привычные «20%», но при выборе этого значения система записывает в базу данных значение Перечисления.ВидыСтавокНДС.Общая.
Если нам необходимо программно узнать, какая именно ставка соответствует виду ставки для конкретной номенклатуры на определенную дату, мы не можем просто обратиться к реквизиту. Нам нужно использовать встроенные функции модулей менеджеров.
Разберем пример получения ставки НДС, реализованный в модуле менеджера справочника Номенклатура:
Функция СтавкаНДС(Номенклатура, Период = Неопределено) Экспорт
Если Не ЗначениеЗаполнено(Период) Тогда
Период = ТекущаяДата();
КонецЕсли;
ВидСтавкиНДС = ВидСтавкиНДСНаДату(Номенклатура, Период);
СтавкаНДС = Перечисления.СтавкиНДС.СтавкаНДС(ВидСтавкиНДС, Период);
Возврат СтавкаНДС;
КонецФункции
Проанализируем цепочку вызовов. Как мы видим, функция сначала определяет вид ставки, а затем обращается к методу СтавкаНДС перечисления СтавкиНДС. Посмотрим, как это реализовано внутри перечисления:
Функция СтавкаНДС(ВидСтавки, Период) Экспорт
Если ВидСтавки = Перечисления.ВидыСтавокНДС.Общая Тогда
Возврат УчетНДСКлиентСервер.ОбщаяСтавкаНДС(Период);
ИначеЕсли ВидСтавки = Перечисления.ВидыСтавокНДС.ОбщаяРасчетная Тогда
Возврат УчетНДСКлиентСервер.ОбщаяРасчетнаяСтавкаНДС(Период);
ИначеЕсли ВидСтавки = Перечисления.ВидыСтавокНДС.Пониженная Тогда
Возврат Перечисления.СтавкиНДС.НДС10;
ИначеЕсли ВидСтавки = Перечисления.ВидыСтавокНДС.ПониженнаяРасчетная Тогда
Возврат Перечисления.СтавкиНДС.НДС10_110;
// ... и так далее для всех видов
КонецЕсли;
КонецФункции
Здесь кроется самый важный момент: значение «Общей» ставки получается из общего модуля УчетНДСКлиентСервер. Именно там жестко прописано условие по дате: если период меньше 2019 года — вернуть 18%, иначе — 20%.
Если вы выполняете перенос данных (например, через КД 2.0 или КД 3.0) из конфигурации, где ставка НДС всё еще является числовым перечислением (как в УТ 10.3 или некоторых версиях УТ 11), вам необходимо настроить таблицу сопоставления. Рассмотрим стандартную схему маппинга:
Важно: При программном заполнении реквизита ВидСтавкиНДС в справочнике Номенклатура, убедитесь, что вы передаете ссылку на Перечисления.ВидыСтавокНДС, иначе при открытии карточки товара поле НДС будет пустым или выдаст ошибку типа.
С 2025 года в рамках налоговой реформы для плательщиков УСН вводятся новые пониженные ставки НДС. Механизм видов ставок в 1С БП 3.0 уже готов к этим изменениям. В Перечисление.ВидыСтавокНДС добавлены соответствующие значения. Программа будет определять их применимость на основе учетной политики организации. Рассмотрим, как это работает: при выборе вида «Пониженная 5%» система проверит, имеет ли право организация на эту ставку на дату документа, и подставит нужное значение в табличную часть.
При написании собственных отчетов или обработок в среде 1С:Бухгалтерия 3.0 придерживайтесь следующих правил:
УчетНДСКлиентСервер.ОбщаяСтавкаНДС(Дата).СтавкиНДС.ПолучитьСтавкуНДСПоВиду(ВидСтавки, Дата). Это наиболее универсальный способ, который учитывает все нюансы законодательства, включая переходные периоды.ПоступлениеТоваровУслуг), после заполнения номенклатуры в строке табличной части вызывайте стандартные процедуры пересчета НДС из модулей ОбработкаТабличныхЧастей или специализированных модулей учета НДС, чтобы система сама заполнила правильный процент и сумму.Таким образом, мы выяснили, что отсутствие числового реквизита СтавкаНДС — это не ошибка, а продуманная архитектурная стратегия для поддержки многолетних изменений налогового кодекса без необходимости модификации исторических данных пользователей.