Типы отчетов#

Произвольный#

Произвольный отчет — это отчет, параметры которого берутся напрямую из существующей Печатной Формы (ПФ) с возможностью выбора только нужных параметров.

Как это работает?

В системе существует Печатная Форма (ПФ), содержащая множество параметров. При создании произвольного отчета можно выбрать только те параметры из ПФ, которые действительно необходимы для конкретной задачи.

Итоговая форма предзаполнения и параметры для фоновых операций при построении отчета зависят от выбранных параметров исходной ПФ.

Это позволяет создавать отчеты с произвольной структурой и нужными полями, используя только часть параметров из комплексной печатной формы.

Для чего используется?

  • Построение отчетов с произвольной структурой на основе существующих ПФ.

  • Упрощение сложных печатных форм путем выбора только релевантных параметров.

  • Создание специализированных версий отчетов из универсальных ПФ.

Динамический#

Динамический отчет — это отчет, параметры которого формируются через построитель запросов в интерфейсе системы, без необходимости программирования.

Для открытия построителя отчетов необходимо выбрать отчет с динамическим типом - Редактировать - Объектные характеристики - Построитель запросов.

Как это работает? Через интерфейс системы необходимо открыть построитель запросов и задать необходимые колонки отчета, доступные поля для заполнения, условия и параметры, по которым будет строиться отчет.

На предпечатный экран можно вывести нужные поля для заполнения и указать дополнительные условия. Система автоматически формирует итоговый отчет на основе заданной конфигурации.

Для чего используется?

  • Настройка и изменение отчетов бизнес-пользователями через интерфейс.

  • Быстрое построение типовых и уникальных отчетов без необходимости создания новых печатных форм и выборок.

Экранная форма#

Экранная форма — это тип отчета, который позволяет отобразить данные системы в виде отчета. Можно отобразить любой другой отчет или таблицу из системы в заданном виде, без необходимости программирования.

Как это работает? Через интерфейс системы в Объектных характеристиках экранной формы необходимо указать выборку данных и тип ее отображения — например, таблица, карточка, древовидный список. После чего система напрямую отображает данную выборку (списки классов, логи, справочники и т.д.) в указанном виде.

Этот подход позволяет отображать любой элемент системы независимо от того, в каком модуле он находится и как называется в интерфейсе.

Для чего используется?

  • Прямой вывод данных системы без промежуточных преобразований.

  • Единый интерфейс для просмотра информации из разных модулей.

Отчет с селекционным экраном#

Отчет с селекционным экраном — это отчет, где данный экран генерируется из параметров выборки, которую программист задает в коде.

Перед печатью данного отчета открывается сам селекционный экран — интерфейс для заполнения полей. На основе заполненных данных строится отчет.

Как это работает? Разработчик в коде создает выборку, где прописывает необходимые параметры. Эти параметры определяют структуру селекционного экрана и логику обработки данных.

Разработчик может закодировать что угодно: создать любой селекционный экран с любыми полями, а также добавить дополнительную логику для проверки, расчета или пересчета данных.

Для чего используется?

  • Реализация сложной бизнес-логики проверок и расчетов.

  • Разработка универсальных отчетов с максимальной гибкостью настройки.

  • Автоматизация специализированных процессов формирования отчетности.

Выборка для селекционного экрана#

Выборка для селекционного экрана указывается в Настройка отчетных форм → Объектные характеристики через поля:

  • Имя выборки;

  • Имя отображения.

Создание выборки#

Выборку для селекционного экрана нужно унаследовать от базовой выборки ru.bitec.app.rpt.Rpt_ScreenCardAbsAvi.BaseSelectionScreenCard. Эта выборка по умолчанию содержит фильтр с отчетами отчетной формы, который определяет, какая печатная форма будет напечатана. Если этого фильтра нет или он не заполнен, будет напечатана печатная форма по умолчанию.

Валидация введенных значений#

Для валидации значений полей нужно переопределить метод validateFields, который вызывается перед печатью.

Параметры выборки#

Для передачи параметров в селекционный экран используется параметр jParams#, который содержит JSON следующего вида:

{
  "attribute_1_name": "attribute_1_value",
  "attribute_2_name": "attribute_2_value"
}

Карта параметров отчета#

Для указания логики получения карты параметров отчета переопределите метод getPropertyMap.
По умолчанию получает значения всех фильтров StdLink и стандартных фильтров.
Для редактирования полученной карты параметров можно переопределить метод preparePropertyMap.

Селекционные экраны#

Селекционные экраны используются для создания отчетов с динамической фильтрацией. Они предоставляют возможность пользователю задавать параметры для фильтрации данных перед генерацией отчета. Эти параметры используются для формирования условий, которые затем передаются в отчетную форму.

Селекционные экраны позволяют:

  • Задавать фильтры для отчетов.

  • Выбирать типы отчетов и их параметры.

  • Автоматически формировать условия для выборки данных.

Как использовать селекционные экраны#

Шаг 1: Наследование от базовой выборки

Для начала разработчику необходимо отнаследоваться от базовой выборки Rpt_ScreenCardAbsAvi#BaseSelectionScreenCard.

Шаг 2: Переопределение методов setReportName и setPropertyMap

После создания наследника, необходимо переопределить два метода:

  • setReportName — определяет системное имя отчета, которое будет использоваться при генерации.

  • setPropertyMap — в этом методе заполняется логика формирования результирующей карты параметров (reportParamsResultMap), которая будет передаваться в метод печати.

Пример:

override def setReportName: String = "MyCustomReport"

override def setPropertyMap: Unit = {
  fltMacroGeneratorPkg.updateResultMap(
    fltMacroGeneratorPkg.getAllFltValuesMap,
    {
      case (key, value) =>
        val newKey = key.stripPrefix("flt_").toUpperCase
        newKey -> value
    })
  fltMacroGeneratorPkg.updateResultMap(Map("WHERECOND" -> fltMacroGeneratorPkg.generateReportMacro()))
}

Шаг 3: Работа с результирующей картой параметров

В методе setPropertyMap разработчик заполняет результирующую карту reportParamsResultMap, которая передается как параметры в метод printReport. Для помощи в формировании этой карты используется пакет ru.bitec.app.btk.FltMacroGeneratorPkg, который содержит необходимые методы для работы с фильтрами и формирования карт значений.

Пример использования пакета fltMacroGeneratorPkg (см. выше):

Шаг 4: Дополнительные возможности — выбор печатной формы

Разработчик может позволить пользователю самостоятельно выбирать нужный отчет. Для этого необходимо вставить фильтр для выбора отчета в свой .avm-файл:

<condition id="idReport">
    <filterAttr name="flt_idReport" attribute-type="Long" caption="Отчет" order="10" isVisible="false"/>
    <filterAttr name="flt_idReportHL" attribute-type="Varchar" caption="Отчет" order="10.1">
        <card isControlWidthFixed="true" controlWidth="60"/>
        <editor>
            <lookup changeableAttr="flt_idReport" lookupQuery="gtk-Rpt_EntityAvi#Lookup_SelReport"
                    lookupListAttr="sHeadLine" lookupKeyAttr="id" isResetButtonVisible="true"/>
        </editor>
    </filterAttr>
</condition>

Шаг 5: Метод печати отчета

Метод printReport отвечает за формирование и печать отчета. Он вызывает метод генерации отчета с передачей системного имени отчета и параметров, сформированных в методе setPropertyMap.