Как настроить автоматический расчет НДС 20% из суммы «Всего» в 1С:Бухгалтерия предприятия 2.0?

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

При работе в конфигурации «1С:Бухгалтерия предприятия 2.0» (БП 2.0) пользователи часто сталкиваются с проблемой: при ручном вводе суммы в колонку «Всего» в документе «Реализация товаров и услуг» программа автоматически выделяет НДС по старой ставке 18% (коэффициент 18/118), несмотря на то, что в строке наглядно выбрана новая ставка 20%.

В этой статье мы подробно разберем, почему возникает данная ошибка, проанализируем внутренние механизмы работы конфигурации БП 2.0 и рассмотрим пошаговые методы решения проблемы как для типовых, так и для сильно кастомизированных (доработанных) информационных баз.

Выясняем причину: почему программа считает 18% вместо 20%?

Переход на ставку НДС 20% произошел 1 января 2019 года согласно Федеральному закону № 303-ФЗ. В типовых решениях 1С полноценная поддержка новой ставки была реализована в обновлении БП 2.0, начиная с релиза 2.0.66.66. Если ваша база рассчитывает налог некорректно, это происходит по одной из следующих причин:

  1. База не обновлена (ручное добавление ставки в перечисление). Очень часто администраторы или программисты нетиповых баз вручную добавляют значение НДС20 в системное перечисление СтавкиНДС через Конфигуратор. Однако алгоритмы расчетов в общих модулях программы остаются старыми. При изменении поля «Всего» код не находит инструкций для новой ставки и по умолчанию (в блоке Иначе) применяет старую ставку 18%.
  2. Жестко прописанные формулы («хардкод») в коде формы. В измененных конфигурациях формулы обратного расчета НДС часто внедряют прямо в обработчики событий табличных частей формы документа. Код вида СуммаНДС = Округлить(Всего * 18 / 118, 2) продолжает работать по старой схеме, игнорируя выбранное пользователем значение.
  3. Копирование элементов справочника (в нетиповых конфигурациях). Если в вашей базе ставки НДС реализованы через справочник, а не через системное перечисление, то при создании новой ставки «20%» обычным копированием старой «18%» вы могли забыть изменить числовой реквизит внутри карточки (например, «Процент» или «Ставка»). Программа визуально отображает текст «20%», но в расчетах использует числовое значение 18.

Рассмотрим подробнее каждый способ устранения этой проблемы.

---

Способ 1. Официальное обновление конфигурации (рекомендуемый путь)

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

---

Способ 2. Исправление кода в Конфигураторе (для нетиповых баз)

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

Во-первых, найдем функцию, которая преобразует значение перечисления в числовой формат. Как правило, в БП 2.0 эта функция расположена в общем модуле УчетНДС или ОбщегоНазначения и называется ПолучитьСтавкуНДСЧислом. Нам необходимо убедиться, что в ней прописана обработка новой ставки.

Проанализируем пример кода, который необходимо внедрить в эту функцию:


Функция ПолучитьСтавкуНДСЧислом(СтавкаНДС) Экспорт

    Если СтавкаНДС = Перечисления.СтавкиНДС.НДС20 
       Или СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
        Возврат 20;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18 
       Или СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
        Возврат 18;
    ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10 
       Или СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
        Возврат 10;
    Иначе
        Возврат 0;
    КонецЕсли;

КонецФункции

Во-вторых, проверим форму документа РеализацияТоваровУслуг. Нам интересны обработчики ожидания изменения колонок табличной части «Товары» и «Услуги». Откроем модуль формы документа и найдем процедуры ТоварыВсегоПриИзменении и УслугиВсегоПриИзменении.

Обычно расчет происходит через вызов общей процедуры пересчета строки. Убедимся, что в ней нет жестко прописанных констант «18» и «118». Типовой вызов должен выглядеть следующим образом:


Процедура ТоварыВсегоПриИзменении(Элемент)

    СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущаяСтрока;
    
    // Вызываем типовой механизм пересчета строки при изменении поля "Всего"
    ОбработкаТабличныхЧастей.РассчитатьСуммуИНДСПриИзмененииВсего(СтрокаТабличнойЧасти, ЭтотОбъект);

КонецПроцедуры

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

---

Способ 3. Проверка настроек цен и валюты в документе

Иногда расчет «Всего» и НДС отрабатывает не так, как ожидает пользователь, из-за неверно установленного режима налогообложения в конкретном документе. Механика пересчета напрямую зависит от параметров в окне «Цены и валюта» (ссылка находится в шапке документа РеализацияТоваровУслуг):

---

Способ 4. Групповая замена ставок и настройки по умолчанию

Чтобы пользователям не приходилось каждый раз вручную менять ставку с 18% на 20% в каждой строке табличной части, выполним две важные настройки:

  1. Изменим настройки по умолчанию для новых документов. Перейдем в меню Сервис -> Настройки пользователя -> Основные значения для подстановки в документы. Найдем параметр «Основная ставка НДС» и установим для него значение 20%. Теперь при создании любых новых документов программа будет сразу подставлять актуальную ставку.
  2. Обновим ставки в карточках номенклатуры. Чтобы старая ставка 18% не тянулась из справочника товаров и услуг, откроем справочник Номенклатура. Если позиций много, воспользуемся стандартной обработкой «Групповая обработка справочников и документов» (меню Сервис -> Дополнительные отчеты и обработки). Выберем объект «Справочник Номенклатура», добавим отбор по ставке НДС «18%» и установим действие «Изменить реквизит: Ставка НДС» на значение «20%».

Выполнив указанные шаги, мы добьемся корректного и полностью автоматического пересчета всех суммовых показателей при заполнении поля «Всего» в любых документах реализации.

← На главную