Каталог решений - Программное генерирование кнопочек для удобного управления уровнями группировки в отчетах (версия 2a).

Программное генерирование кнопочек для удобного управления уровнями группировки в отчетах (версия 2a).

Программное генерирование кнопочек для удобного управления уровнями группировки в отчетах (версия 2a).

В наличии

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

Категория:

Описание

 

Кнопочки для управления уровнями группировки генерируются программно.

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

В модуль формы нужно добавить две процедуры, где «ПолеТабДок» — это поле табличного документа, в которое выводится отчет:

 

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

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

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

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

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

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

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

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

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

Примечание:

Как справедливо заметил VladZetRu, вышеприведенный код будет работать правильно, если ПолеТабличногоДокумента, на которое выводится Отчет, расположено на Форме. Если же ПолеТабличногоДокумента расположено на Панели, то строчку кода, в которой создается НоваяКнопка, необходимо чуть дополнить:

НоваяКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), ПрефиксИмениКн + Сч, Истина, ЭлементыФормы.Панель);

Примечание 2:

 

В комментарии № 58 приведено решение для генерации кнопок в отчетах, построенных на СКД.

Вот собственно и всё. Результат видно на скриншоте ниже.


1. Это вторая версия алгоритма, спасибо Pashkaa за дельное предложение. Алгоритм стал лучше и универсальнее. Не нужно теперь вручную указывать начальные координаты кнопочек, они привязаны к верхнему левому углу ПоляТабличногоДокумента. Кнопочки не требуют дополнительного места на форме т.к. находятся там, где должны быть системные кнопки при отображении заголовков таблицы.

2. Советую заглянуть в комментарии. Там в № (24) alexk-is приводит пример, как прикрутить эту идею в типовой «Универсальный отчет». А так же заглянуть в публикацию //sale.itcity.ru/public/84642/ от alexk-is, которая содержит дальнейшее развитие идеи (для вертикальных и горизонтальных группировок).

3. (15.12.2011)  Версия 2a. Добавлен код (одна строка) для назначения горячих клавиш для сгенерированных кнопочек.  Теперь можно с помощью комбинаций Alt+[номер кнопки] сворачивать/разворачивать группировки с помошью клавиатуры. Спасибо rumik007 за идею.

4. (04.06.2015) Коллега unichkin опубликовал решение этой задачи для управляемых форм: Кнопки управления группировками табличного документа для управляемых форм.

 

has been added to your cart:
Оформление заказа