При обновлении конфигурации «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С.
Подведем итог и составим план действий для адаптации к изменениям:
СтавкаНДС в справочнике Номенклатура.УчетНДС.ПолучитьСтавкуНДС().ВидСтавкиНДС, либо вычислять значение через функции общего модуля.Несмотря на то, что такие изменения кажутся «нежданчиком» и добавляют работы, стратегически это верное решение. Оно избавляет от необходимости массовой корректировки справочников при каждом изменении налогового кодекса в будущем. Мы проанализировали механизм «ВидСтавкиНДС» и теперь можем уверенно использовать его в своей работе, обеспечивая стабильность и корректность учета.