SugarTalk - ресурс для администраторов и разработчиков системы SugarCRM.

Работа с отчетами ZuckerReports. Группы и подотчеты

В прошлой статье мы рассмотрели Ireport (графический редактор для ZuckerReports в SugarCRM) издали, а сегодня подробней остановимся на составляющих отчета: параметры, поля, выражения и способах их размещения на теле отчета: группы, подотчеты (subreports) и разберем простенький пример step-by-step.
Параметры отчета – это переменные, при помощи которых можно вывести на тело отчета текст, ввести в отчет переменную (например, для уточнения MySQL  запроса) ну и все что вообще могут делать переменные. Они всегда присутствуют в отчете предустановленные (их нельзя изменить или удалить, например REPORT_DATA_SOURCE) так же они могут добавляться пользователем. Выглядят так $P{parameter_name}.


Поля отчета – их в отчете нет, пока вы не сделаете запрос к БД и это ни что иное как результат MySQL запроса. Выглядят так $F{feald_name}.
Выражения отчета -  это управляющие конструкции, при помощи которых мы управляем выводом в отчете,  запросами к БД,  делаем вычисления. Они так же есть в отчете по умолчанию, такие как: PAGE_COUNT, COLUMN_NUMBER и подобные, из их названия понятна их роль в отчете, если мы поместим, допустим, PAGE_COUNT в правый нижний угол отчета, то запустив его, увидим на последней странице в том же месте количество страниц в нашем отчете. Выражения добавляются пользователем и при создании некоторых элементов отчета. К примеру, когда мы создаем группу в отчете – то создается выражение (название_группы) _COUNT, которое, при размещении его в отчете, покажет нам количество различных элементов в группе. Выглядят выражения в отчете так $V{variable_name}.
Группа (group)– добавляются пользователем (у меня View -> Report groups) позволяют лучше структурировать отчет.
Подотчет (subreport) – это просто отчет в отчете.
Создадим отчет, показывающий все контакты, сгруппированные по половому признаку, относящиеся к конкретному контрагенту.  Я администратор ZuckerReports в SugarCRM, поэтому пример из БД Sugar. Назовем отчет Sub_contacts.
Начнем с подотчета. Выбираем нужные поля из БД по контактам упорядоченные по полю, которому собираемся группировать,

1
2
select * from contacts
order by pol

и размещаем в зоне detail. Создаем группу отчета – называем ее «pol», в Group Expression вписываем поле, по которому группируем $F{pol}. У нас появились две новых зоны в отчете pol_Header и pol_Footer, помещаем в нужную нам зону поле, указывающее на принадлежность к прекрасной или сильной половине человечества контакта (группироваться будет одинаково, где его не расположи) и запускаем.

null values in ZuckerReports

У меня должны выводиться: имя контакта и его адрес обитания, и если данные в БД о контакте не полные, то в отчете мы увидим на их местах null. Что бы это предотвратить добавим условие в поля, которые могут быть пустыми (правой кнопкой на поле -> Edit Expression).

Вот что мы видим:

$F{primary_address_street}

Исправим на:

( ($F{primary_address_street} != null) ? $F{primary_address_street} : "")

т. е. если поле имеет значение отличное от “null”, то выводим его, если нет, то выводим пустую строку (естественно можно указать все что угодно вместо пустой строки: «НЕТ ДАННЫХ» или «АЙ-ЯЙ-ЯЙ ЧТО ТВОРИТСЯ ТО??, ДЕЛАТЬ ТО ЧТО ТЕПЕРЬ??!!» или вывести это поле красным цветом).

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

Вернемся к нашим панамам. Нам нужна переменная, с помощью которой мы будем получать значение (id) контрагента и для него выводить соответствующие данные по контактам. Создадим параметр  $P{acc_id} и ставим галочку «use as a prompt».

Подправим немного запрос к БД:

1
2
3
select * from contacts
where account_id` = $P{acc_id}
order by pol

Теперь при запуске IReport спросит у нас значение, по которому выводить данные о контактах. Этот параметр и обеспечит нам связь между отчетом главным и подотчетом.

Создадим новый отчет Master, в который будем добавлять наш Sub_contacts.

Напишем запрос к БД:

1
2
SELECT *
FROM accounts

Добавляем отчет содержащий информацию о контактах. Выбираем на панели инструментов subreport и помещаем под расположенными уже полями из таблицы контрагентов. Включится мастер-помощник добавления подотчетов. В первом диалоговом окне выбираем “Use an existing report” (использовать существующий отчет) и выбираем наш Sub_contacts. В следующем окне указываем тип соединения с источником данных “Use the same connection used to fill the master report” (использовать тот же тип соединения, что и отчет, в который вставляем подотчет). Затем  выбираются параметры из добавляемого отчета (тут мы увидим наш acc_id). Последний шаг —  выбираем путь к подотчету (нижний это абсолютный путь, верхний вариант динамический содержащий в себе параметр  $P{SUBREPORT_DIR}, в котором и содержится путь).

В результате получаем:
изображение подотчета в мастеротчете Ireport

В свойствах подотчета переходим на вкладку Subreport (other), где в нижнем окошке добавляем параметр (если его там не будет)  acc_id и в “default value expression” ставим поле, по которому будут выводиться данные о контактах — $F{id}.

Компилируем оба отчета и выводим результат:
мастер отчет в IReport

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

И, кстати, в разделе DOWNLOAD появились модуль ZuckerReports 1.12 для SugarCRM на русском языкеpack_russian_ZR, и модуль русификации для уже установленного ZuckerReports 1.12  - ZuckerReportsCE_ru

В следующей статье разберем чарты и графики. Оставайтесь с нами.

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

Последнее изменениеПонедельник, 10 июля 2017 18:06
  • Оцените материал
    (0 голосов)
  • Опубликовано в SugarCRM
  • Прочитано 33684 раз
Другие материалы в этой категории: « Редактирование global links Модуль «Метро» »

12485 комментарии

Оставить комментарий

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены

Наверх

Последние новости

  • 1
  • 2
  • 3
  • 4

Популярные новости

  • 1
  • 2
  • 3
  • 4