Нередко при адаптации типовой конфигурации «1С:Управление торговлей» под специфические требования бизнеса или законодательства других стран возникает необходимость добавить новые значения в перечисление СтавкиНДС (например, ставки 19% и 19/119%). Однако после добавления новых значений разработчик сталкивается с ситуацией: в документах продаж (таких как «Заказ клиента» или «Коммерческое предложение») добавленные ставки доступны для выбора, а в документах закупок («Заказ поставщику», «Поступление товаров услуг») они отсутствуют в выпадающем списке табличной части.
Разберем причины такого поведения конфигурации и пошагово рассмотрим, как правильно подключить новые значения ставок НДС в формы документов и сопутствующие механизмы.
Выясним причину, почему в одних документах новые элементы перечисления отображаются сразу, а в других скрыты:
СтавкиНДС, а программно заполняет свойство СписокВыбора элемента формы. При этом используются только предопределенные типовые значения.Рассмотрим подробнее механизм, отвечающий за состав выпадающего списка. В типовых конфигурациях линейки УТ 11 / КА 2 / ERP для этого предназначен общий модуль УчетНДСПереопределяемый.
Найдем в конфигураторе процедуру ЗаполнитьСписокВыбораСтавокНДС. Именно в ней формируется коллекция доступных ставок, которая затем транслируется в элементы форм документов закупки. Чтобы новые ставки стали доступны, добавим их в результирующий список.
Посмотрим на пример доработки процедуры:
Процедура ЗаполнитьСписокВыбораСтавокНДС(СписокВыбора, Параметры) Экспорт
// Стандартное заполнение списка значений типовой логикой
// ...
// Добавляем новые ставки в список выбора
СписокВыбора.Добавить(Перечисления.СтавкиНДС.НДС19, "19%");
СписокВыбора.Добавить(Перечисления.СтавкиНДС.НДС19_119, "19/119");
КонецПроцедуры
Также проанализируем модуль формы конкретного документа (например, формы документа «Поступление товаров услуг» или «Заказ поставщику»). В модулях форм обратите внимание на процедуры уровня УстановитьСписокВыбораСтавокНДС, а также на обработчики ПриСозданииНаСервере и события изменения параметров налогообложения. Если в них выполняется дополнительная локальная очистка или ручная фильтрация коллекции Элементы.ТоварыСтавкаНДС.СписокВыбора, необходимо явно разрешить новые значения и там.
Добавления значения в перечисление и список выбора недостаточно для корректной работы системы. Если оставить только эти правки, при выборе новой ставки сумма НДС в строке табличной части либо обнулится, либо система выдаст ошибку во время вычислений.
Разберем по шагам, где именно рассчитывается числовое значение ставки:
ЦенообразованиеКлиентСервер и найдем функцию ПолучитьСтавкуНДСЧислом.УчетНДСКлиентСервер, выполняющие математический расчет суммы налога и суммы с НДС.В этих модулях используется жесткое сопоставление элементов перечисления с числовыми коэффициентами. Дополним условие выбора новыми ставками:
Функция ПолучитьСтавкуНДСЧислом(СтавкаНДС) Экспорт
Если СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Или СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
Возврат 18;
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС19 Или СтавкаНДС = Перечисления.СтавкиНДС.НДС19_119 Тогда
Возврат 19;
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Или СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
Возврат 20;
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Или СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
Возврат 10;
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС0 Тогда
Возврат 0;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
После обеспечения интерактивного выбора и корректного расчета сумм в строках обязательно проверим алгоритмы проведения и печати:
Важно помнить: перечисление СтавкиНДС в типовых решениях 1С исторически имеет высокую связанность с программным кодом конфигурации. Любое изменение состава ставок требует ручного контроля десятков процедур (расчет, проведение, печать, регламентированная отчетность, обмен данными).
Именно по этой причине в современных редакциях типовых программ фирмы «1С» разработчики отказались от использования перечисления СтавкиНДС в пользу справочников и периодических регистров сведений, что позволяет настраивать размеры ставок без вмешательства в исходный код системы.