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

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

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

В чем причина глобальных изменений?

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

Чтобы избежать этой проблемы, разработчики 1С внедрили механизм абстракции. Теперь в карточке товара хранится не конкретное число (например, 18), а категория налогообложения — «Общая», «Пониженная», «Без НДС». Это и есть реквизит ВидСтавкиНДС. Выясним причину, почему это удобно: программа сама «понимает», что для категории «Общая» до 31.12.2018 нужно применять 18%, а начиная с 01.01.2019 — 20%.

Техническая реализация через новый справочник

Разберем, как это устроено «под капотом». Раньше реквизит СтавкаНДС ссылался на перечисление (Enum). Теперь же вместо простого списка значений используется полноценный справочник СтавкиНДС. Этот справочник содержит предопределенные элементы, такие как:

Важным нововведением стало то, что ставка в процентах теперь вычисляется программно. Это позволяет системе корректно работать с документами разных периодов. Если мы перепроводим документ за 2017 год, система подставит 18%, а в новых документах — 20%, при этом в самой карточке номенклатуры ничего менять не требуется.

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

Проанализируем старый подход: раньше мы могли просто написать Номенклатура.СтавкаНДС и получить значение. Теперь такой подход не сработает, так как реквизит переименован в УдалитьСтавкаНДС и помечен на удаление. Он оставлен только для обеспечения работы обработчиков обновления, которые переносят старые данные в новую структуру.

Для получения актуального числового значения ставки или ссылки на объект в коде необходимо использовать методы общих модулей. Посмотрим на пример вызова функции, которая стала стандартом для новых релизов:


// Пример получения ставки НДС для документа
СтавкаДляДокумента = УчетНДС.ПолучитьСтавкуНДС(Объект.Номенклатура.ВидСтавкиНДС, Объект.Дата);

Рассмотрим подробнее параметры этой функции. Она принимает ссылку на «Вид ставки» из справочника номенклатуры и дату документа. Именно дата является ключевым фактором: функция обращается к механизмам программы и возвращает правильный процент, актуальный на указанный момент времени.

Влияние на внешние отчеты и обработки

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

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


ВЫБРАТЬ
    Номенклатура.Ссылка КАК Товар,
    Номенклатура.ВидСтавкиНДС КАК ВидСтавки,
    // В запросе сложно получить числовое значение без соединения, 
    // поэтому чаще используется программная обработка результата
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Ссылка В (&МассивТоваров)

Если же вам требуется именно числовое значение ставки прямо в запросе, придется использовать соединение со справочником СтавкиНДС, но помните, что логика «периодичности» (зависимости от даты) реализована на уровне программного кода конфигурации, а не на уровне простых связей в базе данных.

Проблемы с торговым оборудованием (Атол и другие)

Выясним ситуацию с кассовыми аппаратами. Многие пользователи заметили, что после обновления при печати чеков стали возникать ошибки вида «Ставка НДС не найдена». Это связано с тем, что драйверы ККТ (например, Атол) ожидают передачи конкретного тега налога.

Старые версии обработок обслуживания искали ставку в реквизите СтавкаНДС. Поскольку реквизит сменил имя и тип, передача данных в кассу ломалась. Решением в данной ситуации является обязательное обновление Библиотеки подключаемого оборудования (БПО) и драйверов ККТ до версий, поддерживающих новую архитектуру 1С.

Итоги: что нужно сделать разработчику?

Подведем итог и составим план действий для адаптации к изменениям:

  1. Провести ревизию кода: Найти все вхождения обращения к реквизиту СтавкаНДС в справочнике Номенклатура.
  2. Заменить обращения: Вместо прямого обращения к реквизиту использовать функцию УчетНДС.ПолучитьСтавкуНДС().
  3. Обновить внешние отчеты: Перепроверить схемы компоновки данных (СКД), где выводилась ставка НДС. Теперь нужно выводить либо ВидСтавкиНДС, либо вычислять значение через функции общего модуля.
  4. Проверить торговое оборудование: Убедиться, что кассовые смены открываются и чеки пробиваются корректно, при необходимости обновить драйверы.

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

← На главную