Menu

Tree [000260] master /
 History

HTTPS access


File Date Author Commit
 .settings 2015-06-19 System User System User [76dac5] initial commit
 sampleTemplates 2015-06-19 System User System User [76dac5] initial commit
 src 2015-06-19 System User System User [76dac5] initial commit
 target 2015-06-19 System User System User [76dac5] initial commit
 .classpath 2015-06-19 System User System User [76dac5] initial commit
 .gitignore 2015-06-19 System User System User [000260] no target
 .project 2015-06-19 System User System User [76dac5] initial commit
 pom.xml 2015-06-19 System User System User [76dac5] initial commit
 readme.txt 2015-06-19 System User System User [76dac5] initial commit
 readme_structure.txt 2015-06-19 System User System User [76dac5] initial commit
 template.xls 2015-06-19 System User System User [76dac5] initial commit
 template.xlsOut.xls 2015-06-19 System User System User [76dac5] initial commit

Read Me

доделать

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>)'}




Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.