gifts2017

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

Опубликовал Алексей Леонов (axelerleo) в раздел Программирование - Практика программирования

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

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


Способ первый:

Нам понадобятся два табличных поля. В первом указываем в данных - КомпоновщикНастроек.Настройки, а в свойствах элемента формы отмечаем флажок "Подробнаянастройка". Это поле отображает настройки системы компоновки данных. Во втором поле указываем в данных ЭлементыФормы.[Имя первого поля].ТекущиеДанные.Отбор.
При переходе между группировками первого поля во втором табличном поле будет динамически отображаться отбор текущей группировки.


В конфигураторе:



В пользовательском режиме:


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

Способ второй.

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




В модуле формы в процедуре при открытии добавить код:       
//Важно! следующая строка - это позиционирование на отборе конкретной группировки отчета.
// В примере это сделано явно через обращение к элементам структуры настроек по индексу.
// В реальном применении возможно как обращение по индексу, так и перебор элементов структуры в цикле.
ОтборНоменклатуры = КомпоновщикНастроек.Настройки.Структура[0].Строки[0].Отбор;
        ЭлементОтбор = ЭлементыФормы.ТабличноеПоле1;
        МассивТипов = Новый Массив;
        МассивТипов.Добавить(Тип("ОтборКомпоновкиДанных"));
        ЭлементОтбор.ТипЗначения = Новый ОписаниеТипов(МассивТипов);
        ЭлементОтбор.Значение = ОтборНоменклатуры;
        ЭлементОтбор.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
        ЭлементОтбор.СоздатьКолонки();
       
        ОтборПроектов = КомпоновщикНастроек.Настройки.Структура[0].Колонки[0].Отбор;
        ЭлементОтбор = ЭлементыФормы.ТабличноеПоле2;
        МассивТипов = Новый Массив;
        МассивТипов.Добавить(Тип("ОтборКомпоновкиДанных"));
        ЭлементОтбор.ТипЗначения = Новый ОписаниеТипов(МассивТипов);
        ЭлементОтбор.Значение = ОтборПроектов;
        ЭлементОтбор.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
        ЭлементОтбор.СоздатьКолонки();

В пользовательском режиме:



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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Марина Чирина (chmv) 28.08.13 09:28
Интересно. А можно ли сделать отбор не из справочника, а из регистра сведений?
2. Алексей Леонов (axelerleo) 29.08.13 12:05
Немного не понял вопрос.
Если в наборе данных запрос по регистру сведений, все равно там какие-то реквизиты, измерения и ресурсы. Отбор по их значениям конечно можно сделать. Или имеется в виду другое?
3. Alexandr Kuritsyn (hibico) 25.03.15 16:30
+ за идею!
Хочу только добавить.

Табличное поле можно не описывать. Просто при создании поля нужно указать, например для поля "выбранные поля" данные: "КомпоновщикНастроек.Настройки.Выбор".
А программно при открытии формы достаточно присвоить табличному полю нужное значение, например
"ВыводимыеПоля" - табличное поле формы с установленными данными "КомпоновщикНастроек.Настройки.Выбор".
А при открытии типа такого:
ЭлементыФормы.ВыводимыеПоля.Значение = КомпоновщикНастроек.Настройки.Структура[0].Строки[0].Структура[0].Структура[0].Выбор;
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа