Где в 1С:Бухгалтерия 3.0 теперь хранятся ставки НДС и как с ними работать программно?

Программист 1С v8.3 (Управляемые формы) Налоговый учет IT и автоматизация бизнеса
← На главную

При переходе на новые релизы «1С:Бухгалтерия предприятия 3.0» (БП 3.0) многие разработчики и специалисты по внедрению сталкиваются с существенным изменением в архитектуре справочника Номенклатура. Привычный реквизит СтавкаНДС, который раньше ссылался на перечисление с конкретными процентами (18%, 20%), заменен на реквизит ВидСтавкиНДС. Это вызывает сложности при программном создании объектов или конвертации данных из других систем, например, из «Управления торговлей».

В этой статье мы подробно разберем, зачем была реализована такая схема, где теперь физически находятся числовые значения ставок и как правильно писать код для работы с НДС в актуальных версиях 1С.

Почему изменилась архитектура хранения НДС?

Рассмотрим причины, по которым разработчики фирмы «1С» решили уйти от прямого указания процентов в карточке товара. Основная причина — гибкость системы в условиях меняющегося законодательства. Проанализируем ситуацию на примере повышения ставки НДС с 18% до 20% в 2019 году. Если бы в каждой карточке номенклатуры была жестко прописана ставка «18%», то пользователям пришлось бы массово редактировать тысячи элементов справочника при наступлении нового года.

В текущей реализации в номенклатуре указывается абстрактный вид ставки (например, «Общая»). Программа сама определяет на лету, что для даты до 01.01.2019 под «Общей» понимается 18%, а после — 20%. Это также позволило легко внедрить специфические региональные ставки (как это было в Крыму и Севастополе) и подготовить систему к налоговой реформе 2025 года, вводящей ставки 5% и 7% для упрощенцев.

Различие между Видами ставок и Ставками НДС

Для понимания логики разберем два ключевых объекта в конфигурации:

  1. Перечисление.ВидыСтавокНДС: Именно этот тип данных теперь используется в реквизитах справочника Номенклатура. Его значения: Общая, ОбщаяРасчетная, Пониженная, ПониженнаяРасчетная, Нулевая, БезНДС.
  2. Перечисление.СтавкиНДС: Это классическое перечисление с конкретными значениями (НДС20, НДС10, НДС0 и т.д.). Оно по-прежнему существует в системе, но используется преимущественно для отображения в формах документов и хранения результата вычислений, а не как базовый реквизит товара.

Выясним, как программа связывает их между собой. Посмотрим на форму элемента номенклатуры. Пользователь по-прежнему видит в поле выбора привычные «20%», но при выборе этого значения система записывает в базу данных значение Перечисления.ВидыСтавокНДС.Общая.

Как программно получить числовое значение ставки?

Если нам необходимо программно узнать, какая именно ставка соответствует виду ставки для конкретной номенклатуры на определенную дату, мы не можем просто обратиться к реквизиту. Нам нужно использовать встроенные функции модулей менеджеров.

Разберем пример получения ставки НДС, реализованный в модуле менеджера справочника Номенклатура:


Функция СтавкаНДС(Номенклатура, Период = Неопределено) Экспорт
    Если Не ЗначениеЗаполнено(Период) Тогда
        Период = ТекущаяДата();
    КонецЕсли;
    
    ВидСтавкиНДС = ВидСтавкиНДСНаДату(Номенклатура, Период);
    СтавкаНДС = Перечисления.СтавкиНДС.СтавкаНДС(ВидСтавкиНДС, Период);
    
    Возврат СтавкаНДС;
КонецФункции

Проанализируем цепочку вызовов. Как мы видим, функция сначала определяет вид ставки, а затем обращается к методу СтавкаНДС перечисления СтавкиНДС. Посмотрим, как это реализовано внутри перечисления:


Функция СтавкаНДС(ВидСтавки, Период) Экспорт
    Если ВидСтавки = Перечисления.ВидыСтавокНДС.Общая Тогда
        Возврат УчетНДСКлиентСервер.ОбщаяСтавкаНДС(Период);
    ИначеЕсли ВидСтавки = Перечисления.ВидыСтавокНДС.ОбщаяРасчетная Тогда
        Возврат УчетНДСКлиентСервер.ОбщаяРасчетнаяСтавкаНДС(Период);
    ИначеЕсли ВидСтавки = Перечисления.ВидыСтавокНДС.Пониженная Тогда
        Возврат Перечисления.СтавкиНДС.НДС10;
    ИначеЕсли ВидСтавки = Перечисления.ВидыСтавокНДС.ПониженнаяРасчетная Тогда
        Возврат Перечисления.СтавкиНДС.НДС10_110;
    // ... и так далее для всех видов
КонецЕсли;
КонецФункции

Здесь кроется самый важный момент: значение «Общей» ставки получается из общего модуля УчетНДСКлиентСервер. Именно там жестко прописано условие по дате: если период меньше 2019 года — вернуть 18%, иначе — 20%.

Настройка соответствия при конвертации данных

Если вы выполняете перенос данных (например, через КД 2.0 или КД 3.0) из конфигурации, где ставка НДС всё еще является числовым перечислением (как в УТ 10.3 или некоторых версиях УТ 11), вам необходимо настроить таблицу сопоставления. Рассмотрим стандартную схему маппинга:

Важно: При программном заполнении реквизита ВидСтавкиНДС в справочнике Номенклатура, убедитесь, что вы передаете ссылку на Перечисления.ВидыСтавокНДС, иначе при открытии карточки товара поле НДС будет пустым или выдаст ошибку типа.

Особенности для новых ставок 5% и 7% (с 2025 года)

С 2025 года в рамках налоговой реформы для плательщиков УСН вводятся новые пониженные ставки НДС. Механизм видов ставок в 1С БП 3.0 уже готов к этим изменениям. В Перечисление.ВидыСтавокНДС добавлены соответствующие значения. Программа будет определять их применимость на основе учетной политики организации. Рассмотрим, как это работает: при выборе вида «Пониженная 5%» система проверит, имеет ли право организация на эту ставку на дату документа, и подставит нужное значение в табличную часть.

Рекомендации для разработчиков

При написании собственных отчетов или обработок в среде 1С:Бухгалтерия 3.0 придерживайтесь следующих правил:

  1. Никогда не закладывайте жесткую логику «Общая ставка = 20%» в текст запроса или кода. Всегда используйте методы общего модуля УчетНДСКлиентСервер.ОбщаяСтавкаНДС(Дата).
  2. Для получения ставки для конкретного товара используйте метод СтавкиНДС.ПолучитьСтавкуНДСПоВиду(ВидСтавки, Дата). Это наиболее универсальный способ, который учитывает все нюансы законодательства, включая переходные периоды.
  3. Если вы создаете программно документ (например, ПоступлениеТоваровУслуг), после заполнения номенклатуры в строке табличной части вызывайте стандартные процедуры пересчета НДС из модулей ОбработкаТабличныхЧастей или специализированных модулей учета НДС, чтобы система сама заполнила правильный процент и сумму.

Таким образом, мы выяснили, что отсутствие числового реквизита СтавкаНДС — это не ошибка, а продуманная архитектурная стратегия для поддержки многолетних изменений налогового кодекса без необходимости модификации исторических данных пользователей.

← На главную