При разработке отчетов на системе компоновки данных (СКД) с типовой формой отчета БСП часто возникает задача: в параметрах отчета пользователь выбирает ссылочный документ, но список документов при нажатии кнопки «Показать все» перегружен лишними данными. Например, требуется, чтобы в списке выбора отображались только документы с конкретным видом операции, избавляя пользователя от необходимости каждый раз настраивать отбор вручную через расширенный поиск или меню «Еще». Разберем, как реализовать такой отбор штатными средствами схемы компоновки данных, а также рассмотрим альтернативные варианты для более сложных сценариев.
Для того чтобы ограничить выбор документов конкретным значением реквизита, не требуется писать программный код в форме отчета или переопределять модуль объекта. Платформа «1С:Предприятие 8» предоставляет механизм передачи параметров выбора непосредственно из схемы компоновки данных. Разберем по шагам, как настроить этот отбор:
Отбор.ВидОперации.Перечисление.ВидыПоступления.ПоступлениеТоваров) или другое конкретное значение.После такой настройки при нажатии «Показать все» платформа автоматически передаст структуру отбора в динамический список открываемой формы выбора документа. Пользователю сразу откроется отфильтрованный список.
Проанализируем особенности работы стандартного механизма, с которыми можно столкнуться на практике:
Параметры выбора в СКД можно задать только жесткое равенство одному конкретному значению. Задать условие вида «В списке», диапазон дат или неравенство стандартными средствами этой таблицы нельзя.Отбор.ИмяРеквизита работает автоматически только тогда, когда в основном запросе динамического списка формы выбора присутствует поле с точно таким же именем. Если форма выбора переопределена разработчиком и поле переименовано или скрыто, платформенный отбор не сработает.Рассмотрим ситуацию, когда вид операции или другой реквизит для фильтрации не фиксирован жестко, а должен зависеть от значения другого параметра отчета или настройки, выбранной пользователем. Для этого вместо жестких «Параметров выбора» настраиваются Связи параметров выбора:
Отбор.ВидОперации) и свяжем его с соответствующим полем или параметром схемы компоновки данных.Если требуется применить сложное условие (например, передать список значений для вида операции), штатных свойств СКД будет недостаточно. Разберем, какими программными методами можно решить эту задачу:
1. Фильтрация в форме выбора документа:
В модуле формы выбора документа в процедуре ПриСозданииНаСервере можно проверить контекст вызова и наложить отбор на динамический список формы программно:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Проверим, передан ли параметр вызова или настроим отбор по умолчанию
Если Параметры.Свойство("ТолькоПоступления") ИЛИ ЭтоНужныйКонтекст Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВидОперации");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.ПравоеЗначение = СписокНужныхВидовОпераций;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
КонецЕсли;
КонецПроцедуры
2. Программное заполнение параметров выбора элемента формы:
Если у отчета используется собственная форма, в событии НачалоВыбора элемента управления отчета можно программно сформировать и передать массив параметров выбора:
&НаКлиенте
Процедура ПараметрДокументНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый ПараметрВыбора("Отбор.ВидОперации", НужныйВидОперации));
Элемент.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);
КонецПроцедуры
3. Использование модуля менеджера документа:
Для переопределения выпадающего списка быстрого ввода по строке можно задействовать событие ОбработкаПолученияДанныхВыбора в модуле менеджера соответствующего документа, отфильтровав результаты выборки на сервере.
Таким образом, для простой фильтрации по конкретному значению оптимально использовать стандартные Параметры выбора в схеме СКД (Отбор.ИмяРеквизита). Это исключает необходимость изменения программного кода и полностью решает задачу средствами платформы.