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

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

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

  В табличных документах 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 опубликовал решение этой задачи для управляемых формКнопки управления группировками табличного документа для управляемых форм.

 

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

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

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

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

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

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

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

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

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

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

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

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

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


и разворачивает тоже.
17. mtv:) 1007 13.04.11 19:37 Сейчас в теме
(16) e.kogan,
Твой вариант Процедуры СвернутьДоУровня(Элемент) предпологает другой алгоритм работы кнопок, отличающийся от системного. Наверное кому-то понравится и твой вариант, что-то в нем есть.
Но твой вариант требует проработки. Попробуй сразу после формирования отчета: нажать 1 (сверется до уровня 1), потом нажать 2 (развернется уровень 1 и уровень 2), потом снова нажать 1 (ничего не происходит... а срабатывает только по повторному нажатию).
19. e.kogan 1853 14.04.11 10:51 Сейчас в теме
(17) Да я сама что-то, видимо, под конец рабочего дня перекрутила мысль :) Ну нафиг, оставлю у себя как было.
21. mtv:) 1007 14.04.11 10:53 Сейчас в теме
(19) Утро вечера мудренее... :D
18. YVolohov 694 14.04.11 10:33 Сейчас в теме
Можно передавать ЭлементыФормы и ПолеТабличногоДокумента как параметры процедуры. Тогда не будет привязки к конкретной форме и табличному полю, а сама процедура станет универсальной и ее можно будет вынести в один из общих модулей.
20. mtv:) 1007 14.04.11 10:52 Сейчас в теме
(18) Да, можно и так - прописать параметры и вынести в общий модуль. Получится действитель универсально.
В публикации описана сама идея генерации кнопочек, а как ее применить - каждый для себя решит сам, в меру своих знаний и потребностей. :D
22. artbear 1180 14.04.11 11:24 Сейчас в теме
(18) Я об этом уже говорил в (8)
Есть один минус - у действия "СвернутьДоУровня" может быть только один параметр (Элемент), сюда параметры не передашь, значит, нужно либо где-то отдельно хранить данные либо пользоваться шаблоном, который автоматом развернется в нужный/правильный код.
23. alexk-is 6461 19.04.11 11:15 Сейчас в теме
Врезал в типовой универсальный отчет. Теперь работает во всех отчетах, сделанных на его основе включая внешние. Спасибо за идею.
24. alexk-is 6461 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:) 1007 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:) 1007 28.04.11 19:23 Сейчас в теме
(26)
mafia пишет:
А как быть если группировки расположены не по вертикали а по горизонтали? Или и то и другое вместе?

Ответом на этот вопрос служит публикация http://infostart.ru/public/84642/ от alexk-is, которая содержит дальнейшее развитие идеи.
29. v.a.ryag 37 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:) 1007 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:) 1007 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:) 1007 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:) 1007 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 18 05.04.12 07:40 Сейчас в теме
По мне так самый лучший вариант сворачивания открытых группировок сделан в Windows в редакторе реестра. Так в очень больших группировках снизу бывает долго подниматься на самый верх,а так кликнул по вертикальной полосе и группировка свернулась. На мой взгляд так гораздо удобнее.
52. nissal 09.04.12 18:29 Сейчас в теме
(51) MrVesna, Ctrl+"стрелка лево" гораздо эффективнее.
53. andy_zhav 167 17.04.12 09:48 Сейчас в теме
В СКД сделал немного по-другому:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь; 

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

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

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

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

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

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

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

Показать


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

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


По-идее должно без проблем работать в тонком клиенте.
54. mtv:) 1007 17.04.12 10:40 Сейчас в теме
(53) andy_zhav,
если твой код будет работать в тонком клиенте, то это замечательно. К сожалению проверить не могу, не на чем.
Отпишись здесь, пожалуйста, если действительно нормально заработает в тонком клиенте.
55. andy_zhav 167 17.04.12 11:15 Сейчас в теме
(54)Отбой тонкого клиента. Только толстый. На сервере нет команды "Оповестить"
Хотя, по моему мнению, все равно красивее смотрится через обработку оповещения...
56. alekseies 09.06.12 10:03 Сейчас в теме
Нужные кнопочки, можно использовать в отчетах - удобно и просто....
57. mybracho 16.07.12 10:56 Сейчас в теме
Подскажите, а в какой предопределенной процедуре вызывать процедуру генерации, если отчет строишь на СКД ?
58. mtv:) 1007 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 128 21.11.12 10:01 Сейчас в теме
И почему народу так трудно выбрать уровень из контекстного меню? Причем доступно в любом месте показа уровней, и не надо крутить туда-сюда отчет.
64. psa247 1 24.11.12 15:24 Сейчас в теме
65. zba 48 29.01.13 19:38 Сейчас в теме
Вот это как раз и надо. Спасибо!
66. KroVladS 32 21.03.13 09:08 Сейчас в теме
Замечательный механизм, как я раньше о нём не узнал.
А главное это позитив от довольных пользователей которым добавили удобняшку :)
67. MsDjuice 98 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:) 1007 04.06.15 07:34 Сейчас в теме
73. dklp 34 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 18 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 Тогда 
					НоваяКнопка.Подсказка = "Показать группировки верхнего уровня"; 
				ИначеЕсли Индекс = КоличествоГруппировокСтрок Тогда 
					НоваяКнопка.Подсказка = "Показать все группировки"; 
				Иначе 
					НоваяКнопка.Подсказка = "Показать группировки до уровня " + Индекс; 
				КонецЕсли;
				НоваяКнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша["_"+Индекс], Ложь, Ложь, Истина);  
				НоваяКнопка.УстановитьДействие("Нажатие", Новый Действие("КоманднаяПанельФормыБыстрыеОтборы"));
				НоваяКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Лево	, ЭлементыФормы[ИмяТабличногоДокумента] , ГраницаЭлементаУправления.Лево);
				НоваяКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Право	, ЭлементыФормы[ИмяТабличногоДокумента] , ГраницаЭлементаУправления.Лево);
				НоваяКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Верх	, ЭлементыФормы[ИмяТабличногоДокумента] , ГраницаЭлементаУправления.Верх);
				НоваяКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Низ	, ЭлементыФормы[ИмяТабличногоДокумента] , ГраницаЭлементаУправления.Верх);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	Доп_КоличествоГруппировокСтрок   = КоличествоГруппировокСтрок; 
	Доп_КоличествоГруппировокКолонок = КоличествоГруппировокКолонок;
	
КонецПроцедуры

Показать


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

См. также

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

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

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

19.06.2015    108920    0    ekaruk    127    

Перенос инструкций из word во встроенную справку 1С с сохранением картинок и форматирования

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

Делюсь простым и удобным способом переноса справки/инструкций из ворда (и не только) во встроенную справку 1С с сохранением картинок и форматирования.

22.04.2020    3475    0    77dream77    21    

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

Математика и алгоритмы Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Предлагается ознакомиться с редким способом графического представления иерархических данных. Приводится алгоритм формирования и пример реализации.

18.02.2020    3758    0    randomus    18    

[Шпаргалка] Свой диалог выбора типа значения (элемента)

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

Для реквизита составного типа необходимо ограничить список выбора типов.

18.02.2020    2462    0    rpgshnik    6    

Генерация кода управляемой формы (декомпиляция элементов) Промо

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

Изменение форм типовых конфигураций лучше выполнять программно. Эта обработка упрощает добавление элементов на форму, генерируя код создания элементов, реквизитов и команд формы.

29.09.2014    99321    0    ekaruk    127    

Динамический список. Апгрейд справочника "Номенклатура" типовой конфигурации с помощью расширения

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

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

26.01.2020    6732    0    aximo    26    

СКД. Шаг 3. Используем макеты для оформления отчета

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

В данной публикации рассмотрим базовый подход к использованию собственных макетов в СКД на примере формирования небольшого отчета.

13.01.2020    9975    0    aximo    13    

Добавление собственного поля и состояния в настройки доступности по состоянию в 1С:Документооборот

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

В данной публикации я хочу описать процесс добавления собственного поля и состояния в функционал настройки доступности по состоянию в 1С:Документооборот.

30.12.2019    3250    0    pavelpribytkin96    2    

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

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

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

22.06.2015    23700    0    Tatitutu    12    

[СКД] Вывод картинки в результат любого отчета на СКД

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

Если у вас в справочнике Номенклатура (или другом справочнике) заполнена картинка, то ее можно легко вывести для наглядности отчета.

09.12.2019    7310    1    John_d    16    

Лайфхаки 1С. Настройка списков (Часть 3)

Работа с интерфейсом v8 Бесплатно (free)

Новая порция лайфхаков по работе с интерфейсом 1С. На этот раз разбираем работу со списками - учимся их упорядочивать, сортировать, создавать новые и перемещать старые. Это очень полезное дополнение к уже имеющимся знаниям по интерфейсу 1С.

03.12.2019    9553    0    VachKirp    13    

В новой платформе пропала кнопка "Печать". Имитируем БСП

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

"Приятным" сюрпризом для многих пользователей 1С стало то, что при обновлении платформы (начиная с 8.3.15) полностью поменялся интерфейс. Можно долго спорить о целесообразности этого новшества, но самым главным минусом стало то, что пропали стандартные кнопки на панели инструментов. Разработчики предполагают повсеместное использование БСП, но что делать тем, кто давно и успешно использует самописные конфигурации, в которых формирование печатной формы происходит по ТабДок.Показать(), и не желает их "утяжелять"? Добавим общую форму с нужными нам кнопками.

03.12.2019    7757    0    Vlan    43    

Видеодемонстрация применения Теста-центра для нагрузочного тестирования конфигураций Промо

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

Тест-центр – инструмент автоматизации многопользовательских нагрузочных испытаний информационных систем на платформе 1С:Предприятие 8. С его помощью можно моделировать работу предприятия без участия реальных пользователей, что позволяет оценивать применимость, производительность и масштабируемость информационной системы в реальных условиях. В видео показан пример с внедрением конфигурации Тест-центра в произвольную информационную базу и создание простого сценария нагрузочного теста.

16.09.2012    34929    0    Aleksey.Bochkov    29    

Управляемые формы. Изменение формы списка или формы объекта без внесения изменений в типовые формы (без использования расширений)

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

Вносим изменения в типовые формы объектов (документы, справочники, журналы, обработки, общие формы). Не снимая с поддержки эти формы. Создаем программно элементы из общего модуля. Для примера рассмотрю добавление колонки "Скрепка" в форму списка документа. Если к документу привязан файл, то в списке в новой колонке должна отображаться "скрепка".

12.11.2019    9084    0    John_d    24    

Локализация интерфейсов конфигураций. Практика и инструментарий 1Ci

Работа с интерфейсом Локализация решений v8 Бесплатно (free)

В последнее время компания 1С International все увереннее заявляет о себе на международном рынке. Но для успешного продвижения в этом направлении необходима локализация интерфейсов конфигураций 1С. О том, как выглядит процесс перевода, какие инструменты для этого есть, где брать переводчиков и как проверять их работу, на конференции Infostart Event 2018 Education рассказал руководитель группы локализации компании 1Ci Сергей Поликарпов.

05.11.2019    4199    0    user1069006    1    

ELK. Время изумительных историй!

Журнал регистрации Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Всем привет! Сегодня хочу рассказать вам несколько полезных историй про то как нам помог Elastic search в связке с Kibana. Про сам Elastic рассказывать не буду, уже все давным давно описали и до меня. Все обычно говорят что это полезно, это классно. В то же время, очень мало кто рассказывает про практические ситуации: когда и как помог Elastic. Итак, начнем.

31.10.2019    7631    0    slozhenikin_com    27    

Хранение и редактирование дополнительных параметров в регламентированном отчете. Для начинающих. Промо

Работа с интерфейсом v8 БП2.0 УПП1 БУ Бесплатно (free)

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

22.01.2014    19797    0    KapasMordorov    4    

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

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

Советы по настройке интерфейса Такси и особенности работы в этой среде.

24.10.2019    7462    0    VachKirp    7    

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

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

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

16.10.2019    11346    0    YPermitin    19    

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

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

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

06.10.2019    10581    0    YPermitin    31    

Хитрости компоновки данных: программное формирование заголовков отчета и колонок без использования макетов. Промо

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

Хитрости компоновки данных: программное формирование заголовков отчета и колонок без использования макетов. Очень часто необходимо программно сформировать заголовок отчета, например добавить туда наименование валюты, в которой формируется отчет. Можно использовать макеты, но во многих случаях это не оправданно.

27.07.2012    31403    0    milkers    10    

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

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

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

02.10.2019    10917    0    VachKirp    10    

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

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

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

25.09.2019    6269    0    Sergey_Borisovi4    3    

[Шпаргалка] Программное создание элементов формы

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

Программное создание практически всех популярных элементов формы.

06.09.2019    35228    0    rpgshnik    62    

Рабочее место кассира для touch-screen и программируемой клавиатуры продавца в «1С: Розница» Промо

Работа с интерфейсом v8 Розница Бесплатно (free)

Вашему вниманию предлагается текст одного из технических проектов «1С: Розница 8», он описывает процесс разработки интерфейса РМК, с которым, нынче, работают кассиры очень многих магазинов.

29.11.2012    45266    0    aavolkoff    50    

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

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

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

26.08.2019    8886    0    rpgshnik    36    

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

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

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

14.08.2019    9077    0    nagaitseff    15    

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

Работа с интерфейсом Инструментарий разработчика v8 Бесплатно (free)

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

07.08.2019    9722    0    IvanAT1981    14    

Бухгалтерия предприятия 3.0 интерфейс, аналогичный 1С:Бухгалтерии 7.7; Промо

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

Бухгалтерия предприятия, редакция 3.0, версия 3.0.14. Добавлена возможность использовать интерфейс, аналогичный 1С:Бухгалтерии 7.7;

20.09.2012    36414    0    dour-dead    18    

БСП: Дополнительные отчеты и обработки - одна обработка, несколько форм

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

Как в одной дополнительной обработке разместить несколько форм с типом команды "ОткрытиеФормы"?

29.07.2019    9168    0    dsdred    9    

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

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

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

09.07.2019    20178    0    ids79    2    

Выбор вариантов отчета в "Управление торговлей" ред. 11 Промо

Работа с интерфейсом Учет ТМЦ Учет ТМЦ v8 УТ10 Россия БУ Бесплатно (free)

В УТ 11 в свойствах конфигурации задано хранилище вариантов отчетов. Исходя из этого, все отчеты будут использовать для своих вариантов именно это хранилище (если, конечно, в свойствах самого отчета не задано другое хранилище). По сути, все варианты для отчетов находятся в справочнике "Варианты отчетов", который заполняется при первом запуске системы. Вполне очевидно, что если Вы создаете свой отчет (внешний или внутренний) с несколькими вариантами, у Вас не будет возможности выбирать нужный вариант (переключаться между вариантами), т.к. в выше указанном справочнике нет никакой информации о вариантах созданного Вами отчета. В этой небольшой статье я покажу один из способов решения данной проблемы.

27.05.2012    45072    0    1cUserAndrew    25    

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

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

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

04.06.2019    34685    0    YPermitin    52    

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

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

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

14.05.2019    16443    0    Viktor_Ermakov    6    

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

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

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

24.04.2019    10923    0    olegpkc    5    

Практика регулярных выражений в 1С или "парсим неудобные форматы" Промо

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

В продолжение статьи Использование регулярных выражений (RegExp) в 1С8.х. Углубляемся в практику использования регулярных выражений в 1С. Основы работы с регулярными выражениями хорошо описаны в указанной публикации. А я попробую ответить на вопрос "почему именно регулярные выражения?" на примере конкретной рабочей задачи.

26.10.2011    28986    0    1cspecialist    33    

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

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

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

11.01.2019    10597    0    Vlad1917    30    

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

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

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

04.10.2018    17390    0    asdfgcom    58    

Допиливаем форму выбора серий номенклатуры для отображения остатков Промо

Практика программирования Работа с интерфейсом v8 КА1 УТ10 УПП1 Россия Бесплатно (free)

В этой статье я хочу рассмотреть задачу, которая довольно часто возникает у начинающих (и не только) разработчиков, адаптирующих типовые конфигурации (УТ, КА, УПП) на предприятиях торговли. Речь пойдет про отображение остатков в форме выбора серий номенклатуры при подборе в документы. Это актуально в тех случаях, когда не ведется партионный учет по сериям, либо когда документы вводятся неоперативно и нет возможности воспользоваться волшебной кнопкой "Заполнить и провести". На первый взгляд задача банальна, но я хочу показать некоторые "грабли", на которые часто наступают новички в процессе ее реализации, а также сопоставлю алгоритмы решения на платформе 8.1 и 8.2.

20.01.2011    31181    0    practik1c    19    

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

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

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

06.06.2018    9018    0    aspirator23    2    

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

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

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

28.05.2018    13266    0    CXY    16    

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

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

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

09.05.2018    11488    0    dima_home    9    

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

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

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

06.04.2018    12203    0    Drak87    18    

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

Работа с интерфейсом v8 Бесплатно (free)

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

22.11.2017    16674    0    Degrement    20    

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

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

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

30.09.2017    19493    0    ah7777777    24    

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

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

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

06.09.2017    15600    0    Chrizt    13    

Выделение строк мышкой (УФ)

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

Выделение строк при помощи мышки.

06.06.2017    11601    0    HalfZer0    6    

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

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

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

28.05.2017    63664    0    niko11s    45    

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

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

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

12.05.2017    26796    0    starik-2005    16