При работе с сильно кастомизированными базами «1С:Управление торговлей 11» (особенно старых редакций, таких как 11.3.4) переход на новую ставку НДС часто превращается в серьезную проблему. Типовое обновление может «затереть» множество доработок, а ручное внесение изменений пугает объемом кода. Однако, как показывает практика, задачу можно решить «малой кровью», если понимать архитектуру подсистемы НДС. В этой статье мы разберем по шагам, как добавить ставку 20% вручную, какие модули затронуть и на что обратить внимание, чтобы не «сломать» учет за прошлые периоды.
Прежде чем приступать к кодингу, проанализируем три основных пути решения задачи:
Рассмотрим подробнее второй вариант — внедрение поддержки 20% через изменение метаданных и программного кода.
Первым делом нам необходимо внести изменения в перечисления, которые отвечают за выбор ставки НДС в документах и справочниках. Проанализируем объект ПеречислениеСсылка.СтавкиНДС.
Добавим в него два новых значения:
НДС20 (Синоним: 20%)НДС20_120 (Синоним: 20/120)Важный момент: При добавлении значений обратите внимание на синонимы. Именно они выводятся в печатные формы (счета-фактуры, ТОРГ-12). Если вы просто измените синоним у существующей ставки 18%, то во всех старых документах при печати также отобразится 20%, что является грубой ошибкой.
Теперь нам нужно научить систему понимать, что новые значения перечисления соответствуют числовому множителю 0.20. Основная логика получения числового значения ставки обычно сосредоточена в общем модуле УчетНДСКлиентСервер или УчетНДСПереопределяемый.
Найдем функцию ПолучитьСтавкуНДСЧислом и добавим в нее обработку наших новых значений. Посмотрим на пример кода:
Функция ПолучитьСтавкуНДСЧислом(СтавкаНДС) Экспорт
Если СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20")
Или СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20_120") Тогда
Возврат 0.2;
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС18")
Или СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС18_118") Тогда
Возврат 0.18;
// ... остальная логика для 10%, 0% и т.д.
КонецЕсли;
Возврат 0;
КонецФункции
Аналогичные правки необходимо внести во всех местах, где встречается жесткое условие Если Ставка = НДС18 Тогда. Проанализируем систему с помощью глобального поиска по строке "НДС18".
Чтобы пользователям не приходилось каждый раз выбирать 20% вручную, необходимо реализовать логику выбора ставки в зависимости от даты документа. Для этого проанализируем общие модули, отвечающие за заполнение табличных частей.
В современных редакциях УТ 11 за это отвечает механизм «Структура действий». Разберем, как модифицировать процедуру заполнения ставки НДС в строке табличной части:
Процедура ЗаполнитьСтавкуНДСВСтрокеТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения) Экспорт
ДатаДокумента = СтруктураДействий.Дата;
ГраницаПерехода = '20190101000000';
Если ТекущаяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 И ДатаДокумента >= ГраницаПерехода Тогда
ТекущаяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
ИначеЕсли ТекущаяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 И ДатаДокумента >= ГраницаПерехода Тогда
ТекущаяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120;
КонецЕсли;
// Вызов стандартного пересчета суммы НДС
ОбработкаТабличныхЧастейКлиентСервер.ПересчитатьСуммуНДС(ТекущаяСтрока, СтруктураДействий.НалогообложениеНДС);
КонецПроцедуры
Выясним причину, по которой печатные формы могут отображать некорректные данные. Большинство печатных форм в УТ 11 используют данные непосредственно из табличных частей документов. Однако в некоторых случаях (например, внешние печатные формы) алгоритм может быть завязан на синонимы.
Если вы используете Электронный документооборот (ЭДО), ручного добавления перечисления будет недостаточно. Вам потребуется обновить XDTO-пакеты, так как формат выгрузки XML жестко привязан к государственным стандартам. Без обновления конфигурации или существенной доработки модулей ЭДО отправка электронных УПД со ставкой 20% может завершиться ошибкой парсинга на стороне оператора или контрагента.
Проанализируем ситуацию, упомянутую в обсуждении: некоторые модули, такие как СверкаДанныхПоУчетуНДС, могут быть поставляемыми без исходного кода в некоторых отраслевых решениях или защищенных конфигурациях. Если вам критически важен функционал реестров счетов-фактур или автоматической сверки НДС внутри УТ, и эти модули закрыты — ручной допил не поможет. В этом случае единственным выходом будет обновление до актуального релиза.
Рассмотрим сложный случай: клиент возвращает товар в 2019 году, который был куплен в 2018 году по ставке 18%. Согласно законодательству, возврат должен оформляться по той же ставке, которая была в исходной реализации.
При ручной реализации убедитесь, что ваши функции «умного» заполнения ставки не подменяют принудительно 18% на 20% в документах ВозвратТоваровОтКлиента и КорректировкаРеализации, если базовый документ был создан до 01.01.2019.
После внесения правок обязательно проверим следующие сценарии:
РеализацияТоваровУслуг текущей датой (должна подставиться ставка 20%).НДС20 сопоставилось с аналогичным значением в бухгалтерской базе.Резюме: Добавление новой ставки НДС 20% в УТ 11 «вручную» — задача выполнимая за один рабочий день программиста, если не требуется поддержка сложной регламентированной отчетности и ЭДО непосредственно в торговой базе. Основное внимание стоит уделить функции ПолучитьСтавкуНДСЧислом и сохранению историчности данных для корректной работы со старыми документами.