ПостроительОтчета.ДоступныеПоля

Свойства · AvailableFields

Тип: ПоляНастройки. Коллекция допустимых полей.

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

ПостроительОтчета.ДоступныеПоля (ReportBuilder.AvailableFields)

ПостроительОтчета (ReportBuilder)

ДоступныеПоля (AvailableFields)

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

Использование:
Только чтение.
Описание:
Тип: ПоляНастройки.
Коллекция допустимых полей.
Доступность:

Сервер, толстый клиент, внешнее соединение.

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

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

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

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

Настроить доступные поля и действительно отобрать книгу с коробкой

Получаем настоящую коллекцию допустимых полей из собственного построителя, выполняем все её операции и передаём её отбору. Итог проверяется по результату выполнения.

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

Полный модуль управляемой формы собственной учебной EPF: клиентский просмотр и серверное формирование отчёта.

Подготовка

  1. Учебная внешняя обработка с пустой управляемой основной формой. Создайте команду УчебныйПример, кнопку команды и назначьте действие УчебныйПример.

  2. Вставьте полный модуль урока: клиентский обработчик и серверную функцию. Каждый урок — отдельная копия модуля.

  3. Откройте EPF в тонком клиенте Windows. Данные Книга/Ручка/Коробка создаются только в памяти; запрос урока с параметрами не читает таблицы базы.

  4. ПостроительОтчета — существующий API для изучения/сопровождения старого кода. Это не СистемаКомпоновкиДанных и не рекомендация заменять ею современные отчёты.

  5. Отдельная собственная конфигурация называется УчебнаяКонфигурацияСинтаксиса. Примеры создают только данные в памяти и собственный отчёт.

  6. Используйте толстый клиент Windows 8.5.1.1343. УсловноеОформление в этих уроках относится к старому построителю, не к классу УсловноеОформлениеКомпоновкиДанных.

  7. В исходных данных Книга: 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. Очистить только свой набор допустимых полей и добавить категорию, сумму, количество и наименование с типами. Все выбранные поля отчёта остаются допустимыми; количество вставляется в позицию 1 последним аргументом.

  3. Временно добавить цену, сдвинуть и удалить только этот элемент. Установить признаки разрешения поля, отбора, порядка и измерения.

  4. Прочитать имя, путь, родителя, дочерние поля и список категорий. Корневой плоский дескриптор не имеет родителя и дочерних полей.

  5. Передать допустимые поля отбору, установить Количество >= 2 и выполнить настоящий отчёт. Проверить два товара и сумму 810.

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

  1. Четырнадцать булевых проверок дают Истина. В доступных полях после удаления пробы четыре элемента; список категорий содержит две собственные строки.

  2. Отчёт оставляет Книгу 750 и Коробку 60, всего 810. Ручка с количеством 1 исключается.

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

Коллекция дескрипторов участвует в реальном отборе, а не выдаётся за данные или настройки неизвестного объекта.

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

  1. ПоляНастройки не имеет конструктора. Свойство ДоступныеПоля только читается как ссылка, а полученная собственная коллекция имеет методы изменения.

  2. ПутьКДанным, Родитель, Поля и СписокЗначений только читаются. Список допустимых категорий передан при добавлении, не присваивается свойству.

  3. Признак Отбор разрешает поле для настройки, но сам по себе не отбирает строки. Для результата нужны условие, вид сравнения и Выполнить.

  4. Удалить и Сдвинуть этой коллекции принимают элемент, не индекс. Позиция Вставить — пятый параметр.

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

Выделить суммы книги и коробки, не отбирая ручку из данных

Условное оформление старого построителя выделяет только ячейки Сумма >= 60. Отбор внутри правила влияет на оформление, а не на количество строк результата.

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

Полный модуль управляемой формы собственной учебной EPF: клиентский просмотр и серверное формирование отчёта.

Подготовка

  1. Учебная внешняя обработка с пустой управляемой основной формой. Создайте команду УчебныйПример, кнопку команды и назначьте действие УчебныйПример.

  2. Вставьте полный модуль урока: клиентский обработчик и серверную функцию. Каждый урок — отдельная копия модуля.

  3. Откройте EPF в тонком клиенте Windows. Данные Книга/Ручка/Коробка создаются только в памяти; запрос урока с параметрами не читает таблицы базы.

  4. ПостроительОтчета — существующий API для изучения/сопровождения старого кода. Это не СистемаКомпоновкиДанных и не рекомендация заменять ею современные отчёты.

  5. Отдельная собственная конфигурация называется УчебнаяКонфигурацияСинтаксиса. Примеры создают только данные в памяти и собственный отчёт.

  6. Используйте толстый клиент Windows 8.5.1.1343. УсловноеОформление в этих уроках относится к старому построителю, не к классу УсловноеОформлениеКомпоновкиДанных.

  7. В исходных данных Книга: 3 × 250 = 750; Ручка: 1 × 50 = 50; Коробка: 2 × 30 = 60. Общий итог 860, Канцелярия 800, Упаковка 60.

&НаКлиенте
Процедура УчебныйПример(Команда)
    ТабДок = СформироватьУчебныйОтчет();
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.Показать("Учебный ПостроительОтчета");
КонецПроцедуры

&НаСервере
Функция СформироватьУчебныйОтчет()
    Данные = Новый ТаблицаЗначений;
    Данные.Колонки.Добавить("Категория", Новый ОписаниеТипов("Строка"));
    Данные.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
    Данные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
    Данные.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
    Данные.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
    Образцы = Новый Массив;
    Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Книга", 3, 250));
    Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Ручка", 1, 50));
    Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Упаковка", "Коробка", 2, 30));
    Для Каждого Образец Из Образцы Цикл
        СтрокаДанных = Данные.Добавить();
        ЗаполнитьЗначенияСвойств(СтрокаДанных, Образец);
        СтрокаДанных.Сумма = СтрокаДанных.Количество * СтрокаДанных.Цена;
    КонецЦикла;
    Описание = Новый ОписаниеИсточникаДанных(Данные);
    Для Каждого Колонка Из Описание.Колонки Цикл
        Колонка.Поле = Истина;
        Колонка.Отбор = Истина;
        Колонка.Порядок = Истина;
        Колонка.Измерение = Колонка.Имя = "Категория";
    КонецЦикла;
    Построитель = Новый ПостроительОтчета;
    Построитель.ИсточникДанных = Описание;
    Построитель.АвтоДетальныеЗаписи = Ложь;
    Построитель.ВыводитьДетальныеЗаписи = Истина;
    Построитель.ВыводитьЗаголовокОтчета = Истина;
    Построитель.ВыводитьОбщиеИтоги = Ложь;
    Построитель.ВыводитьПодвалОтчета = Ложь;
    Построитель.ВыводитьПодвалТаблицы = Ложь;
    Построитель.ВыводитьШапкуТаблицы = Истина;
    Построитель.ОтображатьСостояние = Ложь;
    Построитель.ОбрабатыватьПрерываниеПользователя = Истина;
    Построитель.ТекстЗаголовка = "Учебный отчёт — вымышленные данные";
    Построитель.ЗаполнитьНастройки();
    Построитель.ИзмеренияСтроки.Очистить();
    Построитель.ИзмеренияКолонки.Очистить();
    Построитель.ВыбранныеПоля.Очистить();
    Построитель.ВыбранныеПоля.Добавить("Наименование", "Товар");
    Построитель.ВыбранныеПоля.Добавить("Количество", "Количество");
    Построитель.ВыбранныеПоля.Добавить("Сумма", "Сумма");
    Условия = Построитель.УсловноеОформление;
    Условия.УстановитьДоступныеПоля(Построитель.ДоступныеПоля);
    ПроверкаПолей = Условия.ПолучитьДоступныеПоля();
    Сообщить(ПроверкаПолей.Найти("Сумма") <> Неопределено);
    Правило = Условия.Добавить("СобственнаяСумма", "Выделить стоимость от 60");
    Правило.Имя = "СобственнаяСуммаОт60";
    Правило.Заголовок = "Только собственные суммы от 60";
    Правило.Использование = Истина;
    Правило.Отбор.УстановитьДоступныеПоля(Построитель.ДоступныеПоля);
    Порог = Правило.Отбор.Добавить("Сумма", "СобственныйПорог", "Стоимость");
    Если Порог = Неопределено Тогда
        ВызватьИсключение "Сумма не доступна для собственного правила";
    КонецЕсли;
    Порог.ВидСравнения = ВидСравнения.БольшеИлиРавно;
    Порог.Установить(60, Истина);
    Область = Правило.Область;
    Область.УстановитьДоступныеПоля(Построитель.ДоступныеПоля);
    ДоступныеОбласти = Область.ПолучитьДоступныеПоля();
    Сообщить(ДоступныеОбласти.Найти("Сумма") <> Неопределено);
    ПолеСуммы = Область.Добавить("Сумма", "Собственная стоимость", ТипОбластиОформления.Поле);
    Сообщить(ПолеСуммы.Заголовок = "Собственная стоимость");
    Сообщить(ПолеСуммы.ПутьКДанным = "Сумма");
    ПолеСуммы.ТипОбласти = ТипОбластиОформления.Поле;
    ПолеСуммы.ПутьКДанным = "Сумма";
    Сообщить(Область.Количество() = 1);
    ЦветУстановлен = Ложь;
    Для Каждого Параметр Из Правило.Оформление Цикл
        Если Параметр.Имя = "ЦветФона" Тогда
            Сообщить(Параметр.ТипЗначения.СодержитТип(Тип("Цвет")));
            Параметр.Значение = Новый Цвет(255, 245, 180);
            Параметр.Использование = Истина;
            Параметр.Заголовок = "Учебная подложка";
            Сообщить(Параметр.Использование);
            Сообщить(Параметр.Заголовок = "Учебная подложка");
            Сообщить(ТипЗнч(Параметр.Значение) = Тип("Цвет"));
            ЦветУстановлен = Истина;
        КонецЕсли;
    КонецЦикла;
    Если НЕ ЦветУстановлен Тогда
        ВызватьИсключение "Параметр ЦветФона не найден в собственной настройке оформления";
    КонецЕсли;
    Сообщить(Правило.Имя = "СобственнаяСуммаОт60");
    Сообщить(Правило.Заголовок = "Только собственные суммы от 60");
    Сообщить(Правило.Использование);
    Построитель.Выполнить();
    ПроверкаДанных = Построитель.Результат.Выгрузить();
    Сообщить(ПроверкаДанных.Количество() = 3);
    Сообщить(ПроверкаДанных.Итог("Сумма") = 860);

    ТабДок = Новый ТабличныйДокумент;
    Построитель.Вывести(ТабДок);
    Возврат ТабДок;
КонецФункции

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

  1. Получить настоящую коллекцию УсловноеОформление своего построителя и передать ей допустимые поля источника.

  2. Создать собственное правило с именем, заголовком и флагом использования. Его отбор: Сумма >= 60.

  3. В область оформления добавить только поле Сумма, не группировку и не всю таблицу. Прочитать её заголовок и путь.

  4. Обойти настоящую коллекцию параметров Оформление, найти ЦветФона по Имя, проверить допустимый тип Цвет и включить собственное значение.

  5. Выполнить и показать отчёт. Проверить сохранение всех трёх строк и итога 860, затем визуально сверить подложку сумм 750 и 60.

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

  1. Четырнадцать булевых проверок дают Истина при наличии стандартного параметра ЦветФона. Данных три строки, итог 860.

  2. В отчёте жёлтая подложка у сумм 750 и 60, сумма 50 не выделяется. Ручка остаётся в отчёте. Визуальный результат отдельно проверяется в 1С.

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

Настоящее условное оформление работает над данными собственного отчёта и отделено от общего отбора строк.

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

  1. УсловноеОформление не равно УсловноеОформлениеКомпоновкиДанных: типы элементов, области и коллекции здесь другие.

  2. Свойства Правило.Область, Отбор, Оформление только читаются как ссылки. Меняются полученные собственные объекты, не присваиваются новые коллекции.

  3. Имя и ТипЗначения элемента настройки оформления только читаются. Для изменения вида задаются Значение и Использование.

  4. Нет вывода о подложке по одной проверке цвета в параметре: нужен ручной просмотр самого отчёта.

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

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

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

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

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