Как программно установить текущий элемент структуры настроек СКД в 1С?

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

Часто при разработке отчетов на системе компоновки данных (СКД) перед программистами встает задача упростить интерфейс для пользователя. Одной из таких задач является автоматическая активация отборов конкретной группировки отчета при его открытии. Разберем, как реализовать подобную логику, основываясь на практическом опыте решения подобных задач.

Постановка задачи и анализ ситуации

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

Важно понимать, что прямого метода вроде УстановитьТекущийЭлементСтруктуры() в API платформы не существует. Поэтому нам придется комбинировать методы работы с элементами формы и имитацию действий пользователя.

Шаг 1: Подготовка элементов формы

Для начала убедимся, что на форме правильно размещены элементы:

  1. Добавьте на форму табличное поле с типом данных КомпоновщикНастроек.Настройки.
  2. Выведите командную панель, привязанную к этому табличному полю, и добавьте стандартную кнопку Текущий элемент структуры настроек.
  3. Для самого табличного поля (назовем его СтруктураОтчета) установите в свойствах признак Активизировать по умолчанию. Это позволит системе сфокусироваться на нем при открытии формы.

Шаг 2: Реализация логики программного выделения

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

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


// Устанавливаем текущую строку на нужную группировку
// Например, берем первый элемент структуры
Если КомпоновщикНастроек.Настройки.Структура.Количество() > 0 Тогда
    ЭлементыФормы.СтруктураОтчета.ТекущаяСтрока = КомпоновщикНастроек.Настройки.Структура[0];
КонецЕсли;

Шаг 3: Имитация нажатия на кнопку для обновления отборов

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


Попытка
    ОбъектShell = Новый COMОбъект("Wscript.Shell");
    // Эмулируем нажатие клавиш, вызывающих действие
    // Например, сочетание Ctrl+9, привязанное к кнопке
    ОбъектShell.SendKeys("^9");
Исключение
    Сообщить(ОписаниеОшибки());
КонецПопытки;

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

Альтернативный взгляд на задачу

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

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

← На главную