Как добавить новую ставку НДС в 1С:Управление торговлей 11

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

Учет налога на добавленную стоимость (НДС) — одна из наиболее критичных областей автоматизации торговой деятельности. При изменении налогового законодательства или выходе компании на международные рынки часто возникает необходимость добавить в систему новую ставку НДС (например, 20%, 22% или пониженные ставки 5% и 7% для УСН). Однако разработчики, работающие со старыми версиями «1С:Управление торговлей 11» (УТ 11), часто сталкиваются с тем, что ставки НДС реализованы не в виде динамического справочника, а в виде жестко закодированного перечисления. В этой статье мы подробно разберем, почему так было сделано, как решить эту проблему на старых релизах и как данный механизм устроен в современных версиях УТ 11.5.

Архитектурная проблема старых релизов УТ 11

В ранних версиях линейки УТ 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;
КонецЕсли;

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

Решение проблемы в старых и нетиповых базах (УТ 11.0 – 11.4)

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

  1. Добавление значений в перечисление. Откройте конфигуратор и найдите перечисление СтавкиНДС. Добавьте в него новые значения для прямой и обратной ставок. Например, для ставки 20% это будут значения НДС20 и НДС20_120. Для ставки 22% — соответственно НДС22 и НДС22_122.
  2. Глобальный поиск по конфигурации. Не нужно просматривать каждый модуль вручную. Используйте встроенный инструмент глобального поиска (сочетание клавиш Ctrl + Shift + F). Настройте поиск по строке .НДС18. Обязательно установите галочки для поиска во всех свойствах, модулях, макетах и формах. Это позволит вам локализовать все места, где система обращается к базовой ставке НДС.
  3. Локализация изменений. Практика показывает, что реальных мест, требующих ручного вмешательства, гораздо меньше тысячи (обычно около 30–50 ключевых точек в зависимости от релиза). Большинство расчетов завязано на общие функции.
  4. Доработка общего модуля ценообразования. Проанализируем общий модуль ЦенообразованиеКлиентСервер (или аналогичный модуль работы со ставками в вашей версии конфигурации). Найдите функцию, отвечающую за получение числового значения ставки, например ПолучитьСтавкуНДСЧислом. Добавьте туда обработку вашего нового значения перечисления:
    
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
        Возврат 20;
    
    Это изменение сразу закроет большинство автоматических расчетов в документах конфигурации.
  5. Использование расширений конфигурации. Чтобы не снимать конфигурацию с поддержки и облегчить последующие обновления, настоятельно рекомендуется перенести перечисление СтавкиНДС и дорабатываемые общие модули в Расширение конфигурации. В расширении вы сможете безопасно добавить новые значения перечисления и переопределить методы расчета налога через аннотацию &Вместо.
  6. Массовое заполнение в справочниках. После добавления ставки в перечисление, ее необходимо сопоставить с существующей номенклатурой. Для этого используйте типовую обработку Групповое изменение реквизитов. С ее помощью можно массово заменить ставку НДС в карточках товаров или видах номенклатуры без ручного редактирования каждой позиции.

Современное решение проблемы в актуальных релизах (УТ 11.5)

Фирма 1С признала неудобство старой схемы работы с НДС. В современных версиях «1С:Управление торговлей» (начиная с редакции 11.5) этот механизм был полностью переработан и переведен на гибкие рельсы.

Рассмотрим, как устроена работа со ставками НДС сейчас:

Этот инструмент позволяет в удобном полуавтоматическом режиме перевести вашу информационную базу на новые ставки. Разберем принцип работы этого помощника:

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

Заключение и рекомендации

Выбор метода добавления новой ставки НДС напрямую зависит от того, какую версию конфигурации использует ваше предприятие:

Если вы работаете на старых версиях (УТ 11.0 – 11.4), оптимальным решением будет использование расширения конфигурации, точечная модификация функций получения числового значения ставки в общем модуле ценообразования и аккуратное обновление запросов по ключевым точкам, найденным через глобальный поиск.

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

← На главную