Создание меню выбора вариантов отчета на СКД в 1С

Как известно, система компоновки данных в 1С позволяет создавать различные варианты отчетов с заранее подготовленными настройками еще на этапе создания.

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

Для начала подготовим процедуру, которая будет создавать меню с вариантами:

Процедура УстановитьВариантыНастроек()

//Добавляем кнопку подменю на панель действий формы. Имя кнопки "ВариантыОтчетов", пользователю. будет видна как "Варианты"
КП = ЭлементыФормы.ДействияФормы;
НоваяКнопка = КП.Кнопки.Вставить(1,"ВариантыОтчетов", ТипКнопкиКоманднойПанели.Подменю, "Варианты", );

НовоеДействие = Новый Действие("ИзменитьВариант"); //Создаем действие, которое потом назначим на кнопки с вариантами

Счетчик = 1; //посчитаем кнопки, у них должны быть разные имена

//Добавляем кнопки для каждого варианта настроки СКД
//Отображение кнопки берем из представления настройки
//Назначаем в качестве действия кнопки действие, созданное выше
Для каждого Настройка Из СхемаКомпоновкиДанных.ВариантыНастроек Цикл

НоваяКнопка = КП.Кнопки.ВариантыОтчетов.Кнопки.Добавить("Вариант"+Строка(Счетчик), ТипКнопкиКоманднойПанели.Действие, Настройка.Представление, НовоеДействие);
Счетчик = Счетчик + 1;

КонецЦикла;

КонецПроцедуры

Вызовем эту процедуру при открытии формы:

Процедура ПриОткрытии()

УстановитьВариантыНастроек();

КонецПроцедуры

А теперь создаем обработчик события для добавленных кнопок. В предыдущем коде была строчка НовоеДействие = Новый Действие(«ИзменитьВариант»); значит обработчик должен иметь название ИзменитьВариант.

Процедура ИзменитьВариант (Элемент)

//Обходим в цикле все варианты отчета и проверяем, совпадает ли их представление с заголовком кнопки, на которую нажали.
//Если совпало, значит это и есть искомая настройка
Для каждого Вариант Из СхемаКомпоновкиДанных.ВариантыНастроек Цикл

Если Элемент.Текст = Вариант.Представление тогда

//Загружаем вариант
КомпоновщикНастроек.ЗагрузитьНастройки(Вариант.Настройки);

//Меняем заголовок формы, чтобы было понятно, что за вариант работает
//Можно и где-то в другом месте отобразить название варианта
ЭтаФорма.Заголовок=ЭтотОбъект.Метаданные().Представление()+": "+Вариант.Представление;

//У меня на форму были выведены дополнительные поля отборов из компоновщика настроек
//Если есть что-то подобное, то такие процедуры писать сюда
//Если нет, то следующую строчку удалить
ЗаполнитьОтборНастроек();

//Прерываем цикл, т.к. нашли настройку
Прервать;

КонецЕсли;

КонецЦикла;

КонецПроцедуры

За идею спасибо коллегам с сайта programmist1s.ru

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

четыре × один =