Как реализовать включение и отключение группировок отчета СКД из формы

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

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

Способ 1. Использование быстрых пользовательских настроек

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

Разберем по шагам, как вывести управление использованием группировки в область быстрых настроек:

  1. Откроем схему компоновки данных и перейдем на закладку Настройки.
  2. В дереве настроек выберем нужную группировку, использование которой мы хотим регулировать.
  3. В нижней части окна настроек найдем кнопку Свойства пользовательской настройки (обычно она обозначена иконкой с изображением шестеренки).
  4. В появившемся диалоговом окне установим флажок Включать в пользовательские настройки.
  5. В поле Режим редактирования выберем значение Быстрый доступ.

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

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

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

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


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

Важно помнить: если вы программно меняете Настройки, а не ПользовательскиеНастройки, убедитесь, что приоритеты применения настроек в вашем отчете настроены верно. В современных управляемых формах чаще всего требуется работать именно с коллекцией Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы, находя нужный элемент по его ИдентификаторПользовательскойНастройки.

Способ 3. Модификация схемы перед компоновкой результата

Проанализируем ситуацию, когда управление группировками зависит от сложной логики. В этом случае наиболее эффективным местом для внесения изменений будет модуль объекта отчета, а именно обработчик события ПриКомпоновкеРезультата. Это позволяет нам перехватить процесс генерации отчета и изменить его структуру «на лету». Для этой задачи есть набор инструментов разработчика и консоль СКД.

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


Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь; // Берем управление в свои руки
    
    // Создаем макет компоновки
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    // Получаем текущие настройки (с учетом тех, что пользователь нащелкал на форме)
    ТекущиеНастройки = КомпоновщикНастроек.ПолучитьНастройки();
    
    // Здесь мы можем программно обойти ТекущиеНастройки.Структура
    // и включить/выключить группировки на основе параметров.
    // Например, если на форме есть реквизит "ВыводитьНоменклатуру"
    
    Для Каждого Группировка Из ТекущиеНастройки.Структура Цикл
        Если Группировка.Имя = "ГруппировкаНоменклатура" Тогда
            Группировка.Использование = ЭтотОбъект.ВыводитьНоменклатуру;
        КонецЕсли;
    КонецЦикла;

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

Способ 4. Использование панели вариантов отчета

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

Вместо того чтобы заставлять пользователя включать/выключать отдельные поля, мы можем заранее подготовить несколько вариантов отчета (например: «Краткий», «По подразделениям», «Детальный по номенклатуре»).

Преимущества такого подхода:

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

Резюме и рекомендации

Мы рассмотрели различные подходы к управлению видимостью группировок. Подведем итог:

  1. Если нужно быстро и без кода — используем Быстрые пользовательские настройки в СКД.
  2. Если дизайн формы жестко задан — используем программное изменение коллекции Структура в КомпоновщикеНастроек.
  3. Если логика включения группировок зависит от прав доступа или других сложных условий — используем событие ПриКомпоновкеРезультата.
  4. Если задача сводится к выбору между несколькими предопределенными видами отчета — используем Панель вариантов.

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

← На главную