При разработке отчетов на Системе компоновки данных (СКД) часто возникает задача предоставить пользователю возможность выбора различных представлений одних и тех же данных. Например, руководству может потребоваться отчет по продажам с детализацией до партий товаров, а рядовым менеджерам — тот же отчет, но в более сжатом виде, без партионного учета. Создавать для этого несколько отдельных отчетов нерационально, так как это усложняет поддержку и перегружает конфигурацию. Оптимальное решение — использовать варианты настроек СКД в рамках одного отчета.
В этой статье мы подробно разберем, как спроектировать варианты отчета «с партиями» и «без партий», выясним причины, по которым имя варианта может работать некорректно в управляемом приложении, и научимся программно реализовывать выбор вариантов в обычных формах.
Для реализации исходной задачи нам не потребуется писать код. Все настройки выполняются непосредственно в конструкторе схемы компоновки данных. Давайте разберем этот процесс по шагам:
ОсновнойСПартиями, а в поле «Представление» укажем понятный для пользователя текст: «Продажи (по партиям)».Партия или просто перетащим это поле в список выбранных полей, чтобы пользователь видел детальную информацию по поставкам.БезПартий, а в качестве представления укажем «Продажи (без партий)».Партия или убрать его из выбранных полей. Настройки структуры для каждого варианта хранятся независимо.После сохранения отчета в режиме «1С:Предприятие» пользователь сможет переключаться между созданными вариантами с помощью стандартной кнопки командной панели «Выбрать вариант...».
Иногда разработчики сталкиваются с ситуацией, когда в одном отчете имя варианта применяется корректно, а в другом — при попытке выбора система выдает ошибку или открывает стандартный вариант по умолчанию. Выясним причину такого поведения в управляемом приложении.
В современных конфигурациях 1С (таких как ERP, Управление торговлей 11, Комплексная автоматизация или ЗУП) за вывод, хранение и выбор вариантов отчетов отвечает специализированный механизм Библиотеки стандартных подсистем (БСП). Чтобы ваши варианты работали стабильно, необходимо учесть несколько важных моментов:
ХранилищеВариантов. Для систем на базе БСП туда следует установить значение ХранилищеВариантовОтчетов. Если оставить это свойство пустым, платформа не сможет автоматически связать форму отчета со списком доступных вариантов СКД.
ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов()
Также можно запустить сеанс «1С:Предприятие» с параметром командной строки /ЗапуститьОбновлениеИнформационнойБазы для принудительного обновления справочников БСП.Рассмотрим ситуацию, когда нам необходимо открыть отчет из другой формы (например, из документа или обработки) и сразу установить конкретный вариант настроек. Для этого мы должны передать параметр КлючВарианта при вызове формы. Проанализируем пример кода:
ПараметрыФормы = Новый Структура();
// Передаем уникальное имя варианта, заданное в конфигураторе
ПараметрыФормы.Вставить("КлючВарианта", "БезПартий");
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.МойОтчетПоПродажам.Форма", ПараметрыФормы);
Использование свойства КлючВарианта гарантирует, что форма инициализируется именно с теми настройками структуры компоновки, которые соответствуют выбранному варианту.
В старых конфигурациях 1С на обычных формах (например, УПП 1.3 или УТ 10.3) платформа не предоставляет «из коробки» удобный графический интерфейс для управления вариантами отчета на командной панели. В этом случае программисту приходится описывать логику выбора вариантов вручную в модуле формы отчета.
Разберем по шагам, как решить эту задачу программным путем:
1. Динамическое заполнение меню выбора вариантов при открытии формы. Нам нужно перебрать все варианты настроек, определенные в схеме компоновки, и добавить соответствующие кнопки на командную панель формы. Напишем код для обработчика ПриОткрытии:
Процедура ПриОткрытии()
// Получаем подменю для выбора вариантов на форме
КнопкаВарианты = ЭлементыФормы.ДействияФормы.Кнопки.ПодменюВарианты;
КнопкаВарианты.Кнопки.Очистить();
// Обходим коллекцию вариантов настроек в нашей СКД
Для Каждого Вариант Из СхемаКомпоновкиДанных.ВариантыНастроек Цикл
// Создаем кнопку для каждого варианта
ИмяКнопки = "Вариант_" + Вариант.Имя;
ПредставлениеКнопки = Вариант.Представление;
// Назначаем действие при нажатии на кнопку
ДействиеКнопки = Новый Действие("НажатиеНаКнопкуВарианта");
НоваяКнопка = КнопкаВарианты.Кнопки.Добавить(ИмяКнопки, ТипКнопкиКоманднойПанели.Действие, ПредставлениеКнопки, ДействиеКнопки);
КонецЦикла;
КонецПроцедуры
2. Обработка выбора варианта пользователем. Теперь нам необходимо написать процедуру, которая будет срабатывать при нажатии на добавленную кнопку. Эта процедура должна извлечь имя выбранного варианта, найти его настройки в схеме и загрузить их в текущий компоновщик настроек отчета:
Процедура НажатиеНаКнопкуВарианта(Кнопка)
// Извлекаем имя варианта из имени нажатой кнопки
ИмяВарианта = Сред(Кнопка.Имя, 9); // Отсекаем префикс "Вариант_"
// Ищем вариант в схеме компоновки данных
ВыбранныйВариант = СхемаКомпоновкиДанных.ВариантыНастроек.Найти(ИмяВарианта);
Если ВыбранныйВариант <> Неопределено Тогда
// Загружаем новые настройки в компоновщик настроек отчета
КомпоновщикНастроек.ЗагрузитьНастройки(ВыбранныйВариант.Настройки);
// Обновляем форму для визуализации новых настроек пользователю
ЭлементыФормы.Результат.Очистить();
Иначе
Предупреждение("Не удалось найти выбранный вариант отчета!");
КонецЕсли;
КонецПроцедуры
Благодаря этому несложному алгоритму пользователи обычного приложения получат такой же удобный инструмент переключения вариантов, как и в управляемом приложении, без необходимости каждый раз вручную перенастраивать структуру колонок и группировок отчета.