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