HelpF.pro

Кнопки управления уровнями группировки (генерировать программно)

Кнопочки для управления уровнями группировки генерируются программно.
Для этого в модуле формы, в самом конце процедуры формирования отчета, нужно вызвать процедуру СгенерироватьКнопкиУправленияГруппировкой().
В модуль формы нужно добавить две процедуры, где "ПолеТабДок" - это поле табличного документа, в которое выводится отчет:

Код 1C v 8.х
 Процедура СгенерироватьКнопкиУправленияГруппировкой()

НачалоВерх = ЭлементыФормы.ПолеТабДок.Верх + 3; // Привязка к верхнему левому углу ПоляТабличногоДокумента
НачалоЛево = ЭлементыФормы.ПолеТабДок.Лево + 3; // Привязка к верхнему левому углу ПоляТабличногоДокумента

ШагКнопок = 13;
ПрефиксИмениКн = "КнГр_";

// Удалить старые кнопки
Сч = 0;
Пока Сч < ЭлементыФормы.Количество() Цикл
ТекЭлемент = ЭлементыФормы.Получить(Сч);
Если Найти(ТекЭлемент.Имя, ПрефиксИмениКн) > 0 Тогда
ЭлементыФормы.Удалить(ТекЭлемент);
Иначе
Сч = Сч + 1;
КонецЕсли;
КонецЦикла;

// Добавить новые кнопки по количеству группировок
КоличествоГруппировок = ЭлементыФормы.ПолеТабДок.КоличествоУровнейГруппировокСтрок();
Для Сч = 1 По КоличествоГруппировок Цикл
НоваяКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), ПрефиксИмениКн + Сч);
НоваяКнопка.Верх = НачалоВерх;
НоваяКнопка.Лево = НачалоЛево + (ШагКнопок * (Сч - 1));
НоваяКнопка.Высота = 11;
НоваяКнопка.Ширина = 11;
НоваяКнопка.Шрифт = Новый Шрифт("Шрифт диалогов и меню", 6);
НоваяКнопка.Заголовок = "" + Сч;
НоваяКнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша["_"+сч], Истина, Ложь, Ложь);
НоваяКнопка.УстановитьДействие("Нажатие", Новый Действие("СвернутьДоУровня"));
КонецЦикла;

КонецПроцедуры //СгенерироватьКнопкиУправленияГруппировкой()

// Вызывется при нажатии кнопочек "1", "2" и т.д. (для сворачивания группировок)
Процедура СвернутьДоУровня(Элемент)

Уровень = Число(Элемент.Заголовок); // здесь записан нужный уровень
ЭлементыФормы.ПолеТабДок.ПоказатьУровеньГруппировокСтрок(Уровень - 1);

КонецПроцедуры //СвернутьДоУровня()


Примечание:
Вышеприведенный код будет работать правильно, если ПолеТабличногоДокумента, на которое выводится Отчет, расположено на Форме. Если же ПолеТабличногоДокумента расположено на Панели, то строчку кода, в которой создается НоваяКнопка, необходимо чуть дополнить:
Код 1C v 8.х
 НоваяКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), ПрефиксИмениКн + Сч, Истина, ЭлементыФормы.Панель);    


Примечание 2:
Решение для генерации кнопок в отчетах, построенных на СКД.
Вешаешь на кнопку "Сформировать" следующую процедуру
Код 1C v 8.х
 Процедура кнСформировать_Нажатие(Кнопка)

ЭлементыФормы.Результат.Очистить();
ОтчетОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат, ДанныеРасшифровки);

// Если необходимо указать Уровень, до которого необходимо раскрыть группировки строк,
// то можно добавить
ЭлементыФормы.Результат.ПоказатьУровеньГруппировокСтрок(1);

// Вызов процедуры генерации кнопок управления группировкой
СгенерироватьКнопкиУправленияГруппировкой();

КонецПроцедуры //кнСформировать_Нажатие()

// где ЭлементыФормы.Результат, это Поле табличного документа, в которое выводится отчет СКД.

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/1508.html