Используется для генерации макета для вывода в коллекцию значений. Данный объект не может быть создан. Он может быть только передан в качестве параметра метода Выполнить.
Полное описание, параметры и ограничения
ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений (DataCompositionValueCollectionTemplateGenerator)
ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений (DataCompositionValueCollectionTemplateGenerator)
Доступен, начиная с версии 8.3.5.
Описание:
Используется для генерации макета для вывода в коллекцию значений. Данный объект не может быть создан. Он может быть только передан в качестве параметра метода Выполнить.
Доступность:
Сервер, толстый клиент, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.5.
Методическая информация
Практические примеры
Развернуть автополе детальных записей в четыре явные колонки
Автополе в группе наследует выбор вышестоящей настройки. После РазвернутьАвтоПоля исследуем реальные элементы выбора этой группы.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеЗадачи. Фрагмент без директив вставьте в тело ВыполнитьПример() Экспорт и вызовите своей учебной командой.
Схема СКД строится программно, макет в конфигурации не нужен. Источник Local выполняет запрос из двух собственных константных строк, без справочников, документов и регистров.
Каждое упражнение запускайте отдельно. Книга: 3 × 250 = 750; Ручка: 1 × 50 = 50; общая сумма 800. Результат хранится в памяти, не записывается в файл или базу.
Для исследования поставьте точку останова перед последними проверками. ТаблицаЗначений и процессоры СКД здесь создаются и используются на сервере; напрямую в тонкий клиент таблица не возвращается.
Схема = Новый СхемаКомпоновкиДанных;
Источник = Схема.ИсточникиДанных.Добавить();
Источник.Имя = "УчебныйИсточник";
Источник.ТипИсточникаДанных = "Local";
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
Набор.Имя = "УчебныеТовары";
Набор.ИсточникДанных = Источник.Имя;
Набор.АвтоЗаполнениеДоступныхПолей = Истина;
Набор.Запрос = "ВЫБРАТЬ
| ""Книга"" КАК Наименование,
| 3 КАК Количество,
| 250 КАК Цена,
| 750 КАК Сумма
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Ручка"", 1, 50, 50";
Настройки = Схема.НастройкиПоУмолчанию;
Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество,Цена,Сумма", ",") Цикл
Выбранное = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Выбранное.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
Выбранное.Использование = Истина;
КонецЦикла;
Детали = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Детали.Использование = Истина;
АвтоВыбор = Детали.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбор.Использование = Истина;
Доступные = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
Редактор = Новый КомпоновщикНастроекКомпоновкиДанных;
Редактор.Инициализировать(Доступные);
Редактор.ЗагрузитьНастройки(Настройки);
ДеталиРедактора = Редактор.Настройки.Структура.Получить(0);
Сообщить(ДеталиРедактора.Выбор.Элементы.Количество() = 1);
Сообщить(ТипЗнч(ДеталиРедактора.Выбор.Элементы.Получить(0)) = Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
Редактор.РазвернутьАвтоПоля();
ДеталиРедактора = Редактор.Настройки.Структура.Получить(0);
ВсеПоляЯвные = Истина;
Для Каждого Выбранное Из ДеталиРедактора.Выбор.Элементы Цикл
Если ТипЗнч(Выбранное) <> Тип("ВыбранноеПолеКомпоновкиДанных") Тогда
ВсеПоляЯвные = Ложь;
КонецЕсли;
КонецЦикла;
Сообщить(ВсеПоляЯвные);
Сообщить(ДеталиРедактора.Выбор.Элементы.Количество() = 4);
РабочиеНастройки = Редактор.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, РабочиеНастройки, , ,
Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет);
Приемник = Новый ТаблицаЗначений;
Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Вывод.ОтображатьПроцентВывода = Ложь;
Вывод.УстановитьОбъект(Приемник);
Результат = Вывод.Вывести(Процессор, Ложь);
Сообщить(Результат.Количество() = 2);
Сообщить(Результат.Итог("Сумма") = 800);Разбор по шагам
До разворачивания в детальных записях один элемент АвтоВыбранноеПолеКомпоновкиДанных. На верхнем уровне четыре явных поля.
РазвернутьАвтоПоля заменяет автополе набором соответствующих явных элементов. После изменения перечитываем группу из настроек редактора.
Проверяем тип каждого элемента, а не только длину коллекции. Затем компонуем отчёт по полученной копии.
Сумма 800 и две строки показывают, что разворачивание выбора не изменило исходные значения.
Как проверить результат
Шесть проверок дают Истина.
В отладчике у детальной группы четыре явных поля: Наименование, Количество, Цена, Сумма. В Результат две строки и сумма 800.
Ожидаемый результат
Из автополя получен явный выбор для дальнейшего адресного редактирования.
На что обратить внимание
Автополе наследует настройки: не считайте, что оно всегда равно всем полям запроса.
После разворачивания выбор становится явным и уже не выражает прежнее автоматическое наследование.
Метод разворачивает также автоматические поля группировки и порядка, если они есть; данный урок специально содержит только авто-выбор.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Применить фиксированный отбор к копии настроек
Фиксированный отбор Количество > 1 добавляется при получении рабочих настроек. Пустой пользовательский слой не отменяет его.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеЗадачи. Фрагмент без директив вставьте в тело ВыполнитьПример() Экспорт и вызовите своей учебной командой.
Схема СКД строится программно, макет в конфигурации не нужен. Источник Local выполняет запрос из двух собственных константных строк, без справочников, документов и регистров.
Каждое упражнение запускайте отдельно. Книга: 3 × 250 = 750; Ручка: 1 × 50 = 50; общая сумма 800. Результат хранится в памяти, не записывается в файл или базу.
Для исследования поставьте точку останова перед последними проверками. ТаблицаЗначений и процессоры СКД здесь создаются и используются на сервере; напрямую в тонкий клиент таблица не возвращается.
Схема = Новый СхемаКомпоновкиДанных;
Источник = Схема.ИсточникиДанных.Добавить();
Источник.Имя = "УчебныйИсточник";
Источник.ТипИсточникаДанных = "Local";
Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
Набор.Имя = "УчебныеТовары";
Набор.ИсточникДанных = Источник.Имя;
Набор.АвтоЗаполнениеДоступныхПолей = Истина;
Набор.Запрос = "ВЫБРАТЬ
| ""Книга"" КАК Наименование,
| 3 КАК Количество,
| 250 КАК Цена,
| 750 КАК Сумма
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ""Ручка"", 1, 50, 50";
Настройки = Схема.НастройкиПоУмолчанию;
Для Каждого ИмяПоля Из СтрРазделить("Наименование,Количество,Цена,Сумма", ",") Цикл
Выбранное = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Выбранное.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
Выбранное.Использование = Истина;
КонецЦикла;
Детали = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Детали.Использование = Истина;
АвтоВыбор = Детали.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбор.Использование = Истина;
Доступные = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
Редактор = Новый КомпоновщикНастроекКомпоновкиДанных;
Редактор.Инициализировать(Доступные);
Редактор.ЗагрузитьНастройки(Настройки);
Фиксированные = Новый НастройкиКомпоновкиДанных;
Условие = Фиксированные.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Количество");
Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
Условие.ПравоеЗначение = 1;
Условие.Использование = Истина;
Редактор.ЗагрузитьФиксированныеНастройки(Фиксированные);
Редактор.ЗагрузитьПользовательскиеНастройки(Новый ПользовательскиеНастройкиКомпоновкиДанных);
Сообщить(Редактор.ФиксированныеНастройки.Отбор.ПолучитьКоличествоИспользуемых() = 1);
Сообщить(ТипЗнч(Редактор.ПользовательскиеНастройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных"));
РабочиеНастройки = Редактор.ПолучитьНастройки();
Сообщить(Редактор.Настройки.Отбор.ПолучитьКоличествоИспользуемых() = 0);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, РабочиеНастройки, , ,
Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет);
Приемник = Новый ТаблицаЗначений;
Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Вывод.ОтображатьПроцентВывода = Ложь;
Вывод.УстановитьОбъект(Приемник);
Результат = Вывод.Вывести(Процессор, Ложь);
Сообщить(Результат.Количество() = 1);
Книга = Результат.Найти("Книга", "Наименование");
Сообщить(Книга <> Неопределено);
Сообщить(Результат.Итог("Сумма") = 750);Разбор по шагам
Фиксированный слой создаём отдельно от основных настроек. В него добавляем одно собственное условие Количество > 1.
Пользовательский слой загружен пустым. ПолучитьНастройки возвращает рабочую копию с применением слоёв; оригинальный отбор основных настроек остаётся пустым.
Для вывода в коллекцию выбираем специальный генератор макета пятым аргументом Выполнить.
Вывод направляем в собственную ТаблицаЗначений. Книга с количеством 3 проходит, Ручка с количеством 1 не проходит.
Как проверить результат
Шесть проверок дают Истина.
В Результат одна строка Книга, количество 3, цена 250, сумма 750. Приемник — собственная таблица в памяти.
Ожидаемый результат
Фиксированный фильтр применён к реальному выводу собственного отчёта.
На что обратить внимание
Фиксированный отбор редактора СКД не заменяет RLS и права доступа.
Пересечение полей отбора или параметров фиксированных и основных настроек может вызвать исключение; не устанавливайте одинаковое поле в двух слоях без понимания контракта.
Генератор для коллекции и генератор табличного документа — не взаимозаменяемые типы.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.