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