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

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

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

Штатная настройка через параметры выбора в СКД

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

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

После такой настройки при нажатии «Показать все» платформа автоматически передаст структуру отбора в динамический список открываемой формы выбора документа. Пользователю сразу откроется отфильтрованный список.

Ограничения и нюансы использования «Параметров выбора»

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

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

Альтернативный вариант: динамический отбор через «Связи параметров выбора»

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

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

Программные способы для сложных отборов

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

1. Фильтрация в форме выбора документа:

В модуле формы выбора документа в процедуре ПриСозданииНаСервере можно проверить контекст вызова и наложить отбор на динамический список формы программно:


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

2. Программное заполнение параметров выбора элемента формы:

Если у отчета используется собственная форма, в событии НачалоВыбора элемента управления отчета можно программно сформировать и передать массив параметров выбора:


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

3. Использование модуля менеджера документа:

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

Таким образом, для простой фильтрации по конкретному значению оптимально использовать стандартные Параметры выбора в схеме СКД (Отбор.ИмяРеквизита). Это исключает необходимость изменения программного кода и полностью решает задачу средствами платформы.

← На главную