Визуально то, что было, и то, как хотел заказчик, можно увидеть из скриншотов. Теперь распишем программную реализацию.
Сперва рассмотрим заполнение этого подменю пунктами с названиями настроек. В этом нам поможет событие динамического списка "ПриОбновленииСоставаПользовательскихНастроекНаСервере":
&НаСервере
Процедура СписокПриОбновленииСоставаПользовательскихНастроекНаСервере(СтандартнаяОбработка)
// Сперва очищаем кнопки подменю Лис_Настройки
УдалитьКнопкиИзФормы();
Лис_ИдентификаторыКомандНастроек.Очистить();
// Первой кнопкой делаем "Сброс настроек"
ДобавитьКомандуНаФорму(Новый Структура("Представление", "--Сброс--"));
СписокНастроек = ХранилищеПользовательскихНастроекДинамическихСписков.ПолучитьСписок("Документ.ЗаказКлиента.Форма.ФормаСпискаДокументов.Список");
Для Каждого ТекНастройка Из СписокНастроек Цикл
ДобавитьКомандуНаФорму(ТекНастройка);
НоваяСтрока = Лис_ИдентификаторыКомандНастроек.Добавить();
НоваяСтрока.Команда = ТекНастройка.Представление;
НоваяСтрока.Идентификатор = ТекНастройка.Значение;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УдалитьКнопкиИзФормы()
КомандыКУдалению = Новый Массив;
ЭлементыКУдалению = Новый Массив;
Для Каждого ТекКоманда Из Команды Цикл
Если Лев(ТекКоманда.Имя, 16) = "КомандаНастройка" Тогда
КомандыКУдалению.Добавить(ТекКоманда);
КонецЕсли;
КонецЦикла;
Для Каждого ТекЭлемент Из Элементы Цикл
Если Лев(ТекЭлемент.Имя, 16) = "КомандаНастройка" И ТипЗнч(ТекЭлемент) = Тип("КнопкаФормы") Тогда
ЭлементыКУдалению.Добавить(ТекЭлемент);
КонецЕсли;
КонецЦикла;
Для Каждого ТекКоманда Из КомандыКУдалению Цикл
Команды.Удалить(ТекКоманда);
КонецЦикла;
Для Каждого ТекЭлемент Из ЭлементыКУдалению Цикл
Элементы.Удалить(ТекЭлемент);
КонецЦикла;
КонецПроцедуры
Здесь:
Лис_Настройки - группа-подменю, добавленная на командную панель списка, в моем случае имеет заголовок "Фильтры".
Лис_ИдентификаторыКомандНастроек - таблица значений в реквизитах формы. Имеет в колонки:
1) Команда - тип "Строка". Содержит название команды.
2) Идентификатор - тип "Строка". Содержит идентификатор этой команды.
Если необходимо, чтобы состав настроек в нашем подменю обновлялся автоматически после сохранения новой настройки, то вызов "СписокПриОбновленииСоставаПользовательскихНастроекНаСервере" следует поместить в обработчик события этого списка "ПриСохраненииПользовательскихНастроекНаСервере".
Далее идет процедура программного наполнения подменю командами:
&НаСервере
Процедура ДобавитьКомандуНаФорму(ТекНастройка)
Если ТипЗнч(ТекНастройка) = Тип("Структура") Тогда
ИмяКоманды = "КомандаНастройкаСбросНастроек";
Иначе
ИмяКоманды = "КомандаНастройка" + Формат(ТекНастройка.ПолучитьИдентификатор(), "ЧГ=");
КонецЕсли;
Команда = Команды.Добавить(ИмяКоманды);
Команда.Заголовок = ТекНастройка.Представление;
Команда.Действие = "КомандаПрименениеНастройкиПользователя";
НовыйЭлемент = Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Элементы.Лис_Настройки);
НовыйЭлемент.ИмяКоманды = ИмяКоманды;
НовыйЭлемент.Заголовок = ТекНастройка.Представление;
КонецПроцедуры
Теперь рассмотрим код на исполнение через эти команды:
&НаКлиенте
Процедура КомандаПрименениеНастройкиПользователя(Команда)
Если Команда.Имя = "КомандаНастройкаСбросНастроек" Тогда
ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список);
Для Каждого ТекНастройка Из Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
Если ТипЗнч(ТекНастройка) = Тип("ОтборКомпоновкиДанных") Тогда
ТекНастройка.Элементы.Очистить();
КонецЕсли;
КонецЦикла;
Иначе
ПрименитьНастройкуСервер(Команда.Имя);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПрименитьНастройкуСервер(ИмяКоманды)
Команда = Команды.Найти(ИмяКоманды);
// По имени команды находим ее идентификатор в ТЗ
НайденныеСтроки = Лис_ИдентификаторыКомандНастроек.НайтиСтроки(Новый Структура("Команда", Команда.Заголовок));
Если НайденныеСтроки.Количество() Тогда
// Если строка найдена, то получаем настройку по ключу
ВыборкаНастройки = ХранилищеПользовательскихНастроекДинамическихСписков.Выбрать(Новый Структура("КлючОбъекта, КлючНастроек, Пользователь", "Документ.ЗаказКлиента.Форма.ФормаСпискаДокументов.Список", НайденныеСтроки[0].Идентификатор, ПараметрыСеанса.ТекущийПользователь));
Попытка
ВыборкаНастройки.Следующий();
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Список.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ВыборкаНастройки.Настройки);
КонецЕсли;
КонецПроцедуры
ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка описана в типовых модулях УТ11, у меня установлен релиз Управление торговлей, редакция 11.2 (11.2.2.100).