ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений

Типы · DataCompositionValueCollectionTemplateGenerator

Используется для генерации макета для вывода в коллекцию значений. Данный объект не может быть создан. Он может быть только передан в качестве параметра метода Выполнить.

Полное описание, параметры и ограничения

ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений (DataCompositionValueCollectionTemplateGenerator)

ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений (DataCompositionValueCollectionTemplateGenerator)

Доступен, начиная с версии 8.3.5.

Описание:

Используется для генерации макета для вывода в коллекцию значений. Данный объект не может быть создан. Он может быть только передан в качестве параметра метода Выполнить.

Доступность:

Сервер, толстый клиент, мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.3.5.

Методическая информация

Практические примеры

Развернуть автополе детальных записей в четыре явные колонки

Автополе в группе наследует выбор вышестоящей настройки. После РазвернутьАвтоПоля исследуем реальные элементы выбора этой группы.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеЗадачи. Фрагмент без директив вставьте в тело ВыполнитьПример() Экспорт и вызовите своей учебной командой.

  2. Схема СКД строится программно, макет в конфигурации не нужен. Источник Local выполняет запрос из двух собственных константных строк, без справочников, документов и регистров.

  3. Каждое упражнение запускайте отдельно. Книга: 3 × 250 = 750; Ручка: 1 × 50 = 50; общая сумма 800. Результат хранится в памяти, не записывается в файл или базу.

  4. Для исследования поставьте точку останова перед последними проверками. ТаблицаЗначений и процессоры СКД здесь создаются и используются на сервере; напрямую в тонкий клиент таблица не возвращается.

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

Разбор по шагам

  1. До разворачивания в детальных записях один элемент АвтоВыбранноеПолеКомпоновкиДанных. На верхнем уровне четыре явных поля.

  2. РазвернутьАвтоПоля заменяет автополе набором соответствующих явных элементов. После изменения перечитываем группу из настроек редактора.

  3. Проверяем тип каждого элемента, а не только длину коллекции. Затем компонуем отчёт по полученной копии.

  4. Сумма 800 и две строки показывают, что разворачивание выбора не изменило исходные значения.

Как проверить результат

  1. Шесть проверок дают Истина.

  2. В отладчике у детальной группы четыре явных поля: Наименование, Количество, Цена, Сумма. В Результат две строки и сумма 800.

Ожидаемый результат

Из автополя получен явный выбор для дальнейшего адресного редактирования.

На что обратить внимание

  1. Автополе наследует настройки: не считайте, что оно всегда равно всем полям запроса.

  2. После разворачивания выбор становится явным и уже не выражает прежнее автоматическое наследование.

  3. Метод разворачивает также автоматические поля группировки и порядка, если они есть; данный урок специально содержит только авто-выбор.

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

Применить фиксированный отбор к копии настроек

Фиксированный отбор Количество > 1 добавляется при получении рабочих настроек. Пустой пользовательский слой не отменяет его.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеЗадачи. Фрагмент без директив вставьте в тело ВыполнитьПример() Экспорт и вызовите своей учебной командой.

  2. Схема СКД строится программно, макет в конфигурации не нужен. Источник Local выполняет запрос из двух собственных константных строк, без справочников, документов и регистров.

  3. Каждое упражнение запускайте отдельно. Книга: 3 × 250 = 750; Ручка: 1 × 50 = 50; общая сумма 800. Результат хранится в памяти, не записывается в файл или базу.

  4. Для исследования поставьте точку останова перед последними проверками. ТаблицаЗначений и процессоры СКД здесь создаются и используются на сервере; напрямую в тонкий клиент таблица не возвращается.

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

Разбор по шагам

  1. Фиксированный слой создаём отдельно от основных настроек. В него добавляем одно собственное условие Количество > 1.

  2. Пользовательский слой загружен пустым. ПолучитьНастройки возвращает рабочую копию с применением слоёв; оригинальный отбор основных настроек остаётся пустым.

  3. Для вывода в коллекцию выбираем специальный генератор макета пятым аргументом Выполнить.

  4. Вывод направляем в собственную ТаблицаЗначений. Книга с количеством 3 проходит, Ручка с количеством 1 не проходит.

Как проверить результат

  1. Шесть проверок дают Истина.

  2. В Результат одна строка Книга, количество 3, цена 250, сумма 750. Приемник — собственная таблица в памяти.

Ожидаемый результат

Фиксированный фильтр применён к реальному выводу собственного отчёта.

На что обратить внимание

  1. Фиксированный отбор редактора СКД не заменяет RLS и права доступа.

  2. Пересечение полей отбора или параметров фиксированных и основных настроек может вызвать исключение; не устанавливайте одинаковое поле в двух слоях без понимания контракта.

  3. Генератор для коллекции и генератор табличного документа — не взаимозаменяемые типы.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.