Выполняет автоматическое заполнение настроек построителя из текста запроса.
Синтаксис
ЗаполнитьНастройки()Примеры платформы
ПостроительОтчетов = Новый ПостроительОтчета;
ПостроительОтчетов.Текст = ЭлементыФормы.ТекстЗапроса.ПолучитьТекст();
ПостроительОтчетов.ЗаполнитьНастройки();Полное описание, параметры и ограничения
ПостроительОтчета.ЗаполнитьНастройки (ReportBuilder.FillSettings)
ПостроительОтчета (ReportBuilder)
ЗаполнитьНастройки (FillSettings)
Доступен, начиная с версии 8.0.
Синтаксис:
ЗаполнитьНастройки()
Описание:
Выполняет автоматическое заполнение настроек построителя из текста запроса.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Пример:
ПостроительОтчетов = Новый ПостроительОтчета;
ПостроительОтчетов.Текст = ЭлементыФормы.ТекстЗапроса.ПолучитьТекст();
ПостроительОтчетов.ЗаполнитьНастройки();
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Построить отчёт запросом только к собственным параметрам
Контраст с табличным источником: Текст запроса, структура Параметры, автозаполнение настроек, ПолучитьЗапрос и Результат.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
Учебная внешняя обработка с пустой управляемой основной формой. Создайте команду УчебныйПример, кнопку команды и назначьте действие УчебныйПример.
Вставьте полный модуль урока: клиентский обработчик и серверную функцию. Каждый урок — отдельная копия модуля.
Откройте EPF в тонком клиенте Windows. Данные Книга/Ручка/Коробка создаются только в памяти; запрос урока с параметрами не читает таблицы базы.
ПостроительОтчета — существующий API для изучения/сопровождения старого кода. Это не СистемаКомпоновкиДанных и не рекомендация заменять ею современные отчёты.
&НаКлиенте
Процедура УчебныйПример(Команда)
ТабДок = СформироватьУчебныйОтчет();
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать("Учебный ПостроительОтчета");
КонецПроцедуры
&НаСервере
Функция СформироватьУчебныйОтчет()
Построитель = Новый ПостроительОтчета;
Построитель.Текст = "ВЫБРАТЬ &Название КАК Наименование, &Количество КАК Количество";
Построитель.Параметры.Вставить("Название", "Учебная книга");
Построитель.Параметры.Вставить("Количество", 3);
Построитель.АвтоДетальныеЗаписи = Ложь;
Построитель.ВыводитьДетальныеЗаписи = Истина;
Построитель.ВыводитьЗаголовокОтчета = Истина;
Построитель.ВыводитьОбщиеИтоги = Ложь;
Построитель.ВыводитьПодвалОтчета = Ложь;
Построитель.ВыводитьПодвалТаблицы = Ложь;
Построитель.ВыводитьШапкуТаблицы = Истина;
Построитель.ОтображатьСостояние = Ложь;
Построитель.ОбрабатыватьПрерываниеПользователя = Истина;
Построитель.ТекстЗаголовка = "Учебный отчёт — вымышленные данные";
Построитель.ЗаполнитьНастройки();
Запрос = Построитель.ПолучитьЗапрос();
ПроверочныйРезультат = Запрос.Выполнить();
ПроверочныеСтроки = ПроверочныйРезультат.Выгрузить();
Сообщить(ПроверочныеСтроки.Количество() = 1);
Сообщить(ПроверочныеСтроки.Получить(0).Наименование = "Учебная книга");
Сообщить(ПроверочныеСтроки.Получить(0).Количество = 3);
Построитель.Выполнить();
Строки = Построитель.Результат.Выгрузить();
Сообщить(Строки.Количество() = 1);
Сообщить(Строки.Получить(0).Количество = 3);
ТабДок = Новый ТабличныйДокумент;
Построитель.Вывести(ТабДок);
Возврат ТабДок;
КонецФункции
Разбор по шагам
Запрос ВЫБРАТЬ использует два параметра и не имеет ИЗ: никакие таблицы информационной базы не читаются.
Параметры у построителя — Структура; заполняем их до получения/выполнения запроса.
ЗаполнитьНастройки применяется к Текст, в отличие от урока с ИсточникДанных.
ПолучитьЗапрос доступен, поскольку ИсточникДанных не установлен. Для проверки выполняем полученный Запрос.
Выполнить у построителя формирует его Результат; проверяем его независимо. Вывести затем формирует табличный документ.
Как проверить результат
Пять сравнений Истина: в обоих результатах одна строка Учебная книга с количеством 3.
В отчёте два собственных поля, никаких данных рабочего справочника.
Измените параметр количества на 4: оба результата и вывод поменяются; соответствующие контрольные сравнения также измените.
Ожидаемый результат
Разобраны запросный режим и два разных результата без зависимости от конфигурации базы.
На что обратить внимание
Параметры запроса — не подстановка произвольного SQL/BSL в текст.
ПолучитьЗапрос нельзя использовать при установленном ИсточникДанных.
Запрос выполняется дважды только для сравнения API в уроке; в рабочем решении не повторяйте тяжёлый запрос без причины.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Настроить доступные поля и действительно отобрать книгу с коробкой
Получаем настоящую коллекцию допустимых полей из собственного построителя, выполняем все её операции и передаём её отбору. Итог проверяется по результату выполнения.
Где и как запускать
Полный модуль управляемой формы собственной учебной EPF: клиентский просмотр и серверное формирование отчёта.
Подготовка
Учебная внешняя обработка с пустой управляемой основной формой. Создайте команду УчебныйПример, кнопку команды и назначьте действие УчебныйПример.
Вставьте полный модуль урока: клиентский обработчик и серверную функцию. Каждый урок — отдельная копия модуля.
Откройте EPF в тонком клиенте Windows. Данные Книга/Ручка/Коробка создаются только в памяти; запрос урока с параметрами не читает таблицы базы.
ПостроительОтчета — существующий API для изучения/сопровождения старого кода. Это не СистемаКомпоновкиДанных и не рекомендация заменять ею современные отчёты.
Отдельная собственная конфигурация называется УчебнаяКонфигурацияСинтаксиса. Примеры создают только данные в памяти и собственный отчёт.
Используйте толстый клиент Windows 8.5.1.1343. УсловноеОформление в этих уроках относится к старому построителю, не к классу УсловноеОформлениеКомпоновкиДанных.
В исходных данных Книга: 3 × 250 = 750; Ручка: 1 × 50 = 50; Коробка: 2 × 30 = 60. Общий итог 860, Канцелярия 800, Упаковка 60.
&НаКлиенте
Процедура УчебныйПример(Команда)
ТабДок = СформироватьУчебныйОтчет();
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать("Учебный ПостроительОтчета");
КонецПроцедуры
&НаСервере
Функция СформироватьУчебныйОтчет()
Данные = Новый ТаблицаЗначений;
Данные.Колонки.Добавить("Категория", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Образцы = Новый Массив;
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Книга", 3, 250));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Ручка", 1, 50));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Упаковка", "Коробка", 2, 30));
Для Каждого Образец Из Образцы Цикл
СтрокаДанных = Данные.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДанных, Образец);
СтрокаДанных.Сумма = СтрокаДанных.Количество * СтрокаДанных.Цена;
КонецЦикла;
Описание = Новый ОписаниеИсточникаДанных(Данные);
Для Каждого Колонка Из Описание.Колонки Цикл
Колонка.Поле = Истина;
Колонка.Отбор = Истина;
Колонка.Порядок = Истина;
Колонка.Измерение = Колонка.Имя = "Категория";
КонецЦикла;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Описание;
Построитель.АвтоДетальныеЗаписи = Ложь;
Построитель.ВыводитьДетальныеЗаписи = Истина;
Построитель.ВыводитьЗаголовокОтчета = Истина;
Построитель.ВыводитьОбщиеИтоги = Ложь;
Построитель.ВыводитьПодвалОтчета = Ложь;
Построитель.ВыводитьПодвалТаблицы = Ложь;
Построитель.ВыводитьШапкуТаблицы = Истина;
Построитель.ОтображатьСостояние = Ложь;
Построитель.ОбрабатыватьПрерываниеПользователя = Истина;
Построитель.ТекстЗаголовка = "Учебный отчёт — вымышленные данные";
Построитель.ЗаполнитьНастройки();
Построитель.ИзмеренияСтроки.Очистить();
Построитель.ИзмеренияКолонки.Очистить();
Построитель.ВыбранныеПоля.Очистить();
Построитель.ВыбранныеПоля.Добавить("Наименование", "Товар");
Построитель.ВыбранныеПоля.Добавить("Количество", "Количество");
Построитель.ВыбранныеПоля.Добавить("Сумма", "Сумма");
Доступные = Построитель.ДоступныеПоля;
Доступные.Очистить();
Категории = Новый СписокЗначений;
Категории.Добавить("Канцелярия");
Категории.Добавить("Упаковка");
Категория = Доступные.Добавить("Категория", "Учебная категория", Новый ОписаниеТипов("Строка"), Категории);
Сумма = Доступные.Добавить("Сумма", "Учебная сумма", Новый ОписаниеТипов("Число"));
Количество = Доступные.Вставить("Количество", "Учебное количество", Новый ОписаниеТипов("Число"), Новый СписокЗначений, 1);
Доступные.Добавить("Наименование", "Собственный товар", Новый ОписаниеТипов("Строка"));
ЦенаПроба = Доступные.Добавить("Цена", "Только проверка коллекции", Новый ОписаниеТипов("Число"));
Доступные.Сдвинуть(ЦенаПроба, -4);
Сообщить(Доступные.Получить(0) = ЦенаПроба);
Доступные.Удалить(ЦенаПроба);
Для Каждого Поле Из Доступные Цикл
Поле.Поле = Истина;
Поле.Отбор = Истина;
Поле.Порядок = Истина;
Поле.Измерение = Поле.Имя = "Категория";
КонецЦикла;
Количество.Представление = "Количество для учебного отбора";
Количество.ТипЗначения = Новый ОписаниеТипов("Число");
Сообщить(Доступные.Количество() = 4);
Сообщить(Доступные.Найти("Количество") = Количество);
Сообщить(Доступные.Индекс(Количество) = 1);
Сообщить(Категория.Имя = "Категория");
Сообщить(Категория.ПутьКДанным = "Категория");
Сообщить(Категория.Родитель = Неопределено);
Сообщить(Категория.Поля.Количество() = 0);
Сообщить(Категория.СписокЗначений.Количество() = 2);
Сообщить(Категория.Измерение И Категория.Поле И Категория.Отбор И Категория.Порядок);
Сообщить(Сумма.ТипЗначения.СодержитТип(Тип("Число")));
Сообщить(Количество.Представление = "Количество для учебного отбора");
Построитель.Отбор.УстановитьДоступныеПоля(Доступные);
Условие = Построитель.Отбор.Добавить("Количество", "КоличествоОтДвух", "Не менее двух");
Если Условие = Неопределено Тогда
ВызватьИсключение "Собственное поле количества не доступно для отбора";
КонецЕсли;
Условие.ВидСравнения = ВидСравнения.БольшеИлиРавно;
Условие.Установить(2, Истина);
Построитель.Выполнить();
Отобранные = Построитель.Результат.Выгрузить();
Сообщить(Отобранные.Количество() = 2);
Сообщить(Отобранные.Итог("Сумма") = 810);
ТабДок = Новый ТабличныйДокумент;
Построитель.Вывести(ТабДок);
Возврат ТабДок;
КонецФункции
Разбор по шагам
Сформировать плоские настройки собственного построителя. ПоляНастройки не создаётся конструктором: коллекция получается через ДоступныеПоля.
Очистить только свой набор допустимых полей и добавить категорию, сумму, количество и наименование с типами. Все выбранные поля отчёта остаются допустимыми; количество вставляется в позицию 1 последним аргументом.
Временно добавить цену, сдвинуть и удалить только этот элемент. Установить признаки разрешения поля, отбора, порядка и измерения.
Прочитать имя, путь, родителя, дочерние поля и список категорий. Корневой плоский дескриптор не имеет родителя и дочерних полей.
Передать допустимые поля отбору, установить Количество >= 2 и выполнить настоящий отчёт. Проверить два товара и сумму 810.
Как проверить результат
Четырнадцать булевых проверок дают Истина. В доступных полях после удаления пробы четыре элемента; список категорий содержит две собственные строки.
Отчёт оставляет Книгу 750 и Коробку 60, всего 810. Ручка с количеством 1 исключается.
Ожидаемый результат
Коллекция дескрипторов участвует в реальном отборе, а не выдаётся за данные или настройки неизвестного объекта.
На что обратить внимание
ПоляНастройки не имеет конструктора. Свойство ДоступныеПоля только читается как ссылка, а полученная собственная коллекция имеет методы изменения.
ПутьКДанным, Родитель, Поля и СписокЗначений только читаются. Список допустимых категорий передан при добавлении, не присваивается свойству.
Признак Отбор разрешает поле для настройки, но сам по себе не отбирает строки. Для результата нужны условие, вид сравнения и Выполнить.
Удалить и Сдвинуть этой коллекции принимают элемент, не индекс. Позиция Вставить — пятый параметр.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.