Как ограничить список выбора для параметров СКД без создания своей формы?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Промышленность, строительство и АПК
← На главную

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

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

Подготовка внешней обработки или отчета

Если вы работаете с внешним отчетом, первым делом необходимо «подсказать» системе, что вы планируете вмешаться в процесс настройки формы. Для этого в модуле объекта отчета нужно реализовать процедуру СведенияОВнешнейОбработке, в которой мы установим флаг использования настроек формы:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
    ПараметрыРегистрации.ОпределитьНастройкиФормы = Истина;
    Возврат ПараметрыРегистрации;
КонецФункции

Далее нам необходимо обозначить, что мы будем переопределять параметры выбора. Это делается в процедуре ОпределитьНастройкиФормы:


Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
    Настройки.События.ПриОпределенииПараметровВыбора = Истина;
КонецПроцедуры

Реализация логики ограничения выбора

Самое интересное происходит в обработчике ПриОпределенииПараметровВыбора. Именно здесь мы будем определять, какие именно значения будут доступны пользователю. Рассмотрим два способа реализации этой задачи.

Способ 1: Использование списка значений

Этот метод подходит, когда список разрешенных элементов невелик и известен заранее. Мы можем программно сформировать СписокЗначений и передать его в параметры настройки.


Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт
    Если ТипЗнч(СвойстваНастройки.ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
        Если СвойстваНастройки.ЭлементКД.Параметр = Новый ПараметрКомпоновкиДанных("МойПараметр") Тогда
            
            СписокДоступных = Новый СписокЗначений;
            СписокДоступных.Добавить(Справочники.МойСправочник.НайтиПоКоду("001"));
            СписокДоступных.Добавить(Справочники.МойСправочник.НайтиПоКоду("002"));
            
            СвойстваНастройки.ЗначенияДляВыбора = СписокДоступных;
            СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = Истина;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Обратите внимание на свойство ОграничиватьВыборУказаннымиЗначениями. Если установить его в Истина, пользователь будет ограничен исключительно теми значениями, которые мы передали, и не сможет выбрать что-то «извне» через механизм выбора элементов.

Способ 2: Использование запроса для динамического выбора

Если список элементов должен формироваться динамически, вы можете воспользоваться свойством ЗапросЗначенийВыбора. Это позволяет эффективно отфильтровать данные средствами СУБД, что особенно важно при работе с большими объемами информации.


Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт
    Если СвойстваНастройки.ОписаниеТипов.СодержитТип(Тип("СправочникСсылка.СтруктураПредприятия")) Тогда
        
        СписокДоступных = Новый Массив;
        СписокДоступных.Добавить(Справочники.СтруктураПредприятия.НайтиПоНаименованию("Пример1"));
        
        Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ 
                | СтруктураПредприятия.Ссылка 
                | ИЗ Справочник.СтруктураПредприятия КАК СтруктураПредприятия 
                | ГДЕ СтруктураПредприятия.Ссылка В(&СписокДоступных)";
                
        СвойстваНастройки.ЗапросЗначенийВыбора.Текст = Текст;
        СвойстваНастройки.ЗапросЗначенийВыбора.Параметры.Вставить("СписокДоступных", СписокДоступных);
    КонецЕсли;
КонецПроцедуры

Ключевые рекомендации

При настройке данных параметров придерживайтесь следующих правил:

  1. Точечная настройка: Всегда проверяйте, какой именно параметр вы настраиваете, сравнивая СвойстваНастройки.ЭлементКД.Параметр. Иначе ограничение может сработать для всех полей с аналогичным типом данных в отчете.
  2. Использование БСП: Данный функционал является частью БСП. Если в вашей конфигурации отчет не использует типовые механизмы вариантов отчетов, этот метод может потребовать дополнительной адаптации.
  3. Анализ типовых решений: Самый надежный источник примеров — это демо-база БСП. Разработчики 1С часто используют ПриОпределенииПараметровВыбора для реализации сложных фильтров в отчетах. Изучение этих модулей даст вам понимание того, как писать код максимально надежно и чисто.

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

← На главную