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