Учет налога на добавленную стоимость (НДС) — одна из наиболее критичных областей автоматизации торговой деятельности. При изменении налогового законодательства или выходе компании на международные рынки часто возникает необходимость добавить в систему новую ставку НДС (например, 20%, 22% или пониженные ставки 5% и 7% для УСН). Однако разработчики, работающие со старыми версиями «1С:Управление торговлей 11» (УТ 11), часто сталкиваются с тем, что ставки НДС реализованы не в виде динамического справочника, а в виде жестко закодированного перечисления. В этой статье мы подробно разберем, почему так было сделано, как решить эту проблему на старых релизах и как данный механизм устроен в современных версиях УТ 11.5.
В ранних версиях линейки УТ 11 (вплоть до редакции 11.4) разработчики фирмы 1С приняли решение использовать для хранения ставок НДС объект конфигурации Перечисление.СтавкиНДС. Это перечисление содержало предопределенные значения, такие как НДС18, НДС18_118, НДС10, НДС10_110, НДС0, БезНДС и другие.
Основное неудобство такого подхода заключается в том, что по всему коду конфигурации — в общих модулях, модулях менеджеров документов, макетах печати, запросах и схемах компоновки данных (СКД) — были жестко прописаны прямые обращения к элементам этого перечисления. Например, расчет суммы НДС в запросах часто выглядел следующим образом:
|ВЫБОР
| КОГДА Товары.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС18)
| ИЛИ Товары.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.НДС18_118)
| ТОГДА ВЫРАЗИТЬ(Товары.СуммаПродажи * 0.18 / 1.18 КАК ЧИСЛО(15, 2))
| ИНАЧЕ 0
|КОНЕЦ
А в программных модулях можно было встретить подобные конструкции сопоставления текстовых или перечислимых типов с числовыми значениями для выполнения расчетов:
Если СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
ЗначениеСтавкиНДС = 18;
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
ЗначениеСтавкиНДС = 18;
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда
ЗначениеСтавкиНДС = 10;
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
ЗначениеСтавкиНДС = 10;
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС0 Тогда
ЗначениеСтавкиНДС = 0;
КонецЕсли;
При первом анализе такой архитектуры у разработчиков возникает паника: кажется, что при добавлении новой ставки придется вручную переписать тысячи строк кода во всей конфигурации. Ниже мы детально разберем, как минимизировать трудозатраты и решить эту задачу эффективно.
Если ваше предприятие работает на сильно доработанной конфигурации, которую невозможно быстро обновить до актуальных версий, вам придется вносить изменения вручную или использовать механизм расширений. Проанализируем алгоритм правильного внедрения новой ставки НДС за минимальное время.
СтавкиНДС. Добавьте в него новые значения для прямой и обратной ставок. Например, для ставки 20% это будут значения НДС20 и НДС20_120. Для ставки 22% — соответственно НДС22 и НДС22_122..НДС18. Обязательно установите галочки для поиска во всех свойствах, модулях, макетах и формах. Это позволит вам локализовать все места, где система обращается к базовой ставке НДС.ЦенообразованиеКлиентСервер (или аналогичный модуль работы со ставками в вашей версии конфигурации). Найдите функцию, отвечающую за получение числового значения ставки, например ПолучитьСтавкуНДСЧислом. Добавьте туда обработку вашего нового значения перечисления:
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
Возврат 20;
СтавкиНДС и дорабатываемые общие модули в Расширение конфигурации. В расширении вы сможете безопасно добавить новые значения перечисления и переопределить методы расчета налога через аннотацию &Вместо.Фирма 1С признала неудобство старой схемы работы с НДС. В современных версиях «1С:Управление торговлей» (начиная с редакции 11.5) этот механизм был полностью переработан и переведен на гибкие рельсы.
Рассмотрим, как устроена работа со ставками НДС сейчас:
Этот инструмент позволяет в удобном полуавтоматическом режиме перевести вашу информационную базу на новые ставки. Разберем принцип работы этого помощника:
Номенклатура (в современных релизах ставка НДС в карточке номенклатуры является периодическим реквизитом);Виды номенклатуры;Договоры с контрагентами;Договоры между организациями.Выбор метода добавления новой ставки НДС напрямую зависит от того, какую версию конфигурации использует ваше предприятие:
Если вы работаете на старых версиях (УТ 11.0 – 11.4), оптимальным решением будет использование расширения конфигурации, точечная модификация функций получения числового значения ставки в общем модуле ценообразования и аккуратное обновление запросов по ключевым точкам, найденным через глобальный поиск.
Если же вы используете современную редакцию УТ 11.5, вам не потребуется программирование. Достаточно своевременно обновлять конфигурацию, чтобы новые законодательные ставки появлялись в системе автоматически, и использовать встроенное рабочее место «Замена ставок НДС» для актуализации данных в карточках товаров и договорах.