Управление группировками в Универсальном отчёте

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

Разработка - Практика программирования

УниверсальныйОтчет

Надоело сворачивать группировки строк через контекстное меню. Можно, конечно, включить заголовки, и тогда появятся системные кнопки управления группировками, но с включёнными заголовками отчёт выглядит как-то не комильфо. В итоге слегка допилил Универсальный Отчет, чтобы в отчётах на его основе даже без включенных заголовков всегда были кнопки для управления группировками.

Идею мне подсказала публикация //infostart.ru/public/84642/

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

В итоге оказалось достаточным дописать кое-что в пяти местах модуля отчёта УниверсальныйОтчет (на самом деле достаточно в четырёх, но об этом ниже):

1. В блок определения переменных модуля дописываем две переменных:

Перем мФормаОтчета;
Перем мПрефиксИмениКнопкиГруппировок;

2. В конец процедуры СформироватьОтчет дописываем создание кнопок. Кнопки создаём точно там, где будут системные, если включить заголовки, чтобы при включении ничего не двоилось и системные кнопки оказывались под нашими. И не забываем, что кроме группировок строк бывают ещё группировки колонок:

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

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

3. Для размещения кнопок на форме нам нужна сама форма, а в процедуру СформироватьОтчет она не передаётся, поэтому надо запомнить её в переменной, созданной на этапе 1. Для этого размещаем одну строку в начале процедуры ФормаПриОткрытии:

мФормаОтчета=Форма;

4. Кнопки могут работать только тогда, когда процедура-обработчик находится в модуле формы, но я не хотел менять все 100500 форм отчётов, поэтому оставалось воспользовался той процедурой, которая уже есть в этих формах и которая подходит по прототипу. Я взял ЗначениеПриИзменении. В самое начало этой процедуры надо добавить обработку нажатия наших кнопок:

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

5. В раздел инициализации модуля добавляем строчку, инициализирующую переменную мПрефиксИмениКнопкиГруппировок. Можно, конечно, обойтись и без этой переменной, всюду подставив её значение, но так меньше шансов сделать алгоритм неработоспособным одной опечаткой, плюс гораздо легче устранить конфликт, если вдруг случится чудо и 1С добавит в типовую конфигурацию кнопку с таким же названием:

мПрефиксИмениКнопкиГруппировок="ГМ_КнопкаГруппировок";

Не спрашивайте, почему "ГМ_..." - так надо Smile

UPD от 27.04.2015: Появляется занятный глюк, который может стоить зря потраченных нервов: если открыть в 1С:Предприятии внешний отчёт на основе Универсального отчёта, закрыть, открыть его же в Конфигураторе и что-то поменять в его коде, то эффекта от изменений вы не увидите, пока не перезайдёте в 1С:Предприятие.

Я решил, что дело в том, что форма этого отчёта запоминается в переменной модуля Универсального отчёта. Что именно приводит к тому, что при каждом последующем открытии файла внешнего отчёта 1С вызывает к жизни тот старый фантом, я ещё не продедуктил, да это и неважно, ибо всё вылечивается, если добавить в конец процедуры ФормаПриЗакрытии модуля Универсального отчёта строку:


мФормаОтчета=Неопределено;

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. DrAku1a 1403 19.03.15 15:18 Сейчас в теме
А зря скачивать не стал! Тот самый отчет - намного универсальней* и удобней** встроенного в УПП отчета. Я заменял им универсальный отчет в УТ 10.3, в КА и УПП - нигде проблем не возникало.
* - работает со справочниками, документами, регистрами накопления и сведений, но не работает с регистрами расчетов и бухгалтерии почему-то (обычный универсальный отчет работает только с регистрами накопления)...
** - есть кнопки управления группировками, автоматический подсчёт итогов в выделенных ячейках. Значительно быстрее рассчитывает ширину колонок результата!

и ещё - на ИС отдельная публикация тоже уже очень давно была: Программное генерирование кнопочек для удобного управления уровнями группировки в отчетах (версия 2a), создана 09.04.11
2. vasyak319 139 19.03.15 16:24 Сейчас в теме
(1) DrAku1a, Потому я и написал "Судя по описанию, там много чего интересного". Просто не нужно. А с регистрами бухгалтерии тот отчёт не работает, скорее всего, потому, что построитель как-то плохо к этим регистрам относится. Посмотрите типовые бухгалтерские отчёты - они не на построителе сделаны. В своё время я не придал этому факту значения и попробовал сделать такой отчёт, так всю дорогу плевался.
Оставьте свое сообщение

См. также

Использование программных перечислений, ч.1: строковые константы Промо

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

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    37573    unichkin    74    

Программная работа с настройками СКД

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

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    28103    ids79    26    

[СКД] Программное создание схемы компоновки данных

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

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

15.01.2020    24773    John_d    22    

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

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

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

13.01.2020    15462    aximo    14    

Вспомогательные инструкции в коде 1С Промо

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

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    30591    tormozit    100    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

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

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    19059    kuzyara    33    

30 задач. Странных и не очень

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

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    17285    YPermitin    72    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

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

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    8600    Sibars    19    

Оформление и рефакторинг сложных логических выражений Промо

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

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

20.09.2012    78225    tormozit    131    

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

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

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

16.10.2019    13061    YPermitin    19    

Таблица значений. Нюансы

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

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    34210    Yashazz    50    

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

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

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

06.09.2019    52016    rpgshnik    63    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

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

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

11.07.2007    48698    tormozit    41    

Агрегатные функции СКД, о которых мало кто знает

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

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    50581    ids79    54    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    29188    YPermitin    24    

Три костыля. Сказ про фокусы в коде

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

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

03.09.2019    25753    YPermitin    80    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

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

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    45048    tormozit    74    

Отслеживание выполнения фонового задания

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

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    31940    ids79    16    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

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

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    85605    ids79    49    

Фоновое выполнение кода в 1С - это просто

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

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

02.08.2019    36597    avalakh    22    

Выгрузка документа по условию Промо

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

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    16130    m-rv    2    

Разбираемся с параметрами редактирования СКД

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

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    24625    json    14    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

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

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    61823    ids79    11    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    36398    ids79    27    

Как прикрутить ГУИД к регистру сведений Промо

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

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

16.04.2019    20389    m-rv    17    

Регистры сведений. За кулисами

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

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    26397    YPermitin    14    

"Меньше копипаста!", или как Вася универсальную процедуру писал

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

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    19795    SeiOkami    50    

Работа с настройками системы компоновки данных

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

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

02.07.2019    48216    ids79    17    

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

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    30897    m-rv    21    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    53699    ids79    25    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    25422    dmurk    145    

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

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

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

04.06.2019    42225    YPermitin    52    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

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

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

05.12.2017    28357    itriot11    34    

Регистры накопления. Структура хранения в базе данных

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

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    44029    YPermitin    30    

О расширениях замолвите слово...

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

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    35750    ellavs    126    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

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

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    27613    ellavs    90    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    76709    Serginio    108    

Трюки с внешними источниками данных

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

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    31711    YPermitin    53    

Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев

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

Формируем отчетность о результатах выполнения сценариев. Автоматизируем запуск.

26.02.2019    22412    Vladimir Litvinenko    27    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

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

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    40563    ids79    9    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    35208    ids79    40    

EnterpriseData – часть 2. Процесс выгрузки данных

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    27176    ids79    31    

Новый подход к обмену данными EnterpriseData

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Хочу предложить Вашему вниманию цикл статей, посвященных обмену данными через универсальный формат (EnterpriseData или ED).

14.12.2018    42077    ids79    72    

Тестер: частые вопросы Промо

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

Ошибкам бой - тесты норма жизни!

25.07.2018    29388    grumagargler    28    

EnterpriseData - пример доработки правил конвертации без использования КД 3.0 в расширении конфигурации

Практика программирования Обмен через XML v8 v8::УФ БП3.0 УТ11 Россия Бесплатно (free)

В статье подробно описан реальный пример доработки обмена данными через EnterpriseData (универсальный формат обмена) между конфигурациями УТ 11.4 и Бухгалтерия 3.0

16.11.2018    37648    ids79    42    

Программное заполнение пользовательских параметров и отборов СКД

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

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

13.11.2018    48853    Unk92    25    

Произвольный код в фоновом режиме

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

Задача: реализовать выполнение произвольного кода в фоновом режиме без изменения конфигурации, т.е. во внешней обработке.

03.09.2018    28411    zarankony    42    

Ускоряем 1С: модули с повторным использованием возвращаемых значений Промо

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

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

04.09.2017    53086    m-rv    61