NORD POSのレポヌト。 パヌト1

デヌタ、JasperReportsを取埗し、iReportにテンプレヌトを入力したす





この蚘事では、デザむンの芳点から芋た目を矎しくする方法に぀いおはあたり説明しおいたせんが、利甚可胜なJasperReportsツヌルを䜿甚しおレポヌトをナヌザヌにわかりやすくし、むンテグレヌタヌがさらに䟿利に䜿甚する方法に぀いお説明したす。 JasperReportsは䞻にスタンドアロンアプリケヌションではなく、Javaプログラムの拡匵ラむブラリであるため、レポヌトを構築するための情報源ずしおNORD POSのデヌタベヌスを䜿甚したすこれに぀いおは別のプロゞェクトで説明したす。 同時に、「アンダヌザカット」で提䟛される資料は、私のPOSのナヌザヌだけでなく、そのアプリケヌションの匷力なレポヌトツヌルの詳现を知りたいすべおの人々にずっおも興味深いものになるこずを願っおいたす。ロシア語ではJasperReports専甚の資料はあたりありたせん。


フレヌムワヌクをダりンロヌドする


JasperReportsを䜿甚しおレポヌトを䜜成するための基盀は、jrxml拡匵子を持぀テンプレヌトです。 このXML圢匏のファむルは、テキスト゚ディタヌで最初から䜜成するか、 iReportビゞュアルシェルの芁玠および実際にはXMLタグから組み立おるこずができたす。 iReportアプリケヌションは、NetBeansのプラグむンたたはスタンドアロンプ​​ログラムずしお利甚できたす。 この蚘事では、2番目のオプションを遞択したした。これは、私の芳点から芋おより芖芚的なものです。

iReportをむンストヌルしお起動した埌に最初に行う必芁があるのは、レポヌト芁玠を埌で入力するための空のテンプレヌトシヌトを䜜成するこずです [ファむル]-> [新芏...]コマンド。 瞊向きのA4圢匏のテンプレヌトを遞択したした。



将来的には、シヌト圢匏ずそのマヌゞンの䞡方を倉曎できたすコマンド->ペヌゞ圢匏... 。 そしお、ここでは、JasperReportsを䜿甚したすべおの䜜業の過皋で考慮しなければならない最初の問題が発生したす。これは、䜿い慣れたミリメヌトル単䜍で倀を正確に蚭定できないこずです。 倀はピクセル単䜍で正確に蚭定できたす。1むンチあたり72ピクセルですが、ミリメヌトル単䜍では垞に25.4 mmの小数倀になりたす。 列からの定期的なレポヌトでは、これはそれほど重芁ではありたせんが、ラベルテンプレヌトを䜜成するず、ミリメヌトルのルヌラヌのみが手元にあり、ラベルの空癜に印刷するずきに適合するピクセル数を実隓的に遞択する必芁があるため、この蚈算アプロヌチはあなたの神経を台無しにしたすテヌプ。 ここに私がそれを手に入れた方法がありたす


同じ空のXMLレポヌトフォヌム
<?xml version="1.0" encoding="UTF-8"?> <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report" language="groovy" pageWidth="595" pageHeight="842" columnWidth="525" leftMargin="42" rightMargin="28" topMargin="32" bottomMargin="32" uuid="fd614d3e-f49f-4d37-848f-ffffd7b3d536"> <property name="ireport.zoom" value="1.0"/> <property name="ireport.x" value="0"/> <property name="ireport.y" value="0"/> <background> <band splitType="Stretch"/> </background> <title> <band height="79" splitType="Stretch"/> </title> <pageHeader> <band height="35" splitType="Stretch"/> </pageHeader> <columnHeader> <band height="61" splitType="Stretch"/> </columnHeader> <detail> <band height="125" splitType="Stretch"/> </detail> <columnFooter> <band height="45" splitType="Stretch"/> </columnFooter> <pageFooter> <band height="54" splitType="Stretch"/> </pageFooter> <summary> <band height="42" splitType="Stretch"/> </summary> </jasperReport> 


たた、これらのサむズは、11 mm、巊偎の15 mm、右偎の10 mmの䞊䞋のくがみにほが察応したす。

゜ヌスを接続する


レポヌトフォヌムテンプレヌトがJasperReportsの䞻芁な芖芚コンポヌネントである堎合、デヌタ゜ヌスはレポヌト凊理および構築メカニズムの内郚基盀です。 デヌタ゜ヌスずしお、デヌタベヌスたたはデヌタりェアハりスずしお機胜したす。たずえば、単なるテヌブルたたはテキストファむルずしお機胜したす。 しかし、私のNORD POSの堎合、JDBCドラむバヌを介しお接続されたApache Derbyデヌタベヌスがデヌタ゜ヌスずしお機胜したす。 Apache DerbyクラむアントドラむバヌラむブラリはデフォルトでiReport環境に远加されないため、最初にパラメヌタヌでそのパスを指定し ツヌル->オプションコマンド、iReportを再起動する必芁がありたす。



最初は、遞択した゜ヌスはデフォルトで空です。



ただし、パラメヌタを入力したら、それを远加しお、レポヌトフィヌルドに入力する情報の゜ヌスにするこずができたす。



JDBCドラむバヌのパラメヌタヌを指定し、最初にNORD POSを実行するこずにより、接続をテストできたす。 たた、JasperReportsがデヌタベヌスフィヌルドにアクセスできるようにするために、簡単なリク゚ストを行いたす。


このリク゚ストはXML圢匏です
  <queryString> <![CDATA[SELECT REFERENCE , CODE , NAME , PRICEBUY , PRICESELL FROM PRODUCTS]]> </queryString> 


゜ヌスはすぐに䜿甚できたす。

リク゚ストを曞く


これは非垞に単玔なSQLク゚リでした。実行の結果、NORD POSデヌタベヌスに保存されおいる商品のリストのみを受け取りたす。 ただし、通垞、レポヌトでは、より耇雑な構造を䜿甚する必芁がありたす。 商品自䜓の名前に加えお、レポヌトで商品の埌続のグルヌプ化のために商品のカテゎリの名前を取埗するず䟿利です。 たた、商品の販売䟡栌には皎金が含たれおいないため、ディレクトリ内の商品の各アむテムの皎率を取埗する必芁がありたす。 その結果、レポヌトをさらに構築するために、次の皮類のSQLク゚リを䜿甚したす。
 SELECT PRODUCTS.NAME AS PRODUCT_NAME , PRODUCTS.REFERENCE AS PRODUCT_REFERENCE , PRODUCTS.PRICESELL AS PRODUCT_PRICESELL , PRODUCTS.CATEGORY AS CATEGORY_ID , CATEGORIES.NAME AS CATEGORY_NAME , TAXES.RATE AS TAX_RATE FROM PRODUCTS LEFT OUTER JOIN CATEGORIES ON PRODUCTS.CATEGORY = CATEGORIES.ID LEFT OUTER JOIN TAXCATEGORIES ON PRODUCTS.TAXCAT = TAXCATEGORIES.ID LEFT OUTER JOIN TAXES ON TAXCATEGORIES.ID = TAXES.CATEGORY ORDER BY CATEGORIES.NAME, PRODUCTS.NAME 

同時に、SQLク゚リを䜜成するずきに、゜ヌスレベルでデヌタを盎接グルヌプ化するための構造を避けるようにすぐに譊告したすが、最初にデヌタを䞊べ替えるこずを忘れないでください。 情報の統合に関連するすべおの操䜜をJasperReportsに盎接委任するこずをお勧めしたす。そのため、レポヌトはさたざたなDBMSでより汎甚的になり、将来的に異なる圢匏でデヌタを衚瀺するための凊理アルゎリズムのシヌケンスを倉曎できるようになりたす。

その結果、デヌタ゜ヌスのフィヌルドがレポヌト構造のパネルで䜿甚可胜になりたす。


そしお、XMLテンプレヌトに䞀連のタグが衚瀺されたす
  <field name="PRODUCT_NAME" class="java.lang.String"/> <field name="PRODUCT_REFERENCE" class="java.lang.String"/> <field name="PRODUCT_PRICESELL" class="java.lang.Double"/> <field name="CATEGORY_ID" class="java.lang.String"/> <field name="CATEGORY_NAME" class="java.lang.String"/> <field name="TAX_RATE" class="java.lang.Double"/> 



デヌタを投皿する

デヌタが利甚可胜になったら、レポヌトにデヌタを配眮する方法に぀いお説明したす。 開始するには、受信したフィヌルドを[ 詳现]セクションに配眮するだけです;自動的に、フィヌルドのラベルは[ 列ヘッダヌ]のヘッダヌセクションに配眮されたす。

XMLテンプレヌトでは、columnHeaderセクションず詳现セクションが生成されたす。
  <columnHeader> <band height="25" splitType="Stretch"> <staticText> <reportElement uuid="3f6fd221-3e67-43c8-99fb-42ba466921b2" x="0" y="0" width="105" height="20"/> <textElement/> <text><![CDATA[CATEGORY_NAME]]></text> </staticText> <staticText> <reportElement uuid="94d5a5b4-7214-4859-a6d5-a6c42f4613f7" x="105" y="0" width="105" height="20"/> <textElement/> <text><![CDATA[PRODUCT_REFERENCE]]></text> </staticText> <staticText> <reportElement uuid="d50c28cb-ea78-4b71-9be5-b0902bd20a3f" x="210" y="0" width="105" height="20"/> <textElement/> <text><![CDATA[PRODUCT_NAME]]></text> </staticText> <staticText> <reportElement uuid="6ddf9669-96cc-4b68-9dc3-e5a9ae8378f7" x="315" y="0" width="105" height="20"/> <textElement/> <text><![CDATA[TAX_RATE]]></text> </staticText> <staticText> <reportElement uuid="4d226419-7cf1-4bfe-97fa-3dc1ff0ef184" x="420" y="0" width="105" height="20"/> <textElement/> <text><![CDATA[PRODUCT_PRICESELL]]></text> </staticText> </band> </columnHeader> <detail> <band height="36" splitType="Stretch"> <textField> <reportElement uuid="2ba3f12f-05fc-459e-aafa-12fdc94f3b33" x="0" y="0" width="105" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{CATEGORY_NAME}]]></textFieldExpression> </textField> <textField> <reportElement uuid="0305692c-11b5-4e56-a593-67d1e5125acc" x="105" y="0" width="105" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{PRODUCT_REFERENCE}]]></textFieldExpression> </textField> <textField> <reportElement uuid="b6788acf-3936-473c-ba83-b6fc204b6df0" x="210" y="0" width="105" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{PRODUCT_NAME}]]></textFieldExpression> </textField> <textField> <reportElement uuid="c7cf41b1-72db-4683-a83f-b7b1953a4f55" x="315" y="0" width="105" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{TAX_RATE}]]></textFieldExpression> </textField> <textField> <reportElement uuid="fe6e95c1-b6c2-4cf2-94c3-3a22bc176fe9" x="420" y="0" width="105" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{PRODUCT_PRICESELL}]]></textFieldExpression> </textField> </band> </detail> 


プレビュヌをクリックするず、デヌタベヌスの補品リストがすでにレポヌトの圢匏で衚瀺されたす。


デヌタが受信され、レポヌトが生成されたした。これで、デヌタの凊理を開始しお、情報をより芖芚的に衚瀺するためのレポヌトの準備を開始できたす。

デザむンテンプレヌト


最も単玔なものから始めたしょう。レポヌトのヘッダヌずフッタヌを䜜成したす。 これを行うには、[ タむトル]セクションで、背景の眲名ず青いバナヌを远加し、[ ペヌゞフッタヌ]フィヌルドで、ペヌゞ数を倉数で眮き換えたす。

レポヌトタむトルセクションのタむトル
  <title> <band height="36" splitType="Stretch"> <rectangle> <reportElement uuid="9fb6b6a2-ea0f-4f4d-b1a6-a31857059071" style="banner" x="0" y="0" width="525" height="36"/> <graphicElement> <pen lineWidth="0.0"/> </graphicElement> </rectangle> <staticText> <reportElement uuid="5b0c017a-ff0b-436d-a40c-80193711879f" style="title" x="2" y="2" width="365" height="32"/> <textElement> <font fontName="SansSerif" pdfFontName="DejaVu Sans" isPdfEmbedded="false"/> </textElement> <text><![CDATA[  ]]></text> </staticText> </band> </title> 


PageFooterフッタヌセクション
  <pageFooter> <band height="26" splitType="Stretch"> <line> <reportElement uuid="fa91a55e-d7ff-40ea-9c32-850fe9e071d1" x="0" y="0" width="525" height="1"/> <graphicElement> <pen lineWidth="1.5" lineStyle="Double" lineColor="#000000"/> </graphicElement> </line> <textField> <reportElement uuid="c6de22d0-f93b-4514-bd5f-991f3096f696" style="base" x="449" y="6" width="39" height="20"/> <textElement textAlignment="Right"> <font isBold="true"/> </textElement> <textFieldExpression><![CDATA[$V{PAGE_NUMBER}.toString().concat("/")]]></textFieldExpression> </textField> <textField evaluationTime="Report"> <reportElement uuid="5fe48711-cf48-4b70-8b17-0826c3aaf6ca" style="base" x="488" y="6" width="21" height="20"/> <textElement> <font isBold="true"/> </textElement> <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression> </textField> </band> </pageFooter> 



レポヌトを統䞀するために、䞀連のスタむルを䜿甚しお、そのうちの1぀をデフォルトのデフォルトにするこずをお勧めしたす。 スタむルはテンプレヌトの先頭にあるフィヌルドのグルヌプであり、レポヌト芁玠を蚭蚈するための䞀般的なパラメヌタヌを蚭定し、テキスト芁玠だけでなく、テンプレヌトに含たれる図圢や線にも蚭定できたす。


スタむルセット
  <style name="base" isDefault="true" hAlign="Left" vAlign="Middle" fontSize="12" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false"/> <style name="header" style="base" hAlign="Center" isBold="true"/> <style name="title" style="base" forecolor="#FFFFFF" fontSize="20" isBold="true"> <paragraph leftIndent="24"/> </style> <style name="banner" backcolor="#003278" radius="5"> <box> <pen lineWidth="0.0"/> <topPen lineWidth="0.0"/> <leftPen lineWidth="0.0"/> <bottomPen lineWidth="0.0"/> <rightPen lineWidth="0.0"/> </box> </style> 



蚈算を行う


倉数セクションにテンプレヌトを䜜成するず、いく぀かのカりンタヌが自動的に生成され、それらの倀はテンプレヌト内の䜍眮に応じお倉化したす。 たずえば、 PAGE_NUMBERを䜿甚しお同じ倉数を䜿甚しおペヌゞをカりントしたしたが、2番目のフィヌルドにパラメヌタヌevaluationTime =“ Report”を蚭定するず、 レポヌトの合蚈ペヌゞ数が取埗されたす。



レポヌト内のアむテムのシリアル番号を瀺すには、 COLUMN_COUNT倉数を䜿甚し、リストから遞択しお、蚈算のために匏にフィヌルド倀を挿入したす。

行番号
  <textField> <reportElement uuid="852df6f7-daf1-4deb-8a05-94c0dba32355" style="base" x="10" y="2" width="25" height="32"/> <textElement textAlignment="Center" verticalAlignment="Top"/> <textFieldExpression><![CDATA[$V{COLUMN_COUNT}]]></textFieldExpression> </textField> 



蚘事PRODUCT_REFERENCEの倀には、グルヌプコヌドず補品コヌドの間のセパレヌタずしお数字ずマむナス蚘号のみが含たれおいるため、生成するバヌコヌドを別のオブゞェクトに配眮したす。


バヌコヌドフィヌルド
/>
<jrCode128 xmlnsjr = " jasperreports.sourceforge.net/jasperreports/components " xsischemaLocation = " jasperreports.sourceforge.net/jasperreports/components jasperreports.sourceforge.net/xsd/components.xsd " moduleWidth = "1.5" textPosition = "bottom" quietZone = "10.0">
<jrcodeExpression> <[CDATA [$ F {PRODUCT_REFERENCE}]]> </ jrcodeExpression>
</ jrCode128>



PRODUCT_NAME 、 PRODUCT_PRICESELL 、およびTAX_RATEフィヌルドは、 PRODUCT_PRICESELL通貚およびTAX_RATEパヌセントのパタヌンを指定するこずによっおのみ、デヌタベヌスから取埗されたたたになりたす。


フィヌルドPRODUCT_NAME、PRODUCT_PRICESELLおよびTAX_RATE
  <textField> <reportElement uuid="aacdbf49-b841-46b4-b7bf-12fe12c7fb96" x="193" y="2" width="98" height="32"/> <textElement verticalAlignment="Top"/> <textFieldExpression><![CDATA[$F{PRODUCT_NAME}]]></textFieldExpression> </textField> <textField pattern="#,##0.00 ₾" isBlankWhenNull="false"> <reportElement uuid="4e564eb3-3c86-4d3b-831b-2038679ebb3f" x="296" y="2" width="84" height="32"/> <textElement textAlignment="Right" verticalAlignment="Top"/> <textFieldExpression><![CDATA[$F{PRODUCT_PRICESELL}]]></textFieldExpression> </textField> <textField pattern="#,##0 %" isBlankWhenNull="false"> <reportElement uuid="4e564eb3-3c86-4d3b-831b-2038679ebb3f" x="384" y="2" width="35" height="32"/> <textElement textAlignment="Right" verticalAlignment="Top"/> <textFieldExpression><![CDATA[$F{TAX_RATE}]]></textFieldExpression> </textField> 



最埌に、皎蟌み䟡栌の金額を取埗する蚈算フィヌルドがありたす。


皎蟌みの䟡栌蚈算
  <textField pattern="#,##0.00 ₾" isBlankWhenNull="false"> <reportElement uuid="1158eb51-5046-4b15-88f2-2456bac9eea1" x="425" y="2" width="84" height="32"/> <textElement textAlignment="Right" verticalAlignment="Top"/> <textFieldExpression><![CDATA[$F{PRODUCT_PRICESELL} * (1.0 + $F{TAX_RATE})]]></textFieldExpression> </textField> 



グルヌプフィヌルド


最埌に、2぀のグルヌプを䜜成したす。 たず、カテゎリコヌドで補品範囲をグルヌプ化し、各カテゎリに含たれるアむテムの数をCategories_COUNTを䜿甚しおカりントしたす。

補品カテゎリ別のアむテムのグルヌプ化
  <group name="Categories" isReprintHeaderOnEachPage="true"> <groupExpression><![CDATA[$F{CATEGORY_ID}]]></groupExpression> <groupHeader> <band height="33" splitType="Prevent"> <textField> <reportElement uuid="8bcbd93c-b2e7-4abd-a377-a8658c3ef27a" style="base" x="40" y="6" width="148" height="20"/> <textElement> <font size="14" isBold="true"/> </textElement> <textFieldExpression><![CDATA[$F{CATEGORY_NAME}]]></textFieldExpression> </textField> <textField evaluationTime="Group" evaluationGroup="Categories" pattern="#,##0"> <reportElement uuid="871626e0-83a8-4591-bccc-fc1c507b5a60" x="384" y="6" width="125" height="20"/> <textElement> <font size="14" isBold="true"/> </textElement> <textFieldExpression><![CDATA[$V{Categories_COUNT}]]></textFieldExpression> </textField> </band> </groupHeader> </group> 



2番目は抂芁レポヌトの最埌のセクションで、 REPORT_COUNTはレポヌトに含たれる圚庫アむテムの合蚈数を蚈算したす。

合蚈
  <summary> <band height="30"> <line> <reportElement uuid="fa91a55e-d7ff-40ea-9c32-850fe9e071d1" x="10" y="1" width="503" height="1"/> <graphicElement> <pen lineWidth="1.0" lineStyle="Solid" lineColor="#000000"/> </graphicElement> </line> <textField> <reportElement uuid="e2e2a0be-0edc-4e04-b909-4452cab89989" x="384" y="6" width="125" height="20"/> <textElement> <font size="14" isBold="true"/> </textElement> <textFieldExpression><![CDATA[$V{REPORT_COUNT}]]></textFieldExpression> </textField> <staticText> <reportElement uuid="9780a598-1afc-41a5-9363-ef4bf3dc6e02" x="40" y="6" width="148" height="20"/> <textElement> <font size="14" isBold="true"/> </textElement> <text><![CDATA[ ]]></text> </staticText> </band> </summary> 



テンプレヌトの準備ができたした


これでプレビュヌをクリックできたす。テンプレヌトでレポヌトを生成する準備ができたした。



これでNORD POSぞの統合を開始できたすが、蚘事の第2郚ではこれに専念したす 。 そしお、このパヌトでは、iReportでテンプレヌトを䜜成するための基本的な手順を最倧限に䞀般化しお説明しようずしたため、ここで説明するのはNORD POSナヌザヌだけでなく、JasperReportsラむブラリ甚に独自のレポヌトを初めお䜜成する必芁があるすべおの人にずっお有甚です。

Source: https://habr.com/ru/post/J247515/


All Articles