Почему новые ставки НДС не отображаются в документах закупки в 1С:Управление торговлей 11?

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

Нередко при адаптации типовой конфигурации «1С:Управление торговлей» под специфические требования бизнеса или законодательства других стран возникает необходимость добавить новые значения в перечисление СтавкиНДС (например, ставки 19% и 19/119%). Однако после добавления новых значений разработчик сталкивается с ситуацией: в документах продаж (таких как «Заказ клиента» или «Коммерческое предложение») добавленные ставки доступны для выбора, а в документах закупок («Заказ поставщику», «Поступление товаров услуг») они отсутствуют в выпадающем списке табличной части.

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

Причины разного поведения документов продажи и закупки

Выясним причину, почему в одних документах новые элементы перечисления отображаются сразу, а в других скрыты:

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

Шаг 1. Переопределение списка выбора ставок НДС

Рассмотрим подробнее механизм, отвечающий за состав выпадающего списка. В типовых конфигурациях линейки УТ 11 / КА 2 / ERP для этого предназначен общий модуль УчетНДСПереопределяемый.

Найдем в конфигураторе процедуру ЗаполнитьСписокВыбораСтавокНДС. Именно в ней формируется коллекция доступных ставок, которая затем транслируется в элементы форм документов закупки. Чтобы новые ставки стали доступны, добавим их в результирующий список.

Посмотрим на пример доработки процедуры:


Процедура ЗаполнитьСписокВыбораСтавокНДС(СписокВыбора, Параметры) Экспорт

    // Стандартное заполнение списка значений типовой логикой
    // ...

    // Добавляем новые ставки в список выбора
    СписокВыбора.Добавить(Перечисления.СтавкиНДС.НДС19, "19%");
    СписокВыбора.Добавить(Перечисления.СтавкиНДС.НДС19_119, "19/119");

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

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

Шаг 2. Доработка числового расчета суммы НДС

Добавления значения в перечисление и список выбора недостаточно для корректной работы системы. Если оставить только эти правки, при выборе новой ставки сумма НДС в строке табличной части либо обнулится, либо система выдаст ошибку во время вычислений.

Разберем по шагам, где именно рассчитывается числовое значение ставки:

  1. Перейдем в общий модуль ЦенообразованиеКлиентСервер и найдем функцию ПолучитьСтавкуНДСЧислом.
  2. Проверим функции модуля УчетНДСКлиентСервер, выполняющие математический расчет суммы налога и суммы с НДС.

В этих модулях используется жесткое сопоставление элементов перечисления с числовыми коэффициентами. Дополним условие выбора новыми ставками:


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

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

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

Шаг 3. Проведение по регистрам и печатные формы

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

  1. Модули проведения: Проанализируем движения документа по регистрам накопления («НДС предъявленный», «НДС покупки», взаиморасчеты). Если в коде формирования движений присутствуют жесткие проверки на конкретные значения перечисления, их нужно расширить.
  2. Печатные формы: В процедурах формирования печатных форм (счет-фактура, УПД, товарная накладная ТОРГ-12) строковое представление ставки налога («19%», «19/119») часто формируется на основе сопоставления значений перечисления. Добавьте новые ветки условий для корректного вывода данных в печатные бланки.
  3. Синхронизация данных: Если база обменивается данными с конфигурацией «1С:Бухгалтерия предприятия», стандартные правила конвертации не распознают добавленные значения без синхронной доработки конфигурации-приемника и обновления правил обмена.

Ограничение архитектуры перечислений

Важно помнить: перечисление СтавкиНДС в типовых решениях 1С исторически имеет высокую связанность с программным кодом конфигурации. Любое изменение состава ставок требует ручного контроля десятков процедур (расчет, проведение, печать, регламентированная отчетность, обмен данными).

Именно по этой причине в современных редакциях типовых программ фирмы «1С» разработчики отказались от использования перечисления СтавкиНДС в пользу справочников и периодических регистров сведений, что позволяет настраивать размеры ставок без вмешательства в исходный код системы.

← На главную