Как программно установить стандартные настройки динамического списка в 1С?

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

При разработке интерфейсов в управляемом приложении 1С часто возникает задача вернуть динамический список в его исходное состояние, заданное разработчиком в конфигураторе. Пользователи могут накладывать свои отборы, изменять порядок колонок, группировки и условное оформление. Интерактивно восстановить вид по умолчанию не составляет труда с помощью стандартной команды формы Все действия – Установить стандартные настройки. Однако при реализации сложной бизнес-логики требуется выполнять этот сброс программно — например, при открытии специализированных форм выбора, при смене режима работы или по нажатию отдельной кнопки. Разберем подробно, как устроен механизм настроек динамического списка и какими способами можно вернуть его к стандартному виду средствами встроенного языка 1С.

Прежде чем перейти к конкретным решениям, проанализируем структуру хранения настроек. В динамическом списке платформа 1С разделяет настройки компоновки данных на три основных уровня:

  1. ФиксированныеНастройки (Список.КомпоновщикНастроек.ФиксированныеНастройки) — жесткие ограничения разработчика, которые не видны пользователю в форме и не могут быть изменены или сброшены стандартными командами.
  2. Настройки (Список.КомпоновщикНастроек.Настройки) — базовые настройки списка по умолчанию, сформированные разработчиком на этапе конфигурирования.
  3. ПользовательскиеНастройки (Список.КомпоновщикНастроек.ПользовательскиеНастройки) — пользовательский слой (отборы, сортировки, оформление), который сохраняется платформой между сеансами и переопределяет базовые настройки.

Именно сброс или блокировка слоя ПользовательскиеНастройки позволяет восстановить исходный вид списка. Рассмотрим по шагам основные подходы к решению этой задачи.

Способ 1. Отмена загрузки пользовательских настроек при открытии формы

Если задача заключается в том, чтобы форма списка или выбора всегда открывалась в исходном виде без применения ранее сохраненных настроек пользователя, наиболее элегантным решением является использование стандартного события таблицы формы.

Рассмотрим событие таблицы списка ПередЗагрузкойПользовательскихНастроекНаСервере. В палитре свойств элемента формы (таблицы, привязанной к реквизиту типа ДинамическийСписок) создадим обработчик:


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

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

Если требуется не полностью сбрасывать настройки, а лишь временно отключить активность всех пользовательских элементов (оставив пользователю возможность включить их вручную в панели), можно обойти коллекцию настроек циклом:


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

Способ 2. Программный сброс настроек «на лету» (по кнопке или событию)

Когда требуется вернуть стандартный вид списка в процессе работы пользователя без перезакрытия формы (эквивалент нажатия интерактивной кнопки «Установить стандартные настройки»), необходимо программно очистить пользовательские настройки компоновщика.

Посмотрим на пример процедуры серверного обработчика команды сброса:


&НаСервере
Процедура ВосстановитьСтандартныеНастройкиНаСервере()
    
    // Вариант 1: Загрузка нового пустого объекта пользовательских настроек
    ПустыеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
    Список.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПустыеНастройки);
    
    // Вариант 2: Очистка текущих элементов и повторная загрузка
    // Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Очистить();
    // Список.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(Список.КомпоновщикНастроек.ПользовательскиеНастройки);
    
КонецПроцедуры

После вызова метода ЗагрузитьПользовательскиеНастройки динамический список автоматически перечитывает данные и применяет базовую конфигурацию компоновщика.

Способ 3. Отключение автоматического сохранения настроек списка

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

  1. В редакторе формы выделим реквизит Список.
  2. В палитре свойств найдем флаг Автоматическое сохранение пользовательских настроек.
  3. Установим его значение в Ложь.

Также можно управлять уникальностью настроек программно в обработчике ПриСозданииНаСервере, присваивая новый ключ настроек при каждом открытии:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Генерация уникального ключа заставляет платформу игнорировать старые настройки
    Список.КлючТекущихПользовательскихНастроек = Новый УникальныйИдентификатор;
    
КонецПроцедуры

Способ 4. Полная очистка настроек в хранилище системных настроек

В ситуациях, когда некорректные настройки пользователя уже сохранились в базе данных и вызывают ошибки отображения, их можно удалить непосредственно из хранилища настроек информационной базы:


&НаСервере
Процедура ОчиститьСохраненныеНастройкиФормы(ИмяТекущегоПользователя)
    
    // Формируем ключ объекта: "ТипОбъекта.ИмяОбъекта.ИмяФормы.ИмяРеквизитаСписка"
    КлючОбъекта = "Справочник.Номенклатура.Форма.ФормаСписка.Список";
    
    ХранилищеПользовательскихНастроекДинамическихСписков.Удалить(
        КлючОбъекта,
        Неопределено,
        ИмяТекущегоПользователя
    );
    
КонецПроцедуры

Таким образом, комбинируя использование событий формы и методов объекта КомпоновщикНастроек, можно гибко управлять состоянием динамических списков и восстанавливать стандартные настройки в любых сценариях работы приложения.

← На главную