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

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

При разработке отчетов на базе Системы компоновки данных (СКД) часто возникает задача сузить круг элементов, доступных пользователю для выбора в параметрах. Типичный пример: в справочнике «Номенклатура» или «Контрагенты» создано множество папок, но для конкретного отчета значения должны выбираться только из одной определенной группы. Использование жесткого списка «Доступных значений» не всегда удобно, так как при добавлении новых элементов в справочник отчет придется постоянно обновлять. Рассмотрим, как решить эту задачу более элегантными и динамическими способами.

Способ 1. Настройка параметров выбора в схеме СКД (без программирования)

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

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

Проанализируем важный нюанс: если нам нужно, чтобы пользователь мог выбирать элементы не только из указанной группы, но и из всех её дочерних подпапок, в колонке Вид сравнения следует установить значение ВИерархии. Это обеспечит автоматическое включение всех новых элементов, созданных внутри этой структуры, без внесения изменений в конфигурацию.

Способ 2. Использование связей параметров выбора

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

Для реализации этого алгоритма выполним следующие действия:

  1. В схеме СКД на закладке Параметры выберем параметр, который должен фильтроваться (в нашем примере — Подразделение).
  2. Перейдем в колонку Связи параметров выбора.
  3. В открывшемся окне укажем:
    • Поле выбора: Отбор.Родитель (или другое поле, по которому идет связь, например, Отбор.Владелец).
    • Поле связи: имя другого параметра СКД (например, ВидДеятельности).

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

Способ 3. Программная установка отбора в форме отчета

Если логика определения «разрешенной» группы слишком сложна для настройки в визуальном редакторе (например, группа должна определяться в зависимости от прав текущего пользователя или данных из констант), нам поможет программный метод. Для этого необходимо создать форму отчета.

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


&НаКлиенте
Процедура НастройкиПараметрПриНачалеВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    Если Элемент.Имя = "НастройкиПараметрыДанныхЗначениеПараметраНоменклатура" Тогда
        СтандартнаяОбработка = Ложь;
        
        ПараметрыВыбора = Новый Структура;
        // Указываем конкретную группу или получаем её программно
        ГруппаДляВыбора = ПолучитьНужнуюГруппуНаСервере(); 
        
        Отбор = Новый Структура("Родитель", ГруппаДляВыбора);
        ПараметрыВыбора.Вставить("Отбор", Отбор;
        
        // Открываем форму выбора справочника с наложенным фильтром
        ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыВыбора, Элемент);
    КонецЕсли;
    
КонецПроцедуры

Этот метод дает максимальную гибкость, позволяя динамически вычислять условия фильтрации прямо в момент взаимодействия пользователя с интерфейсом.

Способ 4. Ограничение выбора только элементами

Часто при фильтрации по группе возникает сопутствующая задача: запретить пользователю выбирать саму группу-родитель, разрешив выбор только конечных «листовых» элементов. Чтобы реализовать это в СКД, проанализируем свойства параметра:

  1. На закладке Параметры в схеме СКД найдем колонку Тип.
  2. Нажмем на кнопку «Т» (редактирование типа).
  3. В нижней части окна настройки типа найдем свойство Выбор групп и элементов.
  4. Установим значение Элементы.

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

Способ 5. Использование «Быстрого выбора»

Если элементов в целевой группе немного (например, 5–10 штук), мы можем сделать работу пользователя еще удобнее. В свойствах параметра на закладке Параметры установим флаг Быстрый выбор. В сочетании с настроенным Отбор.Родитель в Параметрах выбора, это приведет к тому, что при нажатии на кнопку выбора пользователь увидит не громоздкое дерево справочника, а компактный выпадающий список, содержащий только нужные элементы из заданной группы.

Резюме: Мы рассмотрели несколько способов ограничения выбора в параметрах СКД. Выбор конкретного метода зависит от ваших задач: для простых статических фильтров идеально подходят Параметры выбора в схеме, для зависимых фильтров — Связи параметров, а для сложной бизнес-логики — программное управление в Модуле формы.

← На главную