ラベル iReports の投稿を表示しています。 すべての投稿を表示
ラベル iReports の投稿を表示しています。 すべての投稿を表示

2018年11月16日金曜日

レコード単位の計算(ireports)

なんてことない処理のはずがはまったので備忘録

要は、明細のA,B,Cの項目を合算して、Dに出したいというだけ。
手段はこれ以外あると思いますが、デザイナ環境と実行環境で動作が異なったため若干はまりました。
結果を残しておきます。

実装
KINGAKU_A,KINGAKU_B,KINGAKU_Cの計算をVariableで定義
表示フィールドにVariable名を設定


<variable class="java.lang.Double" incrementtype="Column" name="V_ROW_KINGAKU_GOUKEI" resettype="Column">
    <variableexpression>
    &lt;![CDATA[($F{KINGAKU_A}.equals(null)?0:new Double($F{KINGAKU_A}))+
    ($F{KINGAKU_B}.equals(null)?0:new Double($F{KINGAKU_B}))+
    ($F{KINGAKU_C}.equals(null) ? 0 : new Double($F{KINGAKU_C}))]]&gt;
</variableexpression>
</variable>

<textfield isblankwhennull="true" pattern="#,##0">
    <reportelement height="9" printwhengroupchanges="GroupName" width="48" x="695" y="0">
    <box leftpadding="3" rightpadding="3">
    <textelement markup="none" textalignment="Right" verticalalignment="Middle">
        <span fontname="IPA明朝">
    </span></textelement>
    <textfieldexpression class="java.lang.Double">&lt;![CDATA[$V{V_ROW_KINGAKU_GOUKEI}]]&gt;</textfieldexpression>
</box></reportelement></textfield>


2018年2月26日月曜日

2枚目以降でヘッダのレイアウトを変える場合のコツ(ireports)

たまにしかやらないのと、サンプルが行方不明になるので備忘録

【要件】

・ヘッダがあって、明細繰り返しのタイプの帳票
・定型フォーマットは決まっている。但し、2枚目以降はヘッダの一部情報が不要
 →よくある「請求書の2枚目に1枚目の〇〇の情報は要らない」

【対応のコツ】

・ヘッダは一般的にはGroupで定義されているはずなので、
 ・Group を別で定義する(インスタンスが別。内容は同じでもOK)
 ・Reprint Header のプロパティを、隠したい項目の部分のGroupHeaderのみOffとする
・一覧表のヘッダは出したい。という要件もあるはずなので、その場合には
 さらに別のGroupを作成(内容は同じ)し、それはReprintHeaderをOn

【ざっくり言うと】

グループヘッダを分割して、出したい部分、出したくない部分に分ける
分けて、それぞれのプロパティ制御でコントロール

【その他メモ】

グループヘッダの分割は、ただ単にグループヘッダを増やすではNGで、「グループ」を追加、グループヘッダを追加とする。(Add Report Group)

 2018/11追記
Print When Expressionにて以下記載をすれば柔軟に制御できる
($V{PAGE_NUMBER}.toString()).equals("1") ? Boolean.TRUE : Boolean.FALSE

2017年10月8日日曜日

JasperReport (IReport)でHH:mm形式の時間を合計する

技術Tipsです

〇要件

グループ計で時間を合計したい。
 ex) 勤務時間のような日別の時間で、グループ計を取る

〇前提

各レコードにはHH:mm形式のデータがある。 ex) 12:30
 定義名はF_HHMMとする

〇実装 (IReportのバージョンは4.0.2)

1)variablesで分に置き換えて保持しておく。
Name:V_HHMM
 Variable Class : java.lang.Integer
   Calculation : Sum
 Reset type:Group
 Reset group:対象のグループ名
 Increment type:none
 Variable Expression:
$F{F_HHMM}.equals(null) ? 0 : new Double(new Double(new Double($F{F_HHMM}.substring(0,2)) * 60) + new Double($F{F_HHMM}.substring(3,5)))

2)レコード出力対象のフィールドにてFieldExpressionを定義

$F{V_HHMM}.equals(null)?null:(((new Integer($F{V_HHMM}) / 60).toString().replace('.',':').split(':')[0])  + ':' + ((new Integer($F{V_HHMM}) % 60).toString().length()==1?('0'+(new Integer($F{V_HHMM}) % 60)):(new Integer($F{V_HHMM}) % 60)))

2016年4月8日金曜日

iReportのドキュメントを読んでみました

今回本格的にiReportを利用する機会が出てきたので、ドキュメントを探してみたところ、公式サイトに諸々のドキュメントがありました。

http://community.jaspersoft.com/documentation?version=29351

すべて英語ですが、無償でたくさんの情報が提供されています。そのなかで私が参照したのは、以下ドキュメントです。

iReport Designer
iReport Ultimate Guide (Updated Jan 15, 2013)


なお、有償ですが、日本語のドキュメントも提供されています。
http://jaspersoft.biz/document/product-manual


【ドキュメントサマリー】

総364ページ。もあり、私自身、英語読解力があるわけではないので、今回主に読んだのはプロパティ類です。それ以外の部分についても時間があれば読んでみようと思いますが、現状としては一般的なレポーティングツールの機能は備えているという前提として考えています。

【まずここは見たほうが良い】


・目次
 気になるキーワードがあれば頑張って読みましょう。

・CHAPTER3 BASIC NOTIONS OF JASPERREPORTS

この項を流し読みするだけでも、何ができるのかが想像できそうです。
  (表とか箇条書きとかサンプルコードとか)
 
 主だったところ
 ⇒3.5.1 The Type of an Expression
  Expressionは、データを表示するときに使うプロパティです。
  JasperがJavaで動いていることもあり、型を適切に処理するためには意識が必要です。
 ⇒3.5.2 Expression Operators and Object Methods
  演算子ですね。Expressionにて対応している演算子が列挙されています。
また、Expressionに定義するための記述例も書かれています。
 ⇒3.10 A Simple Program
  Javaで諸々制御ができるということが想像できます。今回はやらないので詳しく読みませんでした。

・CHAPTER5 REPORT ELEMENTS

レポートで使う要素ですね。
 ⇒5.1.3 Basic Element Attributes
  今回メインで扱う、プロパティについての説明がありました。

・CHAPTER6 FIELDS, PARAMETERS, AND VARIABLES

項目の構成要素である、フィールド(値項目)、パラメータ(引数?)、値(変数)の情報です。データでとってきた値の扱い、集計値の扱いなどはこのあたりの情報で行います。
ページ番号などもここの情報に書いてあります。

・CHAPTER 13 LISTS, TABLES, AND BARCODES

さらっと見たところ独自機能な気もしますが、簡単な操作で、表形式の帳票ができそう。
 テーブルは、グラフとかにも関係していそうです

・CHAPTER 15 CROSSTABS

見慣れない単語でしたが、内容見る限り、クロス集計のようでした。

【主なプロパティについて】


CHAPTER5に、プロパティに対する説明がありました。
「共通」のもの、「テキスト」に関するもの、「テキストフィールド」に関するものとわかれています。




【本記事のまとめ】

一つの記事で全部を書くのは難しいので今回はこれくらいです。
JasperReportはオープンソースであり、他の帳票ツールで有する機能はあったり、または
なくても有志により実装されるなどされています。

無償ドキュメントが英語なので敷居は上がりますが、ぜひ利用していきたいツールの1つかと思いました。

2016年3月20日日曜日

iReportsで、グループ毎の集計値を合算して合計として表示する方法

見出しだけだとわかりづらいので例とともに。

データ例


伝票A 合計100円 , 明細 20円 30円 50円
伝票B 合計250円 , 明細 80円 170円

ここで、100円と250円を合算したい。
明細だと、一部計算がずれる場合があるので明細からの合計は行わない。


その他要件

・伝票毎で、グループが切ってある。


手順


1) Variablesを作成

 V_DENPYO_GOUKEI (名前は何でもよい) を作成、以下プロパティを設定。
 ・Cauculation : Sum
 ・Reset type : Report (これ重要)
 ・Increment Type : Group
 ・Increment group : DenpyoのGrou
 ・Variable Expression : $F{DENPYO_GOUKEI}.equals(null)? 0 : new Double($F{DENPYO_GOUKEI})

ResetTypeをReport以外に指定すると、想定値と異なる値を取得してきてしまいました。


解消できるまでに小2時間。


レポーティングツール類はプロパティの使い方が肝となることが多いと感じました。



追伸:

設定するフィールド側
text field expression : $V{V_DENPYO_GOUKEI}
Evaluation Time : Report

2016年2月22日月曜日

iReportで固定行数明細を作成する

iReportで、明細帳票を作成したい場合、シンプルにやろうとした場合にはDetailの各オブジェクトに罫線を引いて作成することが多いかと思いますが、ページの下段まで計算を引きたい場合などにはこの方法は利用できません。

Backgroundオブジェクトを利用すると、固定行数の表を持つ帳票を作ることが可能です。


【Backgroundオブジェクトの利用方法】

・Report Inspectorから、「BackGround」を選択して、「Maximize Background」をクリック
 自動でBackground用のレイアウト領域が表示されます。

その後、必要に応じてオブジェクトを配置します。

これだけで、実際のデータと関係なく、Backgroundに配置した情報が表示されるようになります。




【罫線の引き方】


もしかしたらもっと良い方法があるかもしれません。が、現状やった方法

1) 必要行数分の、横罫線をコピーペーストなどで作成する。
2) 一番上と、一番下に罫線を正規の位置(Topプロパティできっちり調整)に配置し、あとは適当においておく。
3) 全部の罫線を選択し、メニューバーの「Format」->「Vertical Spacing」->「Equal Vert Space」を選択すると、均等に配置される。



ページごとに【Background】を変える。


あまりたくさんあると大変かもしれませんが、以下のような設定で可能です。

1) 両方のオブジェクトを貼っておく。
2) Print When Expressinonに評価式を設定
  例) ($V{PAGE_NUMBER}.toString()).equals("1") ? Boolean.FALSE : Boolean.TRUE
  ⇒TRUEまたはFALSEを返す条件式が必要です。
  この式を設定した場合、2ページ目以降にしか出ないオブジェクトとなります。



【その他】

・ページ計を出したい場合
 Variablesを作成。
 例) 数量計
   Variable名:SURYO_TOTAL
   Variable Expression:$F{SURYO}.equals(null)?0:new Double($F{SURYO})
Calculation:Sum
Reset Type:Page
あとは未指定

Page Footerに、テキストを配置し、Text Field Expressionに、上記名前を割当
Text Field Expression:$V{SURYO_TOTAL}

2016年2月1日月曜日

iReport DesignerからJaspersoft Studioへ移行が推奨されています

掲題の件

しばらく情報を追っていなかったら、iReport DesignerはJaspersoft Studioへの
移行を推奨していました。

【iReport Designer サイト】
http://community.jaspersoft.com/project/ireport-designer

英文サイトだったのでスルーしてましたが、きっちりわかりやすく書いてあります。

【JasperSoft Studio サイト】
http://community.jaspersoft.com/project/jaspersoft-studio

iReportのサイトからもリンクで飛ぶことができます。



現在の手持ち資産がiReport Designer 4.0.2で作成したころのデザイナファイルなので
そのまま移行できるかがまだわかりませんが、
なぜやろうとしたかというと、別件の技術調査でJasperReports Serverを利用する検討を
始めたからです。

JasperReports Serverに上記4.0.2のデザイナを読み込ませてみたところ、
一覧表形式でよくあるような、表のヘッダ部分に定義してあるタイトル文字が出てこなかったため
バージョンの問題だろうかと思った次第です。



この辺はJasperReports Server側の話題になるので本資料では割愛しますが
別途まとめておきたいと思います。