Почему в списке выбора перечисления СтавкиНДС нет ставки 22% и как это исправить?

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

При переходе на новые релизы конфигурации «1С:Бухгалтерия предприятия» разработчики и пользователи нередко сталкиваются с ситуацией, когда добавленные законодательные ставки налога (например, 22% и 22%/122%) отсутствуют в выпадающем списке выбора. При этом, если начать вводить цифры «22» вручную с клавиатуры, система без проблем находит и подставляет нужное значение. Подобное поведение наблюдается как в типовых документах, так и во вновь созданных внешних обработках с реквизитом типа ПеречислениеСсылка.СтавкиНДС.

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

Причина поведения: фильтрация по дате в модуле менеджера

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

Откроем конфигуратор и обратим внимание на перечисление СтавкиНДС, а именно на его модуль менеджера. В нем переопределен платформенный обработчик события ОбработкаПолученияДанныхВыбора. Рассмотрим логику его работы:

  1. Проверка периода действия: процедура анализирует контекст вызова. В типовых документах через механизм СвязиПараметровВыбора в процедуру передается дата документа. Если дата документа меньше даты вступления изменений в силу, новая ставка принудительно исключается из формируемого массива значений.
  2. Определение даты по умолчанию: если поле ввода находится в произвольной форме или новой внешней обработке, связь с реквизитом даты отсутствует. В этом случае алгоритм берет значение функции ТекущаяДатаСеанса(). Если текущая дата сеанса предшествует дате начала применения ставки, значение 22% отфильтровывается и не выводится в выпадающем окне.
  3. Разделение логики быстрого выбора и подбора по строке: когда пользователь нажимает кнопку выпадающего списка, параметр СтрокаПоиска пуст, и срабатывает жесткий отбор. Однако при вводе символов вручную (например, «22») платформа запускает режим поиска по подстроке. Если в кодовой ветке при наличии значения в Параметры.СтрокаПоиска управление передается стандартной обработке (СтандартнаяОбработка = Истина), платформа выполняет прямой поиск по синонимам предопределенных значений перечисления, игнорируя наложенный фильтр по дате.

Способы решения и варианты тестирования

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

Вариант 1. Тестирование в типовых документах конфигурации

Если мы работаем со стандартным документом (например, «Поступление (акт, накладная, УПД)» или «Реализация (акт, накладная, УПД)»), список выбора динамически адаптируется под дату самого документа. Проверим это:

  1. Откроем нужный документ и изменим значение в поле «Дата» на дату, соответствующую периоду начала действия ставки 22% или позже.
  2. Перейдем в табличную часть «Товары» или «Услуги» и нажмем кнопку выбора в колонке «% НДС».
  3. Убедимся, что ставка 22% появилась в списке доступных вариантов без необходимости ручного ввода с клавиатуры.

Важно: если обойти интерфейсное ограничение вводом строки «22» в документе с текущей датой до вступления закона в силу, типовые алгоритмы проверки при проведении документа заблокируют запись и выдадут ошибку контроля применения ставок НДС.

Вариант 2. Проверка работы в пользовательском режиме для всей информационной базы

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

  1. Перейдем в раздел «Главное» или «Персональные настройки».
  2. Установим значение реквизита «Рабочая дата» на период действия ставки 22%.
  3. При тестировании на копии базы в клиент-серверном варианте также можно временно изменить системную дату на сервере 1С:Предприятия.

Вариант 3. Настройка собственных форм и внешних обработок

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Элементы.СтавкаНДС.СписокВыбора.Очистить();
    Для Каждого ЗначениеПеречисления Из Метаданные.Перечисления.СтавкиНДС.ЗначенияПеречисления Цикл
        Элементы.СтавкаНДС.СписокВыбора.Добавить(Перечисления.СтавкиНДС[ЗначениеПеречисления.Имя]);
    КонецЦикла;
КонецПроцедуры

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

Объект.СтавкаНДС = Перечисления.СтавкиНДС.НДС22;

На прямое программное присвоение значения в коде платформенные события получения данных выбора не влияют.

← На главную