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

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

При разработке управляемых форм нередко возникает задача вернуть динамический список в исходное состояние — сбросить все пользовательские отборы, группировки, сортировки и условное оформление. Разработчики часто пытаются добавить стандартную кнопку Установить стандартные настройки на форму и вызвать её программно, однако сталкиваются с тем, что свойство кнопки ИмяКоманды возвращает пустую строку "", а методов прямого выполнения системных команд в платформе не предусмотрено.

Выясним причину такого поведения платформы и разберем практические способы решения этой задачи.

Почему нельзя программно вызвать стандартную команду формы

В управляемом интерфейсе 1С:Предприятия стандартные команды формы и её элементов (включая команды динамического списка) встроены в ядро платформы. Кнопка, связанная со стандартным действием, не ссылается на объект конфигурации типа КомандаФормы, поэтому встроенный язык не предоставляет доступа к её вызову через код. Попытки использовать конструкции вида ВыполнитьКоманду() для системных действий динамического списка также не приведут к результату.

Чтобы вернуть динамический список к первоначальному виду, необходимо использовать программные механизмы управления настройками. Разберем основные варианты реализации.

Способ 1. Программная очистка коллекций динамического списка

Если требуется сбросить текущие параметры отображения списка «на лету» без перезагрузки всей формы, создадим собственную команду формы и привяжем её к кнопке. В обработчике команды выполним очистку элементов отбора, порядка, группировок и оформления.

Посмотрим на пример реализации обработчика:


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

Если в конфигурации используется Библиотека Стандартных Подсистем (БСП), для корректной очистки отборов, добавленных через подсистему работы со списками, рекомендуется применять функцию общего модуля:


ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список);

Способ 2. Очистка через Компоновщик настроек

Так как динамический список функционирует на базе системы компоновки данных (СКД), его настройки можно сбросить через коллекцию пользовательских настроек компоновщика. Проанализируем пример обхода элементов компоновщика:


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

Способ 3. Удаление сохраненных настроек из системного хранилища

Пользовательские изменения формы и списков автоматически сохраняются платформой в специализированном системном объекте — ХранилищеПользовательскихНастроекДинамическихСписков. Если необходимо полностью стереть сохраненные настройки текущего пользователя, чтобы при следующем открытии форма приняла базовый вид, выполним удаление записи из хранилища на стороне сервера.

Разберем процедуру удаления по шагам:

  1. Сформируем ключ объекта. Ключ строится по шаблону: <ПолноеИмяФормы>.<ИмяРеквизитаСписка>.
  2. Вызовем метод Удалить() у объекта ХранилищеПользовательскихНастроекДинамическихСписков.

Посмотрим на пример кода:


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

Способ 4. Предотвращение загрузки ранее сохраненных настроек

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

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

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

← На главную