Тип: Строка. Фильтр записей.
Полное описание, параметры и ограничения
ГруппировкаДиаграммыМакетаКомпоновкиДанных.ОтборЗаписей (DataCompositionTemplateChartGroup.RecordsFilter)
ГруппировкаДиаграммыМакетаКомпоновкиДанных (DataCompositionTemplateChartGroup)
ОтборЗаписей (RecordsFilter)
Доступен, начиная с версии 8.1.
Использование:
Чтение и запись.
Описание:
Тип: Строка.
Фильтр записей.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Исследовать серии и точки настоящего макета диаграммы СКД
Строим свою гистограмму из трёх продаж, затем разбираем созданные компоновщиком группировки серий и точек, выражения, ограничения, сортировки и области ресурсов.
Где и как запускать
Полный серверный общий модуль УчебныйМакетДиаграммы85; запускается только из собственной серверной учебной команды.
Подготовка
Используйте отдельную пустую учебную базу 8.5.1.1343. Данные рабочих конфигураций, готовые отчёты и подключение к интернету не нужны.
Создайте общий модуль УчебныйМакетДиаграммы85: Сервер — Да, Клиент — Нет, Вызов сервера — Нет, Привилегированный — Нет. Вставьте весь модуль одного урока целиком, включая вспомогательные функции.
В своей учебной обработке создайте управляемую форму и команду ВыполнитьУрок. Через конструктор обработчика добавьте клиентскую процедуру команды, вызывающую собственную процедуру ВыполнитьНаСервере() с директивой &НаСервереБезКонтекста. В её тело вставьте УчебныйМакетДиаграммы85.ВыполнитьПример();.
В запросе только свои три строки: Север/Книга — количество 3, сумма 750; Север/Ручка — 1 и 50; Юг/Книга — 2 и 500. Сумма источника 1300, количество единиц 6. Запрос ничего не читает из справочников или регистров.
Поставьте точку останова перед последним Сообщить в ВыполнитьПример. В серверном отладчике смотрите переменные Макет, Группы и Результат; у табличного документа можно открыть просмотр значения. Не пытайтесь вернуть Макет в тонкий клиент.
Каждый запуск заново строит свою схему и макет в памяти. Код не открывает клиентское окно, не печатает, не сохраняет файлы, не меняет настройки другого пользователя и не пишет в базу.
Магазины — серии, товары — точки, ресурс — сумма. Группировка настроек, группировка скомпилированного макета и готовая серия рисунка — разные объекты. У группировки макета нет конструктора Новый; она получается обходом собственных Макет.Тело → Диаграмма → Серии/Точки.
Пример не запускался в 1С. Контрольные результаты ниже ожидаемые; статические проверки сигнатур не подтверждают фактическое оформление или размещение итогов в табличном документе.
Наш запрос не содержит Юг/Ручка. Отсутствующая комбинация — не отдельная исходная строка с нулём. Суммы магазина Север 800, Юга 500, товара Книга 1250 и Ручка 50.
Процедура ВыполнитьПример() Экспорт
Схема = Новый СхемаКомпоновкиДанных;
Источник = Схема.ИсточникиДанных.Добавить();
Источник.Имя = "УчебныеПродажи";
Источник.ТипИсточникаДанных = "Local";
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
Набор.Имя = "СвоиТриСтроки";
Набор.ИсточникДанных = Источник.Имя;
Набор.АвтоЗаполнениеДоступныхПолей = Истина;
Набор.Запрос = "ВЫБРАТЬ
| ""Север"" КАК Магазин,
| ""Книга"" КАК Наименование,
| 3 КАК Количество,
| 750 КАК Сумма
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Север"", ""Ручка"", 1, 50
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Юг"", ""Книга"", 2, 500";
Для Каждого ИмяРесурса Из СтрРазделить("Сумма,Количество", ",") Цикл
Ресурс = Схема.ПоляИтога.Добавить();
Ресурс.ПутьКДанным = ИмяРесурса;
Ресурс.Выражение = "Сумма(" + ИмяРесурса + ")";
КонецЦикла;
Настройки = Схема.НастройкиПоУмолчанию;
Диаграмма = Настройки.Структура.Добавить(Тип("ДиаграммаКомпоновкиДанных"));
Диаграмма.Имя = "УчебныеПродажиПоМагазинам";
Диаграмма.Использование = Истина;
Выбранное = Диаграмма.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Выбранное.Поле = Новый ПолеКомпоновкиДанных("Сумма");
Выбранное.Использование = Истина;
Серия = Диаграмма.Серии.Добавить();
Серия.Имя = "Магазины";
Серия.Использование = Истина;
ПолеСерии = Серия.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеСерии.Поле = Новый ПолеКомпоновкиДанных("Магазин");
ПолеСерии.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
ПолеСерии.Использование = Истина;
Точка = Диаграмма.Точки.Добавить();
Точка.Имя = "Товары";
Точка.Использование = Истина;
ПолеТочки = Точка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеТочки.Поле = Новый ПолеКомпоновкиДанных("Наименование");
ПолеТочки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
ПолеТочки.Использование = Истина;
Диаграмма.ПараметрыВывода.УстановитьЗначениеПараметра("ТипДиаграммы", ТипДиаграммы.Гистограмма);
Диаграмма.ПараметрыВывода.УстановитьЗначениеПараметра("Заголовок", "Свои продажи: магазины и товары");
КонтрольныйЗапрос = Новый Запрос;
КонтрольныйЗапрос.Текст = Набор.Запрос;
ИсходныеСтроки = КонтрольныйЗапрос.Выполнить().Выгрузить();
Если ИсходныеСтроки.Количество() <> 3 Или ИсходныеСтроки.Итог("Сумма") <> 1300 Тогда
ВызватьИсключение "Изменились собственные учебные данные";
КонецЕсли;
Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = Компоновщик.Выполнить(Схема, Настройки);
Группы = Новый Массив;
НайтиГруппыДиаграмм(Макет.Тело, Группы);
Если Группы.Количество() = 0 Тогда
ВызватьИсключение "В собственном макете не найдены группировки диаграммы";
КонецЕсли;
Для Каждого ГруппаМакета Из Группы Цикл
Сообщить("Имя группировки: " + ГруппаМакета.Имя);
Сообщить("Идентификатор: " + ГруппаМакета.Идентификатор);
Сообщить("Ограничение количества: " + Строка(ГруппаМакета.КоличествоЗаписей));
Сообщить("Процент записей: " + Строка(ГруппаМакета.ПроцентЗаписей));
Сообщить("Отбор записей: " + ГруппаМакета.ОтборЗаписей);
Сообщить("Отбор группировок: " + ГруппаМакета.ОтборГруппировок);
Сообщить("Отбор группировок с иерархией: " + ГруппаМакета.ОтборГруппировокСИерархией);
Сообщить("Отбор только иерархии: " + ГруппаМакета.ОтборГруппировокТолькоИерархия);
Сообщить("Частей тела: " + Строка(ГруппаМакета.Тело.Количество()));
Сообщить("Частей иерархического тела: " + Строка(ГруппаМакета.ТелоИерархии.Количество()));
Для Каждого Поле Из ГруппаМакета.Группировка Цикл
Сообщить("Поле группировки: " + Поле.ИмяПоля + "; выражение: " + Поле.Выражение);
КонецЦикла;
Для Каждого Порядок Из ГруппаМакета.Порядок Цикл
Сообщить("Порядок: " + Порядок.Выражение + "; направление: " + Строка(Порядок.ТипУпорядочивания));
КонецЦикла;
Сообщить("Элементов иерархического порядка: " + Строка(ГруппаМакета.ИерархическийПорядок.Количество()));
Для Каждого ЧастьТела Из ГруппаМакета.Тело Цикл
Если ТипЗнч(ЧастьТела) = Тип("МакетГруппировкиДиаграммыМакетаКомпоновкиДанных") Тогда
Сообщить("Область группировки диаграммы: " + ЧастьТела.Макет);
Сообщить("Макетов ресурсов этой области: " + Строка(ЧастьТела.МакетРесурсов.Количество()));
Для Каждого МакетРесурса Из ЧастьТела.МакетРесурсов Цикл
Сообщить("Область ресурса: " + МакетРесурса.Макет);
Сообщить("Область группировки ресурса: " + МакетРесурса.МакетГруппировки);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Результат = СформироватьСвойДокумент(Макет);
Сообщить(Результат.ВысотаТаблицы > 0);
КонецПроцедуры
Процедура НайтиГруппыДиаграмм(Тело, Найденные)
Для Каждого Часть Из Тело Цикл
Если ТипЗнч(Часть) = Тип("ДиаграммаМакетаКомпоновкиДанных") Тогда
Сообщить("Диаграмма: " + Часть.Имя);
Сообщить("Идентификатор диаграммы: " + Часть.Идентификатор);
Сообщить("Макет диаграммы: " + Часть.Макет);
Сообщить("Макет ресурсов диаграммы: " + Часть.МакетРесурсов);
СобратьГруппыОси(Часть.Серии, Найденные);
СобратьГруппыОси(Часть.Точки, Найденные);
ИначеЕсли ТипЗнч(Часть) = Тип("ГруппировкаМакетаКомпоновкиДанных") Тогда
НайтиГруппыДиаграмм(Часть.Тело, Найденные);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура СобратьГруппыОси(ТелоОси, Найденные)
Для Каждого Часть Из ТелоОси Цикл
Если ТипЗнч(Часть) = Тип("ГруппировкаДиаграммыМакетаКомпоновкиДанных") Тогда
Найденные.Добавить(Часть);
СобратьГруппыОси(Часть.Тело, Найденные);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция СформироватьСвойДокумент(СвойМакет)
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(СвойМакет);
Документ = Новый ТабличныйДокумент;
Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
Вывод.ОтображатьПроцентВывода = Ложь;
Вывод.УстановитьДокумент(Документ);
РезультатВывода = Вывод.Вывести(Процессор, Ложь);
Если ТипЗнч(РезультатВывода) <> Тип("ТабличныйДокумент") Тогда
ВызватьИсключение "Не получен собственный табличный документ";
КонецЕсли;
Возврат РезультатВывода;
КонецФункции
Разбор по шагам
Источник Local содержит только собственные константы. Сумма и Количество объявлены ресурсами, но в диаграмму выбираем Сумма.
Настройки задают Магазин для серий и Наименование для точек; ТипГруппировки Элементы не запрашивает иерархию справочника.
Схема и настройки передаются компоновщику. Полученный МакетКомпоновкиДанных ещё не является рисунком или ТабличнымДокументом.
В реальном теле ищем точный тип ДиаграммаМакетаКомпоновкиДанных. Его Серии и Точки — отдельные readonly-коллекции группировок макета; не присваиваем им новые массивы.
Тип каждого узла проверяется перед чтением. Рекурсия обходит простые неиерархические группировки своей диаграммы; пустое тело не превращается в выдуманный объект.
Группировка описывает поля и выражения оси. Имя и Идентификатор читаем для диагностики, не переименовываем связанную часть макета.
Четыре области отбора, обычный и иерархический порядок относятся к разным этапам. Пустые выражения и отсутствие иерархического тела допустимы в этой простой задаче.
В теле группы отдельно проверяем МакетГруппировкиДиаграммыМакетаКомпоновкиДанных: Макет — строковое имя области, МакетРесурсов — коллекция объектов. У каждого объекта читаем свои Макет и МакетГруппировки.
Свежий процессор и процессор вывода создают собственный табличный документ с диаграммой. В отладчике можно сопоставить описание группировок с фактическими сериями и точками.
Как проверить результат
Группы не пусты. Среди полей найдите Магазин и Наименование, заключительное сравнение высоты документа должно дать Истина.
В просмотре результата ожидаются две серии Север и Юг, точки Книга и Ручка. Значения имеющихся пересечений: 750, 50 и 500; исходная общая сумма 1300.
Проверьте в отладчике типы коллекций и частей тела. Техническое число областей, их имена и заполнение неиспользуемых иерархических частей не фиксируются.
Отсутствующая Юг/Ручка может оформляться как пустое значение; по её виду нельзя заключать, что исходный запрос содержал четвёртую продажу.
Ожидаемый результат
Получена собственная диаграмма и полноценный диагностический разбор её реального макета, без неизвестных входных объектов и записи в рабочую базу.
На что обратить внимание
ГруппировкаДиаграммыМакетаКомпоновкиДанных не равна ГруппировкаДиаграммыКомпоновкиДанных из настроек и не равна СерияДиаграммы готового рисунка.
Не присваивайте readonly-ссылки Группировка, Порядок, ИерархическийПорядок, Тело и ТелоИерархии. Строковые имена областей нельзя подменять объектами.
У группировки диаграммы нет МакетШапки и МакетПодвала, в отличие от других группировок. Области вывода ищутся в её теле.
Не вставляйте SQL или текст запроса в скомпилированные отборы без проверки языка выражений СКД. Для обычного изменения фильтра корректируйте настройки и пересобирайте макет.
Обход рассчитан на созданную здесь простую диаграмму без иерархических группировок и вложенных схем; это не универсальный инспектор чужих отчётов.
Статические проверки не подтверждают оформление диаграммы на экране. Здесь агент не запускает 1С, не вызывает сеть, печать или сохранение файла.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.