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

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

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

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

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

Для реализации этого метода выполним следующие шаги:

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

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

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

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

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

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

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

Управление видимостью группировок иерархического списка

Часто пользователи хотят управлять не только колонками, но и строками (группировками). Рассмотрим ситуацию, когда у нас есть иерархия: Контрагент -> Договор -> Номенклатура. Выясним, как позволить пользователю отключать верхние уровни, не теряя при этом данные нижних.

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

  1. Встанем на корневой элемент настроек Отчет.
  2. В нижней части окна настроек найдем состав группировок.
  3. Нажмем на шестеренку (пользовательские настройки) именно для всей коллекции группировок сразу.
  4. Установим режим Быстрый доступ.

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

Программный метод управления через компоновщик настроек

Если штатные настройки не подходят (например, нужно объединить управление несколькими полями под один флаг), мы можем прибегнуть к программному изменению настроек. Рассмотрим пример кода, который можно разместить в обработчике нажатия кнопки или изменения флажка на форме.

Для управления видимостью поля через КомпоновщикНастроек используем следующий подход:


// Имя поля, видимость которого мы хотим изменить
ИмяПоля = "Прибыль";
НужноеСостояние = Элементы.ФлагПоказыватьПрибыль.ПутьКДанным; // Булево значение с формы

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

Важно помнить: если пользователь уже менял настройки в режиме "Клиент", то изменения нужно вносить не только в КомпоновщикНастроек.Настройки, но и проверять КомпоновщикНастроек.ПользовательскиеНастройки, так как они имеют приоритет при формировании отчета.

Использование вариантов отчета как альтернатива

Если наборов полей немного (например, "Полный" и "Краткий"), мы рекомендуем не усложнять форму флажками, а создать несколько Вариантов отчета в самой схеме СКД. Это наиболее надежный способ, который позволяет сохранить настройки оформления, ширину колонок и группировки для каждого конкретного случая. Пользователь сможет переключаться между ними через стандартное меню "Варианты отчета", что исключает ошибки в логике компоновки при программном управлении полями.

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

← На главную