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