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