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

Публикация № 83915

Разработка - Работа с интерфейсом

296
  В табличных документах 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 приводит пример, как прикрутить эту идею в типовой "Универсальный отчет". А так же заглянуть в публикацию //mag.itwonline.ru/public/84642/ от alexk-is, которая содержит дальнейшее развитие идеи (для вертикальных и горизонтальных группировок).

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

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

 

296

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
0. mtv:) 997 01.01.70 03:00 Сейчас в теме
В табличных документах 1С 8 имеется отличная возможность использования группировок, но управление уровнями группировок через контекстное меню не очень удобное.
В своих отчетах для управления уровнями группировок я использую маленькие кнопочки на поле табличного документа - это намного удобнее и быстрее, чем через контекстное меню.

Перейти к публикации

1. Saint 15 10.04.11 02:10 Сейчас в теме
И зачем? Если для поля табличного документа отобразить заголовки, то кнопочки волшебным образом появятся сами собой.
zqzq; Den_D; +2 Ответить
2. mtv:) 997 10.04.11 09:38 Сейчас в теме
Saint,
Да, можно и так...
Но (IMHO) отчет с включенными заголовками смотрится как-то "лохмато", непрофессионально. Заголовки захламляют отчет, представляя собой совершенно лишнюю информацию. А также занимают место, уменьшая полезную площадь для отчета, которой порой так не хватает...
Вобщем я пользуюсь сгенерированными кнопочками. Может кому-то это тоже понравится. Как говорится - "На вкус и цвет...". :D
3. Pashkaa 16 10.04.11 13:36 Сейчас в теме
Привяжи начальные координаты к верхнему углу ПоляТабличногоДокумента, будет универсальние. В отчете могут быть отборы как в типовых отчетах. И надо уж тогда менять координаты кнопок при влючении и выключении отборов в отчетах.
4. Pashkaa 16 10.04.11 13:43 Сейчас в теме
НачалоВерх = ЭлементыФормы.ПолеТабличногоДокументаРезультат.Верх + 3; // Тут установить начальные координаты для кнопок
НачалоЛево = ЭлементыФормы.ПолеТабличногоДокументаРезультат.Лево + 3; // Тут установить начальные координаты для кнопок
....

НоваяКнопка.Лево = НачалоЛево + (ШагКнопок * (Сч - 1));
.......

Испоравь так. Так кнопки сгенерерованные перекроют даже кнопки при включенном заголовке )))
artbear; mtv:); +2 Ответить
5. mtv:) 997 10.04.11 15:10 Сейчас в теме
Pashkaa,
Спасибо за дельное дополнение, так действительно будет лучше и универсальнее.
Уже поправил.
8. artbear 1156 11.04.11 08:00 Сейчас в теме
(5) Возможно, что для универсальности строку с именем элемента управления "ТабличноеПоле" (т.е. "ТабДок") лучше передавать как параметр в обе процедуры, чтобы не пришлось менять код в случае с другими именами.
Или вариант 2 - сделать спец.шаблон 1С, в котором имя будет запрашиваться и подставляться в код.
9. mtv:) 997 11.04.11 11:14 Сейчас в теме
(8)Да, на счет передачи, как параметра, ты прав, так будет лучше.
А про "спец.шаблон 1С" - чёт не понял... (((
10. artbear 1156 11.04.11 14:24 Сейчас в теме
(9) Ну этот код явно просится быть добавленным в файл шаблонов 1С, при вставке шаблона в код можно юзать подстановку параметров.
12. mtv:) 997 11.04.11 16:21 Сейчас в теме
(10) Теперь понятно, о чем речь. Тоже неплохая идея. Спасибо, artbear.
6. VladZetRu 9 10.04.11 21:21 Сейчас в теме
В случае если табличное поле находится на панели, ЭлементыФормы.ПолеТабличногоДокументаРезультат.Верх даст результат расстояния поля от верха панели, а не формы. Для корректного формирования кнопок в этом случае их нужно формировать на панели.
7. mtv:) 997 10.04.11 22:36 Сейчас в теме
VladZetRu,
Да, конечно,если ПолеТабличногоДокумента находится на Панели, то в этом случае кнопочки нужно формировать на Панели, а не на Форме.
И код тогда надо будет изменить так:
НоваяКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), ПрефиксИмениКн + Сч, Истина, ЭлементыФормы.Панель1);
11. PRoman 74 11.04.11 16:17 Сейчас в теме
Клевая штучка, но не более, нужно быть очень метким чтобы "ткнуть" на эту кнопочку.
Очень удобный вариант сделан в "1с Деньги".
13. mtv:) 997 11.04.11 16:27 Сейчас в теме
(11) На счет: "... нужно быть очень метким ..." - эти кнопочки даже чуть-чуть больше, чем те системные кнопки, которые появляются при отображении заголовков Таблицы.
Интересно, а какой вариант в "1С Деньги"? Я не видел...
14. Rustig 1194 12.04.11 13:21 Сейчас в теме
15. DrAku1a 1300 13.04.11 06:43 Сейчас в теме
Респект! Надо будет к универсальному отчету прикрутить...
16. e.kogan 1849 13.04.11 16:17 Сейчас в теме
Процедура СгенерироватьКнопкиУправленияГруппировкой()

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

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

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

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

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

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

    Уровень = Число(Элемент.Заголовок); // здесь записан нужный уровень
	Если Элемент.Подсказка="Свернуть до уровня" Тогда
	    ЭлементыФормы.Результат.ПоказатьУровеньГруппировокСтрок(Уровень - 1);
		Элемент.Подсказка="Развернуть до уровня";
	Иначе
	    ЭлементыФормы.Результат.ПоказатьУровеньГруппировокСтрок(Уровень + 1);
		Элемент.Подсказка="Свернуть до уровня";
	КонецЕсли;
//чтобы нижележащие кнопки группировки вели себя соответственно
	КоличествоГруппировок = ЭлементыФормы.Результат.КоличествоУровнейГруппировокСтрок();
        ПрефиксИмениКн = "КнГр_";
	Для й=Уровень+1 по КоличествоГруппировок Цикл
		ЭлементыФормы[ПрефиксИмениКн+й].Подсказка=Элемент.Подсказка;
	КонецЦикла;

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

Процедура РезультатПриИзмененииСодержимогоОбласти(Элемент, Область) //по-моему, самое оно именно в это событие впихнуть отрисовку
	СгенерироватьКнопкиУправленияГруппировкой();
КонецПроцедуры
Показать


и разворачивает тоже.
17. mtv:) 997 13.04.11 19:37 Сейчас в теме
(16) e.kogan,
Твой вариант Процедуры СвернутьДоУровня(Элемент) предпологает другой алгоритм работы кнопок, отличающийся от системного. Наверное кому-то понравится и твой вариант, что-то в нем есть.
Но твой вариант требует проработки. Попробуй сразу после формирования отчета: нажать 1 (сверется до уровня 1), потом нажать 2 (развернется уровень 1 и уровень 2), потом снова нажать 1 (ничего не происходит... а срабатывает только по повторному нажатию).
19. e.kogan 1849 14.04.11 10:51 Сейчас в теме
(17) Да я сама что-то, видимо, под конец рабочего дня перекрутила мысль :) Ну нафиг, оставлю у себя как было.
21. mtv:) 997 14.04.11 10:53 Сейчас в теме
(19) Утро вечера мудренее... :D
18. YVolohov 686 14.04.11 10:33 Сейчас в теме
Можно передавать ЭлементыФормы и ПолеТабличногоДокумента как параметры процедуры. Тогда не будет привязки к конкретной форме и табличному полю, а сама процедура станет универсальной и ее можно будет вынести в один из общих модулей.
20. mtv:) 997 14.04.11 10:52 Сейчас в теме
(18) Да, можно и так - прописать параметры и вынести в общий модуль. Получится действитель универсально.
В публикации описана сама идея генерации кнопочек, а как ее применить - каждый для себя решит сам, в меру своих знаний и потребностей. :D
22. artbear 1156 14.04.11 11:24 Сейчас в теме
(18) Я об этом уже говорил в (8)
Есть один минус - у действия "СвернутьДоУровня" может быть только один параметр (Элемент), сюда параметры не передашь, значит, нужно либо где-то отдельно хранить данные либо пользоваться шаблоном, который автоматом развернется в нужный/правильный код.
23. alexk-is 6421 19.04.11 11:15 Сейчас в теме
Врезал в типовой универсальный отчет. Теперь работает во всех отчетах, сделанных на его основе включая внешние. Спасибо за идею.
24. alexk-is 6421 19.04.11 13:10 Сейчас в теме
+23 Изменения для модуля УниверсальногоОтчета с учетом комментария (27)

// ИС КАВ ( 20.04.2011
Перем ФормаДляГруппировок;
Перем
ЭлементовГруппировок;

Процедура
СгенерироватьКнопкиУправленияГруппировкой(ТабличныйДокумент, УдалитьВсеКнопки = Ложь)

    Если
ФормаДляГруппировок = Неопределено Тогда
        Возврат;
    КонецЕсли;

   
ЭлементыФормы = ФормаДляГруппировок.ЭлементыФормы;
   
ИмяТабличногоДокумента = ТабличныйДокумент.Имя;

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

    // Удалим лишние кнопки
   
КоличествоГруппировок = ТабличныйДокумент.КоличествоУровнейГруппировокСтрок();
    Для
Индекс = ?(УдалитьВсеКнопки, 1, КоличествоГруппировок + 1) По ЭлементовГруппировок Цикл
       
ИмяКнопки = "КнопкаГруппировки_" + Формат(Индекс, "ЧЦ=3; ЧН=; ЧВН=") + "_" + ИмяТабличногоДокумента;
       
ТекЭлемент = ЭлементыФормы.Найти(ИмяКнопки);
        Если
ТекЭлемент <> Неопределено Тогда
           
ЭлементыФормы.Удалить(ТекЭлемент);
        КонецЕсли;
    КонецЦикла;

   
// Добавим новые кнопки по количеству группировок
   
Для Индекс = 1 По КоличествоГруппировок Цикл
       
ИмяКнопки = "КнопкаГруппировки_" + Формат(Индекс, "ЧЦ=3; ЧН=; ЧВН=") + "_" + ИмяТабличногоДокумента;
        Если
ЭлементыФормы.Найти(ИмяКнопки) = Неопределено Тогда
           
НоваяКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), ИмяКнопки);
           
НоваяКнопка.Верх      = НачалоВерх;
           
НоваяКнопка.Лево      = НачалоЛево + (13 * (Индекс - 1));
           
НоваяКнопка.Высота    = 12;
           
НоваяКнопка.Ширина    = 12;
           
НоваяКнопка.Шрифт     = Новый Шрифт("Arial", 7);
           
НоваяКнопка.Заголовок = "" + Индекс;
            Если
Индекс = 1 Тогда
               
НоваяКнопка.Подсказка = "Показать группировки верхнего уровня";
            ИначеЕсли
Индекс = КоличествоГруппировок Тогда
               
НоваяКнопка.Подсказка = "Показать все группировки";
            Иначе
               
НоваяКнопка.Подсказка = "Показать группировки до уровня " + Индекс;
            КонецЕсли;
           
НоваяКнопка.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
            Попытка
               
НоваяКнопка.УстановитьДействие("Нажатие", Новый Действие("КоманднаяПанельФормыБыстрыеОтборы"));
            Исключение
            КонецПопытки;
        КонецЕсли;
    КонецЦикла;

   
ЭлементовГруппировок = КоличествоГруппировок;

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

Процедура СформироватьОтчет(ТабличныйДокумент, Очищать = Истина, ФиксироватьЗаголовок = Истина, Отчет = Неопределено) Экспорт

    ...

   
СгенерироватьКнопкиУправленияГруппировкой(ТабличныйДокумент); // ИС КАВ 20.04.2011

КонецПроцедуры // СформироватьОтчет()

Процедура УправлениеОтображениемЭлементовФормы(Объект, Форма, КнопкаИмя = Неопределено) Экспорт

   
// ИС КАВ ( 20.04.2011
   
Если Лев(КнопкаИмя, 18) = "КнопкаГруппировки_" Тогда
       
ТабличныйДокумент = Форма.ЭлементыФормы[Сред(КнопкаИмя, 23)];
       
Форма.ТекущийЭлемент = ТабличныйДокумент;
       
Уровень = Число(Форма.ЭлементыФормы[КнопкаИмя].Заголовок); // здесь записан нужный уровень
       
ТабличныйДокумент.ПоказатьУровеньГруппировокСтрок(Уровень - 1);
        Возврат;
    КонецЕсли;
   
// ИС КАВ )

   
...

КонецПроцедуры
// УправлениеОтображениемЭлементовФормы()

Процедура УправлениеПанельюБыстрыеОтборы(Объект, Форма) Экспорт

    ...

   
// ИС КАВ ( 25.04.2011
   
Если Форма.ЭлементыФормы.Найти("ПолеТабличногоДокументаРезультат") <> Неопределено Тогда
       
СгенерироватьКнопкиУправленияГруппировкой(Форма.ЭлементыФормы.ПолеТабличногоДокументаРезультат, Истина);
    КонецЕсли;
   
// ИС КАВ )

КонецПроцедуры // УправлениеПанельюБыстрыеОтборы()

Процедура ФормаПриОткрытии(Объект, Отчет, Форма, СоставПанелиДополнительныхЭлементовФормы = Неопределено, ИмяОбъекта = Неопределено) Экспорт

    ...

   
// ИС КАВ ( 20.04.2011
   
ФормаДляГруппировок = Форма;
   
ЭлементовГруппировок = 0;
   
// ИС КАВ )

КонецПроцедуры // ФормаПриОткрытии()
Прикрепленные файлы:
eksetro; bashhhh; Re:аниматор; SirYozha; rumik007; plasmoid; mosAdm; Greenway; milkers; Slon747; artbear; mtv:); +12 Ответить
25. mtv:) 997 19.04.11 20:11 Сейчас в теме
(24) Спасибо alexk-is. Твоё сообщение тянет на отдельную публикацию. :D
Отличное применение идеи.
Только в коде (в двух местах), наверное, лучше заменить: текст "КнопкаГруппировки_" на переменную ПрефиксКнопки.
Добавил в публикацию ссылку на твоё сообщение.
27. mosAdm 134 25.04.11 17:44 Сейчас в теме
(24) Малость пришлось дописать, т.к. при нажатии кнопки "Быстрые отборы" "КнопкиГруппировки_" оставались на месте

Процедура УправлениеПанельюБыстрыеОтборы(Объект, Форма) Экспорт
	
	...

	Если Форма.ЭлементыФормы.Найти("ПолеТабличногоДокументаРезультат") <> Неопределено Тогда 
		СгенерироватьКнопкиУправленияГруппировкой(Форма.ЭлементыФормы.ПолеТабличногоДокументаРезультат) 
	КонецЕсли;

	
КонецПроцедуры // УправлениеПанельюБыстрыеОтборы()
Показать


Ну и в процедуре "СгенерироватьКнопкиУправленияГруппировкой" добавил удаление кнопок

    Для Индекс = 1 По КоличествоГруппировок Цикл 
        ИмяКнопки = "КнопкаГруппировки_" + Формат(Индекс, "ЧЦ=3; ЧН=; ЧВН=") + "_" + ИмяТабличногоДокумента; 
		//..........................
		ЭлементКнопка = ЭлементыФормы.Найти(ИмяКнопки);
		Если ЭлементКнопка <> Неопределено Тогда
			ЭлементыФормы.Удалить(ЭлементКнопка);
		КонецЕсли;
               //..........................

        Если ЭлементыФормы.Найти(ИмяКнопки) = Неопределено Тогда 
Показать
alexk-is; +1 Ответить
26. mafia 46 20.04.11 13:22 Сейчас в теме
А как быть если группировки расположены не по вертикали а по горизонтали? Или и то и другое вместе?
28. mtv:) 997 28.04.11 19:23 Сейчас в теме
(26)
mafia пишет:
А как быть если группировки расположены не по вертикали а по горизонтали? Или и то и другое вместе?

Ответом на этот вопрос служит публикация http://infostart.ru/public/84642/ от alexk-is, которая содержит дальнейшее развитие идеи.
29. v.a.ryag 36 08.09.11 12:58 Сейчас в теме
30. UncleVader 128 31.10.11 11:41 Сейчас в теме
А как быть с управляемыми формами?
31. vovche 28.11.11 10:55 Сейчас в теме
я не по делу, спасибо за обработку и возможность ее откомментировать
32. nissal 02.12.11 14:45 Сейчас в теме
Не получилось наскоком прикрутить к управляемой форме :)
Нет свойств Верх-Низ... Надо что-то думать. Идея - суперская!!
33. mtv:) 997 05.12.11 05:39 Сейчас в теме
(32)Спасибо за комментарий, очень приятно!
Я не использую в своей работе управляемые формы, поэтому не могу ни чем помочь, к сожалению... :(
Но если у тебя получится прикрутить эту фичу в управляемых формах, будет очень здорово. Не забудь только сообщить об этом в этой теме. Я думаю, что это бы потянуло на отдельную публикацию.
Успехов в исследованиях.
34. nissal 05.12.11 13:36 Сейчас в теме
(33) mtv:)

Спасибо за напутсвтвия, пошел пробовать.
35. nissal 05.12.11 19:46 Сейчас в теме
(33)


прикрутил тестово к отчету на СКД, получилось несколько уродливо (времени мало, а желания - много):
  • при нажатии "кнопочек" вылазят рамки рисунков, надо додумать, как этого избавиться
  • кнопки нельзя(?) "засунуть" в пространство над группировками(оно вроде как системное), пришлось совать в .Область(1,1,1,1)

Основная задача была - портировать :)

Вышло так:



Дополняем модуль формы:

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

    Результат.ПоказатьУровеньГруппировокСтрок(Уровень - 1);

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

&НаКлиенте
Процедура РезультатПриАктивизацииОбласти(Элемент)
	
	Если Не ТипЗнч(Элемент.ТекущаяОбласть) = Тип("РисунокТабличногоДокумента") Тогда
		Возврат;
	КонецЕсли; 
	Уровней = Результат.КоличествоУровнейГруппировокСтрок();
	
	Попытка
		Уровень = Число(Элемент.ТекущаяОбласть.Текст);
	Исключение
		Уровень = 0;
	КонецПопытки;
	
	Если Уровень > 0 И Уровень  <= Уровней  Тогда
		СвернутьДоУровня(Уровень);
	КонецЕсли;  
	
КонецПроцедуры
Показать


Модуль объекта:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

	СтандартнаяОбработка = Ложь;
	
	МассивЗаголовковРесурсов = Новый Массив;
	НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);

	//Создадим и инициализируем процессор компоновки
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);

	//Создадим и инициализируем процессор вывода результата
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

	//Обозначим начало вывода
	ПроцессорВывода.НачатьВывод();
	ТаблицаЗафиксирована = Ложь;

	ДокументРезультат.ФиксацияСверху = 0;
	//Основной цикл вывода отчета
	Пока Истина Цикл
		//Получим следующий элемент результата компоновки
		ЭлементРезультата = ПроцессорКомпоновки.Следующий();

		Если ЭлементРезультата = Неопределено Тогда
			//Следующий элемент не получен - заканчиваем цикл вывода
			Прервать;
		Иначе
			// Зафиксируем шапку
			Если  Не ТаблицаЗафиксирована 
				  И ЭлементРезультата.ЗначенияПараметров.Количество() > 0 
				  И ТипЗнч(КомпоновщикНастроек.Настройки.Структура[0]) <> Тип("ДиаграммаКомпоновкиДанных") Тогда

				ТаблицаЗафиксирована = Истина;
				ДокументРезультат.ФиксацияСверху = ДокументРезультат.ВысотаТаблицы;

			КонецЕсли;
			//Элемент получен - выведем его при помощи процессора вывода
			ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
		КонецЕсли;
	КонецЦикла;

	ПроцессорВывода.ЗакончитьВывод();
	СгенерироватьКнопкиУправленияГруппировкой(ДокументРезультат);

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


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

	НачалоВерх = 5; // Привязка к верхнему левому углу ПоляТабличногоДокумента
	НачалоЛево = 1; // Привязка к верхнему левому углу ПоляТабличногоДокумента

	ШагКнопок = 4;

	// Удалить старые кнопки
	Для каждого Рис Из Документ.Рисунки Цикл
		Если Рис.ТипРисунка = ТипРисункаТабличногоДокумента.Текст Тогда
			Документ.Рисунки.Удалить(Рис);
		КонецЕсли; 
	КонецЦикла; 

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

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


Еще раз спасибо автору за идею, извините, если что не так! :)
36. nissal 06.12.11 13:52 Сейчас в теме
Для избавления от рамок рисунков изменил функцию СвернутьДоУровня() молуля формы так:

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


Результат.ПоказатьУровеньГруппировокСтрок(Уровень - 1);
Массив = Новый Массив();
Массив.Добавить(Результат.Область(1,1,1,1));

Элементы.Результат.УстановитьВыделенныеОбласти(Массив);

КонецПроцедуры[/1C-CODE]

Теперь все довольно мило.
Однако, в веб-клиенте FF8, IE8 не работает. Кнопки рисуются не тогда и не там, где определено и не реагируют на нажатия. Так что пока только для тонкого клиента (8.2.13.219).
UncleVader; +1 Ответить
37. mtv:) 997 07.12.11 06:14 Сейчас в теме
(36)Приветствую ваше любопытство и упорство. Вот и первые результаты появились.
До этого получал только вопросы типа: "А как быть с управляемыми формами?"...
И вот нашелся человек, который решил исследовать эту проблему.
В моей публикации только рабочая идея. А развить ее под свои задачи может каждый для себя сам. Примеры имеются. Правда все только (до текущего момента) под обычное приложение.
Успехов вам.
38. UncleVader 128 14.12.11 22:52 Сейчас в теме
(36) Отлично, спасибо за труд - все получилось как надо! Вынес функции формирования кнопок и реакцию на их нажатие во внешний клиентский модуль и в любом отчете теперь все что нужно добавить 2 строчки!
39. rumik007 15.12.11 17:22 Сейчас в теме
А если добавить в формировании кнопок: НоваяКнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша["_"+сч],Истина,Ложь,Ложь), тогда мона будет с помощью комбинаций alt+[номер кнопки] сворачивать/разворачивать клавой.
40. UncleVader 128 15.12.11 17:42 Сейчас в теме
(39) Похоже у объекта НоваяКнопка нет свойства СочетаниеКлавиш, вы сами пробовали, работает?
41. rumik007 15.12.11 18:02 Сейчас в теме
UncleVader пишет:

(39) Похоже у объекта НоваяКнопка нет свойства СочетаниеКлавиш , вы сами пробовали, работает?


ДА, пробовал, все работает на ура.
42. UncleVader 128 15.12.11 18:47 Сейчас в теме
(41) А, я кажется понял - я вынес процедуру создания кнопок во внешний модуль, а СочетаниеКлавиш относится к контексту формы
43. mtv:) 997 15.12.11 20:05 Сейчас в теме
(39) rumik007, спасибо за дельное дополнение.
Добавил в код публикации твою идею (горячие клавиши для кнопок управления уровнем группировок), с сылкой на тебя.
Еще раз, спасибо.
44. EvgeniuXP 21.12.11 21:53 Сейчас в теме
Добавил в модуль формы (1С 8.2.14.540) код программы, то что на главной указано при проверке модуля на ошибки выдает сообщение:

"{Отчет.Отчет2.Форма.ФормаОтчета.Форма(38,57)}: Тип не определен (Действие)
НоваяКнопка.УстановитьДействие("Нажатие", Новый <<?>>Действие("СвернутьДоУровня")); (Проверка: Сервер)"

Да и я как понимаю, код не для управляемых форм, т.к. просто вызвать функцию Добавить() для 8.2 не пройдет.
45. EvgeniuXP 21.12.11 21:54 Сейчас в теме
(44) на клиенте тоже самое, поэтому просто попробовал на сервере выполнить данную процедуру, но всё-равно не прошло.
46. mtv:) 997 21.12.11 22:06 Сейчас в теме
(44)(45) EvgeniuXP, да, код, который в публикации, работает только в обычных (неуправляемых формах).
Для управляемых форм смотри выше сообщения от nissal, он экспериментировал с управляемыми формами, и у него есть определенные результаты.
Я не работаю с управляемыми формами, т.к. нет пока необходимости, поэтому помочь ни чем, к сожалению, не смогу.
47. EvgeniuXP 22.12.11 20:44 Сейчас в теме
(46) Спасибо, нашел, прочитал комментарии. Но минусы есть в решениях, в веб-клиенте кнопочки не видны - это одна беда, а вторая - то, что эти кнопки не всегда нормально отображаются в зависимости от уровней в отчете... нет такого события обновить форму после нажатия кнопки "Сформировать", а при чтении - не всегда срабатывает :(

Решение там одно, делать кнопки 1,2,3 и т.д. - т.к. они видны в веб-клиенте и написать свою кнопку "Сформировать" вместо штатной.
Спасибо! За идею! :)
48. xaker1C 23.12.11 05:32 Сейчас в теме
50. demiurg.08 13.03.12 10:48 Сейчас в теме
И ведь работает. :) Теперь буду втыкать во все свои отчеты, а автору - огромное спасибо, действительно нужные кнопочки.
51. MrVesna 16 05.04.12 07:40 Сейчас в теме
По мне так самый лучший вариант сворачивания открытых группировок сделан в Windows в редакторе реестра. Так в очень больших группировках снизу бывает долго подниматься на самый верх,а так кликнул по вертикальной полосе и группировка свернулась. На мой взгляд так гораздо удобнее.
52. nissal 09.04.12 18:29 Сейчас в теме
(51) MrVesna, Ctrl+"стрелка лево" гораздо эффективнее.
53. andy_zhav 164 17.04.12 09:48 Сейчас в теме
В СКД сделал немного по-другому:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь; 

    НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки(); 
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; 
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки); 

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; 
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина); 

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; 
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат); 

    ПроцессорВывода.НачатьВывод(); 
 
    Пока Истина Цикл

        ЭлементРезультата = ПроцессорКомпоновки.Следующий(); 
        Если ЭлементРезультата = Неопределено Тогда 
            Прервать; 
        Иначе
            Для Каждого Параметр Из ЭлементРезультата.ЗначенияПараметров Цикл
                Если ТипЗнч(Параметр.Значение)=Тип("ИдентификаторРасшифровкиКомпоновкиДанных")Тогда 
                    Продолжить;
                КонецЕсли;
            КонецЦикла; 
 
            ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); 
        КонецЕсли; 
    КонецЦикла; 

    ПроцессорВывода.ЗакончитьВывод(); 

Оповестить("ОтчетСформирован");
КонецПроцедуры

Показать


и в форме отчета

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	Если ИмяСобытия = "ОтчетСформирован" Тогда
		СгенерироватьКнопкиУправленияГруппировкой();
	КонецЕсли;
КонецПроцедуры


По-идее должно без проблем работать в тонком клиенте.
54. mtv:) 997 17.04.12 10:40 Сейчас в теме
(53) andy_zhav,
если твой код будет работать в тонком клиенте, то это замечательно. К сожалению проверить не могу, не на чем.
Отпишись здесь, пожалуйста, если действительно нормально заработает в тонком клиенте.
55. andy_zhav 164 17.04.12 11:15 Сейчас в теме
(54)Отбой тонкого клиента. Только толстый. На сервере нет команды "Оповестить"
Хотя, по моему мнению, все равно красивее смотрится через обработку оповещения...
56. alekseies 09.06.12 10:03 Сейчас в теме
Нужные кнопочки, можно использовать в отчетах - удобно и просто....
57. mybracho 16.07.12 10:56 Сейчас в теме
Подскажите, а в какой предопределенной процедуре вызывать процедуру генерации, если отчет строишь на СКД ?
58. mtv:) 997 16.07.12 19:00 Сейчас в теме
(57) mybracho, в твоем случае проще всего сделать так:
Вешаешь на кнопку "Сформировать" следующую процедуру
Процедура кнСформировать_Нажатие(Кнопка)
   
   ЭлементыФормы.Результат.Очистить();
   ОтчетОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат, ДанныеРасшифровки);
   
   // Если необходимо указать Уровень, до которого необходимо раскрыть группировки строк,
   // то можно добавить
   ЭлементыФормы.Результат.ПоказатьУровеньГруппировокСтрок(1);
   
   // Вызов процедуры генерации кнопок управления группировкой
   СгенерироватьКнопкиУправленияГруппировкой();
   
КонецПроцедуры //кнСформировать_Нажатие()

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

И твоя задача решена... :)
mybracho; +1 Ответить
59. mybracho 17.07.12 01:27 Сейчас в теме
(58)
Круто. Спасибо

Повыносил эти процедуры в общий модуль. Повставлял их вызов в свои отчеты. Получилось компактно. Счастлив
61. galinka1c8 25.09.12 11:34 Сейчас в теме
Понравилась идея, очень удобно, если вынести в общий модуль. Совсем несложно и доработка для группировки колонок.
62. Azatikn 30 26.09.12 06:56 Сейчас в теме
Ай, молодцы, всё ведь возможно
понравилось
63. AlexO 127 21.11.12 10:01 Сейчас в теме
И почему народу так трудно выбрать уровень из контекстного меню? Причем доступно в любом месте показа уровней, и не надо крутить туда-сюда отчет.
64. psa247 24.11.12 15:24 Сейчас в теме
65. zba 48 29.01.13 19:38 Сейчас в теме
Вот это как раз и надо. Спасибо!
66. KroVladS 32 21.03.13 09:08 Сейчас в теме
Замечательный механизм, как я раньше о нём не узнал.
А главное это позитив от довольных пользователей которым добавили удобняшку :)
67. MsDjuice 95 09.07.13 17:54 Сейчас в теме
Можно как-то использовать данную разработку, чтобы развертывать/свертывать группировки по условию? Например, поле группировки равно 0 и т.д.
68. mary61 38 30.08.13 11:14 Сейчас в теме
Спасибо! Как просто и удобно.
69. anfisa86 06.12.13 11:41 Сейчас в теме
Супер! Очень удобно! Спасибо!
70. EugenLiquor 06.03.14 15:15 Сейчас в теме
Интересно попробовать, возьму на вооружение для своих целей!
71. sekatskaya-e 22.10.14 17:50 Сейчас в теме
Процедуру СвернутьДоУровня(Элемент) можно только в модуле формы отчета размещать - получается что каждый отчет нужно корректировать?

72. mtv:) 997 04.06.15 07:34 Сейчас в теме
73. dklp 33 18.06.17 18:30 Сейчас в теме
есть идеи, как сделать так, чтобы при вызове команды ОтчетТабличныйДокумент.ПоказатьУровеньГруппировокСтрок(0) сворачивалась таблица, но при этом не сворачивались Параметры и строки Отбора?
74. xomaq 14 19.06.17 08:10 Сейчас в теме
Огромное спасибо автору! Все работает идеально!

P.S. ..и чего я сам до этого не додумался...
75. witdog 07.03.18 06:20 Сейчас в теме
Спасибо! Очень полезный механизм
76. ice-net 17 13.12.18 14:47 Сейчас в теме
Доработал и вставил в универсальный отчет УТ 10.3.
Нет лишних добавлений и удалений кнопок, быстрые отборы не мешают.

Перем Доп_мФормаОтчета;
Перем Доп_КоличествоГруппировокСтрок;
Перем Доп_КоличествоГруппировокКолонок;

////////////////////////////////////////////////////////////­////////////////////////////////////////////////////////
Процедура СформироватьОтчет(ТабличныйДокумент, Очищать = Истина, ФиксироватьЗаголовок = Истина, Отчет = Неопределено) Экспорт
//.......
Доп_СгенерироватьКнопкиУправленияГруппировками(ТабличныйДокумент);
КонецПроцедуры

////////////////////////////////////////////////////////////­////////////////////////////////////////////////////////

Процедура УправлениеОтображениемЭлементовФормы(Объект, Форма, КнопкаИмя = Неопределено) Экспорт
	
	Если Лев(КнопкаИмя, 8) = "КнГрСтр_" Тогда 
		ТабличныйДокумент = Форма.ЭлементыФормы[Сред(КнопкаИмя, 13)];
		Форма.ТекущийЭлемент = ТабличныйДокумент; 
		Уровень = Число(Форма.ЭлементыФормы[КнопкаИмя].Заголовок); 
		ТабличныйДокумент.ПоказатьУровеньГруппировокСтрок(Уровень - 1); 
		Возврат;
	ИначеЕсли Лев(КнопкаИмя, 8) = "КнГрКол_" Тогда 
		ТабличныйДокумент = Форма.ЭлементыФормы[Сред(КнопкаИмя, 13)];
		Форма.ТекущийЭлемент = ТабличныйДокумент; 
		Уровень = Число(Форма.ЭлементыФормы[КнопкаИмя].Заголовок); 
		ТабличныйДокумент.ПоказатьУровеньГруппировокКолонок(Уровень - 1); 
		Возврат;
	КонецЕсли;
//.......
КонецПроцедуры

////////////////////////////////////////////////////////////­////////////////////////////////////////////////////////

Процедура ФормаПриОткрытии(Объект, Отчет, Форма, СоставПанелиДополнительныхЭлементовФормы = Неопределено, ИмяОбъекта = Неопределено) Экспорт

//.......
	Доп_мФормаОтчета = Форма; 
	Доп_КоличествоГруппировокСтрок = 0;
	Доп_КоличествоГруппировокКолонок = 0;	
КонецПроцедуры

////////////////////////////////////////////////////////////­////////////////////////////////////////////////////////

Процедура Доп_СгенерироватьКнопкиУправленияГруппировками(ТабличныйДокумент) 
	
	Если Доп_мФормаОтчета = Неопределено Тогда 
		Возврат; 
	КонецЕсли; 
	
	ЭлементыФормы = Доп_мФормаОтчета.ЭлементыФормы; 
	ИмяТабличногоДокумента = ТабличныйДокумент.Имя;
	
	КоличествоГруппировокСтрок = ТабличныйДокумент.КоличествоУровнейГруппировокСтрок();
    КоличествоГруппировокКолонок = ТабличныйДокумент.КоличествоУровнейГруппировокКолонок();
	
	НачалоВерх = ТабличныйДокумент.Верх + 2; 
	НачалоЛево = ТабличныйДокумент.Лево + 2; 
	ШагКнопок      = 13;
	
	Если КоличествоГруппировокСтрок < Доп_КоличествоГруппировокСтрок Тогда
		Для Индекс = КоличествоГруппировокСтрок + 1 По Доп_КоличествоГруппировокСтрок Цикл
			ТекЭлемент = ЭлементыФормы.Найти("КнГрСтр_" + Формат(Индекс, "ЧЦ=3; ЧН=; ЧВН=") + "_" + ИмяТабличногоДокумента); 
			Если ТекЭлемент <> Неопределено Тогда 
				ЭлементыФормы.Удалить(ТекЭлемент); 
			КонецЕсли;
		КонецЦикла;
	Иначе
		Для Индекс = Доп_КоличествоГруппировокСтрок + 1 По КоличествоГруппировокСтрок Цикл
			ИмяКнопки = "КнГрСтр_" + Формат(Индекс, "ЧЦ=3; ЧН=; ЧВН=") + "_" + ИмяТабличногоДокумента;
			Если ЭлементыФормы.Найти(ИмяКнопки) = Неопределено Тогда
				НоваяКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), ИмяКнопки);
				НоваяКнопка.Верх      = НачалоВерх;
				НоваяКнопка.Лево      = НачалоЛево + (ШагКнопок * (Индекс - 1));
				НоваяКнопка.Высота    = 12;
				НоваяКнопка.Ширина    = 12;
				НоваяКнопка.Шрифт     = Новый Шрифт("Шрифт диалогов и меню", 7);
				НоваяКнопка.Заголовок = "" + Индекс;
				Если Индекс = 1 Тогда 
					НоваяКнопка.Подсказка = "Показать группировки верхнего уровня"; 
				ИначеЕсли Индекс = КоличествоГруппировокСтрок Тогда 
					НоваяКнопка.Подсказка = "Показать все группировки"; 
				Иначе 
					НоваяКнопка.Подсказка = "Показать группировки до уровня " + Индекс; 
				КонецЕсли;
				НоваяКнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша["_"+Индекс], Истина, Ложь, Ложь);  
				НоваяКнопка.УстановитьДействие("Нажатие", Новый Действие("КоманднаяПанельФормыБыстрыеОтборы"));
				НоваяКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Лево	, ЭлементыФормы[ИмяТабличногоДокумента] , ГраницаЭлементаУправления.Лево);
				НоваяКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Право	, ЭлементыФормы[ИмяТабличногоДокумента] , ГраницаЭлементаУправления.Лево);
				НоваяКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Верх	, ЭлементыФормы[ИмяТабличногоДокумента] , ГраницаЭлементаУправления.Верх);
				НоваяКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Низ	, ЭлементыФормы[ИмяТабличногоДокумента] , ГраницаЭлементаУправления.Верх);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	НачалоЛево = ТабличныйДокумент.Лево + ?(КоличествоГруппировокСтрок, 6 + КоличествоГруппировокСтрок * 13, 2);
	
	Если КоличествоГруппировокКолонок < Доп_КоличествоГруппировокКолонок Тогда
		Для Индекс = КоличествоГруппировокКолонок + 1 По Доп_КоличествоГруппировокКолонок Цикл
			ТекЭлемент = ЭлементыФормы.Найти("КнГрКол_" + Формат(Индекс, "ЧЦ=3; ЧН=; ЧВН=") + "_" + ИмяТабличногоДокумента); 
			Если ТекЭлемент <> Неопределено Тогда 
				ЭлементыФормы.Удалить(ТекЭлемент); 
			КонецЕсли;
		КонецЦикла;
	Иначе
		Для Индекс = Доп_КоличествоГруппировокКолонок + 1 По КоличествоГруппировокКолонок Цикл
			ИмяКнопки = "КнГрКол_" + Формат(Индекс, "ЧЦ=3; ЧН=; ЧВН=") + "_" + ИмяТабличногоДокумента;
			Если ЭлементыФормы.Найти(ИмяКнопки) = Неопределено Тогда
				НоваяКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), ИмяКнопки);
				НоваяКнопка.Верх      = НачалоВерх + (ШагКнопок * (Индекс - 1));
				НоваяКнопка.Лево      = НачалоЛево;
				НоваяКнопка.Высота    = 12;
				НоваяКнопка.Ширина    = 12;
				НоваяКнопка.Шрифт     = Новый Шрифт("Шрифт диалогов и меню", 7);
				НоваяКнопка.Заголовок = "" + Индекс;
				Если Индекс = 1 Тогда 
					НоваяКнопка.Подсказка = "Показать группировки верхнего уровня"; 
				ИначеЕсли Индекс = КоличествоГруппировокСтрок Тогда 
					НоваяКнопка.Подсказка = "Показать все группировки"; 
				Иначе 
					НоваяКнопка.Подсказка = "Показать группировки до уровня " + Индекс; 
				КонецЕсли;
				НоваяКнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша["_"+Индекс], Ложь, Ложь, Истина);  
				НоваяКнопка.УстановитьДействие("Нажатие", Новый Действие("КоманднаяПанельФормыБыстрыеОтборы"));
				НоваяКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Лево	, ЭлементыФормы[ИмяТабличногоДокумента] , ГраницаЭлементаУправления.Лево);
				НоваяКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Право	, ЭлементыФормы[ИмяТабличногоДокумента] , ГраницаЭлементаУправления.Лево);
				НоваяКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Верх	, ЭлементыФормы[ИмяТабличногоДокумента] , ГраницаЭлементаУправления.Верх);
				НоваяКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Низ	, ЭлементыФормы[ИмяТабличногоДокумента] , ГраницаЭлементаУправления.Верх);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	Доп_КоличествоГруппировокСтрок   = КоличествоГруппировокСтрок; 
	Доп_КоличествоГруппировокКолонок = КоличествоГруппировокКолонок;
	
КонецПроцедуры

Показать


Выглядит вот так:
Прикрепленные файлы:
Оставьте свое сообщение

См. также

Создание асинхронных виджетов 52

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Описание нескольких способов создания асинхронных виджетов для 1С:Предприятия. Рассматриваются способы с использованием HTTP-сервисов и фоновых заданий.

вчера в 16:26    703    YPermitin    7       

Формы. Трудности программной работы 68

Статья Программист Нет файла v8 v8::УФ 1cv8.cf Бесплатно (free) Работа с интерфейсом

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

06.10.2019    3190    YPermitin    20       

Лайфхаки 1С (часть 1). Настройки отчетов и печатных форм 1С 33

Статья Программист Пользователь Стажер Нет файла v8 1cv8.cf Россия Бесплатно (free) Работа с интерфейсом

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

02.10.2019    3847    VachKirp    8       

Добавляем виджет "Задачи от меня" в Документооборот 2.1 22

Статья Программист Нет файла v8 v8::Бизнес-процессы ДО Россия Бесплатно (free) Практика программирования Работа с интерфейсом

Небольшая доработка Документооборота 2.1 для возможности добавления виджета "Задачи от меня" в обработку Текущие дела.

25.09.2019    1483    Sergey_Borisovi4    2       

[Механизм интерфейса] Часы 54

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом Практика программирования Разработка

Добавляем цифровые часы на форму, как бонус рассмотрим вариант и с аналоговыми.

26.08.2019    3041    rpgshnik    33       

Произвольная начальная страница через расширение (программно) 41

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Установка своей формы произвольному пользователю на начальную страницу.

14.08.2019    2470    nagaitseff    11       

Подходы, методы и инструменты UX/UI для разработки эффективных интерфейсов на 1С 30

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

Интерфейсам в 1С обычно уделяют мало внимания. Это в итоге снижает востребованность платформы, делает ее неконкурентной, лишает большой доли рынка. Как не потерять старых клиентов и привлекать новых с помощью интерфейсов, а главное – как сделать «правильный» интерфейс, рассказал участникам конференции Infostart Event 2018 Education управляющий партнер и основатель консалтинговой группы WiseAdvice Иван Тягунов.

07.08.2019    4462    IvanAT1981    14       

Пользовательские настройки системы компоновки данных 78

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Работа с интерфейсом

Работа с отчетами в пользовательском режиме, формы отчетов. Понятие пользовательских настроек в отчетах на СКД. Определение состава пользовательских настроек для разделов в целом и для отдельных элементов, для всего отчета и для отдельных группировок. Видимость функциональных опций в отчетах на СКД.

09.07.2019    5977    ids79    0       

Подсистема "Варианты отчетов". Используете ли Вы ее правильно? 208

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом БСП (Библиотека стандартных подсистем)

Небольшая история про использование подсистемы "Варианты отчетов" из БСП. Используете ли Вы ее правильно?

04.06.2019    13986    YPermitin    49       

Расшифровка отчета на СКД с детализацией по выбранному полю на основе БСП 91

Статья Программист Нет файла v8 v8::УФ v8::СКД 1cv8.cf Россия Бесплатно (free) Практика программирования Работа с интерфейсом Разработка

В данной статье рассмотрим механизм работы с расшифровкой отчета, созданного при помощи системы компоновки данных, в управляемом приложении. Показывать буду на примере реальной задачи. Условие: использовать имеющиеся в конфигурации механизмы БСП, с минимальными и "правильными" изменениями. Расшифровка должны быть двух видов на каждом поле: 1. Открывать ссылочный объект 2. Открывать новую форму с детализацией табличной части документа. Собственно ради второго пункта и писалась статья, в основном для себя, чтобы не забыть.

14.05.2019    7230    Viktor_Ermakov    6       

Свой макет оформления отчета 33

Статья Программист Нет файла v8 v8::СКД Россия Windows Бесплатно (free) Работа с интерфейсом

Пример создания и оформления и применения своего (пользовательского ) макета оформления для СКД.

24.04.2019    4450    olegpkc    5       

Динамический вывод таблицы значений на форму 35

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Вывести на форму таблицу значений, а потом на её место другую, третью, четвёртую? Не вопрос.

11.01.2019    5604    Vlad1917    26       

Прикладной пример переработки стандартной формы РМК - Розница 74

Статья Программист Нет файла v8 Розница УУ Кассовые операции Розничная торговля Бесплатно (free) Работа с интерфейсом

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

04.10.2018    10757    asdfgcom    56       

Cправочная информация. Картинки. 16

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Справочную информацию мало кто любит писать, но вот захотелось. И что с этим делать?

06.06.2018    6351    aspirator23    2       

Итоги в динамическом списке 47

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Предлагаю вариант, как быстро сделать итоги в динамическом списке, например в форме списка журнала документов.

28.05.2018    8927    CXY    16       

Программное управление обычными формами документов и справочников в УПП/КА 32

Статья Программист Нет файла v8 v8::УФ КА1 УПП1 Россия Бесплатно (free) Работа с интерфейсом

Если с программным изменением управляемых форм 1С все более или менее понятно, то с программированием обычных форм примеров не так уж много в сети. А уж примеров готовых решений совсем не видно. В данной статье я покажу, как можно реализовать аналог "управляемых" форм в своих конфигурациях с обычными формами и забыть о сложностях обновлений форм.

09.05.2018    8376    dima_home    7       

Решение проблемы отображения интерфейса Такси на экранах с маленьким разрешением 26

Статья Программист Нет файла v8 v8::УФ Беларусь Windows Бесплатно (free) Работа с интерфейсом

Решение возникшей проблемы при переходе с интерфейса 8.2 на интерфейс Такси на экранах с маленьким разрешением.

06.04.2018    9721    Drak87    18       

Красивые графики. Пошаговая инструкция (Highstock) 122

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

Данный подход опробован на библиотеках: Нighcharts и Highstock. Для работы будет необходима 1С и браузер Google Chrome. Чукча не писатель (первая публикация).

22.11.2017    14135    Degrement    20       

Меняем стандартную форму выбора для реквизита формы на свою форму с запросом 51

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования Работа с интерфейсом

Алгоритм действий для смены стандартной формы выбора для реквизита формы на свою форму со своей выборкой данных и возвратом нескольких параметров в вызывающую форму

30.09.2017    15727    ah7777777    24       

"Мигаем" интерфейсом, или цепочки асинхронных вызовов 71

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом

Как, не блокируя интерфейс, привлечь внимание пользователя к интерфейсным элементам. Или, попросту говоря, "мигнуть" чем-то.

06.09.2017    12560    Chrizt    13       

"Восстановить положение окна" - не помогает. Как я решил проблему. 28

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Как получилось решить проблему глюков отображения формы документа.

28.05.2017    46355    niko11s    44       

Как добавить/убрать кота в отчет? 78

Статья Программист Нет файла v8 БП3.0 Бесплатно (free) Работа с интерфейсом

Кот в отчете: кому-то нравится, кого-то жутко бесит. Как избавиться, заменить, оставить (нужное подчеркнуть)?

12.05.2017    23043    starik-2005    16       

Итоги в динамическом списке 46

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Работа с интерфейсом

Как быстро посчитать итоги в динамическом списке

03.04.2017    20890    Восьмой    34       

Исправление проблем со встраиванием внешних отчетов в УНФ 1.6 12

Статья Программист Нет файла v8 УНФ Россия Бесплатно (free) Работа с интерфейсом

В УНФ 1.6 (тестил на версии 1.6.7.43) существуют следующие проблемы: 1. при встраивании доп. отчета в базу, он не отображается, пока не собьешь фильтр подсистемы 2. при встраивании доп. отчета в базу, отсутствует команда «Дополнительные отчеты» (по аналогии с командной «Дополнительные обработки») . В статье описывается решение перечисленных проблем.

16.11.2016    11428    TheRealStanly    3       

Как "перемотать" динамический список в начало при открытии? (или некоторые нюансы получения данных динамического списка) 57

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

В современных интерфейсах (новостях, социальных сетях и прочим) принято размещать новые данные сверху, более старые - внизу. К сожалению, в 1C сделано несколько по-другому - по умолчанию списки документов отсортированы по возрастанию даты и далее возможно два варианта: либо список при открытии проматывается в конец, либо список может запоминать "последнюю" текущую строку.

03.11.2016    19031    Fragster    25       

Программное создание графических схем (v.2): API для ГрафическойСхемы 73

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом Универсальные функции

Пример динамического создания графических схем, добавления элементов любых видов. Любые схемы без бизнес-процессов. Программная работа со схемой. Отличие от существующей статьи в том, что здесь используется объектная модель. Исправил и упростил некоторые моменты - результат соответствует схеме, созданной руками. Добавил возможность рисования произвольных форм для существующих фигур.

27.09.2016    16856    serg_infostart    15       

Автоматическое добавление новых реквизитов на форму (УФ) 38

Статья Программист Нет файла v8 v8::УФ Бесплатно (free) Работа с интерфейсом Универсальные функции

Идея такая: Программист добавил реквизит в объект. В комментарии этого реквизита прописал некое спец. слово (можно не матерное). На форму объекта новый реквизит далее попадает автоматом в спец. группу "Дополнительно".

03.08.2016    16183    Патриот    23       

Управляемые формы: Поле HTML Документа и веб-клиент 56

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования Работа с интерфейсом

Взаимодействие javascript и интерфейса 1С дает огромные возможности для реализации нестандартных функций. Раньше можно было напрямую вызывать функции JavaScript через DOM объект document Поля HTML документа. В современных браузерах эта возможность ушла. Более того, в веб-клиенте появляется тип ВнешнийОбъект, который вообще нигде не описан. На Инфостарте были предложения вызывать JavaScript через fireEvent, но это очень неудобно. Предлагаю свой вариант решения.

18.07.2016    24086    compguru    10       

Как вывести динамическое представление для пустого значения (в таблице)? 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом

Есть таблица. Часть полей в ней заполняется автоматически, а часть - должен заполнить пользователь. Нужно подсказать пользователю, что именно в какую ячейку вводить - для этого выведем серым текст подсказки внутри каждой незаполненной ячейки. На поиски решения этой задачки я потратил половину субботы. Надеюсь, моя небольшая заметка поможет кому то провести выходные более продуктивно)

29.03.2016    9688    weissfeuer    9       

Выделение документов в динамическом списке 20

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

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

01.02.2016    15748    Sardukar    7       

Три приёма, позволяющие сделать интерфейс конфигураций 1С на управляемых формах удобнее при большом шрифте 52

Статья Программист Нет файла v8 УНФ ERP2 БП3.0 Windows Бесплатно (free) Работа с интерфейсом Универсальные функции

С появлением управляемых форм вообще и БП 3.0 в частности пользователи, которые не хотят портить своё зрение рассматриванием мелкого шрифта, оказались в невыгодном положении. Многих элементов на экране в "тяжёлых" документах вообще оказалось не видно. Все попытки решить вопрос штатными средствами настройки предприятия оказались неэффективны. Вот несколько приёмов, которые буквально в два щелчка мышкой и парой строк кода помогут решить проблему.

05.11.2015    14972    H-Labs    11       

Как скрыть "пустые группы" в списке выбора справочника при отборе 46

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

Когда требуется открыть список справочника с отбором, например, по определённой группе, видны также все остальные группы с пустым содержимым. Мой способ избавления от ненужных групп ниже.

29.10.2015    25541    shevelyov    25       

Открытие форм нескольких новых документов в тонком и толстом клиенте, УФ 23

Статья Программист Нет файла v8 v8::УФ 1cv8.cf Windows Бесплатно (free) Работа с интерфейсом

Если Вам необходимо создать несколько документов, а затем открыть их формы для пользователя.

1 стартмани

29.09.2015    17993    Wezoowy    13       

Параметры сеанса. 47

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Работа с интерфейсом

Параметры сеанса - это объекты метаданных конфигурации. Поговорим об их назначении и принципах работы с ними.

06.09.2015    55317    niko11s    8       

Шкала в строке состояния 51

Статья Программист Нет файла v8 Windows Бесплатно (free) Работа с интерфейсом

Простая шкала, не требующая дополнительных форм и элементов управления

31.08.2015    13418    Ivon    26       

Назначение сочетания клавиш для кнопок командной панели (Обычные формы) 13

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Работа с интерфейсом

Назначение сочетания клавиш кнопкам командной панели Формы списка/выбора для любой конфигурации (Обычные формы)

07.08.2015    15063    bld    7       

Развитие управляемого интерфейса в 1С 8.2 - 1С 8.3 55

Статья Программист Нет файла v8 Windows Бесплатно (free) Практика программирования Математика и алгоритмы Работа с интерфейсом

К управляемым формам, которые появились в 8.2, я до сих пор относился презрительно. Считал это неудачной попыткой 1С следовать модным тенденциям в разработке интерфейсов и прогибом для возможности работать через браузер. Я считал, что 1С пожертвовала простотой разработки в угоду веб-доступу. Но после курсов Арутюнова Сергея по управляемому интерфейсу в июле 2015 года в УЦ1 я поменял ненависть на любовь. Звучит парадоксально, но это так. А теперь подробнее…

27.07.2015    35007    fixin    103       

Идея или как сохранить ЦВЕТ, ШРИФТ, ОФОРМЛЕНИЕ пользователя 25

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Простой и оригинальный способ сохранять ЦВЕТОВУЮ СХЕМУ и ОФОРМЛЕНИЕ пользователей. Как сохранить ЦВЕТ

22.06.2015    21416    Tatitutu    12       

Недокументированное использование стандартных обработок из меню "Все функции". 902

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Работа с интерфейсом

Рассмотрены возможности произвольного использования стандартных функций, вызываемых из меню платформы "Все функции" - "Стандартные" (Активные пользователи, Журнал регистрации, Поиск ссылок на объект, Проведение документов ...).

19.06.2015    100480    ekaruk    121       

Быстрый ввод строковых значений в поля составного типа 63

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

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

04.06.2015    17188    Cyberhawk    14       

Личный опыт эскплуатации интерфейса "Такси" 11

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Работа с интерфейсом

Уважаемые коллеги, предлагаю вам мой личный опыт использования интерфейса "Такси"

07.02.2015    15316    Marik    30       

Как перенести форму документа (справочника, ...) из одного документа (справочника, ...) в другой похожий документ (справочник, ...) 54

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Работа с интерфейсом

При попытке изменить Тип Реквизита «Объект» все элементы формы теряли путь к данным, ладно бы «поля ввода» (можно было выбрать заново «путь к данным»), но с табличными частями вообще труба, при выборе в «Таблице» все колонки в этом элементе банально удалялись. Можно, конечно, потратить кучу времени и вручную продублировать все то, что есть в форме оригинала, но я нашел другой путь!

26.11.2014    14263    RomanBor    18       

Создание интерфейса со всеми блокировками прав пользователя 20

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Работа с интерфейсом

Создание интерфейса (напр. Продавец) со всеми блокировками прав пользователя (доступ к конфигуратору, меню Операции, Все функции, правам пользователей в меню сервис и др.)

10.10.2014    12314    ~ADm!t_@vd~    8       

Свернуть с учетом уровня дерево значений на управляемой форме 11

Статья Программист Нет файла v8 1cv8.cf Россия Windows Бесплатно (free) Работа с интерфейсом

Набор процедур, которые сворачивают дерево значений на управляемой форме до определенного уровня

03.10.2014    12976    ivashka    2