2.2. Модуль отчетов

2.2.1. Общие сведения

Система составления отчетов реализована на основе JasperReports. Для составления шаблонов отчетов используется программа IReport (подробнее о ее настройке читайте в Файлах Synergy в папке Хранилище/Департамент производства/ARTA Synergy/Отчеты).

2.2.2. Модули

Модуль отчетности состоит из трех подмодулей:

2.2.2.1. ReportsBean (ReportsBean.jar)

2.2.2.1.1. Зависимости на модули
  1. am-common

  2. ai-common

  3. Reports

  4. aiBean

  5. synergy-ejb

  6. synergy-generic

2.2.2.1.2. Зависимости на библиотеки
  1. jasperreports (svn+ssh://scm.forge.arta.local/var/lib/gforge/ chroot/scmrepos/svn/synergy/trunk/reports/deps)

  2. javaee (am-libs/jboss, ai-libs/jboss, ai-libs/jcr, am-libs/persist,)

2.2.2.1.3. Назначение

Сохраняет информацию об отчетах в базу, формирует отчеты. svn+ssh://scm.forge.arta.local/var/lib/gforge/ chroot/scmrepos/svn/synergy/trunk/reports/ReportBean

2.2.2.2. reports (Reports.jar)

2.2.2.2.1. Зависимости на модули
  1. synergy-web

  2. am-common

  3. arta-components

  4. ReportsBean

  5. Management

  6. Information

2.2.2.2.2. Зависимости на библиотеки
  1. gwt-user

2.2.2.2.3. Назначение

Клиентский модуль отчетов. Раньше это был отдельный модуль, как например Хранилище или Потоки работ. Теперь от него осталась только стандартная кнопка отчетов (о ней далее). svn+ssh://scm.forge.arta.local/var/lib/gforge/ chroot/scmrepos/svn/synergy/trunk/reports/clientmodule

2.2.2.3. ReportsAdmin (ar-admin.jar)

2.2.2.3.1. Зависимости на модули
  1. Reports

  2. ReportsBean

  3. am-common

  4. arta-components

  5. ai-common

2.2.2.3.2. Зависимости на библиотеки
  1. gwt-user

2.2.2.3.3. Назначение

Админка отчетов svn+ssh://scm.forge.arta.local/var/lib/gforge/ chroot/scmrepos/svn/synergy/trunk/reports/Admin

2.2.3. Параметры отчетов

Название параметра Значение
Название на трех языках Название отчета. Отображается в меню отчетов
Модуль На самом деле тип объекта по которому формируется отчет. (из таблицы object_types)
Тип загрузки загружать документ - предлагать пользователю сразу скачать отчет сохранить в хранилище - Предлагать пользователю выбрать папку в хранилище куда будет отчет сохранен
Флаг «Формировать отчет когда нет выделения» Клиентский сервис предоставляет возможность узнать id выделенного элемента в модуле. При этом если отчет нельзя формировать, когда не выделен ни 1 элемент, то при генерации отчета пользователь увидит сообщение, что ему необходимо сначала выделить элемент, а потом формировать отчет.
Флаг «Доступен всем пользователям» поле морально устарело
Маска Маска для названия файла отчета.
Файл отчета Шаблон отчета (файл …jrxml)
Тип источника данных SQl соединение - отчет составляется по sql данным XML файл - отчет составляется по xml файлу
Урл источника данных если отчет составляется по XML файлу, то это должен быть урл этого файла

2.2.4. Формирование шаблона отчета

По этому адресу в синерджи лежит файл-инструкция по формированию отчетов: Хранилище/Департамент производства/ARTA Synergy/Отчеты (обратите внимание на пункт «Специальные параметры отчета»).

2.2.5. Использование стандартной кнопки отчетов

К каждому модулю в системе можно прикрутить системную кнопку, по нажатию на которую появится попа меню в котором будут отчеты этого модуля. Для этого необходимо загрузить отчет и указать ему тип объекта к которому он относится (если нужного типа объекта нет, то нужно добавить его в ObjectType и таблицу object_types, это нужно сделать в классе MboDBSchema, примерно после 1815 строчки (там добавляются все типы объектов системы)).

После этого в модуле Synergy необходимо добавить кнопку ReportButton (обычно слева на панели заголовка модуля), вот таким способом:

В качестве параметра в конструктор передаем типы объектов, отчеты по которым должны быть отображены в меню. Далее реализовываем метод getSelectedID(int objectTypeID). Далее данный параметр будет передаваться в качестве специального параметра в отчет.

Кнопка будет видна, только если существуют хоть какие-то отчеты, связанные с переданными в конструктор типами объектов.

ReportButton reportButton = new ReportButton(ObjectType.PLAN|ObjectType.ACTION) {
            @Override
            public String getSelectedID(int objectTypeID) {
                if (objectTypeID == ObjectType.PLAN) {
                    return getCurrentPlanID();
                }else if (objectTypeID == ObjectType.ACTION) {
                    ActionHolder ac = panelsManager.plansList.actionsTreeTable.getSelectedAction();
                    if (ac != null) return ac.getAction().getActionID();
                }
                return null;
            }
        };

В меню кнопки можно добавить свои пункты.

setAdditionalItems(ArrayList<PopupMenuItemIF> additionalItems) – пункты будут отображаться после системных отчетов

setFirstAdditionalItems(ArrayList<PopupMenuItemIF> additionalItems) – пункты будут отображаться до системных отчетов

Если меню состоит всего из одного пункта, то по нажатию на кнопку отчетов он сразу и выполняется.

2.2.6. Что можно дополнить, изменить, улучшить

  1. Внешний вид компонентов выбора пользователя, пользователей, департамента, департаментов, планов, элемента справочника

  2. Расширить список специальных параметров отчета (например добавить возможность выбрать журнал или дело). Ну или можно это решить справочниками (например создать справочник, где будут перечислены все журналы) и создать такой параметр, но это не очень удобно.

2.2.7. Хитрости модуля (обязательно для разработчиков)

Есть в джарнике jasperreports-version.jar файл с дефолтными настройками default.jasperreports.properties.

В нем ОБЯЗАТЕЛЬНО надо изменить значения дефолтных свойств (как на стороне сервера так и в редакторе отчетов)

# Font settings
net.sf.jasperreports.default.font.name=Arial
net.sf.jasperreports.default.font.size=10
net.sf.jasperreports.default.pdf.font.name=Arial
net.sf.jasperreports.default.pdf.encoding=Identity-H
net.sf.jasperreports.default.pdf.embedded=true
net.sf.jasperreports.awt.ignore.missing.font=false

Убедитесь что в либе jasperreports в файле default.jasperreports.properties

есть вот такая строчка в списке

# Query executer settings
net.sf.jasperreports.query.executer.factory.xpath2=com.jaspersoft.jrx.query.JRXPathQueryExecuterFactory

Иначе xml отчеты работать не будут!