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

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

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

Анализ стратегии реализации

Прежде чем приступать к кодингу, проанализируем три основных пути решения задачи:

  1. Полное обновление конфигурации. Самый правильный метод, но наиболее трудозатратный для перепаханных баз. Потребует переноса всех доработок в расширения или их повторного внедрения.
  2. Добавление кода вручную. Оптимальный вариант для «закрытых» баз. Мы добавляем новые значения в перечисления и правим функции расчета.
  3. Подмена ставки 18% на 20%. Крайне опасный метод, который сделает невозможным перепроведение старых документов и печать корректных форм за прошлые годы.

Рассмотрим подробнее второй вариант — внедрение поддержки 20% через изменение метаданных и программного кода.

Шаг 1: Изменение метаданных

Первым делом нам необходимо внести изменения в перечисления, которые отвечают за выбор ставки НДС в документах и справочниках. Проанализируем объект ПеречислениеСсылка.СтавкиНДС.

Добавим в него два новых значения:

Важный момент: При добавлении значений обратите внимание на синонимы. Именно они выводятся в печатные формы (счета-фактуры, ТОРГ-12). Если вы просто измените синоним у существующей ставки 18%, то во всех старых документах при печати также отобразится 20%, что является грубой ошибкой.

Шаг 2: Реализация логики расчета

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

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


Функция ПолучитьСтавкуНДСЧислом(СтавкаНДС) Экспорт
    Если СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20") 
        Или СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20_120") Тогда
        Возврат 0.2;
    ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС18") 
        Или СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС18_118") Тогда
        Возврат 0.18;
    // ... остальная логика для 10%, 0% и т.д.
    КонецЕсли;
    Возврат 0;
КонецФункции

Аналогичные правки необходимо внести во всех местах, где встречается жесткое условие Если Ставка = НДС18 Тогда. Проанализируем систему с помощью глобального поиска по строке "НДС18".

Шаг 3: Автоматическая подстановка ставки в документы

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

В современных редакциях УТ 11 за это отвечает механизм «Структура действий». Разберем, как модифицировать процедуру заполнения ставки НДС в строке табличной части:


Процедура ЗаполнитьСтавкуНДСВСтрокеТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения) Экспорт
    ДатаДокумента = СтруктураДействий.Дата;
    ГраницаПерехода = '20190101000000';
    
    Если ТекущаяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 И ДатаДокумента >= ГраницаПерехода Тогда
        ТекущаяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
    ИначеЕсли ТекущаяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 И ДатаДокумента >= ГраницаПерехода Тогда
        ТекущаяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120;
    КонецЕсли;
    
    // Вызов стандартного пересчета суммы НДС
    ОбработкаТабличныхЧастейКлиентСервер.ПересчитатьСуммуНДС(ТекущаяСтрока, СтруктураДействий.НалогообложениеНДС);
КонецПроцедуры

Шаг 4: Тонкости печатных форм и отчетов

Выясним причину, по которой печатные формы могут отображать некорректные данные. Большинство печатных форм в УТ 11 используют данные непосредственно из табличных частей документов. Однако в некоторых случаях (например, внешние печатные формы) алгоритм может быть завязан на синонимы.

Если вы используете Электронный документооборот (ЭДО), ручного добавления перечисления будет недостаточно. Вам потребуется обновить XDTO-пакеты, так как формат выгрузки XML жестко привязан к государственным стандартам. Без обновления конфигурации или существенной доработки модулей ЭДО отправка электронных УПД со ставкой 20% может завершиться ошибкой парсинга на стороне оператора или контрагента.

Шаг 5: Проблема «закрытых» модулей

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

Шаг 6: Корректировки и возвраты (переходный период)

Рассмотрим сложный случай: клиент возвращает товар в 2019 году, который был куплен в 2018 году по ставке 18%. Согласно законодательству, возврат должен оформляться по той же ставке, которая была в исходной реализации. При ручной реализации убедитесь, что ваши функции «умного» заполнения ставки не подменяют принудительно 18% на 20% в документах ВозвратТоваровОтКлиента и КорректировкаРеализации, если базовый документ был создан до 01.01.2019.

Рекомендации по тестированию

После внесения правок обязательно проверим следующие сценарии:

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

Резюме: Добавление новой ставки НДС 20% в УТ 11 «вручную» — задача выполнимая за один рабочий день программиста, если не требуется поддержка сложной регламентированной отчетности и ЭДО непосредственно в торговой базе. Основное внимание стоит уделить функции ПолучитьСтавкуНДСЧислом и сохранению историчности данных для корректной работы со старыми документами.

← На главную