TReportGenerator Code
Brought to you by:
nikkentakabasam
File | Date | Author | Commit |
---|---|---|---|
.settings | 2015-06-19 |
![]() |
[76dac5] initial commit |
sampleTemplates | 2015-06-19 |
![]() |
[76dac5] initial commit |
src | 2015-06-19 |
![]() |
[76dac5] initial commit |
target | 2015-06-19 |
![]() |
[76dac5] initial commit |
.classpath | 2015-06-19 |
![]() |
[76dac5] initial commit |
.gitignore | 2015-06-19 |
![]() |
[000260] no target |
.project | 2015-06-19 |
![]() |
[76dac5] initial commit |
pom.xml | 2015-06-19 |
![]() |
[76dac5] initial commit |
readme.txt | 2015-06-19 |
![]() |
[76dac5] initial commit |
readme_structure.txt | 2015-06-19 |
![]() |
[76dac5] initial commit |
template.xls | 2015-06-19 |
![]() |
[76dac5] initial commit |
template.xlsOut.xls | 2015-06-19 |
![]() |
[76dac5] initial commit |
доделать condition должно срабатывать и для других полей. Если полне непустое - тру. ---------------------------- Построение шаблона ---------------------------- Шаблон одностраничного отчёта включает в себя 3 страницы: 1)template -Сам шаблон отчёта 2)params -Имена и строковые идентификаторы отчётов, которые могут быть сгенерированы по этому шаблону, и параметры шаблона 3)dataSources -Источники данных(Классы с интерфейсом TRTableDataSource) Страница "params" --------------------- Содержит параметры для формирования отчёта. Содержит 2 столбца: имя параметра и его значение. "report-name" -строковый идентификатор отчёта. Желательно задать его в латинице и без пробелов. "report-desc" -наименование отчёта, которое будет показываться в приложении. "global-cell-visibility" -если=true - формулы видят ячейки всех блоков на странице "scope" задание именованной области видимости. Имя области задаётся после префикса "scope" Область видимости может включать в себя несколько источников данных Пример: задание скопа 4p scope4p transform switch other Использование в формуле $F{'SUM(!<s1_1>)' see_all=true scope=4p} Страница "dataSources" --------------------- Содержит 3 столбца. Первый содержит строковый идентификатор источника данных (любая строка). Этот идентификатор будет использоваться в первом столбце страницы "template" Второй содержит имя класса источника данных. Этот класс должен наследовать от класса TReportDataSource. Он должен определить 3 метода: public void init(); Процедура для инициализации.Вызывается непосредственно перед созданием отчёта public Object getHeaderFooterValues(String fieldName); Получение значений общих для всего отчёта(не зависящих от строки). То есть значений использующихся в хеадерах и футерах public List getRows(); Получение данных для формирования тела отчёта Данные задаются в виде списка записей. Необходимые данные из записи извлекаются через Reflection API, из getter-ов или публичных полей. Третий столбец содержит строку, передаваемую в источник данных Страница "template" --------------------- Первые 3 столбца содержат системную, вспомогательную информацию, и не отображаются в готовом отчёте. Первый столбец содержит источник данных. Второй столбец -блок отчёта. Возможные значения: H -заголовок; F -дно(футер); GH -заголовок уровня группировки ;GF -дно уровня группировки ;B-строка Может быть определено несколько заголовков и футеров (H1,H2,F1,F2). В этом случае на странице params нужно определить дополнительные отчёты (report-name1,report-desc1,report-name2,report-desc2). То есть на основании шаблона можно сформировать несколько разных отчётов, и эти отчёты будут отличаться названием, заголовками и футерами, но тело у них будет одинаковым. После вышеперечисленных значений могут идти модификаторы: '*' - высота строки будет подбираться автоматически '-' - блок будет невидимым (например, если не нужно выводить заголовки группировок) '_1' - объединение строк блока в группу. Число означает номер группы. Пример: 'GH*_1' Третий столбец содержит значение по которому будет осуществляться группировка (прописывается для блоков B,GH,GF) Для B -нужно прописать идентификатор строки Остальные столбцы содержат сам шаблон. Чтобы показать в ячейке шаблона нужное значение из источника данных -используются выражения. ---------------------------------------------- Формат выражений, прописываемых в шаблоне ---------------------------------------------- Regular expression для выражения имеет вид: "[$][VFSHN][{][^}^{]*[}]" То есть сначала идёт значок '$'. Затем тип выражения, задаваемый латинской буквой в верхнем регистре. Затем, в фигурных скобках, тело выражения. Тело выражения состоит из последовательности элементов, разделяемых пробелами. Первый элемент зависит от типа выражения (это может быть формула, число или поле записи) Остальные элементы -параметры записи, задаются в виде [ключ]=[значение] Таким образом выражение имеет вид: 1) $ -начало выражения 2) [VFSHNBR] -тип выражения 3) {'expression' param=paramValue} -тело выражения. Содержит базовое выражения и набор параметров(ключ-значение) базовое выражение должно задаваться в кавычках, если оно содержит пробелы Список возможных параметров дан ниже. Типы выражений ----------------- $V{koefs.ku id=cku} -поле строки. Для получения значения будет использовано значение myrow.koefs.ku или myrow.getKoefs().getKu() $H{curDate} -поле заголовка. Значение будет браться из функции TReportDataSource.getHeaderFooterValues $F{'#<work.count>!<matMech.price> / #<koefs.ku>' } -формула. Будет записана формула, её формат описан в RFormulaExp $S{'раздел #<koefs.no>'} -строковые выражения, содержащие значения переменных. Записываются так же как и формулы. $N{1} -Номер строки в заданном уровне группировки. Высший уровень группировки - нулевой. Низший - строка (второй, если 3 уровня группировки) Можно задать и строковое выражение: $N{'Текущий номер группы: ?' groupNo=1} $B{baseObjectField} будет использоваться поле заголовочного объекта, возвращаемого через TReportDataSource.getHeaderObject Используемые параметры: ----------------- 1)id -идентификатор ячейки с выражением. Задаётся, если ячейка используется в формуле Пример: $V{workValues.workHumanCost id=w1} Пример использования этой ячейки в формуле: $F{!<w1>+!<w2>+!<w3>+!<w4>} 2)condition -поле или функция булевого типа, возвращающая true, если содержимое ячейки должно выводится Пример: $V{matMech.unit condition=matMech.isLess5} 3)condition2 -второе условие 4)else -значение, которое нужно вывести, если условие невыполняется Пример: $V{matMech.unit condition=matMech.isLess5 else='ед. изм. для значений больше 5'} 5)else_type -тип выражения, выводимого, если условие не выполняется [VFSHN] по умолчанию - это обычная статичная строка Пример: $V{matMech.unit condition=matMech.isLess5 else='ед. изм. для значений больше 5' else_type=S } Параметры формул 6)refs_params -если задано для формул -списки ячеек будут выводится через запятую и без скобок Пример: $F{'CONCATENATE(!<mmname>)' refs_params=1} 7)refs_diapazon -если задано для формул -списки ячеек будут выводится в виде диапазона. То есть [первая ячейка]:[последняя ячейка] Пример: $F{'SUM(!<matprice>)' refs_diapazon=1 id=kw4 } 8)see_all -формула может включать в себя ячейки из всех прописанных в шаблоне блоков. Используется, например, в итогах. Пример: $F{!<i1>+!<s1> see_all=true id=fi1} 9)united -задаётся для строк. Если задано - все ячейки строк заданного столбца будут объединены. Используется для извращенских отчётов. 11)startsWith - задаётся для $N{}. С какого числа начинать счёт. 12)asNumber - задаётся для $N{}. Если задано - номер группы будет записан в виде числа, а не строки 13)has_color - Если задано - ячейка имеет цвет, который задаётся в источнике данных (TReportDataSource) 14)category - Категория 15)needCatogory - Требуемая категория - если проставлена - то данная ячейка может ссылаться только на ячейки с категорией равной needCatogory 16)rowNo - Номер нужной строки. Задаётся для ячеек, содержащих длинные строки. Если задать - то строка разобъётся на линии и будет возвращена линия с заданным номером. Разбиение будет идти по возможности по пробелу Формат записи: rowNo=rowLength,rowNo То есть, через запятую задаётся максимальная длинна строки и номер строки(начиная от нуля) Пример: $H{brigade rowNo=50,3} Разбить строку на линии длинной до 50-ти символов и вернуть третью строку 17)formatter Задаёт способ форматирования. Возможные значения: date time datetime Пример: $B{myDate formatter=time} Показать время для поля myDate 18)rno Задаётся для ячеек с типом V. Содержит номер записи То есть, если этот аттрибут задан - можно выдать на текущую запись, а запись с заданным номером $V{work.cost rno=1} В данном случает вернёт rows.get(1).getWork().getCost() Параметры чувствительны к регистру Формат формулы: * Выражение, представляющее формулу * * На его основе в готовом отчёте будет созданая ячейка-формула * * Может содержать переменные вида: * #<koefs.ku> -будет подставлено значение поля (из строки). * !<workSum> -будет подставлена ссылка на ячейку отчёта с заданным идентификатором (workSum) Пример: 'C15' * Если ячеек с этим идентификатором несколько - Будет использована функция SUM. Пример: 'SUM(C14;C15)' * &<repDate> -будет подставлен атрибут заголовка отчёта (задаются в TReportDataSource.getHeaderFooterValues) * @<myHeaderObjectField> - будет использоваться поле заголовочного объекта, возвращаемого через TReportDataSource.getHeaderObject * * * Важно!!! * При задании в формуле чисел - в качестве десятичного разделителя нужно использовать точку, а не запятую * Пример: !<matMech.rount>*0.111 * Важно!!! При задании параметров для формулы - используется запятая $F{'CONCATENATE(!<monthCount>,!<sh>)'} значение ячейки из другой страницы: $F{myReport!!<itogo10>} ВАЖНО: вторая страница может в формулах ссылаться на первую, а первая на вторую - нет. Глюк jxl. Приёмы: Получение строки, составленной из значений нескольких ячеек $F{'CONCATENATE(!<monthCount>,!<sh>)'}