diff --git a/3rdparty/zint-2.10.0-src.tar.gz b/3rdparty/zint-2.10.0-src.tar.gz new file mode 100644 index 0000000..a2eb21a Binary files /dev/null and b/3rdparty/zint-2.10.0-src.tar.gz differ diff --git a/demo_r1/.idea/.gitignore b/demo_r1/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/demo_r1/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/demo_r1/.idea/demo_r1.iml b/demo_r1/.idea/demo_r1.iml new file mode 100644 index 0000000..f08604b --- /dev/null +++ b/demo_r1/.idea/demo_r1.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/demo_r1/.idea/misc.xml b/demo_r1/.idea/misc.xml new file mode 100644 index 0000000..79b3c94 --- /dev/null +++ b/demo_r1/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/demo_r1/.idea/modules.xml b/demo_r1/.idea/modules.xml new file mode 100644 index 0000000..7423bf7 --- /dev/null +++ b/demo_r1/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/demo_r1/.idea/vcs.xml b/demo_r1/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/demo_r1/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/demo_r1/demo_reports/1.4/test.zip b/demo_r1/demo_reports/1.4/test.zip new file mode 100644 index 0000000..ffc9c6b Binary files /dev/null and b/demo_r1/demo_reports/1.4/test.zip differ diff --git a/demo_r1/demo_reports/BL détaillé.lrxml b/demo_r1/demo_reports/BL détaillé.lrxml new file mode 100644 index 0000000..e677ec8 --- /dev/null +++ b/demo_r1/demo_reports/BL détaillé.lrxml @@ -0,0 +1,3020 @@ + + + + + + + page1 + + + + + + + + + ReportPage1 + + + + PageHeader2 + + + + HorizontalLayout2 + + + + ImageItem1 + + + + + HorizontalLayout2 + + + + + + + + + + company + logo + + + + +
+ + + + + + + VerticalLayout1 + + + + TextItem1 + + + + + VerticalLayout1 + + + + + + + + <b>$D{company.type} $D{company.nom}</b><br>$D{company.act} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + VerticalLayout1 + + + + + + + + <table><tr><td><b>Adresse :</b> $D{company.adress}<br> +<b>Télephone :</b> $D{company.tel} <br> <b>Fax :</b> $D{company.fax}<br> +<b>E-mail :</b> $D{company.email} +<br><b> Site web :</b> $D{company.web}</td><td><b>RIB :</b>$D{company.mobile}<br><b>CIB :</b>$D{company.facebook}</td><td > +<b>RC :</b> $D{company.rc}<br> <b>AI :</b> $D{company.art_imp} <br> <b>NIF :</b> $D{company.mf} <br> <b>NIS :</b> $D{company.nis}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + + + + + + + + + + + PageHeader2 + + + + + + + + + + + + + TextItem28 + + + + + PageHeader2 + + + + + + + + Le : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + PageHeader2 + + + + + + + + Bon de livraison N° $S{fonction.STXT($D{doc.doc},2,500)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem34 + + + + + PageHeader2 + + + + + + + + <table><tr><td><b>Client :</b></td><td> $D{doc.cl}</td></tr> +<tr><td><b>Adresse :</b></td><td> $D{doc.adr_fac}</td></tr> +<tr><td><b>Téléphone : </b></td><td>$D{doc.tel}</td></tr> +<tr><td><b>Fax : </b></td><td>$D{doc.fax}</td></tr> +<tr><td><b>Email : </b></td><td>$D{doc.email}</td></tr> +<tr><td><b>N° RC :</b></td><td> $D{doc.rc} </td></tr> +<tr><td><b>N° AI :</b></td><td> $D{doc.ai} </td></tr> +<tr><td><b>N° NIS :</b> </td><td>$D{doc.nis}</td></tr> +<tr><td><b>N° NIF :</b> </td><td>$D{doc.mf}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem29 + + + + + PageHeader2 + + + + + + + + $D{doc.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + det + + + + HorizontalLayout1 + + + + TextItem14 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.ref} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.des} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.qte},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pu},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.tva} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pt},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + det + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + stock + + + + + + + + + + + + + PageFooter1 + + + + VerticalLayout38 + + + + HorizontalLayout4 + + + + TextItem4 + + + + + HorizontalLayout4 + + + + + + + + Total HT : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem3 + + + + + HorizontalLayout4 + + + + + + + + $S{numberFormat(SUM($D{stock.pt},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout5 + + + + TextItem5 + + + + + HorizontalLayout5 + + + + + + + + Remise : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout5 + + + + + + + + $S{numberFormat($D{doc.remise},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout6 + + + + TextItem7 + + + + + HorizontalLayout6 + + + + + + + + Total TVA : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + HorizontalLayout6 + + + + + + + + $S{numberFormat(SUM($D{stock.tot_tva},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + pied_taxes + + + + TextItem33 + + + + + pied_taxes + + + + + + + + $D{taxes.taxe} : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + pied_taxes + + + + + + + + $S{ +if($D{taxes.taxe} == '') +ReportPage1_pied_taxes.isVisible = 0; +numberFormat($D{taxes.valeur},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout7 + + + + TextItem27 + + + + + HorizontalLayout7 + + + + + + + + Net à payer : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout7 + + + + + + + + $S{numberFormat($D{doc.ttc},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + TextItem30 + + + + + PageFooter1 + + + + + + + + $D{doc.obs}<br> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + HorizontalLayout41 + + + + TextItem41 + + + + + HorizontalLayout41 + + + + + + + + Taxe +$S{if($D{taxes.taxe} == '') +ReportPage1_details_taxes.isVisible = 0;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem43 + + + + + HorizontalLayout41 + + + + + + + + Unité + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem44 + + + + + HorizontalLayout41 + + + + + + + + Contenance + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem45 + + + + + HorizontalLayout41 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + ligne_taxes + + + + TextItem46 + + + + + ligne_taxes + + + + + + + + $D{taxes.taxe} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem47 + + + + + ligne_taxes + + + + + + + + $D{taxes.unite} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem48 + + + + + ligne_taxes + + + + + + + + $D{taxes.contenance} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem49 + + + + + ligne_taxes + + + + + + + + $S{fonction.Nombre($D{taxes.Valeur})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + VerticalLayout23 + + + + reglements + + + + HorizontalLayout18 + + + + TextItem9 + + + + + HorizontalLayout18 + + + + + + + + Date +$S{ReportPage1_reglements.isVisible = $V{afficher_reglements}; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout18 + + + + + + + + N° chèque + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout18 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + ligne_paiement + + + + TextItem21 + + + + + ligne_paiement + + + + + + + + $D{paiements.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem26 + + + + + ligne_paiement + + + + + + + + $D{paiements.N° chèque} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem32 + + + + + ligne_paiement + + + + + + + + $S{fonction.Nombre($D{paiements.Montant})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + + + VerticalLayout23 + + + + + + + + + + + + HorizontalLayout23 + + + + TextItem23 + + + + + HorizontalLayout23 + + + + + + + + Reste à payer: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + HorizontalLayout23 + + + + + + + + $S{fonction.Nombre($D{doc.comp})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout23 + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem14 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + DataHeaderBand1 + + + + HorizontalLayout40 + + + + TextItem24 + + + + + HorizontalLayout40 + + + + + + + + Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout40 + + + + + + + + Désignations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout40 + + + + + + + + Qte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout40 + + + + + + + + P.U HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + HorizontalLayout40 + + + + + + + + TVA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem31 + + + + + HorizontalLayout40 + + + + + + + + Montant HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataHeaderBand1 + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + det + + + + + + + + + + + + + + PageFooter2 + + + + TextItem25 + + + + + PageFooter2 + + + + + + + + $S{ReportPage1_} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + f + QMYSQL + $V{dossier} + $V{utilisateur} + + $V{serveur} + + + $V{port} + + + + + + company + select * from comp limit 1 + f + + + + stock + select stock_out.*,pt*stock_out.tva/100 as tot_tva, prod_ajout.* from stock_out left join prod_ajout on prod_ajout.ref = stock_out.ref where stock_out.doc = $V{doc} + f + + + + paiements + select date Date, descr Libellé, num_cheque 'N° chèque', debit Montant from oper_caisse where ref = $V{doc} and rowid not in (select id from reg_associer) union all select reg_associer.date,'Tranche de paiement associée',oper_caisse.num_cheque,mnt from reg_associer inner join oper_caisse on reg_associer.id = oper_caisse.rowid where reg_associer.ref = $V{doc} + f + + + + taxes + SELECT taxe_article.taxe,stock_out.mnt_taxe,stock_out.contenance,taxes.unite,sum(stock_out.qte * stock_out.qte_emb * stock_out.mnt_taxe * stock_out.contenance) Valeur FROM stock_out INNER JOIN taxe_article ON stock_out.ref = taxe_article.ref INNER JOIN taxes ON taxes.libelle = taxe_article.taxe WHERE doc = $V{doc} GROUP BY taxes.libelle + f + + + + doc + select bl.*, client.* from bl left join client on bl.cl = client.client where doc = $V{doc} + f + + + + + + + + + + + ReportPage1_PageFooter1.beforeRender.connect(BR1) +function BR1() +{ + var tableBuilder = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_paiement); + tableBuilder.buildTable("paiements"); + +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_taxes); + tableTaxes.buildTable("taxes"); +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_details_taxes); + tableTaxes.buildTable("taxes"); +} + + +ReportPage1_DataHeaderBand1.afterRender.connect(AR1) +function AR1(){ + ReportPage1_HorizontalLayout3.geometry.y = ReportPage1_DataHeaderBand1.geometry.y; + ReportPage1_HorizontalLayout3.geometry.height=LimeReport.getPageFreeSpace(ReportPage1); + ReportPage1_HorizontalLayout3.geometry.height -= (ReportPage1_PageFooter2.geometry.height + ReportPage1_PageFooter1.geometry.height + 30) +} + + + + + + + + +
+
diff --git a/demo_r1/demo_reports/BL détaillé_upd.lrxml b/demo_r1/demo_reports/BL détaillé_upd.lrxml new file mode 100644 index 0000000..e677ec8 --- /dev/null +++ b/demo_r1/demo_reports/BL détaillé_upd.lrxml @@ -0,0 +1,3020 @@ + + + + + + + page1 + + + + + + + + + ReportPage1 + + + + PageHeader2 + + + + HorizontalLayout2 + + + + ImageItem1 + + + + + HorizontalLayout2 + + + + + + + + + + company + logo + + + + +
+ + + + + + + VerticalLayout1 + + + + TextItem1 + + + + + VerticalLayout1 + + + + + + + + <b>$D{company.type} $D{company.nom}</b><br>$D{company.act} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + VerticalLayout1 + + + + + + + + <table><tr><td><b>Adresse :</b> $D{company.adress}<br> +<b>Télephone :</b> $D{company.tel} <br> <b>Fax :</b> $D{company.fax}<br> +<b>E-mail :</b> $D{company.email} +<br><b> Site web :</b> $D{company.web}</td><td><b>RIB :</b>$D{company.mobile}<br><b>CIB :</b>$D{company.facebook}</td><td > +<b>RC :</b> $D{company.rc}<br> <b>AI :</b> $D{company.art_imp} <br> <b>NIF :</b> $D{company.mf} <br> <b>NIS :</b> $D{company.nis}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + + + + + + + + + + + PageHeader2 + + + + + + + + + + + + + TextItem28 + + + + + PageHeader2 + + + + + + + + Le : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + PageHeader2 + + + + + + + + Bon de livraison N° $S{fonction.STXT($D{doc.doc},2,500)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem34 + + + + + PageHeader2 + + + + + + + + <table><tr><td><b>Client :</b></td><td> $D{doc.cl}</td></tr> +<tr><td><b>Adresse :</b></td><td> $D{doc.adr_fac}</td></tr> +<tr><td><b>Téléphone : </b></td><td>$D{doc.tel}</td></tr> +<tr><td><b>Fax : </b></td><td>$D{doc.fax}</td></tr> +<tr><td><b>Email : </b></td><td>$D{doc.email}</td></tr> +<tr><td><b>N° RC :</b></td><td> $D{doc.rc} </td></tr> +<tr><td><b>N° AI :</b></td><td> $D{doc.ai} </td></tr> +<tr><td><b>N° NIS :</b> </td><td>$D{doc.nis}</td></tr> +<tr><td><b>N° NIF :</b> </td><td>$D{doc.mf}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem29 + + + + + PageHeader2 + + + + + + + + $D{doc.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + det + + + + HorizontalLayout1 + + + + TextItem14 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.ref} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.des} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.qte},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pu},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.tva} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pt},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + det + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + stock + + + + + + + + + + + + + PageFooter1 + + + + VerticalLayout38 + + + + HorizontalLayout4 + + + + TextItem4 + + + + + HorizontalLayout4 + + + + + + + + Total HT : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem3 + + + + + HorizontalLayout4 + + + + + + + + $S{numberFormat(SUM($D{stock.pt},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout5 + + + + TextItem5 + + + + + HorizontalLayout5 + + + + + + + + Remise : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout5 + + + + + + + + $S{numberFormat($D{doc.remise},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout6 + + + + TextItem7 + + + + + HorizontalLayout6 + + + + + + + + Total TVA : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + HorizontalLayout6 + + + + + + + + $S{numberFormat(SUM($D{stock.tot_tva},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + pied_taxes + + + + TextItem33 + + + + + pied_taxes + + + + + + + + $D{taxes.taxe} : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + pied_taxes + + + + + + + + $S{ +if($D{taxes.taxe} == '') +ReportPage1_pied_taxes.isVisible = 0; +numberFormat($D{taxes.valeur},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout7 + + + + TextItem27 + + + + + HorizontalLayout7 + + + + + + + + Net à payer : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout7 + + + + + + + + $S{numberFormat($D{doc.ttc},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + TextItem30 + + + + + PageFooter1 + + + + + + + + $D{doc.obs}<br> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + HorizontalLayout41 + + + + TextItem41 + + + + + HorizontalLayout41 + + + + + + + + Taxe +$S{if($D{taxes.taxe} == '') +ReportPage1_details_taxes.isVisible = 0;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem43 + + + + + HorizontalLayout41 + + + + + + + + Unité + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem44 + + + + + HorizontalLayout41 + + + + + + + + Contenance + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem45 + + + + + HorizontalLayout41 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + ligne_taxes + + + + TextItem46 + + + + + ligne_taxes + + + + + + + + $D{taxes.taxe} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem47 + + + + + ligne_taxes + + + + + + + + $D{taxes.unite} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem48 + + + + + ligne_taxes + + + + + + + + $D{taxes.contenance} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem49 + + + + + ligne_taxes + + + + + + + + $S{fonction.Nombre($D{taxes.Valeur})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + VerticalLayout23 + + + + reglements + + + + HorizontalLayout18 + + + + TextItem9 + + + + + HorizontalLayout18 + + + + + + + + Date +$S{ReportPage1_reglements.isVisible = $V{afficher_reglements}; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout18 + + + + + + + + N° chèque + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout18 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + ligne_paiement + + + + TextItem21 + + + + + ligne_paiement + + + + + + + + $D{paiements.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem26 + + + + + ligne_paiement + + + + + + + + $D{paiements.N° chèque} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem32 + + + + + ligne_paiement + + + + + + + + $S{fonction.Nombre($D{paiements.Montant})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + + + VerticalLayout23 + + + + + + + + + + + + HorizontalLayout23 + + + + TextItem23 + + + + + HorizontalLayout23 + + + + + + + + Reste à payer: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + HorizontalLayout23 + + + + + + + + $S{fonction.Nombre($D{doc.comp})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout23 + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem14 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + DataHeaderBand1 + + + + HorizontalLayout40 + + + + TextItem24 + + + + + HorizontalLayout40 + + + + + + + + Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout40 + + + + + + + + Désignations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout40 + + + + + + + + Qte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout40 + + + + + + + + P.U HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + HorizontalLayout40 + + + + + + + + TVA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem31 + + + + + HorizontalLayout40 + + + + + + + + Montant HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataHeaderBand1 + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + det + + + + + + + + + + + + + + PageFooter2 + + + + TextItem25 + + + + + PageFooter2 + + + + + + + + $S{ReportPage1_} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + f + QMYSQL + $V{dossier} + $V{utilisateur} + + $V{serveur} + + + $V{port} + + + + + + company + select * from comp limit 1 + f + + + + stock + select stock_out.*,pt*stock_out.tva/100 as tot_tva, prod_ajout.* from stock_out left join prod_ajout on prod_ajout.ref = stock_out.ref where stock_out.doc = $V{doc} + f + + + + paiements + select date Date, descr Libellé, num_cheque 'N° chèque', debit Montant from oper_caisse where ref = $V{doc} and rowid not in (select id from reg_associer) union all select reg_associer.date,'Tranche de paiement associée',oper_caisse.num_cheque,mnt from reg_associer inner join oper_caisse on reg_associer.id = oper_caisse.rowid where reg_associer.ref = $V{doc} + f + + + + taxes + SELECT taxe_article.taxe,stock_out.mnt_taxe,stock_out.contenance,taxes.unite,sum(stock_out.qte * stock_out.qte_emb * stock_out.mnt_taxe * stock_out.contenance) Valeur FROM stock_out INNER JOIN taxe_article ON stock_out.ref = taxe_article.ref INNER JOIN taxes ON taxes.libelle = taxe_article.taxe WHERE doc = $V{doc} GROUP BY taxes.libelle + f + + + + doc + select bl.*, client.* from bl left join client on bl.cl = client.client where doc = $V{doc} + f + + + + + + + + + + + ReportPage1_PageFooter1.beforeRender.connect(BR1) +function BR1() +{ + var tableBuilder = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_paiement); + tableBuilder.buildTable("paiements"); + +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_taxes); + tableTaxes.buildTable("taxes"); +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_details_taxes); + tableTaxes.buildTable("taxes"); +} + + +ReportPage1_DataHeaderBand1.afterRender.connect(AR1) +function AR1(){ + ReportPage1_HorizontalLayout3.geometry.y = ReportPage1_DataHeaderBand1.geometry.y; + ReportPage1_HorizontalLayout3.geometry.height=LimeReport.getPageFreeSpace(ReportPage1); + ReportPage1_HorizontalLayout3.geometry.height -= (ReportPage1_PageFooter2.geometry.height + ReportPage1_PageFooter1.geometry.height + 30) +} + + + + + + + + +
+
diff --git a/demo_r1/demo_reports/BL détaillé_upd.zip b/demo_r1/demo_reports/BL détaillé_upd.zip new file mode 100644 index 0000000..82f8f56 Binary files /dev/null and b/demo_r1/demo_reports/BL détaillé_upd.zip differ diff --git a/demo_r1/demo_reports/BL.detaille.zip b/demo_r1/demo_reports/BL.detaille.zip new file mode 100644 index 0000000..da43894 Binary files /dev/null and b/demo_r1/demo_reports/BL.detaille.zip differ diff --git a/demo_r1/demo_reports/DataSource_to_Column.lrxml b/demo_r1/demo_reports/DataSource_to_Column.lrxml new file mode 100644 index 0000000..76a2236 --- /dev/null +++ b/demo_r1/demo_reports/DataSource_to_Column.lrxml @@ -0,0 +1,492 @@ + + + + + + + page1 + + + + + + + + + Reportpage1 + + + + DataBand1 + + + + HorizontalLayout9 + + + + TextItem3 + + + + + HorizontalLayout9 + + + + + + + + $S{if (!datasources.get("d1")) $D{d1.1}; else ""} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + HorizontalLayout9 + + + + + + + + $S{if (!datasources.get("d2")) $D{d2.1}; else ""} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem5 + + + + + HorizontalLayout9 + + + + + + + + $S{if (!datasources.get("d3")) $D{d3.1}; else ""} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataBand1 + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + + + + + + + + d3 + + + + + + + + + + + + + DataHeaderBand5 + + + + HorizontalLayout8 + + + + TextItem6 + + + + + HorizontalLayout8 + + + + + + + + Datasource "d1" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + HorizontalLayout8 + + + + + + + + Datasource "d2" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + HorizontalLayout8 + + + + + + + + Datasource "d3" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataHeaderBand5 + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + DataBand1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + + + + + base_ds + d2 + + + + + + + + d1 + 1;2 +2;4 + ; + + + + + d3 + 4;4 +5;8 +1;9 + ; + + + + + d2 + 3;5 +2;8 +4;1 +6;8 + ; + + + + + + + + Reportpage1_DataBand1.afterRender.connect(AF) +Reportpage1_DataBand1.datasource = getVariable("base_ds") + +var ds_names = ["d1","d2","d3"] +var datasources = new Map() + +for (name of ds_names){ datasources.set(name, false) } + +function AF(){ + for (ds of datasources){ + if (ds[0] !== getVariable("base_ds")){ + DatasourceFunctions.next(ds[0]) + datasources.set(ds[0], DatasourceFunctions.isEOF(ds[0])) + } + } +} + + + + + diff --git a/demo_r1/demo_reports/Facture.lrxml b/demo_r1/demo_reports/Facture.lrxml new file mode 100644 index 0000000..9cf6c0a --- /dev/null +++ b/demo_r1/demo_reports/Facture.lrxml @@ -0,0 +1,2893 @@ + + + + + + + page1 + + + + + + + + + + ReportPage1 + + + + PageHeader2 + + + + HorizontalLayout2 + + + + ImageItem1 + + + + + HorizontalLayout2 + + + + + + + + + + company + logo + + + + +
+ + + + + + + VerticalLayout1 + + + + TextItem1 + + + + + VerticalLayout1 + + + + + + + + <b>$D{company.type} $D{company.nom}</b><br>$D{company.act} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + VerticalLayout1 + + + + + + + + <table><tr><td><b>Adresse :</b> $D{company.adress}<br> +<b>Télephone :</b> $D{company.tel} <br> <b>Fax :</b> $D{company.fax}<br> +<b>E-mail :</b> $D{company.email} +<br><b> Site web :</b> $D{company.web}</td><td><b>RIB :</b>$D{company.mobile}<br><b>CIB :</b>$D{company.facebook}</td><td > +<b>RC :</b> $D{company.rc}<br> <b>AI :</b> $D{company.art_imp} <br> <b>NIF :</b> $D{company.mf} <br> <b>NIS :</b> $D{company.nis}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + + + + + + + + + + + PageHeader2 + + + + + + + + + + + + + TextItem28 + + + + + PageHeader2 + + + + + + + + Le : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + PageHeader2 + + + + + + + + Facture N° $S{fonction.STXT($D{doc.doc},2,500)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem34 + + + + + PageHeader2 + + + + + + + + <table><tr><td><b>Client :</b></td><td> $D{doc.cl}</td></tr> +<tr><td><b>Adresse :</b></td><td> $D{doc.adr_fac}</td></tr> +<tr><td><b>Téléphone : </b></td><td>$D{doc.tel}</td></tr> +<tr><td><b>Fax : </b></td><td>$D{doc.fax}</td></tr> +<tr><td><b>Email : </b></td><td>$D{doc.email}</td></tr> +<tr><td><b>N° RC :</b></td><td> $D{doc.rc} </td></tr> +<tr><td><b>N° AI :</b></td><td> $D{doc.ai} </td></tr> +<tr><td><b>N° NIS :</b> </td><td>$D{doc.nis}</td></tr> +<tr><td><b>N° NIF :</b> </td><td>$D{doc.mf}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BarcodeItem2 + + + + + PageHeader2 + + + + + + + + + + doc + doc + 1 + + + + + + + + + + + + + + TextItem29 + + + + + PageHeader2 + + + + + + + + $D{doc.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + det + + + + HorizontalLayout1 + + + + TextItem14 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.ref} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.des} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.qte},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pu},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.tva} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pt},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + det + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + stock + + + + + + + + + + + + + PageFooter1 + + + + VerticalLayout38 + + + + HorizontalLayout4 + + + + TextItem4 + + + + + HorizontalLayout4 + + + + + + + + Total HT : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem3 + + + + + HorizontalLayout4 + + + + + + + + $S{numberFormat(SUM($D{stock.pt},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout5 + + + + TextItem5 + + + + + HorizontalLayout5 + + + + + + + + Remise : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout5 + + + + + + + + $S{numberFormat($D{doc.remise},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout6 + + + + TextItem7 + + + + + HorizontalLayout6 + + + + + + + + Total TVA : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + HorizontalLayout6 + + + + + + + + $S{numberFormat(SUM($D{stock.tot_tva},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + pied_taxes + + + + TextItem33 + + + + + pied_taxes + + + + + + + + $D{taxes.taxe} : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + pied_taxes + + + + + + + + $S{ +if($D{taxes.taxe} == '') +ReportPage1_pied_taxes.isVisible = 0; +numberFormat($D{taxes.valeur},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout7 + + + + TextItem27 + + + + + HorizontalLayout7 + + + + + + + + Net à payer : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout7 + + + + + + + + $S{numberFormat($D{doc.ttc},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + VerticalLayout2 + + + + TextItem30 + + + + + VerticalLayout2 + + + + + + + + $D{doc.obs}<br> +Arrêter la présente facture à la somme de $S{fonction.nombreEnLettre($D{doc.ttc})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + HorizontalLayout41 + + + + TextItem41 + + + + + HorizontalLayout41 + + + + + + + + Taxe +$S{if($D{taxes.taxe} == '') +ReportPage1_details_taxes.isVisible = 0;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem43 + + + + + HorizontalLayout41 + + + + + + + + Unité + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem44 + + + + + HorizontalLayout41 + + + + + + + + Contenance + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem45 + + + + + HorizontalLayout41 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + ligne_taxes + + + + TextItem46 + + + + + ligne_taxes + + + + + + + + $D{taxes.taxe} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem47 + + + + + ligne_taxes + + + + + + + + $D{taxes.unite} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem48 + + + + + ligne_taxes + + + + + + + + $D{taxes.contenance} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem49 + + + + + ligne_taxes + + + + + + + + $S{fonction.Nombre($D{taxes.Valeur})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + + + VerticalLayout2 + + + + + + + + + + + + reglements + + + + HorizontalLayout18 + + + + TextItem9 + + + + + HorizontalLayout18 + + + + + + + + Date +$S{ReportPage1_reglements.isVisible = $V{afficher_reglements}; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout18 + + + + + + + + N° chèque + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout18 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + ligne_paiement + + + + TextItem21 + + + + + ligne_paiement + + + + + + + + $D{paiements.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem26 + + + + + ligne_paiement + + + + + + + + $D{paiements.N° chèque} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem32 + + + + + ligne_paiement + + + + + + + + $S{fonction.Nombre($D{paiements.Montant})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + + + VerticalLayout2 + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem14 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + DataHeaderBand1 + + + + HorizontalLayout40 + + + + TextItem24 + + + + + HorizontalLayout40 + + + + + + + + Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout40 + + + + + + + + Désignations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout40 + + + + + + + + Qte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout40 + + + + + + + + P.U HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + HorizontalLayout40 + + + + + + + + TVA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem31 + + + + + HorizontalLayout40 + + + + + + + + Montant HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataHeaderBand1 + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + det + + + + + + + + + + + + + + PageFooter2 + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + f + QMYSQL + $V{dossier} + $V{utilisateur} + + $V{serveur} + + + $V{port} + + + + + + company + select * from comp limit 1 + f + + + + stock + select stock_out.*,pt*stock_out.tva/100 as tot_tva, prod_ajout.* from stock_out left join prod_ajout on prod_ajout.ref = stock_out.ref where stock_out.doc = $V{doc} + f + + + + doc + select fv.*, client.* from fv left join client on fv.cl = client.client where doc = $V{doc} + f + + + + paiements + select date Date, descr Libellé, num_cheque 'N° chèque', debit Montant from oper_caisse where ref = $V{doc} and rowid not in (select id from reg_associer) union all select reg_associer.date,'Tranche de paiement associée',oper_caisse.num_cheque,mnt from reg_associer inner join oper_caisse on reg_associer.id = oper_caisse.rowid where reg_associer.ref = $V{doc} + f + + + + taxes + SELECT taxe_article.taxe,stock_out.mnt_taxe,stock_out.contenance,taxes.unite,sum(stock_out.qte * stock_out.qte_emb * stock_out.mnt_taxe * stock_out.contenance) Valeur FROM stock_out INNER JOIN taxe_article ON stock_out.ref = taxe_article.ref INNER JOIN taxes ON taxes.libelle = taxe_article.taxe WHERE doc = $V{doc} GROUP BY taxes.libelle + f + + + + + + + + + + + ReportPage1_PageFooter1.beforeRender.connect(BR1) +function BR1() +{ + var tableBuilder = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_paiement); + tableBuilder.buildTable("paiements"); + +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_taxes); + tableTaxes.buildTable("taxes"); +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_details_taxes); + tableTaxes.buildTable("taxes"); +} + +ReportPage1_HorizontalLayout3.geometry.height+=LimeReport.getPageFreeSpace(ReportPage1); +ReportPage1_HorizontalLayout3.geometry.y = ReportPage1_DataHeaderBand1.geometry.y; + + + + + + + + +
+
diff --git a/demo_r1/demo_reports/db.sqlite3 b/demo_r1/demo_reports/db.sqlite3 new file mode 100644 index 0000000..df18669 Binary files /dev/null and b/demo_r1/demo_reports/db.sqlite3 differ diff --git a/demo_r1/demo_reports/form.lrd b/demo_r1/demo_reports/form.lrd new file mode 100644 index 0000000..5af8712 Binary files /dev/null and b/demo_r1/demo_reports/form.lrd differ diff --git a/demo_r1/demo_reports/ladder.lrxml b/demo_r1/demo_reports/ladder.lrxml new file mode 100644 index 0000000..6bb2692 --- /dev/null +++ b/demo_r1/demo_reports/ladder.lrxml @@ -0,0 +1,1554 @@ + + + + + + + page1 + + + + + + + + + + Reportpage1 + + + + data + + + + TextItem6 + + + + + data + + + + + + + + $D{ds.a} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + data + + + + + + + + $D{ds.b} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + data + + + + + + + + $D{ds.c} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem9 + + + + + data + + + + + + + + $D{ds.d} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + data + + + + + + + + $D{ds.amount} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem1 + + + + + data + + + + + + + + data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + + + + + + + + ds + + + + + + + + + + + + + a_group + + + + TextItem3 + + + + + a_group + + + + + + + + $D{ds.a} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem23 + + + + + a_group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem24 + + + + + a_group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem26 + + + + + a_group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem31 + + + + + a_group + + + + + + + + $S{SUM($D{ds.amount}, "data")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + a_group + + + + + + + + a group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + data + + + + + + + a + + + + + + + + + b_group + + + + TextItem4 + + + + + b_group + + + + + + + + $D{ds.a} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + b_group + + + + + + + + $D{ds.b} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem25 + + + + + b_group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem27 + + + + + b_group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem30 + + + + + b_group + + + + + + + + $S{SUM($D{ds.amount}, "data")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem14 + + + + + b_group + + + + + + + + b group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + a_group + + + + + + + b + + + + + + + + + c_group + + + + TextItem5 + + + + + c_group + + + + + + + + $D{ds.a} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + c_group + + + + + + + + $D{ds.b} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + c_group + + + + + + + + $D{ds.c} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem28 + + + + + c_group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem29 + + + + + c_group + + + + + + + + $S{SUM($D{ds.amount}, "data")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + c_group + + + + + + + + c group + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + b_group + + + + + + + c + + + + + + + + + DataHeaderBand18 + + + + TextItem18 + + + + + DataHeaderBand18 + + + + + + + + c + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + DataHeaderBand18 + + + + + + + + b + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + DataHeaderBand18 + + + + + + + + d + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem21 + + + + + DataHeaderBand18 + + + + + + + + amount + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + DataHeaderBand18 + + + + + + + + a + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + db + QSQLITE + D:/Work/C++/Projects/LimeReport/demo_r1/demo_reports/db.sqlite3 + + + + + + + + + + + + ds + select a,b,c,d, amount +from ds +order by a,b,c,d + db + + + + + + + + + + + + + + + + diff --git a/demo_r1/demo_reports/lr_git_test.lrxml b/demo_r1/demo_reports/lr_git_test.lrxml new file mode 100644 index 0000000..381e7e4 --- /dev/null +++ b/demo_r1/demo_reports/lr_git_test.lrxml @@ -0,0 +1,2891 @@ + + + + + + + page4 + + + + + + + + Horizontal + + + + ChartItem1 + + + + + Horizontal + + + + + + + + + + + Series0 + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + ChartItem3 + + + + + Horizontal + + + + + + + + + + + Series0 + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + ChartItem2 + + + + + Horizontal + + + + + + + + + + + Series0 + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + ChartItem4 + + + + + Horizontal + + + + + + + + + + + Series0 + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + ChartItem5 + + + + + Horizontal + + + + + + + + + + + Series0 + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + ChartItem6 + + + + + Horizontal + + + + + + + + + + + Series0 + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page2 + + + + + + + + Grid + + + + ChartItem2 + + + + + Grid + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem4 + + + + + Grid + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem7 + + + + + Grid + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem8 + + + + + Grid + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem9 + + + + + Grid + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + test + + + + + + x + + + + + + + x + + + + ChartItem10 + + + + + Grid + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page2 + + + + + + + + Lines + + + + ChartItem5 + + + + + Lines + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem1 + + + + + Lines + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem2 + + + + + Lines + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem3 + + + + + Lines + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page3 + + + + + + + + Vertical + + + + ChartItem6 + + + + + Vertical + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem1 + + + + + Vertical + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem2 + + + + + Vertical + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem3 + + + + + Vertical + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + y + + + + + + + + Series2 + y + + + + + + + + Series3 + y + + + + + + + + Series4 + y + + + + + + + + Series5 + y + + + + + + + + Series6 + y + + + + + + + + Series7 + y + + + + + + + + Series8 + y + + + + + + + + Series9 + y + + + + + + + test + + + + + + + + + + + + + + x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page5 + + + + + + + + Pie + + + + ChartItem7 + + + + + Pie + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + x + + + + + + + test + + + + + + + + + + + + + + x + + + + ChartItem1 + + + + + Pie + + + + + + + + + + + Series0 + y + + + + + + + + Series1 + x + + + + + + + test + + + + + + + + + + + + + + x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page6 + + + + + + + + Corner cases + + + + ChartItem3 + + + + + Corner cases + + + + + + + + + + + Series0 long naammamamamamama + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + ChartItem1 + + + + + Corner cases + + + + + + + + + + + Series0 long naammamamamamama + x_big + + + + + + + + Series1 + x_big + + + + + + + + Series2 + x_big + + + + + + + + Series3 + x_big + + + + + + + + Series4 + x_big + + + + + + + + Series5 + x_big + + + + + + + + Series6 + x_big + + + + + + + test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + + + + + + test + y,x,label,x_big +10,3,f,200000 +20,2,s,100000 +30,0,t,10000 + , + + + + + + + + + + + + + diff --git a/demo_r1/demo_reports/multimote/db.sqlite3 b/demo_r1/demo_reports/multimote/db.sqlite3 new file mode 100644 index 0000000..ffb9aa7 Binary files /dev/null and b/demo_r1/demo_reports/multimote/db.sqlite3 differ diff --git a/demo_r1/demo_reports/multimote/test.lrxml b/demo_r1/demo_reports/multimote/test.lrxml new file mode 100644 index 0000000..cb254c3 --- /dev/null +++ b/demo_r1/demo_reports/multimote/test.lrxml @@ -0,0 +1,617 @@ + + + + + + + page1 + + + + + + + + + + Reportpage1 + + + + DataBand1 + + + + TextItem1 + + + + + DataBand1 + + + + + + + + $D{test.first} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + DataBand1 + + + + + + + + $D{test.summ} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + DataBand1 + + + + + + + + $D{test.sec} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + + + + + + + + test + + + + + + + + + + + + + GroupBandHeader4 + + + + TextItem5 + + + + + GroupBandHeader4 + + + + + + + + Start first $D{test.first} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + DataBand1 + + + + + + + first + + + + + + + + + GroupBandFooter4 + + + + TextItem62 + + + + + GroupBandFooter4 + + + + + + + + $S{SUM("$D{test.summ}", "DataBand1")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem65 + + + + + GroupBandFooter4 + + + + + + + + End first $D{test.first} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + GroupBandHeader4 + + + + + + + + + DataHeaderBand1 + + + + TextItem3 + + + + + DataHeaderBand1 + + + + + + + + sec + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + DataHeaderBand1 + + + + + + + + summ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + DataHeaderBand1 + + + + + + + + first + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + DataBand1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + db + QSQLITE + ./db.sqlite3 + + + + + + + + + + + + test + SELECT first, sec, SUM(summ) AS summ +FROM test_table +GROUP BY first, sec +ORDER BY first, sec + db + + + + + + + + + + + + + + + + diff --git a/demo_r1/demo_reports/template.lrxml b/demo_r1/demo_reports/template.lrxml new file mode 100644 index 0000000..0491676 --- /dev/null +++ b/demo_r1/demo_reports/template.lrxml @@ -0,0 +1,3524 @@ + + + + + + + page1 + + + + + + + + mainReportPage + + + + reportHeader + + + + TextItem1 + + + + + reportHeader + + + + + + + + $S{ +if ((getField("caption.zc1") + getField("caption.zc0"))>=0) +THIS.setItemWidth((getField("caption.zc1") + getField("caption.zc0") ) * 8 + 47);'с $V{from_date} по $V{to_date}'} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mainReportPage + + + + + + + + + + + + + + + + + + + + PageFooter + + + + tiPage + + + + + PageFooter + + + + + + + + $V{#PAGE} из $V{#PAGE_COUNT} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mainReportPage + + + + + + + + + + + + + + + + + + + + + mainDataBand + + + + HorizontalLayout67 + + + + TextItem66 + + + + + HorizontalLayout67 + + + + + + + + $S{ +getField("main.fio");} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem67 + + + + + HorizontalLayout67 + + + + + + + + $S{ +getField("main.total");} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem62 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<1) THIS.isVisible = false; +var da = getField("main.c1"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem41 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<2) THIS.isVisible = false; +var da = getField("main.c2"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem43 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<3) THIS.isVisible = false; +var da = getField("main.c3"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem54 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<4) THIS.isVisible = false; +var da = getField("main.c4"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<5) THIS.isVisible = false; +var da = getField("main.c5"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<6) THIS.isVisible = false; +var da = getField("main.c6"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<7) THIS.isVisible = false; +var da = getField("main.c7"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem58 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<8) THIS.isVisible = false; +var da = getField("main.c8"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem57 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<9) THIS.isVisible = false; +var da = getField("main.c9"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem64 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<10) THIS.isVisible = false; +var da = getField("main.c10"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem3 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<11) THIS.isVisible = false; +var da = getField("main.c11"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem44 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<12) THIS.isVisible = false; +var da = getField("main.c12"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem45 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<13) THIS.isVisible = false; +var da = getField("main.c13"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem51 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<14) THIS.isVisible = false; +var da = getField("main.c14"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<15) THIS.isVisible = false; +var da = getField("main.c15"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem55 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<16) THIS.isVisible = false; +var da = getField("main.c16"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem60 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<17) THIS.isVisible = false; +var da = getField("main.c17"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem59 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<18) THIS.isVisible = false; +var da = getField("main.c18"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem47 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<19) THIS.isVisible = false; +var da = getField("main.c19"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem48 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<20) THIS.isVisible = false; +var da = getField("main.c20"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem65 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<21) THIS.isVisible = false; +var da = getField("main.c21"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem61 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<22) THIS.isVisible = false; +var da = getField("main.c22"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem52 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc1")<23) THIS.isVisible = false; +var da = getField("main.c23"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem53 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<1) THIS.isVisible = false; +var da = getField("main.c24"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem50 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<2) THIS.isVisible = false; +var da = getField("main.c25"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem46 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<3) THIS.isVisible = false; +var da = getField("main.c26"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem63 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<4) THIS.isVisible = false; +var da = getField("main.c27"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem56 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<5) THIS.isVisible = false; +var da = getField("main.c28"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem42 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<6) THIS.isVisible = false; +var da = getField("main.c29"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem49 + + + + + HorizontalLayout67 + + + + + + + + $S{ +if (getField("caption.zc0")<7) THIS.isVisible = false; +var da = getField("main.c30"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mainDataBand + + + + + + + + + + + + + + + mainReportPage + + + + + + + + + + + + + + + + main + + + + + + + + + + + + + PageHeader + + + + HorizontalLayout10 + + + + TextItem2 + + + + + HorizontalLayout10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + HorizontalLayout10 + + + + + + + + всего + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout9 + + + + HorizontalLayout9 + + + + TextItem35 + + + + + HorizontalLayout9 + + + + + + + + $S{ +if (getField("caption.zc1")>=0) +THIS.setItemWidth(getField("caption.zc1") * 8);'Группа А'} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem36 + + + + + HorizontalLayout9 + + + + + + + + $S{ +if (getField("caption.zc0")>=0) +THIS.setItemWidth(getField("caption.zc0") * 8);'Группа Б'} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout9 + + + + + + + + + + + + + HorizontalLayout6 + + + + TextItem5 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<1) THIS.isVisible = false; +var da = getField("caption.c1"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<2) THIS.isVisible = false; +var da = getField("caption.c2"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<3) THIS.isVisible = false; +var da = getField("caption.c3"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<4) THIS.isVisible = false; +var da = getField("caption.c4"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem9 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<5) THIS.isVisible = false; +var da = getField("caption.c5"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<6) THIS.isVisible = false; +var da = getField("caption.c6"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<7) THIS.isVisible = false; +var da = getField("caption.c7"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<8) THIS.isVisible = false; +var da = getField("caption.c8"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<9) THIS.isVisible = false; +var da = getField("caption.c9"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem14 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<10) THIS.isVisible = false; +var da = getField("caption.c10"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<11) THIS.isVisible = false; +var da = getField("caption.c11"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<12) THIS.isVisible = false; +var da = getField("caption.c12"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<13) THIS.isVisible = false; +var da = getField("caption.c13"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<14) THIS.isVisible = false; +var da = getField("caption.c14"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<15) THIS.isVisible = false; +var da = getField("caption.c15"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<16) THIS.isVisible = false; +var da = getField("caption.c16"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem21 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<17) THIS.isVisible = false; +var da = getField("caption.c17"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<18) THIS.isVisible = false; +var da = getField("caption.c18"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem23 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<19) THIS.isVisible = false; +var da = getField("caption.c19"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem24 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<20) THIS.isVisible = false; +var da = getField("caption.c20"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem25 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<21) THIS.isVisible = false; +var da = getField("caption.c21"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem26 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<22) THIS.isVisible = false; +var da = getField("caption.c22"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem27 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc1")<23) THIS.isVisible = false; +var da = getField("caption.c23"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem28 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<1) THIS.isVisible = false; +var da = getField("caption.c24"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem29 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<2) THIS.isVisible = false; +var da = getField("caption.c25"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem30 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<3) THIS.isVisible = false; +var da = getField("caption.c26"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem31 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<4) THIS.isVisible = false; +var da = getField("caption.c27"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem32 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<5) THIS.isVisible = false; +var da = getField("caption.c28"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem33 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<6) THIS.isVisible = false; +var da = getField("caption.c29"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem34 + + + + + HorizontalLayout6 + + + + + + + + $S{ +if (getField("caption.zc0")<7) THIS.isVisible = false; +var da = getField("caption.c30"); +da;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout9 + + + + + + + + + + + + + + + HorizontalLayout10 + + + + + + + + + + + + + + PageHeader + + + + + + + + + + + + + + + mainReportPage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + + + + + + + + + + + + + diff --git a/demo_r1/demo_reports/test.zip b/demo_r1/demo_reports/test.zip new file mode 100644 index 0000000..0ba84e3 Binary files /dev/null and b/demo_r1/demo_reports/test.zip differ diff --git a/demo_r1/demo_reports/test/test.db b/demo_r1/demo_reports/test/test.db new file mode 100644 index 0000000..0bbab6a Binary files /dev/null and b/demo_r1/demo_reports/test/test.db differ diff --git a/demo_r1/demo_reports/test/test.lrxml b/demo_r1/demo_reports/test/test.lrxml new file mode 100644 index 0000000..4ae8ead --- /dev/null +++ b/demo_r1/demo_reports/test/test.lrxml @@ -0,0 +1,432 @@ + + + + + + + page1 + + + + + + + + + + Reportpage1 + + + + PageHeader1 + + + + TextItem4 + + + + + PageHeader1 + + + + + + + + test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + + + + + + + + + + + + DataBand1 + + + + TextItem1 + + + + + DataBand1 + + + + + + + + $D{test.1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + + + + + + + + test + + + + + + + + + + + + + PageFooter1 + + + + TextItem5 + + + + + PageFooter1 + + + + + + + + page footer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + + + + + + + + + + + + + DataFooterBand6 + + + + TextItem6 + + + + + DataFooterBand6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + DataFooterBand6 + + + + + + + + note: follow up the last row in databand + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reportpage1 + + + + + + + + + DataBand1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + + + + + + test + 12 +13 +14 +15 +16 +17 +18 +45 +67 +59 + ; + + + + + + + + Reportpage1_DataBand1.afterRender.connect(rr) +function rr(){ + Reportpage1_DataFooterBand6.setItemHeight(253-Reportpage1_DataBand1.geometry.height/10.0); + Reportpage1_TextItem6.setItemHeight(248-Reportpage1_DataBand1.geometry.height/10.0); +} + + + + + diff --git a/demo_r1/demo_reports/test/test1.lrxml b/demo_r1/demo_reports/test/test1.lrxml new file mode 100644 index 0000000..cab68b0 --- /dev/null +++ b/demo_r1/demo_reports/test/test1.lrxml @@ -0,0 +1,843 @@ + + + + + + + page1 + + + + + + + + + + Reportpage1 + + + + TextItem1 + + + + + Reportpage1 + + + + + + + + test1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page2 + + + + + + + + + + Reportpage2 + + + + TextItem1 + + + + + Reportpage2 + + + + + + + + test2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page3 + + + + + + + + + + TOC + + + + TextItem1 + + + + + TOC + + + + + + + + index + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page4 + + + + + + + + + + Reportpage4 + + + + TextItem1 + + + + + Reportpage4 + + + + + + + + test4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page5 + + + + + + + + + + Reportpage5 + + + + TextItem1 + + + + + Reportpage5 + + + + + + + + test5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page6 + + + + + + + + + + Reportpage6 + + + + TextItem1 + + + + + Reportpage6 + + + + + + + + test6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page7 + + + + + + + + + + Reportpage7 + + + + TextItem1 + + + + + Reportpage7 + + + + + + + + test7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page8 + + + + + + + + + + Reportpage8 + + + + TextItem1 + + + + + Reportpage8 + + + + + + + + test8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + page9 + + + + + + + + + + Reportpage9 + + + + TextItem1 + + + + + Reportpage9 + + + + + + + + test1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + + + + + + + + + + + + + diff --git a/demo_r1/demo_reports/test/test2.lrxml b/demo_r1/demo_reports/test/test2.lrxml new file mode 100644 index 0000000..6f461e9 --- /dev/null +++ b/demo_r1/demo_reports/test/test2.lrxml @@ -0,0 +1,1908 @@ + + + + + + + page17 + + + + + + + + + + RLBN + + + + PageHeader1 + + + + ShapeItem5 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem4 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem7 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem8 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + TextItem3 + + + + + PageHeader1 + + + + + + + + Tank Capacity Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem33 + + + + + PageHeader1 + + + + + + + + $D{tanklist.TankName} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + PageHeader1 + + + + + + + + $V{ShipNameC} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + PageHeader1 + + + + + + + + $V{shipcert} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + TextItem9 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + HorizontalLayout2 + + + + + + + + $V{GB1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout2 + + + + + + + + <br> +Capacity +<br>(m<sup>3</sup>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout2 + + + + + + + + <br> +Diff<br> +(m<sup>3</sup>/cm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout2 + + + + + + + + $V{GB1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem21 + + + + + HorizontalLayout2 + + + + + + + + <br> +Capacity +<br>(m<sup>3</sup>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout2 + + + + + + + + <br> +Diff<br> +(m<sup>3</sup>/cm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem23 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PageHeader1 + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + + + + + DataBand14 + + + + TextItem41 + + + + + DataBand14 + + + + + + + + $D{tanklist.TankNo} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + tanklist + + + + + + + + + + + + + SubDetailBand15 + + + + TextItem34 + + + + + SubDetailBand15 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem35 + + + + + SubDetailBand15 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout1 + + + + TextItem36 + + + + + HorizontalLayout1 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + HorizontalLayout1 + + + + + + + + $V{RLBG1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{subrlbtable.capacity}/1000.0,'f',3)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{subrlbtable.diff}/1000.0,'f',3)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem42 + + + + + HorizontalLayout1 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SubDetailBand15 + + + + + + + + + + + + + + + RLBN + + + + + + + + + DataBand14 + + + + + + + subrlbtable + + + + + + + + + PageFooter15 + + + + ShapeItem42 + + + + + PageFooter15 + + + + + + + + + + + + + + + + + + ShapeItem43 + + + + + PageFooter15 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem5 + + + + + HorizontalLayout3 + + + + + + + + $V{ZRQ} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout3 + + + + + + + + -$V{#PAGE}- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + HorizontalLayout3 + + + + + + + + $V{ZRQEN} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PageFooter15 + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + + + + + + SubDetailFooterBand1 + + + + HorizontalLayout24 + + + + TextItem8 + + + + + HorizontalLayout24 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem14 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout24 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SubDetailFooterBand1 + + + + + + + + + + + + + + + RLBN + + + + + + + + + SubDetailBand15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + test + QSQLITE + C:/Users/ThinkPad/Desktop/test.db + + + + + + + + + + + + tanklist + select * from TankList + test + + + + + + subrlbtable + select * from RLBTable where TankNo=$D{tanklist.TankNo} + test + tanklist + + + + + + + + + + + +// ******************************************** RLB + +var RLBliness=0; + +RLBN_DataBand14.beforeRender.connect(RLBAA) +RLBN_SubDetailBand15.beforeRender.connect(RLBBB) +function RLBAA(){ + RLBN_TextItem41.isVisible=false; +} +// for each 5rows in subDetailBand15 will print a row " * *" as a gap +// the height of row for data and gap is set 4mm +// subDetailBand height is 216mm (50 rows data +4 rows gap) +function RLBBB(){ + RLBliness=line("SubDetailBand15"); + var gapp=(RLBliness%10==0)&&(RLBliness%50!=0); + RLBN_TextItem35.isVisible=gapp; + RLBN_TextItem34.isVisible=gapp; +} +// end mark for each tank , if the data of last one is just 100 rows(just 1 page) then no need print the data end mark +// if the last data is in the middle will need print the data end mark +function RLBfooter(){ + var footerv=(RLBliness%100!=0); + RLBN_TextItem24.isVisible=footerv; + RLBN_TextItem26.isVisible=footerv; + RLBN_TextItem27.isVisible=footerv; + RLBN_TextItem28.isVisible=footerv; + RLBN_TextItem29.isVisible=footerv; + + } + + + + + + + + + diff --git a/demo_r1/demo_reports/test/test2_changed.lrxml b/demo_r1/demo_reports/test/test2_changed.lrxml new file mode 100644 index 0000000..b120096 --- /dev/null +++ b/demo_r1/demo_reports/test/test2_changed.lrxml @@ -0,0 +1,1907 @@ + + + + + + + page17 + + + + + + + + + RLBN + + + + PageHeader1 + + + + ShapeItem5 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem4 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem7 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem8 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + TextItem3 + + + + + PageHeader1 + + + + + + + + Tank Capacity Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem33 + + + + + PageHeader1 + + + + + + + + $D{tanklist.TankName} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + PageHeader1 + + + + + + + + $V{ShipNameC} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + PageHeader1 + + + + + + + + $V{shipcert} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + TextItem9 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + HorizontalLayout2 + + + + + + + + $V{GB1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout2 + + + + + + + + <br> +Capacity +<br>(m<sup>3</sup>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout2 + + + + + + + + <br> +Diff<br> +(m<sup>3</sup>/cm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout2 + + + + + + + + $V{GB1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem21 + + + + + HorizontalLayout2 + + + + + + + + <br> +Capacity +<br>(m<sup>3</sup>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout2 + + + + + + + + <br> +Diff<br> +(m<sup>3</sup>/cm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem23 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PageHeader1 + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + + + + + DataBand14 + + + + TextItem41 + + + + + DataBand14 + + + + + + + + $D{tanklist.TankNo} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + tanklist + + + + + + + + + + + + + SubDetailBand15 + + + + TextItem34 + + + + + SubDetailBand15 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem35 + + + + + SubDetailBand15 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout1 + + + + TextItem36 + + + + + HorizontalLayout1 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + HorizontalLayout1 + + + + + + + + $V{RLBG1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{subrlbtable.capacity}/1000.0,'f',3)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{subrlbtable.diff}/1000.0,'f',3)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem42 + + + + + HorizontalLayout1 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SubDetailBand15 + + + + + + + + + + + + + + + RLBN + + + + + + + + + DataBand14 + + + + + + + subrlbtable + + + + + + + + + PageFooter15 + + + + ShapeItem42 + + + + + PageFooter15 + + + + + + + + + + + + + + + + + + ShapeItem43 + + + + + PageFooter15 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem5 + + + + + HorizontalLayout3 + + + + + + + + $V{ZRQ} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout3 + + + + + + + + -$V{#PAGE}- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + HorizontalLayout3 + + + + + + + + $V{ZRQEN} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PageFooter15 + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + + + + + + SubDetailFooterBand1 + + + + HorizontalLayout24 + + + + TextItem8 + + + + + HorizontalLayout24 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem14 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout24 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SubDetailFooterBand1 + + + + + + + + + + + + + + + RLBN + + + + + + + + + SubDetailBand15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + test + QSQLITE + D:/Work/C++/Projects/LimeReport/demo_r1/demo_reports/test/test.db + + + + + + + + + + + + tanklist + select * from TankList + test + + + + + + subrlbtable + select * from RLBTable where TankNo=$D{tanklist.TankNo} + test + tanklist + + + + + + + + + + + +// ******************************************** RLB + +var RLBliness=0; + +RLBN_DataBand14.beforeRender.connect(RLBAA) +RLBN_SubDetailBand15.beforeRender.connect(RLBBB) +function RLBAA(){ + RLBN_TextItem41.isVisible=false; +} +// for each 5rows in subDetailBand15 will print a row " * *" as a gap +// the height of row for data and gap is set 4mm +// subDetailBand height is 216mm (50 rows data +4 rows gap) +function RLBBB(){ + RLBliness=line("SubDetailBand15"); + var gapp=(RLBliness%10==0)&&(RLBliness%50!=0); + RLBN_TextItem35.isVisible=gapp; + RLBN_TextItem34.isVisible=gapp; +} +// end mark for each tank , if the data of last one is just 100 rows(just 1 page) then no need print the data end mark +// if the last data is in the middle will need print the data end mark +function RLBfooter(){ + var footerv=(RLBliness%100!=0); + RLBN_TextItem24.isVisible=footerv; + RLBN_TextItem26.isVisible=footerv; + RLBN_TextItem27.isVisible=footerv; + RLBN_TextItem28.isVisible=footerv; + RLBN_TextItem29.isVisible=footerv; + + } + + + + + + + + + diff --git a/demo_r1/demo_reports/test/test2_changed.zip b/demo_r1/demo_reports/test/test2_changed.zip new file mode 100644 index 0000000..a775f15 Binary files /dev/null and b/demo_r1/demo_reports/test/test2_changed.zip differ diff --git a/demo_r1/demo_reports/test/test3_changed.lrxml b/demo_r1/demo_reports/test/test3_changed.lrxml new file mode 100644 index 0000000..b2bef31 --- /dev/null +++ b/demo_r1/demo_reports/test/test3_changed.lrxml @@ -0,0 +1,1907 @@ + + + + + + + page17 + + + + + + + + + RLBN + + + + PageHeader1 + + + + ShapeItem5 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem4 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem7 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + ShapeItem8 + + + + + PageHeader1 + + + + + + + + + + + + + + + + + + TextItem3 + + + + + PageHeader1 + + + + + + + + Tank Capacity Table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem33 + + + + + PageHeader1 + + + + + + + + $D{tanklist.TankName} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + PageHeader1 + + + + + + + + $V{ShipNameC} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + PageHeader1 + + + + + + + + $V{shipcert} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + TextItem9 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem10 + + + + + HorizontalLayout2 + + + + + + + + $V{GB1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout2 + + + + + + + + <br> +Capacity +<br>(m<sup>3</sup>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout2 + + + + + + + + <br> +Diff<br> +(m<sup>3</sup>/cm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout2 + + + + + + + + $V{GB1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem21 + + + + + HorizontalLayout2 + + + + + + + + <br> +Capacity +<br>(m<sup>3</sup>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout2 + + + + + + + + <br> +Diff<br> +(m<sup>3</sup>/cm) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem23 + + + + + HorizontalLayout2 + + + + + + + + * +* +* +* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PageHeader1 + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + + + + + DataBand14 + + + + TextItem41 + + + + + DataBand14 + + + + + + + + $D{tanklist.TankNo} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + tanklist + + + + + + + + + + + + + SubDetailBand15 + + + + TextItem34 + + + + + SubDetailBand15 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem35 + + + + + SubDetailBand15 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout1 + + + + TextItem36 + + + + + HorizontalLayout1 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + HorizontalLayout1 + + + + + + + + $V{RLBG1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{subrlbtable.capacity}/1000.0,'f',3)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{subrlbtable.diff}/1000.0,'f',3)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem42 + + + + + HorizontalLayout1 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SubDetailBand15 + + + + + + + + + + + + + + + RLBN + + + + + + + + + DataBand14 + + + + + + + subrlbtable + + + + + + + + + PageFooter15 + + + + ShapeItem42 + + + + + PageFooter15 + + + + + + + + + + + + + + + + + + ShapeItem43 + + + + + PageFooter15 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem5 + + + + + HorizontalLayout3 + + + + + + + + $V{ZRQ} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout3 + + + + + + + + -$V{#PAGE}- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem7 + + + + + HorizontalLayout3 + + + + + + + + $V{ZRQEN} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PageFooter15 + + + + + + + + + + + + + + + RLBN + + + + + + + + + + + + + + + + + + + + + SubDetailFooterBand1 + + + + HorizontalLayout24 + + + + TextItem8 + + + + + HorizontalLayout24 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem14 + + + + + HorizontalLayout24 + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout24 + + + + + + + + * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SubDetailFooterBand1 + + + + + + + + + + + + + + + RLBN + + + + + + + + + SubDetailBand15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + test + QSQLITE + D:/Work/C++/Projects/LimeReport/demo_r1/demo_reports/test/test.db + + + + + + + + + + + + tanklist + select * from TankList + test + + + + + + subrlbtable + select * from RLBTable where TankNo=$D{tanklist.TankNo} + test + tanklist + + + + + + + + + + + +// ******************************************** RLB + +var RLBliness=0; + +RLBN_DataBand14.beforeRender.connect(RLBAA) +RLBN_SubDetailBand15.beforeRender.connect(RLBBB) +function RLBAA(){ + RLBN_TextItem41.isVisible=false; +} +// for each 5rows in subDetailBand15 will print a row " * *" as a gap +// the height of row for data and gap is set 4mm +// subDetailBand height is 216mm (50 rows data +4 rows gap) +function RLBBB(){ + RLBliness=line("SubDetailBand15"); + var gapp=(RLBliness%10==0)&&(RLBliness%50!=0); + RLBN_TextItem35.isVisible=gapp; + RLBN_TextItem34.isVisible=gapp; +} +// end mark for each tank , if the data of last one is just 100 rows(just 1 page) then no need print the data end mark +// if the last data is in the middle will need print the data end mark +function RLBfooter(){ + var footerv=(RLBliness%100!=0); + RLBN_TextItem24.isVisible=footerv; + RLBN_TextItem26.isVisible=footerv; + RLBN_TextItem27.isVisible=footerv; + RLBN_TextItem28.isVisible=footerv; + RLBN_TextItem29.isVisible=footerv; + + } + + + + + + + + + diff --git a/demo_r1/demo_reports/test1.zip b/demo_r1/demo_reports/test1.zip new file mode 100644 index 0000000..ffc9c6b Binary files /dev/null and b/demo_r1/demo_reports/test1.zip differ diff --git a/demo_r1/demo_reports/test3.zip b/demo_r1/demo_reports/test3.zip new file mode 100644 index 0000000..baf050a Binary files /dev/null and b/demo_r1/demo_reports/test3.zip differ diff --git a/demo_r1/demo_reports/testqrcode.lrxml b/demo_r1/demo_reports/testqrcode.lrxml new file mode 100644 index 0000000..0754937 --- /dev/null +++ b/demo_r1/demo_reports/testqrcode.lrxml @@ -0,0 +1,1156 @@ + + + + + + + page2 + + + + + + + + + + Reportpage2 + + + + BarcodeItem1 + + + + + Reportpage2 + + + + + + + + $V{billno} + + + + SF 138 222 222 8888 + + + + + + + + + + + + + + ImageItem7 + + + + + Reportpage2 + + + + + + + + 89504e470d0a1a0a0000000d4948445200000046000000460806000000712ee284000000e16943435073524742000018956360603ccd00044c0e0c0cb979254541ee4e0a1191510a0c482031b9b8800137606460f8760d4432305cd60d2c61e5c7a3161be02c025a08a43f00b1483a98cdc802622741d81220767949410990ad036227171481d8401733f01485043903d93e40b6423a123b09899d925a9c0c64e700d9f108bfe5cf6760b0f8c2c0c03c112196348d81617b3b0383c41d8498ca420606fe5606866d9711629ffdc1fe65143b54925a510212f1d3776428482c4a044b338302342d8d81e1d3720606de480606e10b0c0c5cd1107780016b3130a0490c2742000072d83684a31f47b3000000097048597300001d8700001d87018fe5f16500000cad49444154789ced5c6d905c55997e9edbdd3343325da112664027aef4507154cc66d7dbb7279329b0a18c30959e94123aa45c3eb2b28beca20691f2831fd2580b9622684a112c579622bab5a4335884892163245d64c7247dfb2a54448d498694c088994039958c4c7fddd71f3977726732ddd31fb78760f1fc99734e9ff39ee7bc73eef978cf7b0e314f10111a8671a988e800ba487689c8250016910c8a481000489e14919300c6491e159143000e91b44cd37c91a4cc075f3652b8aeeb8b48ae03f03111b902407b9d228f93dc03604844062ccb1aaf9fe5ecf05c31aa675c2d221b49ae159196b32a250b004644e40f005e77f512b87acf1292ef03d02922fe59644c8ac876928f99a6f98cd73dc933c52412096d707070bd88dc0560f98c9fc700ec21f9acdfef7faea5a5e5702a952a5422371a8dfa27272797150a85cb45e44a005700689b91ed20c9fb62b1d8d6442261d7df1a8f14138944aeb26d7bb38874b99227483e49f2f1356bd63ceb15e14422a1edd8b1e34a11b95144ae01b0d0f98de4214dd336a5d3e95df5d6539762babbbb97168bc56f8bc8b52e727f06f0607373f3c3c3c3c327eb25580ebdbdbdc16c36fb1f00ee10910b5d1cb6f97cbecf1f3870e0955a65d7ac987038bc4e447e0460914a1a27794f20107864dfbe7d6fd62ab716f4f4f49c97cfe76f1591bb67f0b93993c90cd422b36ac5f4f5f5358f8d8d3d2022b7b9927fa269da9da669be560b09af6018c645b66d7f0bc0bf3869241f6a6b6bfbc2ce9d3bb3d5c8aa4a31d168f4fc93274f6e077099aaf40d4dd36e4aa7d383d5c869340cc3e81791c74464b14ada1b0c06d7a652a9bf542aa362c5e8bafe2e00bba0661c92fb485e679ae6cb55b19e271886f11e117942447a54d24100575996f5a74aca6b9564d275fd5d248771661a4e8642a1e8b9aa1400304df3e550281405905449cb490eab7ff09c985331d168f47c00bb4424049cfe66fbfbfb372493c95cada4e70bc96432d7dfdfbf81e44300a0dab04bb5a92cca7e4a7d7d7dcdc78f1fff39ce8c290f653299cf78417abe110e87bfe79a30f6b6b7b7af2e372097ed316363630f402905c0d6582cf6398f78ce3b1477e7b3ba4cb5ad244af618b54ed9069c1e6843a150f4edf0f994433c1e6f7ae9a59752ce804cf2da52eb9c5915d3ddddbdb45028fc06a74d026f90fca77379a0ad066ab67a5e4de5e37ebfff43b3ad9067fd948ac5e277a056909aa6ddf4f7a214e0f46c4572a38a2e526d3d0b67f59848247255b1587c46457f6259d6f55e910a87c37d00fe1900486e29a57095ef5322f25b4dd3064dd334bde2e040d7f51f43ad907d3edfd533379ed37a4c2291d06cdbdeaca2e39aa6dde9319f8f8bc8bd22722fc98bcbe45bad36a65fb56d3bec310700806adb3800d8b6bd3991484cd3c5b488b2a7740100c97bdec2bd4fb713f0fbfdc38da8c034cdd748de030022d2353838b8defdfb94624484cac804927f0e04028f545391611817452291cb2291c86586615c542b615dd703003eaca2e37d7d7dbfa955d65c0804028f28330944e42e11991a5aa6146318c6d538b3e47fb006d3c1da62b1f85cb1587c0ec0da3af82e77cca124f77965e09a0daa8d0f3af52a1d0098de6336aae0447373f3c38d225301a24e40441af219b9a1da3aa1eadbe8a4fb81296bfe5a1101c981465bdeca81e4b522e2843f120e87df53a58803994ce6d14a330f0f0f9f0c87c34f8ac80d24d7eababec8b2ac71bf22b0ced57db75449c433f4f4f474e472b9954e5c443e5aad0c920b0054ac1855e67111b941445ad471cfa39a227095ca33b666cd9a67ab25e31572b9dc3a34f8ac6b36a8368f016774e1171186c3e1a8cab3a79183dd5c20b9def5197d56d3b4174ae5b56dfb4e1159abf2dea869da31957ebcda7a138984adebfa1e00eb014445847ec3302e853a2124f996f5964824122e168bbd2a7a2c168b7dbfdc3f291c0edfee844564673a9d3e514ffd249f1591f500da0dc3b8545367c90000bfdfff5c3dc2eb816ddb5f71457f5041cf75d64af94c26f37abdf5bbdb2e22ba06c059e9165a5a5a0ed75b412d58b972e50744e4138a4771c182053faaa0d8452aff6b5e1ccfb6b4b41c5647c700d0a591744e0f8f567a6cea350a85c25d5083ae88f82627272f2e975fd7f5808874a8a827db16d5f6a30040b24b53ae181091b7a4b784c3e1d522326d076fdbf6eda5f22b2c07d0acc2bff38a8ba30311b944c39993bbbabfd36ad1dbdb1b1491ff9ee5a7786f6fefbb4b952369386111d9ef212547078b3492530e3b1e565011b2d9ecb700fc838abe40f29b2a1cc866b3b795280600538a21e999621c1d900c6a8e2793e39f329f1011674c9b00b04144ee07f05795f6e99e9e9ef36629431159ada27f6d6d6d3de8219f93ea6fb0a203b74621180c6e2299d234edb39665fddeb2ac13241f55e496e4f3f94fcd2c1389447aa07a19c95f366ac2d0dcdda7111594432a952a2c5ebc38669ae6ff38697ebfff01d7b4f9355dd72f7097b16dfb3a274cf27fbde4e31e563477f7f1b2924a31343434e18eefdfbfff98883ca1382d26f90de7b7bebebe6692eb0180e49b4d4d4ddbbce4e21e563428bb2780255e56520f0281c0bd00f2002022ff6a18c62a003871e2c4cd22e2ac78b737c03ce2e8605c23e92c6a96795c49cdd8bf7fffef48deafa2b46dfbfbbaae2f10912f3b7948fed0eb7a953324481ed5941f2d005c128d46cff28ef40a3d3d3d1d003a2bcd1f0804fe8be4888aae20b95b441ca3d51ed3347fe1253fd5f64e001091437e008754c43f3939b90c1eae2495e1691dc9f5b95c6e15aab0b5ecdbb7ef4dc3306e13919d8a9fe3e7024dd3bee4154707939393cb5c6eb387349296f363a150b8bc56c122d2e4846ddbee0f87c3ff9fcbe55e06b059447a518301ca34cd67006c75a791dcd688033877db495a9a699a2f02380e00ca8fb66aa8e5fbe75d49b119ca38457200c0816a65939cd98317a923164fe16afb71d3345fd4488a724307802b669ec855824020f086884c9bd548be02e0614dd3fadadbdb2fc86432d7922c69919b0d86616c529e98ee06ac26f9782d3c4b41c9ba42f1de4372ea9b1a02701d80b61d3b765c096077358253a9d4a4aeeb49923a80ed22b23d93c9fcaa1eb28661fca76ddbee03f71700ac000011d9303838f83a004f9c98549b1d6ff321409d2b89c800c94915beb116e19d9d9db76632990f673299846559f52ae5df6ddbfe9e1327f97f9d9d9dbaa669538b3d11b92d1c0e27eaa9c725eb4655cfa4880c004a3196658d8bc87695e99adededeaa57c1c964b2e80549c3306eb16dfb0750e313c92742a1d0f5c964b2689ae697494e59f744e46e5dd7ebf2f252a68f6b94bcedce8d96a9ef94e4632ab850b9a1cf2b56ad5af55e5dd707dd4a01906c6d6dbddeadf45028f469924fba8a6ed675fdfe5ac71cd5d685c0341d9c518c9a1a9d2dfc1db36df91b81783ceed375fd8e6c36fb2280354e3ac9816030f8c999bbe76432596c6b6bfb24803daee43b9f7efae9a7aaede9aa8d77a8e841a50300d37b8c90bc0f0044e4c27c3e7f6b3595d482eeee6e7d6464240de0019cb9459227794f6b6beb865226859d3b7766972c59d24ff22957722c9bcdfe72e5ca9517575abfba7f70210090bccf6d549fd6fd62b1d85692ce4af8ee7adc39e682889c5f28145238e3f20192bff6f97c46269349cc6567191a1a9a88c562d7b8f65410910fe5f3f9b4611846b9b2c069b715672940f2502c169bb6909ce951656b9ab6494517a90b0b0d01c9bf00b857457300bedadada1a49a7d315af751289849dc964be48f2dfa076e300f27ebf7f74aeb2aa6d8e9fe1a699e758be99055e7df5d5a31d1d1dcb017c10c03f2e5dbaf457a3a3a37fa8946c39747474bc5f44ce03f0479fcff7d3850b173e95cfe743246fb22c6bdbb163c76a3a1e1e1d1dfd754747c75e921f05b0369d4e97e5ab2e617c1d98da627c7d669ebf2b77d6783cde34972f725deeac070e1c7885e4cdc0692b9a883c118fc79b66cb7b2e612ea5c4e3f126752365310090bcb9d42db892737f269319705d4ee8191919d9e2e5fe64be914824b49191911fbbbcc21f2a77fbedac31c68d152b56fc626262e22300de0be0d2c3870f5f303a3afa336f29cf0f4e9d3af55d001b55746f7b7bfbf5478e1c29b95a2fab9823478e14bbbaba7e9acbe5d600b81040a4a3a3a3ed965b6e7926954acdcb8df97a914824b453a74e7dd775f3e4603018fcd8eeddbb27ca95abc878e45ce472ee2c01d8dad9d979c3b97ee9221e8f378d8c8c6cc1698720907c49447a2bb9e5f6ced5bf12a87830b52ceb4fc160f072007b81d303b2883c6f18467fd5ac1b0cb54e79dea594bdc160f0f24a9502bc73bdb824deb9905e025e3c61f01d11593725f0dc78c260c0e7f3ddfe963c61e04699472f06486e69d0a31737a87fc8b9f7e8851bef3c933207a4f287758e2a9fb7720feb2c037089bc9d1fd6990dce534cca0d3d0a0f9e62029022b94bde6e4f319582bccd1eeffa1bf4c093b2866fa69e0000000049454e44ae426082 + + + + + + + +
+ + + + + + + TextItem7 + + + + + Reportpage2 + + + + + + + + $V{destroutelabel} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ImageItem3 + + + + + Reportpage2 + + + + + + + + 89504e470d0a1a0a0000000d4948445200000091000000310806000000dac44bcd000000097048597300001f3800001f3801933f27f500000b1a49444154789ced5d4d8edcba11fe18b4806920c0f42adb514ee0be8195553601dc37b07c82d7596615cd0de41344ef046e9fc09a13a4e70491b759a98100b3e805b3607154cd2efee8c7eff9f97501448fa9d2c7225564158b255969adb124adb3ac70aafa97f3f9b8682337faae48cd55a27596e500f6000a006f02ac9f011c5ecee766568337faee68b21291f25400de8fbcf504a07a399feb490d1329a54a003b005b000fecd233801640adb5ee2218058cf24fa146c2574a59990a00b9239b95ef48f7b7b146988c05800dae27aac53b68ad0fa9c207c6ef64f108b38b8269ad4797bbd5aabc5badfabbd54acf28c7bbd52a1fdb3675ba03a0134a1dc1aa1271a4520878fd488c23806d40beb1785d088f308b11e3a701d4003641cc090a54cf541e5efabbd52ad8694181c60e6cf30b2ad1149cdef7e097948d29d014bc634891fe8011b4ceb21ac04f63ee89d03d80769d65db44fe86ee1943efc9c47caf740fd32f899e27621e94521ba1ded74e8cdec0f8bd22ad5251d659b6c3b20a64e91ec0619d65db97f3b9f731910d971cf7cf00f65aeb8efc875ae0ab616c7c0a3dc1f85431ea84ba134c7f2c06c7c9019400de0af7bd514a6db5d6ee2ed68ec7338cfc4756b781f169de0b78f774adb11534911e04de670095f5a7689c6b5c4fd63dccca7d4d89266cb3800f142b5eb3434bf101b20fb071f836904dde95c9806cceaab1269ee1ed0004fd3c7a1892c9b86a1746e96278650a9ea7af57e317c1144d5aaa399334d3d209c0079815610ebd17624c9ca46bb5d6fa62f5a27f3702ef3737695aebe86e466b5dc38c590a5e9380d760bad96bdcf1639812e552655489d659b6817f1b7f0250bc9ccfcdcbf9bcc37c452a03d72425f605315ba1ae1829cbb7a4a583af5e37204292df048f3f05c1dc02485022841f6ced44a3bdce5722bd27a5bd20f275c69034a8f914819626a5540ed92f6a27e26d6076ad2e75917f0340a99492ee2d853aef0291a24445e09aa8b13329d45e2ae5429de4548aed2ba52aa5544ba5524a95bed9398648812407ffab4e083c7af05a5cafd227a19d03aecde83d8096ef5e49a92aa1396f703865775604aeed70b9fa24474c03b415707ccbff16f20c4e0d1948f416972b85fdbb564ad55aeb2a06403b9cdca92e20af404078b5f745d643787bc957544aed01fccbe1bd07f04929f51566dca51df86350c9137666b15d55318237a5b49e5d88b4e3ea90be3bd3026623f1454a30f046b86d225687488439b0b3f2052e771377733ebc7d4cbea0398bec962c55ecefc704fea9d40a750f30cbf116789db12dd20392f90439dec0172f19474f3091e5a59cec2718850c5a03da79fd19693bc423120294a322d61e7abbceb23d00bc9ccf15809f17c094c86793df00f8b7524a03f88270268144279807f01166123cc238915f03f7fce47148c7d05b0047327d4b90c50b6e6e48ee03d226da5b005d7463b38039b365cbee69963667b414d718b714c7cc592c9057483854bc87bb2467cb4a4cd632c1048dc1bb0a5cea21183af6ecd196c22bdf824ad40714e978b75a55f41bc3899dbca7285229d41d637df5b4e73bf4f52abb072787dfb7e911f1b346e269778210bfd48fde2a3129d971ac8c294ad4ce50a4829467c3ea62ab54d491a307db381dee6196e902c6b97607e1304589a8bd461ad48958be638fe06a14c02b3c78fb943e403e0e9278af30c7285135d21cf577ab55708770173e87cb6332250cec4e18806a069ef8e067e0750bcb27ad1e0787475a85c4559f26a124a33811531ceb268187d33d804feb2c3b48d1674afbf03975cf2fe77337b23d894aa1ae9d81b77450b55b184fda91b9324b632eeee4b48931a5600248d89dd1437d8af109f40e40b7ceb2da860ae8b70ddce38d8aa612ed3ede39d5273d2122cca810eaa68c89a57cc6bd124d3d5cce97683c758b3ff54cec1e2602fa659d651a660b1e5a859a89ed00783d47923044e5a4638318660939323c29bea3946a201fc14c3a440de459b9f24971a132002d29a62c63aaddbd5b362d3618228838912d9c3c1b9865b6847ff721ef2ac8cebb78ccaf9272987cbb1f9b34b687b31d66f2b523f02ac2ab3c78bb089e7b8faf2f0d1f1fc26e3cbcd31c6b479152b6e8534a99e840568141f315ef6e6f0296d7218d3cd058b97258312e26e696d6330183f744fa307d8bef28d1e61b28529202d140f86688af3411bc290f488c37cd5022f12c6e069eb86d9f387ebc789fd3a8630fca812eb0ccd1c609c087917e503e82f7516b5d8e1128813e6aad7dc71d537670f6fc6c6a52998427e56a0300683c3e8ec43c01f8a0fdd98ee356226755daddad56ddc4d5a79d120f8259e27d11553b0b1b448e3318de01f177b0ba14cc04d95c198b08de1e69abd16b9075c438e62443e808a4a33e45c772d66bd41407b2394529079f3f03685ecee77672a344c2a160ef9b8113f100a0d3296f805e63e59057cda978deecc529780e768e6b5947e1ce7e17df12bd56bd85dcd97609c5b9d1f7498b29d18d7ebfb4443ed18d7ee77453a21bcda69b12dd6836dd94e846b3e9875622a554ad94eaa9cccd89be91877e5825a217f27e82c91ae8f16d5eb4bc11467c5ae6374876e5790e1c55dc68018a2a11fb06e1510fdfb0a9e832afdbc3ccf6ff01f823cc49729bc0ff5f007ff2f05fd569e70d5492cfe63bf5a0503d8644b29eee6da4282c7b6dd8bef4d868ad0f546f736a6a3dbc41ba813966d8501b47e2cbe9fe4a6b7da44870097a4191cadef260881237f65cca91e5f59aaf5ee8cb86f8eca43968ad6baa2f597f3a92b3a3fb2a8b4bf7771872b0f6d4cfd61dfb574a386729c14eafa9f3afe72b546713e37b0cf9c8967fcbf85d8c8ef11f04fed6a9eb1cd90a5c9ef568f8f36caece965cd9d8df3b5ce619d718f2b63bba5639f83dfbcd21a75efc8df11dd9df563939863d1393ea7db9d1eed95d2bd473acadbecc66e8d9f58e0a3f5f93b303129468c340720c4a65c1ed8cd5a0834ac6bfc175923bc790f8dd87c3316a4736cbdb414eead20824c063488dd8d3bf6d3fac427345e8e877e7e0f734065ce9f6cebd15fdfb1fb6dfeee470f8774c465eef3d64759ecbd6539fb38367de4f8b6fc7c1f6c3cad986c632ea586b93a6603f2bb2c3b02436f45bb0ba9696c827c65fd0df8f02bffd28d433bb66f96dca02c7b06d5ab207ae0f00fea3946a7c5fef504a154a29cd4a85c1a4944aa9168359dc020099529bf6f200e0b3be7e4df9a8b53eeacbe4f60b19b4d61561fdd5e2537bd6643c505f6c0aeb27fa22c916e681dafa2facde25db978373106debb939b7ed160e464bbf96af71ea454add9dd9c129a83c3341f843b67c0dbbf60ec3370739ff893d10cb5fc2e4337f76da7c47fc7c7040f7ff05e6419f603ec6d540a61e46b96de93c7cafd748210b76ad98f08999d857cc9e003c91126e6126cf579871b093d2ad771599934fbe4d8c67721644cc9c0926edd5ace03217e710e0af22fcb9c36f97556e8fedd25a62704c37184c895da2ad1f5021b0043be6ac61729720b3812145b565b2d70ebe35e9dc77e1e6ac65edbdfa7fc4bf014d2a6bba5cec483d1f0b6b8ab9afb38563e6a8cd963f038ee9982fb75d712c9394c8b1a31cbc86f3e03dfcb6530dab2b1d7eeefcb9b69bfb22af1d84fcba7495d271a6bcdcd1e43e0c77ba7338be092e7d22de7e8f61e7e62ad10672e25a05f9addd16d7138c4f14f761bbd89dc3e7ca69c77996128d8913d524a4f51580213b0eb85e6239ff91d5751e7e3b7be1d86e7b2f6fb365388f183ebc70d0c3d6b7757eaf489bcf166fa96deb7fb454b6847d24793aa5d4df611e76eef4b305dbbe6b130ee8e87e2b27a8bec0b0dde6ed6d889fafac4da05e1a0b8edd6318ff82fd370c5691f97f5be17e12c8c56d9ddf0bbae5134d2472ccff0993cb5dfdbad2fcbaf4c31e7bdce897a3db4a3491586e72a767e639ffd6e9ffc594b128a1b882550000000049454e44ae426082 + + + + + + + +
+ + + + + + + ImageItem16 + + + + + Reportpage2 + + + + + + + + + + + + + + + +
+ $V{procode} + + + + + + ShapeItem7 + + + + + Reportpage2 + + + + + + + + + + + + + + + + + + ImageItem1 + + + + + Reportpage2 + + + + + + + + 89504e470d0a1a0a0000000d4948445200000091000000310806000000dac44bcd000000097048597300001f3800001f3801933f27f500000c1649444154789ced5ddd71e33812fee68aa8129fac8dc0bc08cc8dc07404d644604e04a38bc07404a389c07404ab8960a8084e8a60e9084e7ee2031e7c0f68984d087f94a8d9dd2a7d552c8b20088060a3ffd04d7f7a7f7fc739910a9103c800e4acb800d0d2a1d100683b2979d905ff007c9a9a8888680a000b00b74734f10645506b00eb4ecafd6483bbe02c9884885221e6004a004b00d7273738c40f2862aa276ef7828970121111f12ce9b89a6a500ebc02a82ec4f4f7c3d144940a51e1d7108f895700652765f38bfbbdc081d144940a9141e92b37e718d008fce8a45cfcc563b8004032f6864eca361522968836504a72038fe5950a51a0b7e01608eb556f005631e3bde0fc88e644a4ffac3a294b3a5f00a87128ce36547eb46545dcaea4c324a81d800511734ebfabc836b340b53d1dbcdebe9372eb69a70530a7c38683c5438bc685ad6dde62c76f8c551b3c19d4026de958f37aaceec2d2c741dd03bcbfbf471db324a96749f23e4b92152bcb6749b2a5f2669624456c7b23fa2d6749d2521f352b9fb3be83fdce92a4a2babea3992549364b923d2bdbcf9264cefadc1bf764749fafdd7696244b3696d038d6b324c98f19bf316fe658f9511d53d776fc2b40d99a4a73000f74fa3515a20400a2d002c0ef9d94c53994dd4ecaba9332a33e4a76a9462f5227136dc435787b57002afa5d61c8799f229da3d700be913112837b000dcdfb6810d77a4684d133a6ae0bb13a91f99256a910db4e4acd7afdec6e02186c7a0935d11a37a910e548f3ffc952d6d2df1586a2f46b2ac416c05756d7a7976de86f8ee1cb794c85b0dda3c7c2fbd4c4eb321e5e30f4f8839d9796ba4b28915ba05f14a072b36e4dbf0bcbf5434488812cc43a7fe5e1194f3b469c45f4b308888e92d56d6c6d93b837c54461b6e57b368f38738af05992ac8cba73e3fa7c9624996decbebaa788b3ca51de44dc3b39487cec2c97ae49d99faa9f357a8e626213c3f5887b5623bacd46d4f5c154cc1baecc7752ee99186e2d7533475d2bbce28c69ec26bc26b6617d446faa527fa61eb0b758072b28396ea284f261c5f4d598659d9485a5bd3f2db787593c3e74c92ab26e66a9eb226240a91426b12c69ae1a008facfc06c0cf54089bd7bf46afefeaba7fa642eca0ac715ed78e08cbc8c6ca5796ba055915b6fa7b62b199855596749fcf3ad8cf947598b17b5b47ddb9e35982d68de3be7a167e76532494d4dfd628dfbfc75967fa588c193f17711691c68f2d9f27cb333aeb1e23ce5ce261c085c85afb89a1b2cb7105a59472e53807f03f288e720fbf757005b55a38577071c2a9bdd89971eef207713c437102d3211bc5c1a038fd1712a947a1937209e033eca2ff066cfec8eafd0c3be7bb4180bb8788a8b094edb878223dc4265a6ce08412f3327c703d581179ff9de518809ecd0c677938c2f4d6445147d68f1123ffc1e1f80762bf9372dd4999d33593401e2c750b00bf43454e70dc723dc9845327a289b27107f3e5d5963aafe815b639c6edb3ed30540c3358b641c863bdb3b45dc47412e9d37271bb55a01ffd0c2d28362ae0bdff0d8a00f4733ea642843cc5db58bf1cd52b68bbea435aa4421cf8f6a8cf452a448d21a1653854c201f8156bd76afbe894146893d0be132b05ab97414dbc4bdc69fce670f9e750a2e0c1b8d4e09088ae5321e6a706b39163d0b587771bf04b2dc7385e3b29f7e4fbfa8315d770bf032fc817b58e18434baa486ba91b3d7f3e22ca6c858181bdc2628d90f85b844c70d78ba7d551d2eae0683074006ae408b8206cd619d4ea5e12d19bfacb1d94dea75111b79824f2b293729d0ab1412f3e6f52212acfbea0cd3ad316660ee520dda1971c0586a2f995b87906e0d9a89b61b860df7cefdd474485a5cca6a471cc690056367c8aa248f7374651eba81a2422f843772b1c6e6f34a9104fe84de76b2842ab02fd8c4189a1f1e0136b312ac28da75e7942dd01a2f6ce184cca6f8df32b286795b7d3a9e0d1198e56da69650e56217add6845e71a8f3e85732c8863bf18c5f5114d35188e936307e08e2dc8d653f715c0e7d0e2778682a442b438d4099e4cf64a62c1b6aabde1aca44f71f1804eca4f746d0eb5c27328c2ad5c04930a617b00db3833fcba50106b38076ba3e0e79cc33a1cae5bf45cde0ba3adc2b8ec8be9ca317c866827b18f88c6bc9c2ddc7e9e1d5438ab19bf52c04d44350eb941e650ba5b4410fb05e7c358717600a2d61c6e17fd0d80ff8e1471a6157605b7a5d28e68f78233607478ac0d444805114a05bb69fc9c0a814887db1be2e35ba2cc60162dd968964fa6700ea5ebf8ac2cdbfe9daf2fdd26d0ef674d0636ee660cc7d5d9395373691f11d91c795e859508a4f610d32ad22c5e62e805df794ccc5862cb40961589d216ea45687dce67ad6d10ef0907d43cddb2dfa3c0081e9d9415d36d3831df02d81b7a8f93d8b9da910a91b130e7507cf49d67ee01f889c8f6a2a3567d27654dded11586a2e90a6a729c1100ecfe16946e3d51ae59c17e3f62287e5bf63b8322fe37f4ae8a4939490432a831be11d7f9d01d532178bd7b0c1db84e626709160f505b377acfec648c25a2e85545dca6a415c057f90211e1ac44fd8daf8e27e0bd8d182247cd7e975013dda01fa793882256f24fe3c5032a1ea970dd403e292d094a28e2d8b3711450736a6e117989bd93b2249176cfca3e05c61f844fb10e3ab852218a0885b91939a631c81ce5ed116dfda44373ce7b5676d4f6c389a8e96f0ea51adc4371a702f6e79e232e96aa84b25ecbd386d7c3c7895cb2d5dcb47ba6bd2a1777c98e1c5b0c0a5be18909035cccb936a1390e76ffe9be6ff49bc72c6bc46c953400fe4d62a860e59cab8f4e2025095119ca7f085ee36034114189a3c628fbc6f2d03e1467da5434cdf529f58bc25216da9a09a1865aad5c817582444f89e162c9ac9515824e3cbeaf4709029ac36c3a290bda1c7e0429bddae1eb5b3c16a7f006f15f6df1aa314e22a215f08a430b6b017b70d52d1dcf161d80a3f65d8c05ad249b2ba139b1e90ce33f89537aee79c070213d21bcdfc6db6ad9ef9c8821a373bd099b036a4e46b813b66c1c73f489a83fa038548e48c322e46c6c2c65d71e853684ef13fa4c4a47793351fb7f25eed0efa1b5acfc0a8ac0f4e2b9a1732d729d1ca35379815c89de77526a9fd992da788322ac124a1c1754c72b7e4344e452d44a1a5803b5b25c1b781c2f669cd1b160e9c126de4e8d1460882676fd82f481a19e74c7afc538fa685e5b7e4eed7e31aa6a42fb0e158bd5c48e598344a3e67c7a7b4a13e3634c14a7d7634d312e3691f640b12e2d39c3565062aec0501c6ca026a33e51d935b1405cd4e53168e96f50f9258e5c582e65ec77e9e0dc75ec0627f5b544afacff80b2d6f4cbfe0ada3188e0f41fba10e9b18fac7c4f44c5c7b52631e99c8f986d8f1ac3f4138d0a3d47da53bd3aa23dd03d0d80d13e0ae2422eab22d6daf0618c395fc03e371ca661a1d120ce15519072ad2db12f50447a0ff5bc15fa08cf1ae1f167f4778e6152c32d8c0d71c235fa8c602b4e21a2d1eefc3363135885a1f13e519d92ce1fa156fc41003c430bfbc6f31cfd4be7f1e61c3166be6e4b8ffd0bdb0d0080bc9372459c6e8d40a60b59915aaa94e81dabe638b5637341cfd1f8da0d121159692f18aea85704a2ddce058a475ee070d554815bf504bb5ede1a879fcab9875ab90bdb7d7aafd02c37c25ceab11b9ef4b2b5fea889710315135dd0583600e63417b91e3fa9198da5cd0643abef0a2aa6fb098ecfc7d0d6d31c218e1999ffce3fa9b29fb1cf9ecc54fe7819d3ce89f9f74ba38c27f33511f7ebba7cec0d4bd0e389928b59922c8d67f6e6a35b1239a33ecb12b8774b4988bec4ced8e4cd156bb3f1247fda0eeffc8e7938fdd24a56b6600fd852e6a7375bf208e2e1d9998d91b9a98920f88269125ba34cdfafbfcf636686eaef2f7927714a2262f77f8c65d6670aaf68ccaee3203bd77896353b9fd3dcc61068ed1befa86f36f2ec03e63535f186fe1bd4a3ada5b4cfff2fe10ebb5d74526e75ddd85d7e0a8168d9790ec5aeb7a0bc2a47f4e4a8142423c4f51ff981f774f80188c657f7980f7fea8dbe58afaefe6e630b7f76863e62f783c664945e70461c1bd9b8453c11e9ed9029f18611c975179c17a363ac3bf5bd9a25ecf9ddbf02dfa182f6a7f24c5f70224efeb70c648e96989edb9878814a1d6acfdccf052331d93f8861f9f2ae2d8963b00379c2a74a57be607a4cfe5f8680c19e5281b8c02e8d1d94bed5406532b4930fee82c97116223261c9eacca12c35cd5d46a5e45cf0f7c2ff01d81a47995330759a0000000049454e44ae426082 + + + + + + + +
+ + + + + + + TextItem1 + + + + + Reportpage2 + + + + + + + + ZJ 第1次打印 打印日期 $S{dateFormat(now(),"yyyy/MM/dd")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + Reportpage2 + + + + + + + + 1/1母单号 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem3 + + + + + Reportpage2 + + + + + + + + $V{billno} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem4 + + + + + Reportpage2 + + + + + + + + $V{Sjr} $V{SjAdress} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem5 + + + + + Reportpage2 + + + + + + + + $V{Sjphone} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + Reportpage2 + + + + + + + + $V{payType} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + Reportpage2 + + + + + + + + A22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem9 + + + + + Reportpage2 + + + + + + + + $V{destTeamCode} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BarcodeItem9 + + + + + Reportpage2 + + + + + + + + MMM={'k1':'523','k2':'523ML','k3':'017','k4':'T4','k5':'SF7444437951481','k6':'','k7':'407588b5'} + + + + sdf sdfsfsdfserwer wesf + + + + + + + + + + + + + + ShapeItem9 + + + + + Reportpage2 + + + + + + + + + + + + + + + + + + ImageItem9 + + + + + Reportpage2 + + + + + + + + + + + + + + + +
+ + + + + + + TextItem10 + + + + + Reportpage2 + + + + + + + + 1A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + Reportpage2 + + + + + + + + 已验视 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + Reportpage2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ImageItem12 + + + + + Reportpage2 + + + + + + + + 89504e470d0a1a0a0000000d4948445200000046000000460806000000712ee284000000e16943435073524742000018956360603ccd00044c0e0c0cb979254541ee4e0a1191510a0c482031b9b8800137606460f8760d4432305cd60d2c61e5c7a3161be02c025a08a43f00b1483a98cdc802622741d81220767949410990ad036227171481d8401733f01485043903d93e40b6423a123b09899d925a9c0c64e700d9f108bfe5cf6760b0f8c2c0c03c112196348d81617b3b0383c41d8498ca420606fe5606866d9711629ffdc1fe65143b54925a510212f1d3776428482c4a044b338302342d8d81e1d3720606de480606e10b0c0c5cd1107780016b3130a0490c2742000072d83684a31f47b3000000097048597300001d8700001d87018fe5f16500000b7849444154789ced5c7d6c55e519ff3da7a72d0cae18b145a3ce158675630c9773ce6d6a07bbba0994b664018b64a292b018173fe69cff6cd9b263b2b06c995f53e2dce6c244825aab0b8501827207968e7bcec934c8b403da2c1a3fdae8ecdad20bbdf7fcf6c77d2fbd857edc8fd302865fd2dc73def39ee779dea7efc7739ef7795ec12481a45896358fa401a052442a49ce01304344422443002022bd247b01f488c83192ed00da45c4731ce7b0887032e49589246e18c60c1159096031c91b00941748b24b44f602789564b3e7793d854b393202578cea194b49ae1591e524a79cc1542401a083e4bf017c92d14b90d17b668ac835006693d447a01127b95544363a8eb333e89e1498626cdbd6b66ddbb68ae44f01cc3fed713780bd22f2baaeebfba64c9972241a8d26b2a11b8944f4783c3e3791482c227923801b00949d56ed9088acafafaf7fd1b66dbff0d604a4987038bcc4f7fdc749566614f78bc8cb22f26c5d5dddeb41096cdbb6b67dfbf61b49de4e72058069e96722d2ae69da0f63b1d8ae42f914a498aaaaaa2b93c9e4a3246fce10ee63008f9496963ed5dadada5ba88063a1a6a62674e2c4891f007880e4ac0c195e2a2a2afad1c18307dfcf9776de8a314d7325c96700cc50453d22f2507171f1efdbdada06f2a59b0faaababa70e0e0ede45f217a7c9b3ce75dde67c68e6ac98dadadad2eeeeee8749de9d51bc59d3b4071dc7f9281f218282655997f9beff5b00b7a6cb4464435959d98f77ecd87122175a39292612895cdcdbdbbb15c042c5f4534dd3ee88c562db72a133d1b02cab81e4469297a8a2fda1506879341afd2c5b1a592bc6308ccb01ec825a7144a44d446e711ce7bd9ca49e2458967515c9174856aba2430096789ef76136ef6bd954320ce3721169c5d032dc5451511139579502008ee3bc5751511101d0a48ae68b48abfa078f8b71151389442e06b08b6405901ab30d0d0dab9b9a9a4ee62bf464a1a9a9e9644343c36a11d90000aa0dbb549bc6c49843a9b6b6b6b4abab6b3786e6940daeebde1384d0930dd3349fcc5830f6979797df34d6843c668fe9eeee7e184a29005eacafafbf2f2039271d4af6f4b05aa8da362a46ed31ca4e7909484db415151591f361f88c85c6c6c692cecece687a4216919b47b37346544c5555d5958944e26da45c029f8ac875e7f2449b0bd46af5a65aca7b745dffda4816f2884329994c3e0665416a9a76c7e74529406ab51291b5ea76866aeb1938a3c784c3e125c96472a7baddec79de9a09921100609ae63d48f96bbe22223f775df7f989e497866118cf4159c84545454b4ffff01cd6636cdbd67cdf7f5cddf6689af6e024c8d843b201c09701dc3b09fc0000aa6d3d00e0fbfee3b66d0fd3c5b01be54fa9040011796832be7deaebeb378bc8db0040f27acbb2ae9b689e00e038ce4722f290e25bb96ddbb65599cf4f0d2592629ae65b4859881f17171757e4f2956c59d6f524ebf294b38ae4b7d5f57e11d99f0f1111d9ee38ce816cebabaff24ee5b238e4baee82b427f094cbd0b2aca51832f91fc9d5754032acbc77856221c985e3571b11dd00b2564c5b5bdb80699a8f00f83580f94a073b808ca14472adbaec2f2d2d7d2a4fc1ce3ba8b6f603c37490528cf2e62f070011692ed4f32622df45cae538e17f8a57de686d6ded15919795dccb0dc39801a8a124222bd3de7c11d954082300d0342d1e8bc58ee7f28e6118ef00b81680e7799e99ed7be170389e4c267315711844e45992b7919ca2b67bfeac0100c925aa4e775d5dddeb0571c95f3851bf93b2a19609d5e66e604817ba5a8d22aacedea0bcf900609ae633004ab2acfe45f57b95699ad9f4da93aeebaecb4fb2e1b06ddb370c632f805500222445b72c6b1ed40ea18804da5b48ae06f0851cdf9905201b6bfb3880401403a4da4e72158072cbb2e6e96a2f1900a0ebfabe7c094f9f3efdc9dedede3f00c0b265cbe2b1580c22d24e72ea38026924afc9287a371b7e2232a078ed6e696999a664c8fbeb5fd7f57d838383000092861886b11ec04f4424317dfaf4a9d9ee100681c6c6c6a2cecece8d24d7008088386565650b73f5e807814824a2f7f5f50da8ede05f89699acd24578848bbebbad74e9620e170b822994cfe0e407d66b9880c90dca769da1e007b62b1d85b9335219ba6f92ec94a11795957a118207964a2191b86512c223791fc9eeffbb760c8f23e86d4aa1056436f89effb4b94b0dda669be26227ff57dbfc5f3bc9ccc805ca0745049728e8ea19dbb4f8266148944a61f3f7e7cbeeffbdf8432f5495eac84808824486e08854276341afd2c1c0ecff47d7f31805ab56c96032823b95a4de4fda669b60078beacac6ce7040cb9b40e66e82aec022212d83eb3699af703b8afb7b7f74b18d94bd80de02fc5c5c54fb7b5b51d4d17c662b14f006c01b085a454555519246ff67dff7600970398a614b4baabababc7b2acbb1dc7d91c94dc2a1c052212d2d3914ce9f89420505252f2ca8913277e890ca588c861a4b6617601d8eb79dee0384212800bc08d44223febebeb5b86d4f2bc8ca42e2203baaeef084a6660480724436704e4048103070efcc734cdef93bc5ad334afb4b4d47be38d37fe9b2f3db5526e05b0d5b2accb48de21226fb5b5b57d1a9cd4c3a1abee33534442f912314d730bc9e59965646a21f17d1f030303300c63c4777385effba77e47a22922bb5dd7cdebc332735ad155f799991e52f980642972b470270a2385b6e5f0eea9694587f27b0298992f4111f947ba874c2444c4247995bade33cabcf8cf0258a475d0a3ab90d1052232375f6aaeebfea60061b286fab85c030024eff53c2fabcf876c2122d7a8a1744c5371b400302712894cc8647c3e40b57d3600906cd701b4ab1b3d1e8fcf05f04e50cc0cc3f82380ca712b9e061189bbaebb382839b2413c1e9f9b1136dbae8b88979e1f1289c42204a81800df0090f3724472c2ccfed1a0da0e0010114f771ce7b0699a5d00ca551cedd3413355c1ca7fcfa2aa01e0d2a0f96703d57600e8721ce7b02e22344d732fc95b00dc60dbb616a4174f31edf23c6fe978f50cc3d80960c978f582866ddb5a4b4bcb0d0020227b4584e9ed9357d56fd9f6eddb6f1cf9f5cf2f549bd3d1e6af026afb8464b388c4d5f5ed6747bcb387749bd5906f06943fc4f3bc1ec330b602584572454d4dcddd4146758b48495555d5b893703299bc68320cc54cd4d4d484e2f1f80a0020b9359dd172ca6e11918dca193c4d85a10766b491bc2c9148b841d10b12aaadd380940ed2e5a7b6681dc7d989542c2c003c505d5d3da613fbf300d5c607d4ed21a50300c37b0c4dd35c4f720bc959838383770178b410c6454545f702b828d7f7488eb8b548f2ebe9eb20fcc02aff6096a2b73e93e630ef9aca39fa978a91e9d134eddab3951f609ae6b30084e4ff000c000863288214a15028148d46fbf2a5aff20ede452aceb0bdbebefeab9966ca590f351b0da669ee26f99d919e89c84ed7756b0ba19f53a81900c462b15d22920ef1bcd5b2ac864204c81724db4e2bf245e43d007f9a3a756a4126856ad3ad402ab769a4c4af0be1acb984b31e3c78f07d11590700242f21f942636363b69bf3e72c1a1b1b4b5446ca25002022eb46cb821b3564de75dde68ce484ea8e8e8e4da747369e4fb06d5bebe8e8782e232a7cc358d96f4563115bb060c16bfdfdfddf0270358079478e1cb9f4830f3ef85bb0224f0efafafa9e00b056ddee2f2f2f5f73f4e8d151238ec654ccd1a34793959595af9c3c79b20ec02c00e12baeb8a2ecce3befdc198d46273dc0271fd8b6adf5f5f53d9191797228140a2ddeb3674fff58ef6595e1964ee44ae72c017871f6ecd9b79deb49178d8d8d251d1d1d9b900a0882887492acc926cbed42eadf28c87a32f53cefc35028b408c07e203521937cf36cd9396341258bbe99a194fda1506851b64a012ea4178f8a0b09e9a32088230c1e23b9f214c173e30883e6a2a2a2fbcfca11069918e3d08b6611d93441875edca6fe21e7dea11799b8704cca3860f607eb1c53316f631dac3317c01c9ecf07eb8c84f4514c2a9e2e82008e62021015915d3cdf8e621a0d3ccf0eeffa3f6d264b563a5a99c60000000049454e44ae426082 + + + + + + + +
+ + + + + + + TextItem13 + + + + + Reportpage2 + + + + + + + + $V{Jjr} $V{Jjphone} $V{JjAdress} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem14 + + + + + Reportpage2 + + + + + + + + 托寄物: $V{Goods} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + Reportpage2 + + + + + + + + 增值服务: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + Reportpage2 + + + + + + + + 计费重量: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + Reportpage2 + + + + + + + + $V{Sjcompanyname} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + Reportpage2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + + + + + + + + + + + +
+
diff --git a/demo_r1/demo_reports/testqrcode.zip b/demo_r1/demo_reports/testqrcode.zip new file mode 100644 index 0000000..c9c79d9 Binary files /dev/null and b/demo_r1/demo_reports/testqrcode.zip differ diff --git a/demo_r2/demo_reports/Facture.lrxml b/demo_r2/demo_reports/Facture.lrxml new file mode 100644 index 0000000..9cf6c0a --- /dev/null +++ b/demo_r2/demo_reports/Facture.lrxml @@ -0,0 +1,2893 @@ + + + + + + + page1 + + + + + + + + + + ReportPage1 + + + + PageHeader2 + + + + HorizontalLayout2 + + + + ImageItem1 + + + + + HorizontalLayout2 + + + + + + + + + + company + logo + + + + +
+ + + + + + + VerticalLayout1 + + + + TextItem1 + + + + + VerticalLayout1 + + + + + + + + <b>$D{company.type} $D{company.nom}</b><br>$D{company.act} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem11 + + + + + VerticalLayout1 + + + + + + + + <table><tr><td><b>Adresse :</b> $D{company.adress}<br> +<b>Télephone :</b> $D{company.tel} <br> <b>Fax :</b> $D{company.fax}<br> +<b>E-mail :</b> $D{company.email} +<br><b> Site web :</b> $D{company.web}</td><td><b>RIB :</b>$D{company.mobile}<br><b>CIB :</b>$D{company.facebook}</td><td > +<b>RC :</b> $D{company.rc}<br> <b>AI :</b> $D{company.art_imp} <br> <b>NIF :</b> $D{company.mf} <br> <b>NIS :</b> $D{company.nis}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HorizontalLayout2 + + + + + + + + + + + + + + PageHeader2 + + + + + + + + + + + + + TextItem28 + + + + + PageHeader2 + + + + + + + + Le : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem2 + + + + + PageHeader2 + + + + + + + + Facture N° $S{fonction.STXT($D{doc.doc},2,500)} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem34 + + + + + PageHeader2 + + + + + + + + <table><tr><td><b>Client :</b></td><td> $D{doc.cl}</td></tr> +<tr><td><b>Adresse :</b></td><td> $D{doc.adr_fac}</td></tr> +<tr><td><b>Téléphone : </b></td><td>$D{doc.tel}</td></tr> +<tr><td><b>Fax : </b></td><td>$D{doc.fax}</td></tr> +<tr><td><b>Email : </b></td><td>$D{doc.email}</td></tr> +<tr><td><b>N° RC :</b></td><td> $D{doc.rc} </td></tr> +<tr><td><b>N° AI :</b></td><td> $D{doc.ai} </td></tr> +<tr><td><b>N° NIS :</b> </td><td>$D{doc.nis}</td></tr> +<tr><td><b>N° NIF :</b> </td><td>$D{doc.mf}</td></tr></table> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BarcodeItem2 + + + + + PageHeader2 + + + + + + + + + + doc + doc + 1 + + + + + + + + + + + + + + TextItem29 + + + + + PageHeader2 + + + + + + + + $D{doc.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + det + + + + HorizontalLayout1 + + + + TextItem14 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.ref} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.des} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.qte},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pu},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout1 + + + + + + + + $D{stock.tva} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout1 + + + + + + + + $S{numberFormat($D{stock.pt},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + det + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + stock + + + + + + + + + + + + + PageFooter1 + + + + VerticalLayout38 + + + + HorizontalLayout4 + + + + TextItem4 + + + + + HorizontalLayout4 + + + + + + + + Total HT : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem3 + + + + + HorizontalLayout4 + + + + + + + + $S{numberFormat(SUM($D{stock.pt},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout5 + + + + TextItem5 + + + + + HorizontalLayout5 + + + + + + + + Remise : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem6 + + + + + HorizontalLayout5 + + + + + + + + $S{numberFormat($D{doc.remise},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout6 + + + + TextItem7 + + + + + HorizontalLayout6 + + + + + + + + Total TVA : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem8 + + + + + HorizontalLayout6 + + + + + + + + $S{numberFormat(SUM($D{stock.tot_tva},"det"),"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + pied_taxes + + + + TextItem33 + + + + + pied_taxes + + + + + + + + $D{taxes.taxe} : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem38 + + + + + pied_taxes + + + + + + + + $S{ +if($D{taxes.taxe} == '') +ReportPage1_pied_taxes.isVisible = 0; +numberFormat($D{taxes.valeur},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + HorizontalLayout7 + + + + TextItem27 + + + + + HorizontalLayout7 + + + + + + + + Net à payer : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem13 + + + + + HorizontalLayout7 + + + + + + + + $S{numberFormat($D{doc.ttc},"f",2,"fr")} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VerticalLayout38 + + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + VerticalLayout2 + + + + TextItem30 + + + + + VerticalLayout2 + + + + + + + + $D{doc.obs}<br> +Arrêter la présente facture à la somme de $S{fonction.nombreEnLettre($D{doc.ttc})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + HorizontalLayout41 + + + + TextItem41 + + + + + HorizontalLayout41 + + + + + + + + Taxe +$S{if($D{taxes.taxe} == '') +ReportPage1_details_taxes.isVisible = 0;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem43 + + + + + HorizontalLayout41 + + + + + + + + Unité + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem44 + + + + + HorizontalLayout41 + + + + + + + + Contenance + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem45 + + + + + HorizontalLayout41 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + ligne_taxes + + + + TextItem46 + + + + + ligne_taxes + + + + + + + + $D{taxes.taxe} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem47 + + + + + ligne_taxes + + + + + + + + $D{taxes.unite} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem48 + + + + + ligne_taxes + + + + + + + + $D{taxes.contenance} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem49 + + + + + ligne_taxes + + + + + + + + $S{fonction.Nombre($D{taxes.Valeur})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + details_taxes + + + + + + + + + + + + + + + VerticalLayout2 + + + + + + + + + + + + reglements + + + + HorizontalLayout18 + + + + TextItem9 + + + + + HorizontalLayout18 + + + + + + + + Date +$S{ReportPage1_reglements.isVisible = $V{afficher_reglements}; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem12 + + + + + HorizontalLayout18 + + + + + + + + N° chèque + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem18 + + + + + HorizontalLayout18 + + + + + + + + Montant + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + ligne_paiement + + + + TextItem21 + + + + + ligne_paiement + + + + + + + + $D{paiements.date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem26 + + + + + ligne_paiement + + + + + + + + $D{paiements.N° chèque} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem32 + + + + + ligne_paiement + + + + + + + + $S{fonction.Nombre($D{paiements.Montant})} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + reglements + + + + + + + + + + + + + + + VerticalLayout2 + + + + + + + + + + + + + + PageFooter1 + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + HorizontalLayout3 + + + + TextItem14 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem15 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem17 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem19 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem16 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem20 + + + + + HorizontalLayout3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + + + + + DataHeaderBand1 + + + + HorizontalLayout40 + + + + TextItem24 + + + + + HorizontalLayout40 + + + + + + + + Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem40 + + + + + HorizontalLayout40 + + + + + + + + Désignations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem22 + + + + + HorizontalLayout40 + + + + + + + + Qte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem39 + + + + + HorizontalLayout40 + + + + + + + + P.U HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem37 + + + + + HorizontalLayout40 + + + + + + + + TVA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TextItem31 + + + + + HorizontalLayout40 + + + + + + + + Montant HT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DataHeaderBand1 + + + + + + + + + + + + + + + ReportPage1 + + + + + + + + + det + + + + + + + + + + + + + + PageFooter2 + + + + + ReportPage1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datasources + + + + f + QMYSQL + $V{dossier} + $V{utilisateur} + + $V{serveur} + + + $V{port} + + + + + + company + select * from comp limit 1 + f + + + + stock + select stock_out.*,pt*stock_out.tva/100 as tot_tva, prod_ajout.* from stock_out left join prod_ajout on prod_ajout.ref = stock_out.ref where stock_out.doc = $V{doc} + f + + + + doc + select fv.*, client.* from fv left join client on fv.cl = client.client where doc = $V{doc} + f + + + + paiements + select date Date, descr Libellé, num_cheque 'N° chèque', debit Montant from oper_caisse where ref = $V{doc} and rowid not in (select id from reg_associer) union all select reg_associer.date,'Tranche de paiement associée',oper_caisse.num_cheque,mnt from reg_associer inner join oper_caisse on reg_associer.id = oper_caisse.rowid where reg_associer.ref = $V{doc} + f + + + + taxes + SELECT taxe_article.taxe,stock_out.mnt_taxe,stock_out.contenance,taxes.unite,sum(stock_out.qte * stock_out.qte_emb * stock_out.mnt_taxe * stock_out.contenance) Valeur FROM stock_out INNER JOIN taxe_article ON stock_out.ref = taxe_article.ref INNER JOIN taxes ON taxes.libelle = taxe_article.taxe WHERE doc = $V{doc} GROUP BY taxes.libelle + f + + + + + + + + + + + ReportPage1_PageFooter1.beforeRender.connect(BR1) +function BR1() +{ + var tableBuilder = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_paiement); + tableBuilder.buildTable("paiements"); + +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_ligne_taxes); + tableTaxes.buildTable("taxes"); +var tableTaxes = DatasourceFunctions.createTableBuilder(ReportPage1_details_taxes); + tableTaxes.buildTable("taxes"); +} + +ReportPage1_HorizontalLayout3.geometry.height+=LimeReport.getPageFreeSpace(ReportPage1); +ReportPage1_HorizontalLayout3.geometry.y = ReportPage1_DataHeaderBand1.geometry.y; + + + + + + + + +
+
diff --git a/demo_r2/demo_reports/invoice.zip b/demo_r2/demo_reports/invoice.zip new file mode 100644 index 0000000..fc9a75d Binary files /dev/null and b/demo_r2/demo_reports/invoice.zip differ diff --git a/include/lrdatasourceintf.h b/include/lrdatasourceintf.h index 26f7a65..481787c 100644 --- a/include/lrdatasourceintf.h +++ b/include/lrdatasourceintf.h @@ -18,9 +18,12 @@ public: virtual bool eof() = 0; virtual QVariant data(const QString& columnName) = 0; virtual QVariant dataByRowIndex(const QString& columnName, int rowIndex) = 0; + virtual QVariant dataByRowIndex(const QString &columnName, int rowIndex, int roleName) = 0; + virtual QVariant dataByRowIndex(const QString &columnName, int rowIndex, const QString &roleName) = 0; virtual QVariant dataByKeyField(const QString& columnName, const QString& keyColumnName, QVariant keyData) = 0; virtual int columnCount() = 0; virtual QString columnNameByIndex(int columnIndex) = 0; + virtual QVariant headerData(const QString &columnName, const QString &roleName) = 0; virtual int columnIndexByName(QString name) = 0; virtual bool isInvalid() const = 0; virtual QString lastError() = 0; diff --git a/include/lrdatasourcemanagerintf.h b/include/lrdatasourcemanagerintf.h index c43b239..0ff4a55 100644 --- a/include/lrdatasourcemanagerintf.h +++ b/include/lrdatasourcemanagerintf.h @@ -55,6 +55,7 @@ public: virtual bool containsVariable(const QString& variableName) = 0; virtual QVariant variable(const QString& variableName) = 0; virtual bool addModel(const QString& name, QAbstractItemModel *model, bool owned) = 0; + virtual void addCSV(const QString& name, const QString& csvText, const QString& separator, bool firstRowIsHeader) = 0; virtual void removeModel(const QString& name) = 0; virtual bool containsDatasource(const QString& dataSourceName) = 0; virtual void clearUserVariables()=0; diff --git a/include/lrrenderengine.h b/include/lrrenderengine.h index ccbecd4..70048df 100644 --- a/include/lrrenderengine.h +++ b/include/lrrenderengine.h @@ -10,7 +10,7 @@ #include "lrscriptenginemanagerintf.h" #include "lrpreviewreportwidget.h" -namespace LimeReport{ +namespace LimeReport;{ class PrintRange{ public: diff --git a/limereport/bands/lrgroupbands.cpp b/limereport/bands/lrgroupbands.cpp index 569e0df..3eedb6a 100644 --- a/limereport/bands/lrgroupbands.cpp +++ b/limereport/bands/lrgroupbands.cpp @@ -62,7 +62,7 @@ namespace LimeReport{ GroupBandHeader::GroupBandHeader(QObject *owner, QGraphicsItem *parent) : BandDesignIntf(BandDesignIntf::GroupHeader, xmlTagHeader, owner,parent), - m_groupFiledName(""), m_groupStarted(false), m_resetPageNumber(false) + m_groupFiledName(""), m_groupStarted(false), m_resetPageNumber(false),m_sortFieldNameBy(Qt::AscendingOrder) { setBandTypeText(tr("GroupHeader")); setFixedPos(false); @@ -95,7 +95,10 @@ void GroupBandHeader::startGroup(DataSourceManager* dataManager) if (dataManager->containsDatasource(datasourceName)){ IDataSource* ds = dataManager->dataSource(datasourceName); if (ds && ds->columnIndexByName(m_groupFiledName)!=-1) + { m_groupFieldValue=ds->data(m_groupFiledName); + + } } if (!m_condition.isEmpty()) m_conditionValue = calcCondition(dataManager); @@ -149,6 +152,7 @@ bool GroupBandHeader::isNeedToClose(DataSourceManager* dataManager) QString datasourceName = findDataSourceName(parentBand()); if (dataManager->containsDatasource(datasourceName)){ IDataSource* ds = dataManager->dataSource(datasourceName); + if (ds){ if (ds->data(m_groupFiledName).isNull() && m_groupFieldValue.isNull()) return false; if (!ds->data(m_groupFiledName).isValid()) return false; diff --git a/limereport/bands/lrgroupbands.h b/limereport/bands/lrgroupbands.h index 62b9b16..85269ed 100644 --- a/limereport/bands/lrgroupbands.h +++ b/limereport/bands/lrgroupbands.h @@ -32,12 +32,14 @@ #include "lrbanddesignintf.h" #include "lrdesignelementsfactory.h" +#include "qnamespace.h" namespace LimeReport{ class GroupBandHeader : public BandDesignIntf, public IGroupBand{ Q_OBJECT Q_PROPERTY(QString groupFieldName READ groupFieldName WRITE setGroupFieldName) + Q_PROPERTY(Qt::SortOrder SortFieldNameBy READ SortFieldNameBy WRITE setSortFieldNameBy) Q_PROPERTY(bool splittable READ isSplittable WRITE setSplittable ) Q_PROPERTY(bool keepGroupTogether READ tryToKeepTogether WRITE setTryToKeepTogether) Q_PROPERTY(bool startNewPage READ startNewPage WRITE setStartNewPage) @@ -60,6 +62,8 @@ public: bool isGroupHeader() const {return true;} QString condition() const; void setCondition(const QString &condition); + Qt::SortOrder SortFieldNameBy(){return m_sortFieldNameBy;}; + void setSortFieldNameBy(Qt::SortOrder sortOrder){m_sortFieldNameBy = sortOrder;} private: virtual BaseDesignIntf* createSameTypeItem(QObject* owner=0, QGraphicsItem* parent=0); void startGroup(DataSourceManager* dataManager); @@ -77,6 +81,7 @@ private: bool m_resetPageNumber; QString m_condition; QString m_conditionValue; + Qt::SortOrder m_sortFieldNameBy; }; class GroupBandFooter : public BandDesignIntf{ diff --git a/limereport/items/images/border_settings.png b/limereport/items/images/border_settings.png new file mode 100644 index 0000000..a740874 Binary files /dev/null and b/limereport/items/images/border_settings.png differ diff --git a/limereport/items/lrbordereditor.cpp b/limereport/items/lrbordereditor.cpp index 63d8b88..ce923ef 100644 --- a/limereport/items/lrbordereditor.cpp +++ b/limereport/items/lrbordereditor.cpp @@ -15,12 +15,13 @@ BorderEditor::BorderEditor(QWidget *parent) : connect( ui->borderFrame, SIGNAL(borderSideClicked(LimeReport::BaseDesignIntf::BorderSide, bool)), this, SLOT(checkToolButtons(LimeReport::BaseDesignIntf::BorderSide, bool)) - ); + ); } void BorderEditor::loadItem(LimeReport::BaseDesignIntf *item) { m_item = item; + qDebug()<metaObject()->className(); emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine, item->borderLines() & LimeReport::BaseDesignIntf::TopLine); emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::LeftLine, @@ -68,6 +69,11 @@ double BorderEditor::borderWidth() return m_borderWidth; } +bool BorderEditor::isPage() +{ + return QString(m_item->metaObject()->className()) == "LimeReport::PageItemDesignIntf"; +} + BorderEditor::~BorderEditor() { delete ui; @@ -93,18 +99,18 @@ void BorderEditor::checkToolButtons(LimeReport::BaseDesignIntf::BorderSide side, { switch(side) { - case BaseDesignIntf::BorderSide::TopLine: - ui->topLine->setChecked(check); - break; - case BaseDesignIntf::BorderSide::BottomLine: - ui->bottomLine->setChecked(check); - break; - case BaseDesignIntf::BorderSide::LeftLine: - ui->leftLine->setChecked(check); - break; - case BaseDesignIntf::BorderSide::RightLine: - ui->rightLine->setChecked(check); - break; + case BaseDesignIntf::BorderSide::TopLine: + ui->topLine->setChecked(check); + break; + case BaseDesignIntf::BorderSide::BottomLine: + ui->bottomLine->setChecked(check); + break; + case BaseDesignIntf::BorderSide::LeftLine: + ui->leftLine->setChecked(check); + break; + case BaseDesignIntf::BorderSide::RightLine: + ui->rightLine->setChecked(check); + break; } } diff --git a/limereport/items/lrbordereditor.h b/limereport/items/lrbordereditor.h index 2baf2f3..7906024 100644 --- a/limereport/items/lrbordereditor.h +++ b/limereport/items/lrbordereditor.h @@ -22,6 +22,7 @@ public: LimeReport::BaseDesignIntf::BorderStyle borderStyle(); QString borderColor(); double borderWidth(); + bool isPage(); ~BorderEditor(); private slots: diff --git a/limereport/items/lrtextitem.cpp b/limereport/items/lrtextitem.cpp index 4677892..6cfd575 100644 --- a/limereport/items/lrtextitem.cpp +++ b/limereport/items/lrtextitem.cpp @@ -58,8 +58,8 @@ namespace LimeReport{ TextItem::TextItem(QObject *owner, QGraphicsItem *parent) : ContentItemDesignIntf(xmlTag,owner,parent), m_angle(Angle0), m_trimValue(true), m_allowHTML(false), - m_allowHTMLInFields(false), m_replaceCarriageReturns(false), m_followTo(""), m_follower(0), m_textIndent(0), - m_textLayoutDirection(Qt::LayoutDirectionAuto), m_hideIfEmpty(false), m_fontLetterSpacing(0) + m_allowHTMLInFields(false), m_replaceCarriageReturns(false), m_followTo(""), m_follower(0), m_textIndent(0), + m_textLayoutDirection(Qt::LayoutDirectionAuto), m_hideIfEmpty(false), m_fontLetterSpacing(0) { PageItemDesignIntf* pageItem = dynamic_cast(parent); BaseDesignIntf* parentItem = dynamic_cast(parent); @@ -77,10 +77,6 @@ TextItem::TextItem(QObject *owner, QGraphicsItem *parent) TextItem::~TextItem(){} -int TextItem::fakeMarginSize() const{ - return marginSize()+5; -} - void TextItem::preparePopUpMenu(QMenu &menu) { QAction* editAction = menu.addAction(QIcon(":/report/images/edit_pecil2.png"),tr("Edit")); @@ -179,62 +175,62 @@ void TextItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* style, Q qreal hOffset = 0, vOffset = 0; switch (m_angle){ - case Angle0: - hOffset = fakeMarginSize(); - if ((tmpSize.height() > 0) && (m_alignment & Qt::AlignVCenter)){ - vOffset = tmpSize.height() / 2; - } - if ((tmpSize.height() > 0) && (m_alignment & Qt::AlignBottom)) // allow html - vOffset = tmpSize.height(); - painter->translate(hOffset,vOffset); + case Angle0: + hOffset = marginSize(); + if ((tmpSize.height() > 0) && (m_alignment & Qt::AlignVCenter)){ + vOffset = tmpSize.height() / 2; + } + if ((tmpSize.height() > 0) && (m_alignment & Qt::AlignBottom)) // allow html + vOffset = tmpSize.height(); + painter->translate(hOffset,vOffset); break; - case Angle90: - hOffset = width() - fakeMarginSize(); - vOffset = fakeMarginSize(); - if (m_alignment & Qt::AlignVCenter){ - hOffset = (width() - text->size().height()) / 2 + text->size().height(); - } + case Angle90: + hOffset = width() - marginSize(); + vOffset = marginSize(); + if (m_alignment & Qt::AlignVCenter){ + hOffset = (width() - text->size().height()) / 2 + text->size().height(); + } - if (m_alignment & Qt::AlignBottom){ - hOffset = (text->size().height()); - } - painter->translate(hOffset,vOffset); - painter->rotate(90); + if (m_alignment & Qt::AlignBottom){ + hOffset = (text->size().height()); + } + painter->translate(hOffset,vOffset); + painter->rotate(90); break; - case Angle180: - hOffset = width() - fakeMarginSize(); - vOffset = height() - fakeMarginSize(); - if ((tmpSize.width()>0) && (m_alignment & Qt::AlignVCenter)){ - vOffset = tmpSize.height() / 2+ text->size().height(); - } - if ((tmpSize.height()>0) && (m_alignment & Qt::AlignBottom)){ - vOffset = (text->size().height()); - } - painter->translate(hOffset,vOffset); - painter->rotate(180); + case Angle180: + hOffset = width() - marginSize(); + vOffset = height() - marginSize(); + if ((tmpSize.width()>0) && (m_alignment & Qt::AlignVCenter)){ + vOffset = tmpSize.height() / 2+ text->size().height(); + } + if ((tmpSize.height()>0) && (m_alignment & Qt::AlignBottom)){ + vOffset = (text->size().height()); + } + painter->translate(hOffset,vOffset); + painter->rotate(180); break; - case Angle270: - hOffset = fakeMarginSize(); - vOffset = height()-fakeMarginSize(); - if (m_alignment & Qt::AlignVCenter){ - hOffset = (width() - text->size().height())/2; - } + case Angle270: + hOffset = marginSize(); + vOffset = height()-marginSize(); + if (m_alignment & Qt::AlignVCenter){ + hOffset = (width() - text->size().height())/2; + } - if (m_alignment & Qt::AlignBottom){ - hOffset = (width() - text->size().height()); - } - painter->translate(hOffset,vOffset); - painter->rotate(270); + if (m_alignment & Qt::AlignBottom){ + hOffset = (width() - text->size().height()); + } + painter->translate(hOffset,vOffset); + painter->rotate(270); break; - case Angle45: - painter->translate(width()/2,0); - painter->rotate(45); - text->setTextWidth(sqrt(2*(pow(width()/2,2)))); + case Angle45: + painter->translate(width()/2,0); + painter->rotate(45); + text->setTextWidth(sqrt(2*(pow(width()/2,2)))); break; - case Angle315: - painter->translate(0,height()/2); - painter->rotate(315); - text->setTextWidth(sqrt(2*(pow(height()/2,2)))); + case Angle315: + painter->translate(0,height()/2); + painter->rotate(315); + text->setTextWidth(sqrt(2*(pow(height()/2,2)))); break; } @@ -321,7 +317,7 @@ void TextItem::updateItemSize(DataSourceManager* dataManager, RenderPass pass, i initTextSizes(); if (m_textSize.width()>width() && ((m_autoWidth==MaxWordLength)||(m_autoWidth==MaxStringLength))){ - setWidth(m_textSize.width() + fakeMarginSize()*2); + setWidth(m_textSize.width() + marginSize()*2); } if (m_textSize.height()>height()) { @@ -338,22 +334,22 @@ void TextItem::updateItemSize(DataSourceManager* dataManager, RenderPass pass, i void TextItem::updateLayout() { -// m_layout.setFont(transformToSceneFont(font())); -// m_layout.setText(content()); -// qreal linePos = 0; -// m_layout.beginLayout(); -// while(true){ -// QTextLine line = m_layout.createLine(); -// if (!line.isValid()) break; -// line.setLineWidth(width()-marginSize()*2); -// line.setPosition(QPoint(marginSize(),linePos)); -// linePos+=line.height(); -// } -// m_layout.endLayout(); + // m_layout.setFont(transformToSceneFont(font())); + // m_layout.setText(content()); + // qreal linePos = 0; + // m_layout.beginLayout(); + // while(true){ + // QTextLine line = m_layout.createLine(); + // if (!line.isValid()) break; + // line.setLineWidth(width()-marginSize()*2); + // line.setPosition(QPoint(marginSize(),linePos)); + // linePos+=line.height(); + // } + // m_layout.endLayout(); } bool TextItem::isNeedExpandContent() const -{ +{ #if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1)) QRegExp rx("$*\\{[^{]*\\}"); #else @@ -380,21 +376,21 @@ QString TextItem::replaceReturns(QString text) const void TextItem::setTextFont(TextPtr text, const QFont& value) const { text->setDefaultFont(value); if ((m_angle==Angle0)||(m_angle==Angle180)){ - text->setTextWidth(rect().width()-fakeMarginSize()*2); + text->setTextWidth(rect().width()-marginSize()*2); } else { - text->setTextWidth(rect().height()-fakeMarginSize()*2); + text->setTextWidth(rect().height()-marginSize()*2); } } void TextItem::adaptFontSize(TextPtr text) const{ QFont _font = transformToSceneFont(font()); do{ -// qApp->processEvents(); + // qApp->processEvents(); setTextFont(text,_font); if (_font.pixelSize()>2) _font.setPixelSize(_font.pixelSize()-1); else break; - } while(text->size().height()>this->height() || text->size().width()>(this->width()) - fakeMarginSize() * 2); + } while(text->size().height()>this->height() || text->size().width()>(this->width()) - marginSize() * 2); } int TextItem::underlineLineSize() const @@ -419,8 +415,8 @@ void TextItem::setLineSpacing(int value) { int oldValue = m_lineSpacing; m_lineSpacing = value; -// if (autoHeight()) -// initTextSizes(); + // if (autoHeight()) + // initTextSizes(); update(); notify("lineSpacing",oldValue,value); } @@ -473,40 +469,40 @@ QString TextItem::formatFieldValue() if (m_valueType != Default) { switch (m_valueType) { case DateTime: - { - QDateTime dt = QDateTime::fromString(value.toString(), Qt::ISODate); - value = (dt.isValid() ? QVariant(dt) : m_varValue); - break; - } + { + QDateTime dt = QDateTime::fromString(value.toString(), Qt::ISODate); + value = (dt.isValid() ? QVariant(dt) : m_varValue); + break; + } case Double: - { - bool bOk = false; - double dbl = value.toDouble(&bOk); - value = (bOk ? QVariant(dbl) : m_varValue); - } + { + bool bOk = false; + double dbl = value.toDouble(&bOk); + value = (bOk ? QVariant(dbl) : m_varValue); + } default: break; } } #if QT_VERSION < QT_VERSION_CHECK(6,0,0) switch (value.type()) { - case QVariant::Date: - case QVariant::DateTime: - return formatDateTime(value.toDateTime()); - case QVariant::Double: - return formatNumber(value.toDouble()); - default: - return value.toString(); + case QVariant::Date: + case QVariant::DateTime: + return formatDateTime(value.toDateTime()); + case QVariant::Double: + return formatNumber(value.toDouble()); + default: + return value.toString(); } #else switch (value.typeId()) { - case QMetaType::QDate: - case QMetaType::QDateTime: - return formatDateTime(value.toDateTime()); - case QMetaType::Double: - return formatNumber(value.toDouble()); - default: - return value.toString(); + case QMetaType::QDate: + case QMetaType::QDateTime: + return formatDateTime(value.toDateTime()); + case QMetaType::Double: + return formatNumber(value.toDouble()); + default: + return value.toString(); } #endif @@ -679,7 +675,7 @@ void TextItem::setFollowTo(const QString &followTo) tr("TextItem \" %1 \" already has folower \" %2 \" ") .arg(fi->objectName()) .arg(fi->follower()->objectName()) - ); + ); notify("followTo",followTo,""); } } else if (m_followTo != ""){ @@ -688,7 +684,7 @@ void TextItem::setFollowTo(const QString &followTo) tr("Error"), tr("TextItem \" %1 \" not found!") .arg(m_followTo) - ); + ); notify("followTo",followTo,""); } } @@ -774,13 +770,13 @@ void TextItem::setAllowHTML(bool allowHTML) { if (m_allowHTML!=allowHTML){ m_allowHTML = allowHTML; -// if (m_text){ -// if (allowHTML) -// m_text->setHtml(m_strText); -// else -// m_text->setPlainText(m_strText); -// update(); -// } + // if (m_text){ + // if (allowHTML) + // m_text->setHtml(m_strText); + // else + // m_text->setPlainText(m_strText); + // update(); + // } update(); notify("allowHTML",!m_allowHTML,allowHTML); } @@ -811,9 +807,9 @@ bool TextItem::isNeedUpdateSize(RenderPass pass) const } bool res = (m_textSize.height()>geometry().height()&&autoHeight()) || - (m_textSize.width()>geometry().width()&&autoWidth()) || - m_follower || - isNeedExpandContent(); + (m_textSize.width()>geometry().width()&&autoWidth()) || + m_follower || + isNeedExpandContent(); return res; } @@ -896,7 +892,7 @@ void TextItem::setAdaptFontToSize(bool value) if (m_adaptFontToSize!=value){ bool oldValue = m_adaptFontToSize; m_adaptFontToSize=value; -// initText(); + // initText(); invalidateRect(rect()); notify("updateFontToSize",oldValue,value); } @@ -918,10 +914,10 @@ QString TextItem::extractText(QTextBlock& curBlock, int height){ linesHeight += curBlock.layout()->lineAt(curLine).height() + lineSpacing(); if (height > 0 && linesHeight > (height-borderLineSize() * 2)) {goto loop_exit;} resultText += curBlock.text().mid(curBlock.layout()->lineAt(curLine).textStart(), - curBlock.layout()->lineAt(curLine).textLength()); + curBlock.layout()->lineAt(curLine).textLength()); } } - loop_exit: return resultText; +loop_exit: return resultText; } QString TextItem::getTextPart(int height, int skipHeight){ @@ -1003,10 +999,10 @@ BaseDesignIntf *TextItem::cloneEmpty(int height, QObject *owner, QGraphicsItem * void TextItem::objectLoadFinished() { ItemDesignIntf::objectLoadFinished(); -// if (itemMode() == DesignMode || !isNeedExpandContent()){ -// if (autoHeight() && autoWidth()) -// initTextSizes(); -// } + // if (itemMode() == DesignMode || !isNeedExpandContent()){ + // if (autoHeight() && autoWidth()) + // initTextSizes(); + // } } void TextItem::setTextItemFont(QFont value) @@ -1023,8 +1019,8 @@ void TextItem::setTextItemFont(QFont value) QWidget *TextItem::defaultEditor() { QSettings* l_settings = (page()->settings() != 0) ? - page()->settings() : - (page()->reportEditor()!=0) ? page()->reportEditor()->settings() : 0; + page()->settings() : + (page()->reportEditor()!=0) ? page()->reportEditor()->settings() : 0; QWidget* editor = new TextItemEditor(this,page(),l_settings); editor->setAttribute(Qt::WA_DeleteOnClose); return editor; diff --git a/limereport/items/lrtextitem.h b/limereport/items/lrtextitem.h index 0d63415..7febe0e 100644 --- a/limereport/items/lrtextitem.h +++ b/limereport/items/lrtextitem.h @@ -177,7 +177,7 @@ public: void setTextLayoutDirection(const Qt::LayoutDirection &textLayoutDirection); void setWatermark(bool watermark); - + bool isReplaceCarriageReturns() const; void setReplaceCarriageReturns(bool isReplaceCarriageReturns); @@ -192,7 +192,6 @@ protected: bool isNeedExpandContent() const; QString replaceBR(QString text) const; QString replaceReturns(QString text) const; - int fakeMarginSize() const; QString getTextPart(int height, int skipHeight); void restoreLinksEvent(); void preparePopUpMenu(QMenu &menu); diff --git a/limereport/lrbanddesignintf.cpp b/limereport/lrbanddesignintf.cpp index 73a9404..9aa916f 100644 --- a/limereport/lrbanddesignintf.cpp +++ b/limereport/lrbanddesignintf.cpp @@ -60,7 +60,6 @@ void BandMarker::paint(QPainter *painter, const QStyleOptionGraphicsItem* /**opt boundingRect().bottomLeft().y()-4, boundingRect().width(),4), Qt::lightGray ); - qDebug()<setRenderHint(QPainter::Antialiasing); qreal size = (boundingRect().width()(bi); -// if (bi){ -// ContentItemDesignIntf* pci = dynamic_cast(bi->patternItem()); -// ci->setContent(pci->content()); -// } -// } - -// updateItemSize(dataManager,FirstPass,height()); -//} - BaseDesignIntf* BandDesignIntf::cloneUpperPart(int height, QObject *owner, QGraphicsItem *parent) { int maxBottom = 0; @@ -922,9 +902,9 @@ void BandDesignIntf::setAlternateBackgroundColor(const QColor &alternateBackgrou } } -qreal BandDesignIntf::bottomSpace() const +qreal BandDesignIntf::bottomSpace() { - return height()-findMaxBottom(); + return m_bottomSpace; } void BandDesignIntf::slotPropertyObjectNameChanged(const QString &, const QString& newName) @@ -958,14 +938,9 @@ void BandDesignIntf::setKeepTopSpace(bool value) } } -int BandDesignIntf::bootomSpace() const +void BandDesignIntf::setBottomSpace(qreal bottomSpace) { - return m_bottomSpace; -} - -void BandDesignIntf::setBootomSpace(int bootomSpace) -{ - m_bottomSpace = bootomSpace; + m_bottomSpace = bottomSpace; } bool BandDesignIntf::repeatOnEachRow() const @@ -1138,7 +1113,6 @@ void BandDesignIntf::updateItemSize(DataSourceManager* dataManager, RenderPass p spaceBorder += borderLineSize() + 2; } - spaceBorder += m_bottomSpace; restoreLinks(); snapshotItemsLayout(); @@ -1150,6 +1124,7 @@ void BandDesignIntf::updateItemSize(DataSourceManager* dataManager, RenderPass p item->setY(item->y() - minTop); } } + setHeight(findMaxBottom() + spaceBorder); } if ((maxHeight > 0) && (height() > maxHeight)){ @@ -1164,6 +1139,15 @@ void BandDesignIntf::updateBandNameLabel() if (m_bandNameLabel) m_bandNameLabel->updateLabel(bandTitle()); } +void BandDesignIntf::initFromItem(BaseDesignIntf *source) +{ + ItemsContainerDesignInft::initFromItem(source); + BandDesignIntf* source_band = dynamic_cast(source); + if (source_band){ + this->setBottomSpace(source_band->bottomSpace()); + } +} + QColor BandDesignIntf::selectionColor() const { return Qt::yellow; diff --git a/limereport/lrbanddesignintf.h b/limereport/lrbanddesignintf.h index 8960eeb..584260f 100644 --- a/limereport/lrbanddesignintf.h +++ b/limereport/lrbanddesignintf.h @@ -156,8 +156,8 @@ public: virtual bool isUnique() const; void setItemMode(BaseDesignIntf::ItemMode mode); void updateItemSize(DataSourceManager *dataManager, RenderPass pass=FirstPass, int maxHeight=0); -// void recalcItems(DataSourceManager* dataManager); void updateBandNameLabel(); + void initFromItem(BaseDesignIntf* source); virtual QColor selectionColor() const; int bandIndex() const; @@ -261,11 +261,10 @@ public: void setAlternateBackgroundColor(const QColor &alternateBackgroundColor); bool useAlternateBackgroundColor() const; void setUseAlternateBackgroundColor(bool useAlternateBackgroundColor); - qreal bottomSpace() const; + qreal bottomSpace(); + void setBottomSpace(qreal bottomSpace); void setBackgroundModeProperty(BGMode value); void setBackgroundOpacity(int value); - int bootomSpace() const; - void setBootomSpace(int bootomSpace); void updateBandMarkerGeometry(); int shiftItems() const; void setShiftItems(int shiftItems); diff --git a/limereport/lrbasedesignintf.cpp b/limereport/lrbasedesignintf.cpp index d66efeb..90fca96 100644 --- a/limereport/lrbasedesignintf.cpp +++ b/limereport/lrbasedesignintf.cpp @@ -413,6 +413,7 @@ void BaseDesignIntf::mousePressEvent(QGraphicsSceneMouseEvent *event) void BaseDesignIntf::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { + removeGuideLines(); QRectF newGeometry = geometry(); m_isChangingPos = false; if (newGeometry != m_oldGeometry) { @@ -429,7 +430,10 @@ void BaseDesignIntf::paint(QPainter *ppainter, const QStyleOptionGraphicsItem *o ppainter->save(); setupPainter(ppainter); + if(!isPageItem()) drawBorder(ppainter, rect()); + else + drawBorder(ppainter, page()->pageItem()->pageRect()); if(m_shadow) drawShadow(ppainter, rect(), 6); // if (m_joinMarkerOn) { drawMarker(ppainter, Const::JOIN_COLOR);} @@ -544,13 +548,14 @@ void BaseDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event) return; } + int hStep = dynamic_cast(scene())->horizontalGridStep(); int vStep = dynamic_cast(scene())->verticalGridStep(); if (m_resizeDirectionFlags & ResizeLeft) { if ((event->scenePos().x()) <= (mapToScene(0, 0).x() + (width() - Const::MINIMUM_ITEM_WIDTH)) && - (width() + (event->lastScenePos().x() - event->scenePos().x()) > Const::MINIMUM_ITEM_WIDTH) - ) { + (width() + (event->lastScenePos().x() - event->scenePos().x()) > Const::MINIMUM_ITEM_WIDTH) + ) { qreal posRightCorner = mapToScene(0, 0).x() + width(); qreal posLeftCorner = div(mapToParent(event->pos()).x(), hStep).quot * hStep; if (posLeftCorner < 0 ) @@ -562,15 +567,15 @@ void BaseDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event) if (m_resizeDirectionFlags & ResizeRight) { if ((event->scenePos().x() >= (mapToScene(0, 0).x() + Const::MINIMUM_ITEM_WIDTH)) || - (event->scenePos().x() >= (mapToScene(0, 0).x() + width()))) { + (event->scenePos().x() >= (mapToScene(0, 0).x() + width()))) { setWidth(div(event->scenePos().x() - mapToScene(0, 0).x(), hStep).quot * hStep); } } if (m_resizeDirectionFlags & ResizeTop) { if ((event->scenePos().y()) <= (mapToScene(0, 0).y() + (height() - Const::MINIMUM_ITEM_HEIGHT)) && - (height() + (event->lastScenePos().y() - event->scenePos().y()) > Const::MINIMUM_ITEM_HEIGHT) - ) { + (height() + (event->lastScenePos().y() - event->scenePos().y()) > Const::MINIMUM_ITEM_HEIGHT) + ) { qreal posBottomCorner = mapToScene(0, 0).y() + height(); qreal posTopCorner = div(mapToParent(event->pos()).y(), vStep).quot * vStep; if (posTopCorner < 0 ) @@ -582,8 +587,8 @@ void BaseDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event) if (m_resizeDirectionFlags & ResizeBottom) { if ((event->scenePos().y() > (mapToScene(0, 0).y() + height())) || - (event->scenePos().y() > (mapToScene(0, 0).y() + Const::MINIMUM_ITEM_HEIGHT)) - ) { + (event->scenePos().y() > (mapToScene(0, 0).y() + Const::MINIMUM_ITEM_HEIGHT)) + ) { setHeight(div(event->scenePos().y() - mapToScene(0, 0).y(), vStep).quot * vStep); } } @@ -618,6 +623,32 @@ void BaseDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event) } } + if (scene() && !scene()->selectedItems().isEmpty()) { + QGraphicsItem *movingItem = scene()->selectedItems().first(); + removeGuideLines(); + + for (QGraphicsItem *item : scene()->items()) { + if (item != movingItem) { + qreal topDiff = qAbs(item->sceneBoundingRect().bottom() - movingItem->sceneBoundingRect().bottom()); + qreal bottomDiff = qAbs(item->sceneBoundingRect().top() - movingItem->sceneBoundingRect().top()); + qreal leftDiff = qAbs(item->sceneBoundingRect().left() - movingItem->sceneBoundingRect().left()); + qreal rightDiff = qAbs(item->sceneBoundingRect().right() - movingItem->sceneBoundingRect().right()); + + if (topDiff == 0) + addGuideLine(item->sceneBoundingRect().left(), item->sceneBoundingRect().top(), + movingItem->sceneBoundingRect().left(), movingItem->sceneBoundingRect().top()); + if (bottomDiff == 0) + addGuideLine(item->sceneBoundingRect().left(), item->sceneBoundingRect().bottom(), + movingItem->sceneBoundingRect().left(), movingItem->sceneBoundingRect().bottom()); + if (leftDiff == 0) + addGuideLine(item->sceneBoundingRect().left(), item->sceneBoundingRect().top(), + movingItem->sceneBoundingRect().left(), movingItem->sceneBoundingRect().top()); + if (rightDiff == 0) + addGuideLine(item->sceneBoundingRect().right(), item->sceneBoundingRect().top(), + movingItem->sceneBoundingRect().right(), movingItem->sceneBoundingRect().top()); + } + } + } } int BaseDesignIntf::possibleResizeDirectionFlags() const @@ -659,11 +690,11 @@ Qt::CursorShape BaseDesignIntf::getPossibleCursor(int cursorFlags) if ((cursorFlags == Fixed) || (scene()->selectedItems().count() > 1)) return Qt::ArrowCursor; if (((cursorFlags & ResizeRight) && (cursorFlags & ResizeTop)) || - ((cursorFlags & ResizeLeft) && (cursorFlags & ResizeBottom))) { + ((cursorFlags & ResizeLeft) && (cursorFlags & ResizeBottom))) { return Qt::SizeBDiagCursor; } if (((cursorFlags & ResizeLeft) && (cursorFlags & ResizeTop)) || - ((cursorFlags & ResizeRight) && (cursorFlags & ResizeBottom))) { + ((cursorFlags & ResizeRight) && (cursorFlags & ResizeBottom))) { return Qt::SizeFDiagCursor; } if ((cursorFlags & ResizeLeft) || (cursorFlags & ResizeRight)) { return Qt::SizeHorCursor; } @@ -760,6 +791,23 @@ void BaseDesignIntf::updatePossibleDirectionFlags(){ } } +void BaseDesignIntf::addGuideLine(qreal x1, qreal y1, qreal x2, qreal y2) +{ + QGraphicsLineItem *line = new QGraphicsLineItem(x1, y1, x2, y2); + line->setPen(QPen(Qt::red,2,Qt::DashLine)); + if(scene())scene()->addItem(line); + guideLines.append(line); +} + +void BaseDesignIntf::removeGuideLines() +{ + for (QGraphicsLineItem *line : guideLines) { + if(scene())scene()->removeItem(line); + delete line; + } + guideLines.clear(); +} + bool BaseDesignIntf::isChangingPos() const { return m_isChangingPos; @@ -775,6 +823,11 @@ bool BaseDesignIntf::isShapeItem() const return QString(metaObject()->className()) == "LimeReport::ShapeItem"; } +bool BaseDesignIntf::isPageItem() const +{ +return QString(metaObject()->className()) == "LimeReport::PageItemDesignIntf"; +} + bool BaseDesignIntf::hasShadow() { return m_shadow; @@ -1014,7 +1067,7 @@ void BaseDesignIntf::moveUp() void BaseDesignIntf::sizeRight() { if ((m_possibleResizeDirectionFlags & ResizeLeft) || - (m_possibleResizeDirectionFlags & ResizeRight)) { + (m_possibleResizeDirectionFlags & ResizeRight)) { if (page()) setWidth(width() + page()->horizontalGridStep()); } } @@ -1022,7 +1075,7 @@ void BaseDesignIntf::sizeRight() void BaseDesignIntf::sizeLeft() { if ((m_possibleResizeDirectionFlags & ResizeLeft) || - (m_possibleResizeDirectionFlags & ResizeRight)) { + (m_possibleResizeDirectionFlags & ResizeRight)) { if(page()) setWidth(width() - page()->horizontalGridStep()); } } @@ -1030,7 +1083,7 @@ void BaseDesignIntf::sizeLeft() void BaseDesignIntf::sizeUp() { if ((m_possibleResizeDirectionFlags & ResizeTop) || - (m_possibleResizeDirectionFlags & ResizeBottom)) { + (m_possibleResizeDirectionFlags & ResizeBottom)) { if (page()) setHeight(height() - page()->verticalGridStep()); } } @@ -1038,7 +1091,7 @@ void BaseDesignIntf::sizeUp() void BaseDesignIntf::sizeDown() { if ((m_possibleResizeDirectionFlags & ResizeTop) || - (m_possibleResizeDirectionFlags & ResizeBottom)) { + (m_possibleResizeDirectionFlags & ResizeBottom)) { if (page()) setHeight(height() + page()->verticalGridStep()); } } @@ -1066,12 +1119,32 @@ void BaseDesignIntf::drawTopLine(QPainter *painter, QRectF rect) const if(isShapeItem()) return; painter->setPen(borderPen(TopLine)); - painter->drawLine(rect.x(), rect.y(), rect.width(), rect.y()); - if(borderStyle() == BorderStyle::Doubled) - painter->drawLine(rect.x()+3+m_borderLineSize, - rect.y()+3+m_borderLineSize, - rect.width()-3-m_borderLineSize, - rect.y()+3+m_borderLineSize); + if(!isPageItem()) + { + if(borderStyle() == BorderStyle::Doubled) + painter->drawLine(rect.x()+3+m_borderLineSize, + rect.y()+3+m_borderLineSize, + rect.width()-3-m_borderLineSize, + rect.y()+3+m_borderLineSize); + + painter->drawLine(rect.x(), rect.y(), rect.width(), rect.y()); + + } + else + { + + painter->drawLine(page()->pageItem()->pageRect().x(), + page()->pageItem()->pageRect().y(), + page()->pageItem()->pageRect().width() + (page()->pageItem()->leftMargin()*10), + page()->pageItem()->pageRect().y()); + if(borderStyle() == BorderStyle::Doubled) + painter->drawLine(page()->pageItem()->pageRect().x()+3+m_borderLineSize, + page()->pageItem()->pageRect().y()+3+m_borderLineSize, + page()->pageItem()->pageRect().width()-3-m_borderLineSize + (page()->pageItem()->leftMargin()*10), + page()->pageItem()->pageRect().y()+3+m_borderLineSize); + + } + } void BaseDesignIntf::drawBootomLine(QPainter *painter, QRectF rect) const @@ -1080,12 +1153,29 @@ void BaseDesignIntf::drawBootomLine(QPainter *painter, QRectF rect) const return; painter->setPen(borderPen(BottomLine)); + if(!isPageItem()) + { painter->drawLine(rect.x(), rect.height(), rect.width(), rect.height()); - if(borderStyle() == BorderStyle::Doubled) - painter->drawLine(rect.x()+3+m_borderLineSize, - rect.height()-3-m_borderLineSize, - rect.width()-3-m_borderLineSize, - rect.height()-3-m_borderLineSize); + if(borderStyle() == BorderStyle::Doubled) + painter->drawLine(rect.x()+3+m_borderLineSize, + rect.height()-3-m_borderLineSize, + rect.width()-3-m_borderLineSize, + rect.height()-3-m_borderLineSize); + } + else + { + + painter->drawLine(page()->pageItem()->pageRect().x(), + page()->pageItem()->pageRect().height() + (page()->pageItem()->topMargin()*10) + , page()->pageItem()->pageRect().width() + (page()->pageItem()->leftMargin()*10), + page()->pageItem()->pageRect().height() + (page()->pageItem()->topMargin()*10)); + if(borderStyle() == BorderStyle::Doubled) + painter->drawLine(page()->pageItem()->pageRect().x()+3+m_borderLineSize, + page()->pageItem()->pageRect().height()-3-m_borderLineSize + (page()->pageItem()->topMargin()*10), + page()->pageItem()->pageRect().width()-3-m_borderLineSize + (page()->pageItem()->leftMargin()*10), + page()->pageItem()->pageRect().height()-3-m_borderLineSize + (page()->pageItem()->topMargin()*10)); + } + } void BaseDesignIntf::drawRightLine(QPainter *painter, QRectF rect) const @@ -1093,13 +1183,28 @@ void BaseDesignIntf::drawRightLine(QPainter *painter, QRectF rect) const if(isShapeItem()) return; painter->setPen(borderPen(RightLine)); - + if(!isPageItem()) + { painter->drawLine(rect.width(), rect.y(), rect.width(), rect.height()); - if(borderStyle() == BorderStyle::Doubled) - painter->drawLine(rect.width()-3 - m_borderLineSize, - rect.y()+3+m_borderLineSize, - rect.width()-3-m_borderLineSize, - rect.height()-3-m_borderLineSize); + if(borderStyle() == BorderStyle::Doubled) + painter->drawLine(rect.width()-3 - m_borderLineSize, + rect.y()+3+m_borderLineSize, + rect.width()-3-m_borderLineSize, + rect.height()-3-m_borderLineSize); + } + else + { + painter->drawLine(page()->pageItem()->pageRect().width() + (page()->pageItem()->leftMargin()*10), page()->pageItem()->pageRect().y(), + page()->pageItem()->pageRect().width() + (page()->pageItem()->leftMargin()*10), + page()->pageItem()->pageRect().height() + (page()->pageItem()->topMargin()*10)); + if(borderStyle() == BorderStyle::Doubled) + painter->drawLine(page()->pageItem()->pageRect().width()-3 - m_borderLineSize + (page()->pageItem()->leftMargin()*10), + page()->pageItem()->pageRect().y()+3+m_borderLineSize, + page()->pageItem()->pageRect().width()-3-m_borderLineSize + (page()->pageItem()->leftMargin()*10), + page()->pageItem()->pageRect().height()-3-m_borderLineSize + (page()->pageItem()->topMargin()*10)); + } + + } void BaseDesignIntf::drawLeftLine(QPainter *painter, QRectF rect) const @@ -1107,12 +1212,29 @@ void BaseDesignIntf::drawLeftLine(QPainter *painter, QRectF rect) const if(isShapeItem()) return; painter->setPen(borderPen(LeftLine)); + if(!isPageItem()) + { painter->drawLine(rect.x(), rect.y(), rect.x(), rect.height()); - if(borderStyle() == BorderStyle::Doubled) - painter->drawLine(rect.x()+3+m_borderLineSize, - rect.y()+3+m_borderLineSize, - rect.x()+3+m_borderLineSize, - rect.height()-3-m_borderLineSize); + if(borderStyle() == BorderStyle::Doubled) + painter->drawLine(page()->pageItem()->pageRect().x()+3+m_borderLineSize, + page()->pageItem()->pageRect().y()+3+m_borderLineSize, + page()->pageItem()->pageRect().x()+3+m_borderLineSize, + page()->pageItem()->pageRect().height()-3-m_borderLineSize); + } + else + { + painter->drawLine(page()->pageItem()->pageRect().x(), + page()->pageItem()->pageRect().y(), + page()->pageItem()->pageRect().x(), + page()->pageItem()->pageRect().height() + (page()->pageItem()->topMargin()*10)); + if(borderStyle() == BorderStyle::Doubled) + painter->drawLine(page()->pageItem()->pageRect().x()+3+m_borderLineSize, + page()->pageItem()->pageRect().y()+3+m_borderLineSize, + page()->pageItem()->pageRect().x()+3+m_borderLineSize, + page()->pageItem()->pageRect().height()-3-m_borderLineSize + (page()->pageItem()->topMargin()*10)); + } + + } void BaseDesignIntf::drawDesignModeBorder(QPainter *painter, QRectF rect) const @@ -1214,7 +1336,7 @@ void BaseDesignIntf::setGeometryProperty(QRect rect) } } -PageDesignIntf *BaseDesignIntf::page() +PageDesignIntf *BaseDesignIntf::page() const { return dynamic_cast(scene()); } @@ -1230,7 +1352,7 @@ QPen BaseDesignIntf::borderPen(BorderSide side/*, bool selected*/) const if (m_borderLinesFlags & side) { pen.setColor(m_borderColor); if(borderStyle() != BorderStyle::Doubled) - pen.setStyle(static_cast(m_borderStyle)); + pen.setStyle(static_cast(m_borderStyle)); //pen.setCosmetic(true); pen.setWidthF(m_borderLineSize+1); //To draw with point precision (By default: 2px = 1 pt) @@ -1424,8 +1546,8 @@ void BaseDesignIntf::showEditorDialog() void BaseDesignIntf::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::LeftButton && - ((itemMode()&EditMode)||(itemMode()&DesignMode)) - ) { + ((itemMode()&EditMode)||(itemMode()&DesignMode)) + ) { showEditorDialog(); } QGraphicsItem::mouseDoubleClickEvent(event); @@ -1448,7 +1570,7 @@ void BaseDesignIntf::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) menu.addSeparator(); QAction* copyAction = menu.addAction(QIcon(":/report/images/copy"), tr("Copy")); - QAction* cutAction = menu.addAction(QIcon(":/report/images/cut"), tr("Cut")); + QAction* cutAction = menu.addAction(QIcon(":/report/images/cut"), tr("Cut")); QAction* pasteAction = menu.addAction(QIcon(":/report/images/paste"), tr("Paste")); pasteAction->setEnabled(false); @@ -1484,6 +1606,54 @@ void BaseDesignIntf::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) QAction* noBordersAction = menu.addAction(QIcon(":/report/images/noLines"), tr("No borders")); QAction* allBordersAction = menu.addAction(QIcon(":/report/images/allLines"), tr("All borders")); QAction* editBorderAction = menu.addAction(QIcon(":/report/images/borderEditor"), tr("Edit borders...")); + QMenu *alignement = menu.addMenu(tr("Align items")); + QAction* alignLeft = new QAction(QIcon(":/report/images/alignToLeft"),tr("Align to left")); + QAction* alignRight = new QAction(QIcon(":/report/images/alignToRight"),tr("Align to right")); + QAction* alignTop = new QAction(QIcon(":/report/images/alignToTop"),tr("Align to top")); + QAction* alignBottom = new QAction(QIcon(":/report/images/alignToBottom"),tr("Align to bottom")); + QAction* alignHCenter = new QAction(QIcon(":/report/images/alignToHCenter"),tr("Align to horizontal center")); + QAction* alignVCenter = new QAction(QIcon(":/report/images/alignToHCenter"),tr("Align to vertical center")); + QMenu *resize = menu.addMenu(tr("Resize items")); + QAction* toSameWidth = new QAction(QIcon(":/report/images/sameWidth"),tr("Same width")); + QAction* toSameHeight = new QAction(QIcon(":/report/images/sameHeight"),tr("Same height")); + QMenu *itemAlign = menu.addMenu(tr("Align items to page")); + QAction* itemAlignToLeft = new QAction(tr("Align to left")); + QAction* itemAlignToRight = new QAction(tr("Align to right")); + QAction* itemAlignToCenter = new QAction(tr("Align to center")); + QAction* cancelItemAlign = new QAction(tr("cancel alignement")); + QAction* itemAlignParent = new QAction(tr("Align to page width")); + menu.addMenu(itemAlign); + itemAlign->addAction(itemAlignToLeft); + itemAlignToLeft->setChecked(m_itemAlign == LeftItemAlign); + itemAlignToRight->setChecked(m_itemAlign == RightItemAlign); + itemAlignToCenter->setChecked(m_itemAlign == CenterItemAlign); + itemAlignParent->setChecked(m_itemAlign == ParentWidthItemAlign); + cancelItemAlign->setChecked(m_itemAlign == DesignedItemAlign); + itemAlign->addAction(itemAlignToRight); + itemAlign->addAction(itemAlignToCenter); + itemAlign->addAction(itemAlignParent); + itemAlign->addAction(cancelItemAlign); + resize->addAction(toSameWidth); + resize->addAction(toSameHeight); + alignement->addAction(alignLeft); + alignement->addAction(alignRight); + alignement->addAction(alignTop); + alignement->addAction(alignBottom); + + connect(alignLeft,&QAction::triggered,this,[=](){page->alignToLeft();}); + connect(alignRight,&QAction::triggered,this,[=](){page->alignToRigth();}); + connect(alignTop,&QAction::triggered,this,[=](){page->alignToTop();}); + connect(alignBottom,&QAction::triggered,this,[=](){page->alignToBottom();}); + connect(alignHCenter,&QAction::triggered,this,[=](){page->alignToHCenter();}); + connect(alignVCenter,&QAction::triggered,this,[=](){page->alignToVCenter();}); + connect(toSameWidth,&QAction::triggered,this,[=](){page->sameWidth();}); + connect(toSameHeight,&QAction::triggered,this,[=](){page->sameHeight();}); + connect(itemAlignToLeft,&QAction::triggered,this,[=](){page->setItemAlign(BaseDesignIntf::LeftItemAlign);}); + connect(itemAlignToRight,&QAction::triggered,this,[=](){page->setItemAlign(BaseDesignIntf::RightItemAlign);}); + connect(itemAlignToCenter,&QAction::triggered,this,[=](){page->setItemAlign(BaseDesignIntf::CenterItemAlign);}); + connect(itemAlignParent,&QAction::triggered,this,[=](){page->setItemAlign(BaseDesignIntf::ParentWidthItemAlign);}); + connect(cancelItemAlign,&QAction::triggered,this,[=](){page->setItemAlign(BaseDesignIntf::DesignedItemAlign);}); + preparePopUpMenu(menu); QAction* a = menu.exec(event->screenPos()); if (a){ @@ -1515,8 +1685,12 @@ void BaseDesignIntf::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) page->addHLayout(); if (a == createVLayout) page->addVLayout(); + processPopUpAction(a); } + + + } int BaseDesignIntf::possibleMoveDirectionFlags() const diff --git a/limereport/lrbasedesignintf.h b/limereport/lrbasedesignintf.h index 4314de9..fa820ab 100644 --- a/limereport/lrbasedesignintf.h +++ b/limereport/lrbasedesignintf.h @@ -253,7 +253,7 @@ public: virtual void setBorderLinesFlags(LimeReport::BaseDesignIntf::BorderLines flags); void setGeometryProperty(QRect rect); - PageDesignIntf* page(); + PageDesignIntf* page() const; BorderLines borderLines() const; @@ -265,7 +265,7 @@ public: virtual BaseDesignIntf* cloneItem(LimeReport::BaseDesignIntf::ItemMode mode, QObject* owner=0, QGraphicsItem* parent=0); virtual BaseDesignIntf* cloneItemWOChild(LimeReport::BaseDesignIntf::ItemMode mode, QObject* owner=0, QGraphicsItem* parent=0); virtual BaseDesignIntf* createSameTypeItem(QObject* owner=0, QGraphicsItem* parent=0) = 0; - void initFromItem(BaseDesignIntf* source); + virtual void initFromItem(BaseDesignIntf* source); virtual bool canBeSplitted(int height) const; virtual qreal minHeight() const {return 0;} @@ -339,6 +339,7 @@ public: bool isChangingPos() const; void setIsChangingPos(bool isChangingPos); bool isShapeItem() const; + bool isPageItem() const; bool hasShadow(); void setShadow(bool sh); Q_INVOKABLE QString setItemWidth(qreal width); @@ -427,7 +428,8 @@ private: void moveSelectedItems(QPointF delta); Qt::CursorShape getPossibleCursor(int cursorFlags); void updatePossibleDirectionFlags(); - + void addGuideLine(qreal x1, qreal y1, qreal x2, qreal y2); + void removeGuideLines(); private slots: void onChangeGeometryTimeOut(); @@ -495,6 +497,7 @@ private: bool m_isChangingPos; bool m_isMoveable; bool m_shadow; + QList guideLines; signals: void geometryChanged(QObject* object, QRectF newGeometry, QRectF oldGeometry); diff --git a/limereport/lrcollection.h b/limereport/lrcollection.h index e66d1b9..db9285e 100644 --- a/limereport/lrcollection.h +++ b/limereport/lrcollection.h @@ -44,8 +44,11 @@ public: Q_DECLARE_METATYPE(ACollectionProperty) namespace LimeReport{ - +#if __cplusplus >= 201703L const int inline COLLECTION_TYPE_ID = qMetaTypeId(); +#else +const int COLLECTION_TYPE_ID = qMetaTypeId(); +#endif class LIMEREPORT_EXPORT ICollectionContainer{ public: virtual QObject* createElement(const QString& collectionName,const QString& elementType)=0; diff --git a/limereport/lrdatadesignintf.cpp b/limereport/lrdatadesignintf.cpp index 0315c27..f7b3aa2 100644 --- a/limereport/lrdatadesignintf.cpp +++ b/limereport/lrdatadesignintf.cpp @@ -272,6 +272,24 @@ QVariant ModelToDataSource::dataByRowIndex(const QString &columnName, int rowInd return QVariant(); } +QVariant ModelToDataSource::dataByRowIndex(const QString &columnName, int rowIndex, int roleName) +{ + if(m_model->rowCount() > rowIndex) + return m_model->data(m_model->index(rowIndex, columnIndexByName(columnName))); + return QVariant(); +} + +QVariant ModelToDataSource::dataByRowIndex(const QString &columnName, int rowIndex, const QString &roleName) +{ + if(m_model->rowCount() > rowIndex) { + int roleCode{roleName.isEmpty() ? Qt::DisplayRole + : m_model->roleNames().key(roleName.toUtf8(), Qt::DisplayRole)}; + return m_model->data(m_model->index(rowIndex, columnIndexByName(columnName)), roleCode); + } + + return QVariant(); +} + QVariant ModelToDataSource::dataByKeyField(const QString& columnName, const QString& keyColumnName, QVariant keyData) { for( int i=0; i < m_model->rowCount(); ++i ){ @@ -310,6 +328,13 @@ int ModelToDataSource::columnIndexByName(QString name) return -1; } +QVariant ModelToDataSource::headerData(const QString &columnName, const QString &roleName) +{ + int roleCode{roleName.isEmpty() ? Qt::DisplayRole + : m_model->roleNames().key(roleName.toUtf8(), Qt::DisplayRole)}; + return m_model->headerData(columnIndexByName(columnName), Qt::Horizontal, roleCode); +} + QString ModelToDataSource::lastError() { return m_lastError; @@ -722,6 +747,18 @@ QVariant CallbackDatasource::dataByRowIndex(const QString &columnName, int rowIn return result; } +QVariant CallbackDatasource::dataByRowIndex(const QString &columnName, int rowIndex, int roleName) +{ + Q_UNUSED(roleName) + return dataByRowIndex(columnName, rowIndex); +} + +QVariant CallbackDatasource::dataByRowIndex(const QString &columnName, int rowIndex, const QString &roleName) +{ + Q_UNUSED(roleName) + return dataByRowIndex(columnName, rowIndex); +} + QVariant CallbackDatasource::dataByKeyField(const QString& columnName, const QString& keyColumnName, QVariant keyData) { int backupCurrentRow = m_currentRow; @@ -816,6 +853,12 @@ int CallbackDatasource::columnIndexByName(QString name) return -1; } +QVariant CallbackDatasource::headerData(const QString &columnName, const QString &roleName) +{ + Q_UNUSED(roleName) + return columnName; // STUB +} + bool CallbackDatasource::checkNextRecord(int recordNum){ if (bof()) checkIfEmpty(); if (m_rowCount > 0) { diff --git a/limereport/lrdatadesignintf.h b/limereport/lrdatadesignintf.h index f76de85..f070f7a 100644 --- a/limereport/lrdatadesignintf.h +++ b/limereport/lrdatadesignintf.h @@ -388,10 +388,13 @@ public: bool bof(); QVariant data(const QString& columnName); QVariant dataByRowIndex(const QString &columnName, int rowIndex); + QVariant dataByRowIndex(const QString &columnName, int rowIndex, int roleName); + QVariant dataByRowIndex(const QString &columnName, int rowIndex, const QString &roleName); QVariant dataByKeyField(const QString& columnName, const QString& keyColumnName, QVariant keyData); int columnCount(); QString columnNameByIndex(int columnIndex); int columnIndexByName(QString name); + QVariant headerData(const QString &columnName, const QString &roleName); QString lastError(); virtual QAbstractItemModel* model(); int currentRow(); @@ -421,6 +424,8 @@ public: bool eof(){return m_eof;} QVariant data(const QString &columnName); QVariant dataByRowIndex(const QString& columnName, int rowIndex); + QVariant dataByRowIndex(const QString &columnName, int rowIndex, int roleName); + QVariant dataByRowIndex(const QString &columnName, int rowIndex, const QString &roleName); QVariant dataByKeyField(const QString& columnName, const QString& keyColumnName, QVariant keyData); int columnCount(); QString columnNameByIndex(int columnIndex); @@ -428,6 +433,7 @@ public: bool isInvalid() const{ return false;} QString lastError(){ return "";} QAbstractItemModel *model(){return 0;} + QVariant headerData(const QString &columnName, const QString &roleName); private: bool checkNextRecord(int recordNum); bool checkIfEmpty(); @@ -441,6 +447,7 @@ private: QHash m_valuesCache; bool m_getDataFromCache; int m_lastKeyRow; + }; class CallbackDatasourceHolder :public QObject, public IDataSourceHolder{ diff --git a/limereport/lrdatasourceintf.h b/limereport/lrdatasourceintf.h index 26f7a65..481787c 100644 --- a/limereport/lrdatasourceintf.h +++ b/limereport/lrdatasourceintf.h @@ -18,9 +18,12 @@ public: virtual bool eof() = 0; virtual QVariant data(const QString& columnName) = 0; virtual QVariant dataByRowIndex(const QString& columnName, int rowIndex) = 0; + virtual QVariant dataByRowIndex(const QString &columnName, int rowIndex, int roleName) = 0; + virtual QVariant dataByRowIndex(const QString &columnName, int rowIndex, const QString &roleName) = 0; virtual QVariant dataByKeyField(const QString& columnName, const QString& keyColumnName, QVariant keyData) = 0; virtual int columnCount() = 0; virtual QString columnNameByIndex(int columnIndex) = 0; + virtual QVariant headerData(const QString &columnName, const QString &roleName) = 0; virtual int columnIndexByName(QString name) = 0; virtual bool isInvalid() const = 0; virtual QString lastError() = 0; diff --git a/limereport/lrdatasourcemanager.cpp b/limereport/lrdatasourcemanager.cpp index 91f1189..78c875d 100644 --- a/limereport/lrdatasourcemanager.cpp +++ b/limereport/lrdatasourcemanager.cpp @@ -466,7 +466,7 @@ QString DataSourceManager::replaceVariables(QString value){ } } } - return value; + return value; #endif return QString(); } @@ -612,13 +612,13 @@ QString DataSourceManager::replaceFields(QString query, QMap &a query.replace(pos,rx.cap(0).length(),":"+extractField(field)); } } - return query; + return query; #endif return query; } void DataSourceManager::setReportVariable(const QString &name, const QVariant &value) -{ +{ if (!containsVariable(name)){ addVariable(name,value); } else changeVariable(name,value); @@ -1689,6 +1689,28 @@ QVariant DataSourceManager::fieldDataByRowIndex(const QString &fieldName, int ro return QVariant(); } +QVariant DataSourceManager::fieldDataByRowIndex(const QString &fieldName, int rowIndex, int role) +{ + if(containsField(fieldName)) { + IDataSource *ds = dataSource(extractDataSource(fieldName)); + if(ds) { + return ds->dataByRowIndex(extractFieldName(fieldName), rowIndex, role); + } + } + return QVariant(); +} + +QVariant DataSourceManager::fieldDataByRowIndex(const QString &fieldName, int rowIndex, const QString &roleName) +{ + if(containsField(fieldName)) { + IDataSource *ds = dataSource(extractDataSource(fieldName)); + if(ds) { + return ds->dataByRowIndex(extractFieldName(fieldName), rowIndex, roleName); + } + } + return QVariant(); +} + QVariant DataSourceManager::fieldDataByKey(const QString& datasourceName, const QString& valueFieldName, const QString& keyFieldName, QVariant keyValue) { IDataSource* ds = dataSource(datasourceName); @@ -1698,6 +1720,44 @@ QVariant DataSourceManager::fieldDataByKey(const QString& datasourceName, const return QVariant(); } +QVariant DataSourceManager::headerData(const QString &fieldName, const QString &roleName) +{ + if(containsField(fieldName)) { + IDataSource *ds = dataSource(extractDataSource(fieldName)); + if(ds) { + return ds->headerData(extractFieldName(fieldName), roleName); + } + } + return QVariant(); +} + +QString DataSourceManager::columnName(const QString &datasourceName, int index) +{ + IDataSource *ds = dataSource(datasourceName); + if(ds && !ds->isInvalid() && ds->columnCount() > index) { + return ds->columnNameByIndex(index); + } + return QString("unknown"); +} + +int DataSourceManager::columnCount(const QString &datasourceName) +{ + IDataSource *ds = dataSource(datasourceName); + if(ds && !ds->isInvalid()) { + return ds->columnCount(); + } + + return -1; +} + +int DataSourceManager::columnIndex(const QString &datasourceName, const QString &columnName) +{ + IDataSource *ds = dataSource(datasourceName); + if(ds && !ds->isInvalid()) { + return ds->columnIndexByName(columnName); + } +} + void DataSourceManager::reopenDatasource(const QString& datasourceName) { QueryHolder* qh = dynamic_cast(dataSourceHolder(datasourceName)); diff --git a/limereport/lrdatasourcemanager.h b/limereport/lrdatasourcemanager.h index f870b77..f6d8508 100644 --- a/limereport/lrdatasourcemanager.h +++ b/limereport/lrdatasourcemanager.h @@ -173,12 +173,18 @@ public: bool containsField(const QString& fieldName); QVariant fieldData(const QString& fieldName); QVariant fieldDataByRowIndex(const QString& fieldName, int rowIndex); + QVariant fieldDataByRowIndex(const QString &fieldName, int rowIndex, int role); + QVariant fieldDataByRowIndex(const QString &fieldName, int rowIndex, const QString &roleName); QVariant fieldDataByKey( const QString& datasourceName, const QString& valueFieldName, const QString& keyFieldName, QVariant keyValue ); + QVariant headerData(const QString &fieldName, const QString &roleName); + QString columnName(const QString &datasourceName, int index); + int columnCount(const QString &datasourceName); + int columnIndex(const QString &datasourceName,const QString& columnName); void reopenDatasource(const QString& datasourceName); QString extractDataSource(const QString& fieldName); diff --git a/limereport/lrdatasourcemanagerintf.h b/limereport/lrdatasourcemanagerintf.h index c43b239..0ff4a55 100644 --- a/limereport/lrdatasourcemanagerintf.h +++ b/limereport/lrdatasourcemanagerintf.h @@ -55,6 +55,7 @@ public: virtual bool containsVariable(const QString& variableName) = 0; virtual QVariant variable(const QString& variableName) = 0; virtual bool addModel(const QString& name, QAbstractItemModel *model, bool owned) = 0; + virtual void addCSV(const QString& name, const QString& csvText, const QString& separator, bool firstRowIsHeader) = 0; virtual void removeModel(const QString& name) = 0; virtual bool containsDatasource(const QString& dataSourceName) = 0; virtual void clearUserVariables()=0; diff --git a/limereport/lritemscontainerdesignitf.cpp b/limereport/lritemscontainerdesignitf.cpp index 365e7e3..3cc0388 100644 --- a/limereport/lritemscontainerdesignitf.cpp +++ b/limereport/lritemscontainerdesignitf.cpp @@ -102,6 +102,8 @@ qreal ItemsContainerDesignInft::findMaxBottom() const if(subItem) if ( subItem->isVisible() && (subItem->geometry().bottom()>maxBottom) ) maxBottom = subItem->geometry().bottom(); + if(subItem->objectName() == "VerticalLayout22") + qDebug()<height(); } return maxBottom; } diff --git a/limereport/lrpagedesignintf.cpp b/limereport/lrpagedesignintf.cpp index 35323b3..8bb4eda 100644 --- a/limereport/lrpagedesignintf.cpp +++ b/limereport/lrpagedesignintf.cpp @@ -73,7 +73,7 @@ PageDesignIntf::PageDesignIntf(QObject *parent): m_itemInsertRect(0), m_itemMode(DesignMode), m_cutterBorder(0), - m_infoPosRect(0), +// m_infoPosRect(0), m_currentCommand(-1), m_changeSizeMode(false), m_changePosMode(false), @@ -120,10 +120,10 @@ void PageDesignIntf::updatePageRect() if (m_pageItem.isNull()) { m_pageItem = PageItemDesignIntf::create(this); addItem(m_pageItem.data()); - m_pageItem->setTopMargin(5); - m_pageItem->setBottomMargin(5); - m_pageItem->setLeftMargin(5); - m_pageItem->setRightMargin(5); + m_pageItem->setTopMargin(10); + m_pageItem->setBottomMargin(10); + m_pageItem->setLeftMargin(10); + m_pageItem->setRightMargin(10); m_pageItem->setObjectName("ReportPage1"); connect(m_pageItem.data(), SIGNAL(itemSelected(LimeReport::BaseDesignIntf *)), this, SIGNAL(itemSelected(LimeReport::BaseDesignIntf *))); connect(m_pageItem.data(), SIGNAL(geometryChanged(QObject *, QRectF, QRectF)), this, SLOT(slotPageGeometryChanged(QObject *, QRectF, QRectF))); @@ -324,24 +324,23 @@ void PageDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event) saveSelectedItemsGeometry(); m_changePosOrSizeMode = true; } - qreal posY = div(page->mapFromScene(event->scenePos()).y(), verticalGridStep()).quot * verticalGridStep(); - qreal posX = div(page->mapFromScene(event->scenePos()).x(), verticalGridStep()).quot * horizontalGridStep(); - if(!m_infoPosRect) - { +// qreal posY = div(page->mapFromScene(event->scenePos()).y(), verticalGridStep()).quot * verticalGridStep(); +// qreal posX = div(page->mapFromScene(event->scenePos()).x(), verticalGridStep()).quot * horizontalGridStep(); +// if(!m_infoPosRect) +// { +// m_infoPosRect = new QGraphicsTextItem(); +// m_infoPosRect->setDefaultTextColor(QColor(100,150,50)); - m_infoPosRect = new QGraphicsTextItem(); - m_infoPosRect->setDefaultTextColor(QColor(100,150,50)); +// QFont font("Arial"); +// font.setPointSize(16); +// font.setBold(true); +// m_infoPosRect->setFont(font); +// addItem(m_infoPosRect); +// } - QFont font("Arial"); - font.setPointSize(16); - font.setBold(true); - m_infoPosRect->setFont(font); - addItem(m_infoPosRect); - } - m_infoPosRect->setPlainText("(x: "+QString::number(posX/100)+", y: "+QString::number(posY/100)+") cm"); - - m_infoPosRect->setPos(posX,posY+30); +// m_infoPosRect->setPlainText("(x: "+QString::number(posX/100)+", y: "+QString::number(posY/100)+") cm"); +// m_infoPosRect->setPos(posX,posY+30); } @@ -423,11 +422,11 @@ void PageDesignIntf::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) m_selectionRect = 0; m_multiSelectStarted = false; } - if(m_infoPosRect) - { - delete m_infoPosRect; - m_infoPosRect = 0; - } +// if(m_infoPosRect) +// { +// delete m_infoPosRect; +// m_infoPosRect = 0; +// } QGraphicsScene::mouseReleaseEvent(event); } @@ -1749,6 +1748,11 @@ void PageDesignIntf::addVLayout() } } +void PageDesignIntf::setItemAlign(BaseDesignIntf::ItemAlign itemAlign) +{ + changeSelectedGroupProperty("itemAlign",QVariant(itemAlign)); +} + bool hLayoutLessThen(QGraphicsItem *c1, QGraphicsItem *c2) { return c1->pos().x() < c2->pos().x(); @@ -2158,10 +2162,9 @@ bool PasteCommand::insertItem(ItemsReaderIntf::Ptr reader) reader->readItem(item); item->setParent(parentItem); item->setParentItem(parentItem); - if (page()->reportItemsByName(item->objectName()).size() > 0){ + if (page()->reportItemsByName(item->objectName()).size()>1){ item->setObjectName(objectName); } - else foreach (BaseDesignIntf* child, item->childBaseItems()){ changeName(page(), child); }; diff --git a/limereport/lrpagedesignintf.h b/limereport/lrpagedesignintf.h index 1ef209e..5ea69f9 100644 --- a/limereport/lrpagedesignintf.h +++ b/limereport/lrpagedesignintf.h @@ -251,6 +251,7 @@ namespace LimeReport { void sameHeight(); void addHLayout(); void addVLayout(); + void setItemAlign(BaseDesignIntf::ItemAlign itemAlign); void setFont(const QFont &font); void setTextAlign(const Qt::Alignment& alignment); void setBorders(const BaseDesignIntf::BorderLines& border); @@ -271,7 +272,7 @@ namespace LimeReport { void bandDeleted(QObject* band); void slotPageItemLoaded(QObject *); void slotSelectionChanged(); - void slotAnimationStoped(QObject *animation); + void slotAnimationStoped(QObject *animation); private: template BaseDesignIntf* internalAddBand(T bandType); @@ -300,7 +301,7 @@ namespace LimeReport { BaseDesignIntf::ItemMode m_itemMode; QGraphicsRectItem* m_cutterBorder; QGraphicsRectItem* m_pageRect; - QGraphicsTextItem* m_infoPosRect; +// QGraphicsTextItem* m_infoPosRect; QVector m_commandsList; QVector m_positionStamp; QVector m_geometryStamp; diff --git a/limereport/lrpageitemdesignintf.cpp b/limereport/lrpageitemdesignintf.cpp index 57f05ae..dde5ecb 100644 --- a/limereport/lrpageitemdesignintf.cpp +++ b/limereport/lrpageitemdesignintf.cpp @@ -91,13 +91,14 @@ void PageItemDesignIntf::paint(QPainter *ppainter, const QStyleOptionGraphicsIte QRectF rect = pageRect(); if (isExtendedInDesignMode()) rect.adjust(0,0,0,m_extendedHeight); ppainter->save(); - ppainter->setOpacity(0.8); + ppainter->setOpacity(1); ppainter->fillRect(boundingRect(), pageBorderColor()); ppainter->setOpacity(1); ppainter->fillRect(rect, Qt::white); paintGrid(ppainter, rect); ppainter->setPen(gridColor()); ppainter->drawRect(boundingRect()); + drawBorder(ppainter,pageRect()); drawShadow(ppainter, boundingRect(), 10); ppainter->restore(); } @@ -113,6 +114,8 @@ void PageItemDesignIntf::paint(QPainter *ppainter, const QStyleOptionGraphicsIte QRectF tmpRect = rect(); tmpRect.adjust(-4,-4,4,4); ppainter->drawRect(tmpRect); + //drawShadow(ppainter, tmpRect, 10); + drawBorder(ppainter,pageRect()); ppainter->restore(); BaseDesignIntf::paint(ppainter,option,widget); } @@ -142,7 +145,7 @@ QColor PageItemDesignIntf::selectionColor() const QColor PageItemDesignIntf::pageBorderColor() const { - return QColor(100,150,50); + return QColor(255,255,255); } QColor PageItemDesignIntf::gridColor() const diff --git a/limereport/lrpageitemdesignintf.h b/limereport/lrpageitemdesignintf.h index 1170a8f..654cb09 100644 --- a/limereport/lrpageitemdesignintf.h +++ b/limereport/lrpageitemdesignintf.h @@ -169,12 +169,12 @@ public: bool canAcceptPaste() const{ return true;} bool resetPageNumber() const; void setResetPageNumber(bool resetPageNumber); - void updateSubItemsSize(RenderPass pass, DataSourceManager *dataManager); - void swapBands(BandDesignIntf *band, BandDesignIntf *bandToSwap); + void updateSubItemsSize(RenderPass pass, DataSourceManager *dataManager); + void swapBands(BandDesignIntf *band, BandDesignIntf *bandToSwap); void moveBandFromTo(int from, int to); QList createBandGroup(int beginIndex, int endIndex); - + bool isExtendedInDesignMode() const; void setExtendedInDesignMode(bool isExtendedInDesignMode); int extendedHeight() const; @@ -197,7 +197,7 @@ public: void placeTearOffBand(); BandDesignIntf *pageFooter() const; void setPageFooter(BandDesignIntf *pageFooter); - + PrintBehavior printBehavior() const; void setPrintBehavior(const PrintBehavior &printBehavior); @@ -211,6 +211,8 @@ public: bool mixWithPriorPage() const; void setMixWithPriorPage(bool value); + QRectF& pageRect(){return m_pageRect;} + signals: void beforeFirstPageRendered(); @@ -222,7 +224,6 @@ protected slots: void setUnitTypeProperty(BaseDesignIntf::UnitType value); protected: void collectionLoadFinished(const QString& collectionName); - QRectF& pageRect(){return m_pageRect;} void updateMarginRect(); QSizeF getRectByPageSize(const PageSize &size); void initPageSize(const PageSize &size); diff --git a/limereport/lrreportdesignwindow.cpp b/limereport/lrreportdesignwindow.cpp index ccf7a93..4da439f 100644 --- a/limereport/lrreportdesignwindow.cpp +++ b/limereport/lrreportdesignwindow.cpp @@ -215,7 +215,7 @@ void ReportDesignWindow::createActions() m_useMagnetAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_M)); connect(m_useMagnetAction,SIGNAL(toggled(bool)),this,SLOT(slotUseMagnet(bool))); - + m_newTextItemAction = new QAction(tr("Text Item"),this); m_newTextItemAction->setIcon(QIcon(":/items/TextItem")); m_actionMap.insert("TextItem",m_newTextItemAction); @@ -253,7 +253,10 @@ void ReportDesignWindow::createActions() m_previewReportAction->setIcon(QIcon(":/report/images/render")); m_previewReportAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_P)); connect(m_previewReportAction,SIGNAL(triggered()),this,SLOT(slotPreviewReport())); - + m_printReportAction = new QAction(tr("Print Report"),this); + m_printReportAction->setIcon(QIcon(":/report/images/print")); + m_printReportAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_P)); + connect(m_printReportAction,SIGNAL(triggered()),this,SLOT(slotPrintReport())); m_testAction = new QAction("test",this); m_testAction->setIcon(QIcon(":/report/images/pin")); connect(m_testAction,SIGNAL(triggered()),this,SLOT(slotTest())); @@ -372,13 +375,13 @@ void ReportDesignWindow::createToolBars() m_mainToolBar->addSeparator(); m_mainToolBar->addAction(m_zoomInReportAction); - m_mainToolBar->addAction(m_zoomOutReportAction); + m_mainToolBar->addAction(m_zoomOutReportAction); m_mainToolBar->addSeparator(); m_mainToolBar->addAction(m_previewReportAction); //m_mainToolBar->addSeparator(); //m_mainToolBar->addAction(m_useGridAction); - //m_mainToolBar->addAction(m_printReportAction); + m_mainToolBar->addAction(m_printReportAction); m_fontEditorBar = new FontEditorWidgetForDesigner(m_reportDesignWidget,tr("Font"),this); m_fontEditorBar->setIconSize(m_mainToolBar->iconSize()); @@ -517,7 +520,7 @@ void ReportDesignWindow::createMainMenu() m_fileMenu->addAction(m_saveReportAction); m_fileMenu->addAction(m_saveReportAsAction); m_fileMenu->addAction(m_previewReportAction); - //m_fileMenu->addAction(m_printReportAction); + m_fileMenu->addAction(m_printReportAction); m_editMenu = menuBar()->addMenu(tr("Edit")); m_editMenu->addAction(m_redoAction); m_editMenu->addAction(m_undoAction); @@ -858,7 +861,7 @@ void ReportDesignWindow::restoreSetting() QDesktopWidget *desktop = QApplication::desktop(); int screenWidth = desktop->screenGeometry().width(); - int screenHeight = desktop->screenGeometry().height(); + int screenHeight = desktop->screenGeometry().height(); #endif int x = screenWidth * 0.1; int y = screenHeight * 0.1; @@ -973,7 +976,7 @@ QSettings*ReportDesignWindow::settings() } void ReportDesignWindow::slotNewReport() -{ +{ if (checkNeedToSave()) { m_lblReportName->setText(""); startNewReport(); @@ -1601,7 +1604,7 @@ void ReportDesignWindow::closeEvent(QCloseEvent * event) event->ignore(); return; } - if (checkNeedToSave()){ + if (checkNeedToSave()){ m_dataBrowser->closeAllDataWindows(); writeState(); #ifdef Q_OS_WIN diff --git a/limereport/lrreportengine.cpp b/limereport/lrreportengine.cpp index 0fc7d08..2dffed9 100644 --- a/limereport/lrreportengine.cpp +++ b/limereport/lrreportengine.cpp @@ -277,9 +277,9 @@ bool ReportEnginePrivate::printPages(ReportPages pages, QPrinter *printer) QPrinterInfo pi; if (!pi.defaultPrinter().isNull()) #if QT_VERSION >= 0x050300 - m_printer.data()->setPrinterName(pi.defaultPrinterName()); + m_printer.data()->setPrinterName(pi.defaultPrinterName()); #else - m_printer.data()->setPrinterName(pi.defaultPrinter().printerName()); + m_printer.data()->setPrinterName(pi.defaultPrinter().printerName()); #endif QPrintDialog dialog(m_printer.data(),QApplication::activeWindow()); m_printerSelected = dialog.exec()!=QDialog::Rejected; @@ -310,22 +310,22 @@ void ReportEnginePrivate::internalPrintPages(ReportPages pages, QPrinter &printe printProcessors.insert("default",QSharedPointer(new PrintProcessor(&printer))); int pageCount = (printer.printRange() == QPrinter::AllPages) ? - pages.size() : - printer.toPage() - printer.fromPage(); + pages.size() : + printer.toPage() - printer.fromPage(); emit printingStarted(pageCount); foreach(PageItemDesignIntf::Ptr page, pages){ if ( !m_cancelPrinting && - ((printer.printRange() == QPrinter::AllPages) || - ( (printer.printRange()==QPrinter::PageRange) && - (currenPage >= printer.fromPage()) && - (currenPage <= printer.toPage()) - )) - ) + ((printer.printRange() == QPrinter::AllPages) || + ( (printer.printRange()==QPrinter::PageRange) && + (currenPage >= printer.fromPage()) && + (currenPage <= printer.toPage()) + )) + ) { - printProcessors["default"]->printPage(page); - emit pagePrintingFinished(currenPage); - QApplication::processEvents(); + printProcessors["default"]->printPage(page); + emit pagePrintingFinished(currenPage); + QApplication::processEvents(); } currenPage++; @@ -382,9 +382,9 @@ QStringList ReportEnginePrivate::aviableReportTranslations() void ReportEnginePrivate::setReportTranslation(const QString &languageName) { foreach(QLocale::Language language, aviableLanguages()){ - if (QLocale::languageToString(language).compare(languageName) == 0){ - setReportLanguage(language); - } + if (QLocale::languageToString(language).compare(languageName) == 0){ + setReportLanguage(language); + } } } @@ -504,7 +504,7 @@ bool ReportEnginePrivate::showPreviewWindow(ReportPages pages, PreviewHints hint w->setPages(pages); w->setLayoutDirection(m_previewLayoutDirection); w->setStyleSheet(styleSheet()); -// w->setDefaultPrinter() + // w->setDefaultPrinter() if (!dataManager()->errorsList().isEmpty()){ w->setErrorMessages(dataManager()->errorsList()); @@ -542,15 +542,15 @@ void ReportEnginePrivate::previewReport(PreviewHints hints) void ReportEnginePrivate::previewReport(QPrinter* printer, PreviewHints hints) { - try{ - dataManager()->setDesignTime(false); - ReportPages pages = renderToPages(); - dataManager()->setDesignTime(true); - showPreviewWindow(pages, hints, printer); - } catch (ReportError &exception){ - saveError(exception.what()); - showError(exception.what()); - } + try{ + dataManager()->setDesignTime(false); + ReportPages pages = renderToPages(); + dataManager()->setDesignTime(true); + showPreviewWindow(pages, hints, printer); + } catch (ReportError &exception){ + saveError(exception.what()); + showError(exception.what()); + } } ReportDesignWindowInterface*ReportEnginePrivate::getDesignerWindow() @@ -569,7 +569,7 @@ ReportDesignWindowInterface*ReportEnginePrivate::getDesignerWindow() m_designerWindow->setShowProgressDialog(m_showProgressDialog); #endif } - } + } if (m_designerWindow){ m_datasources->updateDatasourceModel(); } @@ -664,19 +664,19 @@ bool ReportEnginePrivate::slotLoadFromFile(const QString &fileName) if (!QFile::exists(fileName)) { - if ( hasActivePreview() ) - { - QMessageBox::information( NULL, - tr( "Report File Change" ), - tr( "The report file \"%1\" has changed names or been deleted.\n\nThis preview is no longer valid." ).arg( fileName ) - ); + if ( hasActivePreview() ) + { + QMessageBox::information( NULL, + tr( "Report File Change" ), + tr( "The report file \"%1\" has changed names or been deleted.\n\nThis preview is no longer valid." ).arg( fileName ) + ); - clearReport(); + clearReport(); - currentPreview->close(); - } + currentPreview->close(); + } - return false; + return false; } clearReport(); @@ -708,7 +708,7 @@ bool ReportEnginePrivate::slotLoadFromFile(const QString &fileName) if ( hasActivePreview() ) { - currentPreview->reloadPreview(); + currentPreview->reloadPreview(); } EASY_END_BLOCK; return true; @@ -778,23 +778,23 @@ QSettings*ReportEnginePrivate::settings() bool ReportEnginePrivate::loadFromFile(const QString &fileName, bool autoLoadPreviewOnChange) { - // only watch one file at a time + // only watch one file at a time - if ( !m_fileWatcher->files().isEmpty() ) - { - m_fileWatcher->removePaths( m_fileWatcher->files() ); - } + if ( !m_fileWatcher->files().isEmpty() ) + { + m_fileWatcher->removePaths( m_fileWatcher->files() ); + } - if ( autoLoadPreviewOnChange ) - { - m_fileWatcher->addPath( fileName ); - } + if ( autoLoadPreviewOnChange ) + { + m_fileWatcher->addPath( fileName ); + } - bool result = slotLoadFromFile( fileName ); - if (result) { - emit loadFinished(); - } - return result; + bool result = slotLoadFromFile( fileName ); + if (result) { + emit loadFinished(); + } + return result; } bool ReportEnginePrivate::loadFromByteArray(QByteArray* data, const QString &name){ @@ -1302,7 +1302,7 @@ ReportPages ReportEnginePrivate::renderToPages() scriptContext()->qobjectToScript("engine",this); #ifdef USE_QTSCRIPTENGINE - ScriptEngineManager::instance().scriptEngine()->pushContext(); + ScriptEngineManager::instance().scriptEngine()->pushContext(); #endif if (m_scriptEngineContext->runInitScript()){ @@ -1320,10 +1320,10 @@ ReportPages ReportEnginePrivate::renderToPages() if (!page->isTOC() && page->isPrintable()){ page->setReportSettings(&m_reportSettings); result = appendPages( - result, - m_reportRender->renderPageToPages(page), - page->mixWithPriorPage() ? MixPages : AppendPages - ); + result, + m_reportRender->renderPageToPages(page), + page->mixWithPriorPage() ? MixPages : AppendPages + ); } else if (page->isTOC()){ startTOCPage = result.count(); pageAfterTOCIndex = i+1; @@ -1340,20 +1340,20 @@ ReportPages ReportEnginePrivate::renderToPages() if ( m_renderingPages.count() > (pageAfterTOCIndex)) secondPage = m_renderingPages.at(pageAfterTOCIndex); ReportPages pages = m_reportRender->renderTOC( - page, - true, - secondPage && secondPage->resetPageNumber() - ); + page, + true, + secondPage && secondPage->resetPageNumber() + ); for (int j=0; jrenderPageToPages(page), - page->mixWithPriorPage() ? MixPages : AppendPages - ); + result, + m_reportRender->renderPageToPages(page), + page->mixWithPriorPage() ? MixPages : AppendPages + ); } } } @@ -1367,7 +1367,7 @@ ReportPages ReportEnginePrivate::renderToPages() m_reportRendering = false; #ifdef USE_QTSCRIPTENGINE - ScriptEngineManager::instance().scriptEngine()->popContext(); + ScriptEngineManager::instance().scriptEngine()->popContext(); #endif return result; } else { @@ -1818,7 +1818,7 @@ PrintProcessor::PrintProcessor(QPrinter* printer) bool PrintProcessor::printPage(PageItemDesignIntf::Ptr page) { -#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1)) + if (!m_firstPage && !m_painter->isActive()) return false; PageDesignIntf* backupPage = dynamic_cast(page->scene()); @@ -1836,91 +1836,47 @@ bool PrintProcessor::printPage(PageItemDesignIntf::Ptr page) m_firstPage = false; } +#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1)) qreal leftMargin, topMargin, rightMargin, bottomMargin; m_printer->getPageMargins(&leftMargin, &topMargin, &rightMargin, &bottomMargin, QPrinter::Millimeter); - - QRectF printerPageRect = m_printer->pageRect(QPrinter::Millimeter); - printerPageRect = QRectF(0,0,(printerPageRect.size().width() + rightMargin + leftMargin) * page->unitFactor(), - (printerPageRect.size().height() + bottomMargin +topMargin) * page->unitFactor()); - - if (page->printBehavior() == PageItemDesignIntf::Split && m_printer->pageSize() != static_cast(page->pageSize()) && - printerPageRect.width() < page->geometry().width()) - { - qreal pageWidth = page->geometry().width(); - qreal pageHeight = page->geometry().height(); - QRectF currentPrintingRect = printerPageRect; - qreal curHeight = 0; - qreal curWidth = 0; - bool first = true; - while (pageHeight > 0){ - while (curWidth < pageWidth){ - if (!first) m_printer->newPage(); else first = false; - m_renderPage.render(m_painter, m_printer->pageRect(), currentPrintingRect); - currentPrintingRect.adjust(printerPageRect.size().width(), 0, printerPageRect.size().width(), 0); - curWidth += printerPageRect.size().width(); - - } - pageHeight -= printerPageRect.size().height(); - curHeight += printerPageRect.size().height(); - currentPrintingRect = printerPageRect; - currentPrintingRect.adjust(0, curHeight, 0, curHeight); - curWidth = 0; - } - - } else { - if (page->getSetPageSizeToPrinter()){ - QRectF source = page->geometry(); - QSizeF inchSize = source.size() / (100 * 2.54); - QRectF target = QRectF(QPoint(0,0), inchSize * m_printer->resolution()); - m_renderPage.render(m_painter, target, source); - } else { - m_renderPage.render(m_painter); - } - } - page->setPos(backupPagePos); - m_renderPage.removePageItem(page); - if (backupPage) backupPage->reactivatePageItem(page); #else - if (!m_firstPage && !m_painter->isActive()) return false; - PageDesignIntf* backupPage = dynamic_cast(page->scene()); - - QPointF backupPagePos = page->pos(); - page->setPos(0,0); - m_renderPage.setPageItem(page); - m_renderPage.setSceneRect(m_renderPage.pageItem()->mapToScene(m_renderPage.pageItem()->rect()).boundingRect()); - initPrinter(m_renderPage.pageItem()); - - if (!m_firstPage){ - m_printer->newPage(); - } else { - m_painter = new QPainter(m_printer); - if (!m_painter->isActive()) return false; - m_firstPage = false; - } - qreal leftMargin = m_printer->pageLayout().margins().left(); qreal topMargin = m_printer->pageLayout().margins().top(); qreal rightMargin = m_printer->pageLayout().margins().right(); qreal bottomMargin = m_printer->pageLayout().margins().bottom(); +#endif QRectF printerPageRect = m_printer->pageRect(QPrinter::Millimeter); printerPageRect = QRectF(0,0,(printerPageRect.size().width() + rightMargin + leftMargin) * page->unitFactor(), - (printerPageRect.size().height() + bottomMargin + topMargin) * page->unitFactor()); - if (page->printBehavior() == PageItemDesignIntf::Split && m_printer->pageLayout().pageSize() != QPageSize((QPageSize::PageSizeId)page->pageSize()) && + (printerPageRect.size().height() + bottomMargin + topMargin) * page->unitFactor()); +#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1)) + if (page->printBehavior() == PageItemDesignIntf::Split && + m_printer->pageSize() != static_cast(page->pageSize()) && printerPageRect.width() < page->geometry().width()) { +#else + if ( + page->printBehavior() == PageItemDesignIntf::Split && + m_printer->pageLayout().pageSize() != QPageSize((QPageSize::PageSizeId)page->pageSize()) && + printerPageRect.width() < page->geometry().width() + ){ +#endif qreal pageWidth = page->geometry().width(); qreal pageHeight = page->geometry().height(); - QRectF currentPrintingRect = printerPageRect; qreal curHeight = 0; qreal curWidth = 0; + QRectF currentPrintingRect = printerPageRect; + bool first = true; while (pageHeight > 0){ while (curWidth < pageWidth){ if (!first) m_printer->newPage(); else first = false; - m_renderPage.render(m_painter, m_printer->pageRect(QPrinter::Millimeter), currentPrintingRect); - currentPrintingRect.adjust(printerPageRect.size().width(), 0, printerPageRect.size().width(), 0); + m_renderPage.render(m_painter, QRectF(), currentPrintingRect); curWidth += printerPageRect.size().width(); + currentPrintingRect = QRectF( + curWidth, 0, + printerPageRect.size().width() > (pageWidth - curWidth) ? (pageWidth - curWidth) : printerPageRect.size().width(), pageHeight + ); } pageHeight -= printerPageRect.size().height(); @@ -1943,7 +1899,6 @@ bool PrintProcessor::printPage(PageItemDesignIntf::Ptr page) page->setPos(backupPagePos); m_renderPage.removePageItem(page); if (backupPage) backupPage->reactivatePageItem(page); -#endif return true; } @@ -1952,14 +1907,14 @@ void PrintProcessor::initPrinter(PageItemDesignIntf* page) #if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1)) if (page->oldPrintMode()){ m_printer->setPageMargins(page->leftMargin(), - page->topMargin(), - page->rightMargin(), - page->bottomMargin(), - QPrinter::Millimeter); + page->topMargin(), + page->rightMargin(), + page->bottomMargin(), + QPrinter::Millimeter); m_printer->setOrientation(static_cast(page->pageOrientation())); QSizeF pageSize = (page->pageOrientation()==PageItemDesignIntf::Landscape)? - QSizeF(page->sizeMM().height(),page->sizeMM().width()): - page->sizeMM(); + QSizeF(page->sizeMM().height(),page->sizeMM().width()): + page->sizeMM(); m_printer->setPaperSize(pageSize,QPrinter::Millimeter); } else { m_printer->setFullPage(page->fullPage()); @@ -1968,13 +1923,13 @@ void PrintProcessor::initPrinter(PageItemDesignIntf* page) m_printer->setOrientation(static_cast(page->pageOrientation())); if (page->pageSize()==PageItemDesignIntf::Custom){ QSizeF pageSize = (page->pageOrientation()==PageItemDesignIntf::Landscape)? - QSizeF(page->sizeMM().height(),page->sizeMM().width()): - page->sizeMM(); + QSizeF(page->sizeMM().height(),page->sizeMM().width()): + page->sizeMM(); if (page->getSetPageSizeToPrinter() || m_printer->outputFormat() == QPrinter::PdfFormat) - m_printer->setPaperSize(pageSize, QPrinter::Millimeter); + m_printer->setPaperSize(pageSize, QPrinter::Millimeter); } else { if (page->getSetPageSizeToPrinter() || m_printer->outputFormat() == QPrinter::PdfFormat) - m_printer->setPaperSize(static_cast(page->pageSize())); + m_printer->setPaperSize(static_cast(page->pageSize())); } } #else @@ -1982,23 +1937,23 @@ void PrintProcessor::initPrinter(PageItemDesignIntf* page) m_printer->setPageMargins(QMarginsF(page->leftMargin(), page->topMargin(), page->rightMargin(), page->bottomMargin()),QPageLayout::Millimeter); m_printer->setPageOrientation((QPageLayout::Orientation)page->pageOrientation()); QSizeF pageSize = (page->pageOrientation()==PageItemDesignIntf::Landscape)? - QSizeF(page->sizeMM().height(),page->sizeMM().width()): - page->sizeMM(); + QSizeF(page->sizeMM().height(),page->sizeMM().width()): + page->sizeMM(); m_printer->setPageSize(QPageSize(pageSize, QPageSize::Millimeter)); - } else { + } else { m_printer->setFullPage(page->fullPage()); if (page->dropPrinterMargins()) m_printer->setPageMargins(QMarginsF(0, 0, 0, 0), QPageLayout::Point); m_printer->setPageOrientation((QPageLayout::Orientation)page->pageOrientation()); if (page->pageSize()==PageItemDesignIntf::Custom){ QSizeF pageSize = (page->pageOrientation()==PageItemDesignIntf::Landscape)? - QSizeF(page->sizeMM().height(),page->sizeMM().width()): - page->sizeMM(); + QSizeF(page->sizeMM().height(),page->sizeMM().width()): + page->sizeMM(); if (page->getSetPageSizeToPrinter() || m_printer->outputFormat() == QPrinter::PdfFormat) - m_printer->setPageSize(QPageSize(pageSize, QPageSize::Millimeter)); + m_printer->setPageSize(QPageSize(pageSize, QPageSize::Millimeter)); } else { if (page->getSetPageSizeToPrinter() || m_printer->outputFormat() == QPrinter::PdfFormat) - m_printer->setPageSize(QPageSize((QPageSize::PageSizeId)page->pageSize())); + m_printer->setPageSize(QPageSize((QPageSize::PageSizeId)page->pageSize())); } } #endif @@ -2181,4 +2136,3 @@ qreal WatermarkHelper::valueToPixels(qreal value) }// namespace LimeReport - diff --git a/limereport/lrreportrender.cpp b/limereport/lrreportrender.cpp index d412b19..39b1e9f 100644 --- a/limereport/lrreportrender.cpp +++ b/limereport/lrreportrender.cpp @@ -32,6 +32,7 @@ #include "lrglobal.h" #include "lrreportrender.h" +#include "lrgroupbands.h" #include "lrpagedesignintf.h" #include "lrbanddesignintf.h" #include "lritemdesignintf.h" @@ -66,9 +67,9 @@ bool ReportRender::isNeedToRearrangeColumnsItems() maxHeightColumn = i; } if (maxHeightColumn>0 && columnItemsCount(maxHeightColumn) lastColumnItem(maxHeightColumn-1)->height() - ){ - return true; + maxHeight> lastColumnItem(maxHeightColumn-1)->height() + ){ + return true; } } return false; @@ -78,8 +79,8 @@ BandDesignIntf *ReportRender::lastColumnItem(int columnIndex) { if (columnIndex<0) return 0; for(int i=0;icolumnIndex()>columnIndex) - return m_columnedBandItems[i-1]; + if (m_columnedBandItems[i]->columnIndex()>columnIndex) + return m_columnedBandItems[i-1]; } return m_columnedBandItems.last(); } @@ -90,15 +91,15 @@ void ReportRender::rearrangeColumnsItems() qreal startHeight = columnHeigth(0); int avg = m_columnedBandItems.size() / m_columnedBandItems[0]->columnsCount(); for (int i = 1; i < m_columnedBandItems[0]->columnsCount(); ++i){ - if (columnItemsCount(i) < avg){ - int getCount = avg * (m_columnedBandItems[0]->columnsCount()-i) - columnItemsCount(i); - for (int j = 0; j < getCount; ++j){ - BandDesignIntf* band = lastColumnItem(i-1); - band->setPos(band->pos().x()+band->width(),m_columnedBandItems[0]->pos().y()); - band->setColumnIndex(i); - } + if (columnItemsCount(i) < avg){ + int getCount = avg * (m_columnedBandItems[0]->columnsCount()-i) - columnItemsCount(i); + for (int j = 0; j < getCount; ++j){ + BandDesignIntf* band = lastColumnItem(i-1); + band->setPos(band->pos().x()-30,m_columnedBandItems[0]->pos().y()); + band->setColumnIndex(i); + } - } + } } m_renderPageItem->relocateBands(); m_maxHeightByColumn[0]+=startHeight-maxColumnHeight(); @@ -122,9 +123,9 @@ qreal ReportRender::columnHeigth(int columnIndex) { qreal result = 0; for(int i=0;icolumnIndex()==columnIndex) - result += m_columnedBandItems[i]->height(); - if (m_columnedBandItems[i]->columnIndex()>columnIndex) break; + if (m_columnedBandItems[i]->columnIndex()==columnIndex) + result += m_columnedBandItems[i]->height(); + if (m_columnedBandItems[i]->columnIndex()>columnIndex) break; } return result; } @@ -206,7 +207,7 @@ void ReportRender::analizeItem(ContentItemDesignIntf* contentItem, BandDesignInt rx.setMinimal(true); if (rx.indexIn(content)>=0){ functions.append(functionName); - } + } #endif } if (functions.size()>0) @@ -270,7 +271,7 @@ void ReportRender::renderPage(PageItemDesignIntf* patternPage, bool isTOC, bool startNewPage(true); renderReportHeader(m_patternPageItem, AfterPageHeader); - + m_dataSourceSorted = false; BandDesignIntf* lastRenderedBand = 0; for (int i=0;idataBandCount() && !m_renderCanceled; i++){ lastRenderedBand = m_patternPageItem->dataBandAt(i); @@ -416,7 +417,7 @@ void ReportRender::extractGroupFuntionsFromItem(ContentItemDesignIntf* contentIt if (dataBand){ GroupFunction* gf = datasources()->addGroupFunction( functionName, captures.at(Const::VALUE_INDEX), band->objectName(), dataBand->objectName() - ); + ); if (gf){ connect(dataBand, SIGNAL(bandRendered(BandDesignIntf*)), gf, SLOT(slotBandRendered(BandDesignIntf*))); @@ -426,7 +427,7 @@ void ReportRender::extractGroupFuntionsFromItem(ContentItemDesignIntf* contentIt } else { GroupFunction* gf = datasources()->addGroupFunction( functionName, captures.at(Const::VALUE_INDEX), band->objectName(), captures.at(dsIndex) - ); + ); gf->setInvalid(tr("Databand \"%1\" not found").arg(captures.at(dsIndex))); } } @@ -474,7 +475,7 @@ void ReportRender::extractGroupFuntionsFromItem(ContentItemDesignIntf* contentIt gf->setInvalid(tr("Wrong using function %1").arg(functionName)); } } - } + } #endif } @@ -510,14 +511,14 @@ void ReportRender::replaceGroupFunctionsInItem(ContentItemDesignIntf* contentIte QString expressionIndex = datasources()->putGroupFunctionsExpressions(captures.at(Const::VALUE_INDEX)); if (captures.size()<5){ content.replace(captures.at(0), QString("%1(%2,%3)") - .arg(functionName).arg('"'+expressionIndex+'"').arg('"'+band->objectName()+'"')); + .arg(functionName).arg('"'+expressionIndex+'"').arg('"'+band->objectName()+'"')); } else { content.replace(captures.at(0), QString("%1(%2,%3,%4)").arg( - functionName, - '"'+expressionIndex+'"', - '"'+band->objectName()+'"', - captures.at(4) - )); + functionName, + '"'+expressionIndex+'"', + '"'+band->objectName()+'"', + captures.at(4) + )); } } match = rx.match(content, pos + match.capturedLength()); @@ -536,11 +537,11 @@ void ReportRender::replaceGroupFunctionsInItem(ContentItemDesignIntf* contentIte content.replace(captures.at(0),QString("%1(%2,%3)").arg(functionName).arg('"'+expressionIndex+'"').arg('"'+band->objectName()+'"')); } else { content.replace(captures.at(0),QString("%1(%2,%3,%4)").arg( - functionName, - '"'+expressionIndex+'"', - '"'+band->objectName()+'"', - captures.at(4) - )); + functionName, + '"'+expressionIndex+'"', + '"'+band->objectName()+'"', + captures.at(4) + )); } } pos += rx.matchedLength(); @@ -573,8 +574,8 @@ void ReportRender::replaceGroupsFunction(BandDesignIntf *band) QColor ReportRender::makeBackgroundColor(BandDesignIntf* band){ if (band->useAlternateBackgroundColor()){ return datasources()->variable(QLatin1String("line_") + band->objectName().toLower()).toInt() %2 == 0 ? - band->backgroundColor() : - band->alternateBackgroundColor(); + band->backgroundColor() : + band->alternateBackgroundColor(); } return band->backgroundColor(); } @@ -591,12 +592,12 @@ BandDesignIntf* ReportRender::renderBand(BandDesignIntf *patternBand, BandDesign BandDesignIntf* bandClone = 0; if (bandData){ - bandClone = bandData; + bandClone = bandData; } else { bandClone = renderData(patternBand); } - if (isLast) bandClone->setBootomSpace(1); + if (isLast) bandClone->setBottomSpace(1); if (mode == ForcedStartPage){ savePage(); @@ -613,7 +614,7 @@ BandDesignIntf* ReportRender::renderBand(BandDesignIntf *patternBand, BandDesign if ( isLast && bandClone->keepFooterTogether() && bandClone->sliceLastRow() ){ if (m_maxHeightByColumn[m_currentColumn] < (bandClone->height()+m_reportFooterHeight)) m_maxHeightByColumn[m_currentColumn] -= ((m_maxHeightByColumn[m_currentColumn]-bandClone->height())+(bandClone->height()*calcSlicePercent(bandClone->height()))); - } + } if (!bandClone->isEmpty() || patternBand->printIfEmpty()){ if (!registerBand(bandClone)){ @@ -645,7 +646,7 @@ BandDesignIntf* ReportRender::renderBand(BandDesignIntf *patternBand, BandDesign patternBand->bandHeader()->columnsCount()>1 && !m_lostHeadersMoved && patternBand->bandNestingLevel() == 0 - ){ + ){ renderBand(patternBand->bandHeader(), 0, mode); } } else { @@ -697,7 +698,7 @@ void ReportRender::renderDataBand(BandDesignIntf *dataBand) m_lastRenderedFooter = 0; if (!dataBand->datasourceName().isEmpty()) - bandDatasource = datasources()->dataSource(dataBand->datasourceName()); + bandDatasource = datasources()->dataSource(dataBand->datasourceName()); BandDesignIntf* header = dataBand->bandHeader(); BandDesignIntf* footer = dataBand->bandFooter(); @@ -778,7 +779,7 @@ void ReportRender::renderDataBand(BandDesignIntf *dataBand) } if (!dataBand->keepFooterTogether()) - m_reprintableBands.removeOne(header); + m_reprintableBands.removeOne(header); if (header) recalcIfNeeded(header); bool didGoBack = !bandDatasource->eof() && bandDatasource->prior(); @@ -812,7 +813,7 @@ void ReportRender::renderPageHeader(PageItemDesignIntf *patternPage) if (band){ if (m_datasources->variable("#PAGE").toInt()!=1 || band->property("printOnFirstPage").toBool() - ) + ) renderBand(band, 0); } } @@ -964,6 +965,14 @@ void ReportRender::renderDataHeader(BandDesignIntf *header) void ReportRender::renderGroupHeader(BandDesignIntf *parentBand, IDataSource* dataSource, bool firstTime) { + GroupBandHeader *group = dynamic_cast(parentBand); + if(dataSource->model() && group && !group->groupFieldName().isEmpty() && !m_dataSourceSorted) + { + dataSource->model()->sort(dataSource->columnIndexByName(group->groupFieldName()),group->SortFieldNameBy()); + qDebug()<<"sorted;"; + m_dataSourceSorted = true; + } + foreach(BandDesignIntf* band,parentBand->childrenByType(BandDesignIntf::GroupHeader)){ IGroupBand* gb = dynamic_cast(band); if (gb&&gb->isNeedToClose(datasources())){ @@ -1153,7 +1162,7 @@ void ReportRender::placeBandOnPage(BandDesignIntf* band, int columnIndex){ bool isMultiColumnHeader(BandDesignIntf* band){ return ( (band->columnsCount() > 1 ) && - (band->isHeader() && + (band->isHeader() && ((band->bandNestingLevel() == 0) || (band->columnsFillDirection() == BandDesignIntf::Horizontal)))); } @@ -1182,7 +1191,7 @@ bool ReportRender::registerBand(BandDesignIntf *band, bool registerInChildren) } if ( (band->columnsCount() > 1) && - (!band->isHeader() || (band->bandNestingLevel() > 0 && band->columnsFillDirection() != BandDesignIntf::Horizontal ))){ + (!band->isHeader() || (band->bandNestingLevel() > 0 && band->columnsFillDirection() != BandDesignIntf::Horizontal ))){ if (band->columnsFillDirection() == BandDesignIntf::Horizontal){ if (m_currentColumn < band->columnsCount()-1) @@ -1194,7 +1203,7 @@ bool ReportRender::registerBand(BandDesignIntf *band, bool registerInChildren) if ((m_currentColumn !=0) && (m_maxHeightByColumn[0] == m_maxHeightByColumn[m_currentColumn]) && (m_maxHeightByColumn[0] >= band->height()) - ){ + ){ m_currentColumn = 0; } } @@ -1203,13 +1212,13 @@ bool ReportRender::registerBand(BandDesignIntf *band, bool registerInChildren) m_currentColumn = m_currentColumn == -1 ? 0: m_currentColumn; if ( (band->height() <= m_maxHeightByColumn[m_currentColumn]) || - m_patternPageItem->endlessHeight() || - (isMultiColumnHeader(band) && (band->height() <= m_maxHeightByColumn[0])) - ){ + m_patternPageItem->endlessHeight() || + (isMultiColumnHeader(band) && (band->height() <= m_maxHeightByColumn[0])) + ){ if ( (band->bandType() == BandDesignIntf::PageFooter) ){ - for (int i=0; i < m_maxHeightByColumn.size(); ++i) - m_maxHeightByColumn[i]+=band->height(); + for (int i=0; i < m_maxHeightByColumn.size(); ++i) + m_maxHeightByColumn[i]+=band->height(); } if ( isMultiColumnHeader(band)){ @@ -1245,7 +1254,7 @@ bool ReportRender::registerBand(BandDesignIntf *band, bool registerInChildren) band->bandType()!=BandDesignIntf::ReportFooter && !list->contains(band) && !band->reprintOnEachPage() - ) + ) list->append(band); } @@ -1283,7 +1292,7 @@ BandDesignIntf* ReportRender::sliceBand(BandDesignIntf *band, BandDesignIntf* pa DataBandDesignIntf* data = dynamic_cast(band); if (isLast && data && data->keepFooterTogether() && band->height()sliceLastRow() - ){ + ){ if (band->height()>(m_maxHeightByColumn[m_currentColumn]-m_reportFooterHeight)){ m_maxHeightByColumn[m_currentColumn] -= ((m_maxHeightByColumn[m_currentColumn]-band->height())+(band->height()*calcSlicePercent(band->height()))); } @@ -1341,9 +1350,9 @@ void ReportRender::createTOCMarker(bool startNewRange) BandDesignIntf *ReportRender::saveUppperPartReturnBottom(BandDesignIntf *band, int height, BandDesignIntf* patternBand) { - int sliceHeight = height; - BandDesignIntf* upperBandPart = dynamic_cast(band->cloneUpperPart(sliceHeight)); - BandDesignIntf* bottomBandPart = dynamic_cast(band->cloneBottomPart(sliceHeight)); + //int sliceHeight = height; + BandDesignIntf* upperBandPart = dynamic_cast(band->cloneUpperPart(height)); + BandDesignIntf* bottomBandPart = dynamic_cast(band->cloneBottomPart(height)); if (!bottomBandPart->isEmpty()){ if (patternBand->keepFooterTogether()) closeFooterGroup(patternBand); @@ -1351,6 +1360,7 @@ BandDesignIntf *ReportRender::saveUppperPartReturnBottom(BandDesignIntf *band, i bottomBandPart->copyBookmarks(band); } if (!upperBandPart->isEmpty()){ + upperBandPart->setBottomSpace(0); upperBandPart->updateItemSize(m_datasources, FirstPass, height); registerBand(upperBandPart); upperBandPart->copyBookmarks(band); @@ -1366,7 +1376,7 @@ BandDesignIntf *ReportRender::saveUppperPartReturnBottom(BandDesignIntf *band, i patternBand->bandHeader()->columnsCount()>1 && !m_lostHeadersMoved && patternBand->bandNestingLevel() == 0 - ){ + ){ renderBand(patternBand->bandHeader(), 0, StartNewPageAsNeeded); } @@ -1398,6 +1408,7 @@ BandDesignIntf *ReportRender::renderData(BandDesignIntf *patternBand, bool emitB emit(patternBand->preparedForRender()); bandClone->updateItemSize(m_datasources); + bandClone->setBottomSpace(patternBand->height() - patternBand->findMaxBottom()); //m_scriptEngineContext->baseDesignIntfToScript(bandClone); emit(patternBand->afterData()); @@ -1484,7 +1495,7 @@ void ReportRender::checkFooterGroup(BandDesignIntf *groupBand) foreach(BandDesignIntf* band, *holder){ qreal percent = band->height()*100 / m_dataAreaSize; if (m_renderedDataBandCount<=1 || percent>20 ){ - holder->removeAll(band); + holder->removeAll(band); } } } @@ -1523,8 +1534,8 @@ void ReportRender::checkLostHeadersOnPrevPage() it.toBack(); if (it.hasPrevious()){ if (it.previous()->isFooter()){ - if (it.hasPrevious()) it.previous(); - else return; + if (it.hasPrevious()) it.previous(); + else return; } } @@ -1561,8 +1572,8 @@ void ReportRender::checkLostHeadersInPrevColumn() it.toBack(); if (it.hasPrevious()){ if (it.previous()->isFooter()){ - if (it.hasPrevious()) it.previous(); - else return; + if (it.hasPrevious()) it.previous(); + else return; } } @@ -1578,7 +1589,7 @@ void ReportRender::checkLostHeadersInPrevColumn() if (lostHeaders.size() > 0){ m_lostHeadersMoved = true; -// std::sort(lostHeaders.begin(), lostHeaders.end(), bandLessThen); + // std::sort(lostHeaders.begin(), lostHeaders.end(), bandLessThen); std::sort(lostHeaders.begin(), lostHeaders.end(), bandLessThen); foreach(BandDesignIntf* header, lostHeaders){ registerBand(header); @@ -1596,7 +1607,7 @@ BandDesignIntf* ReportRender::findEnclosingGroup() foreach(BandDesignIntf* gb, m_childBands.keys()){ if (m_childBands.value(gb)->tryToKeepTogether()&& ((gb->bandIndex()bandIndex(); } @@ -1671,7 +1682,7 @@ void ReportRender::savePage(bool isLast) pageHeight += band->height(); } m_renderPageItem->setHeight(pageHeight + 10 + - (m_patternPageItem->topMargin() + m_patternPageItem->bottomMargin()) * Const::mmFACTOR); + (m_patternPageItem->topMargin() + m_patternPageItem->bottomMargin()) * Const::mmFACTOR); } } diff --git a/limereport/lrreportrender.h b/limereport/lrreportrender.h index 97f818b..7529c5f 100644 --- a/limereport/lrreportrender.h +++ b/limereport/lrreportrender.h @@ -92,7 +92,7 @@ public: enum BandPrintMode {PrintAlwaysPrintable, PrintNotAlwaysPrintable }; enum ResetPageNuberType{BandReset, PageReset}; enum PageRenderStage{BeforePageHeader, AfterPageHeader}; - typedef QSharedPointer Ptr; + typedef QSharedPointer Ptr; ~ReportRender(); ReportRender(QObject *parent = 0); void setDatasources(DataSourceManager* value); @@ -220,6 +220,7 @@ private: unsigned long long m_currentNameIndex; bool m_newPageStarted; bool m_lostHeadersMoved; + bool m_dataSourceSorted = false; }; } // namespace LimeReport diff --git a/limereport/lrscriptenginemanager.cpp b/limereport/lrscriptenginemanager.cpp index 31220d3..7b9562d 100644 --- a/limereport/lrscriptenginemanager.cpp +++ b/limereport/lrscriptenginemanager.cpp @@ -649,7 +649,7 @@ QVariant ScriptEngineManager::evaluateScript(const QString& script){ QVariant varValue; if (script.contains(rx)){ -#else +#else QRegularExpression rx = getScriptRegEx(); QVariant varValue; @@ -712,9 +712,12 @@ int ScriptEngineManager::getPageFreeSpace(PageItemDesignIntf* page){ height += band->geometry().height() * m_dataManager->dataSource(band->datasourceName())->model()->rowCount(); } else height += band->height(); + } + height += (page->topMargin() + page->bottomMargin()) * Const::mmFACTOR; + return page->height() - height - (page->pageFooter()?page->pageFooter()->height() : 0); - } else return -1; + } else return 0; } void ScriptEngineManager::addTableOfContentsItem(const QString& uniqKey, const QString& content, int indent) @@ -1073,6 +1076,79 @@ bool ScriptEngineManager::createReopenDatasourceFunction() return addFunction(fd); } +bool ScriptEngineManager::createGetFieldByRowIndexEx() +{ + JSFunctionDesc fd; + fd.setManager(m_functionManager); + fd.setManagerName(LimeReport::Const::FUNCTION_MANAGER_NAME); + fd.setCategory(tr("GENERAL")); + fd.setName("getFieldByRowIndexEx"); + fd.setDescription("getFieldByRowIndexEx(\"" + tr("FieldName") + "\", \"" + tr("RowIndex") + + "\", \"" + tr("RoleIndex") + "\")"); + fd.setScriptWrapper(QString("function getFieldByRowIndexEx(fieldName, rowIndex, role){" + "return %1.getFieldByRowIndexEx(fieldName, rowIndex, role);}") + .arg(LimeReport::Const::FUNCTION_MANAGER_NAME)); + return addFunction(fd); +} + +bool ScriptEngineManager::createGetFieldByRowIndexEx2() +{ + JSFunctionDesc fd; + fd.setManager(m_functionManager); + fd.setManagerName(LimeReport::Const::FUNCTION_MANAGER_NAME); + fd.setCategory(tr("GENERAL")); + fd.setName("getFieldByRowIndexEx2"); + fd.setDescription("getFieldByRowIndexEx2(\"" + tr("FieldName") + "\", \"" + tr("RowIndex") + + "\", \"" + tr("RoleName") + "\")"); + fd.setScriptWrapper(QString("function getFieldByRowIndexEx2(fieldName, rowIndex, role){" + "return %1.getFieldByRowIndexEx2(fieldName, rowIndex, role);}") + .arg(LimeReport::Const::FUNCTION_MANAGER_NAME)); + return addFunction(fd); +} + +bool ScriptEngineManager::createHeaderData() +{ + JSFunctionDesc fd; + fd.setManager(m_functionManager); + fd.setManagerName(LimeReport::Const::FUNCTION_MANAGER_NAME); + fd.setCategory(tr("GENERAL")); + fd.setName("getHeaderData"); + fd.setDescription("getHeaderData(\"" + tr("FieldName") + "\", \"" + tr("RoleName") + "\")"); + fd.setScriptWrapper(QString("function getHeaderData(fieldName, role){" + "return %1.getHeaderData(fieldName, role);}") + .arg(LimeReport::Const::FUNCTION_MANAGER_NAME)); + return addFunction(fd); +} + +bool ScriptEngineManager::createHeaderColumnNameByIndex() +{ + JSFunctionDesc fd; + fd.setManager(m_functionManager); + fd.setManagerName(LimeReport::Const::FUNCTION_MANAGER_NAME); + fd.setCategory(tr("GENERAL")); + fd.setName("getHeaderColumnNameByIndex"); + fd.setDescription("getHeaderColumnNameByIndex(\"" + tr("datasourceName") + "\", \"" + + tr("columnIndex") + "\")"); + fd.setScriptWrapper(QString("function getHeaderColumnNameByIndex(datasourceName, columnIndex){" + "return %1.getHeaderColumnNameByIndex(datasourceName, columnIndex);}") + .arg(LimeReport::Const::FUNCTION_MANAGER_NAME)); + return addFunction(fd); +} + +bool ScriptEngineManager::createColumnCount() +{ + JSFunctionDesc fd; + fd.setManager(m_functionManager); + fd.setManagerName(LimeReport::Const::FUNCTION_MANAGER_NAME); + fd.setCategory(tr("GENERAL")); + fd.setName("getColumnCount"); + fd.setDescription("getColumnCount(\"" + tr("datasourceName") + "\")"); + fd.setScriptWrapper(QString("function getColumnCount(datasourceName){" + "return %1.getColumnCount(datasourceName);}") + .arg(LimeReport::Const::FUNCTION_MANAGER_NAME)); + return addFunction(fd); +} + ScriptEngineManager::ScriptEngineManager() :m_model(0), m_context(0), m_dataManager(0) { @@ -1114,6 +1190,11 @@ ScriptEngineManager::ScriptEngineManager() createAddTableOfContentsItemFunction(); createClearTableOfContentsFunction(); createReopenDatasourceFunction(); + createGetFieldByRowIndexEx(); + createGetFieldByRowIndexEx2(); + createHeaderData(); + createHeaderColumnNameByIndex(); + createColumnCount(); m_model = new ScriptEngineModel(this); } @@ -1866,6 +1947,42 @@ QFont ScriptFunctionsManager::font(const QString &family, int pointSize, bool it return result; } +QVariant ScriptFunctionsManager::getFieldByRowIndexEx(const QString &fieldName, int rowIndex, const int role) +{ + DataSourceManager *dm = scriptEngineManager()->dataManager(); + return dm->fieldDataByRowIndex(fieldName, rowIndex, role); +} + +QVariant ScriptFunctionsManager::getFieldByRowIndexEx2(const QString &fieldName, int rowIndex, const QString &roleName) +{ + DataSourceManager *dm = scriptEngineManager()->dataManager(); + return dm->fieldDataByRowIndex(fieldName, rowIndex, roleName); +} + +QVariant ScriptFunctionsManager::getHeaderData(const QString &fieldName, const QString &roleName) +{ + DataSourceManager *dm = scriptEngineManager()->dataManager(); + return dm->headerData(fieldName, roleName); +} + +QVariant ScriptFunctionsManager::getHeaderColumnNameByIndex(const QString &datasourceName, const int columnIndex) +{ + DataSourceManager *dm = scriptEngineManager()->dataManager(); + return dm->columnName(datasourceName, columnIndex); +} + +int ScriptFunctionsManager::getColumnCount(const QString &datasourceName) +{ + DataSourceManager *dm = scriptEngineManager()->dataManager(); + return dm->columnCount(datasourceName); +} + +int ScriptFunctionsManager::columnIndexByName(const QString &datasourceName, const QString &columnName) +{ + DataSourceManager *dm = scriptEngineManager()->dataManager(); + return dm->columnIndex(datasourceName,columnName); +} + #ifdef USE_QJSENGINE void ScriptFunctionsManager::addItemsToComboBox(QJSValue object, const QStringList &values) diff --git a/limereport/lrscriptenginemanager.h b/limereport/lrscriptenginemanager.h index d027a1a..8da2b0b 100644 --- a/limereport/lrscriptenginemanager.h +++ b/limereport/lrscriptenginemanager.h @@ -378,6 +378,44 @@ public: Q_INVOKABLE void addTableOfContentsItem(const QString& uniqKey, const QString& content, int indent = 0); Q_INVOKABLE void clearTableOfContents(); Q_INVOKABLE QFont font(const QString& family, int pointSize = -1, bool bold = false, bool italic = false, bool underLine = false); + /*! + * \brief getFieldByRowIndexEx Выдает для поля значение заданной роли + * \param fieldName имя источника данных + имя поля + * \param rowIndex индекс строки + * \param role код роли + * \return + */ + Q_INVOKABLE QVariant getFieldByRowIndexEx(const QString &fieldName, int rowIndex, const int role); + /*! + * \brief getFieldByRowIndexEx2 Выдает для поля значение заданной роли + * \param fieldName имя источника данных + имя поля + * \param rowIndex индекс строки + * \param roleName имя роли из roleNames() + * \return + */ + Q_INVOKABLE QVariant getFieldByRowIndexEx2(const QString &fieldName, int rowIndex, const QString &roleName); + /*! + * \brief getHeaderData Выдает для поля заголовка значение заданной роли + * \param fieldName имя источника данных + имя поля + * \param role имя роли из roleNames() + * \return + */ + Q_INVOKABLE QVariant getHeaderData(const QString &fieldName, const QString &roleName); + /*! + * \brief getHeaderColumnNameByIndex Выдает имя колонки по ее индексу (имя используемое LR) + * \param datasourceName имя источника данных + * \param columnIndex индекс колонки + * \return + */ + Q_INVOKABLE QVariant getHeaderColumnNameByIndex(const QString &datasourceName, const int columnIndex); + /*! + * \brief getColumnCount Выдает число столбцов в источнике данных + * \param datasourceName имя источника данных + * \return возможно -1 при ошибке + */ + Q_INVOKABLE int getColumnCount(const QString &datasourceName); + Q_INVOKABLE int columnIndexByName(const QString &datasourceName, const QString &columnName); + #ifdef USE_QJSENGINE Q_INVOKABLE void addItemsToComboBox(QJSValue object, const QStringList& values); Q_INVOKABLE void addItemToComboBox(QJSValue object, const QString& value); @@ -506,6 +544,12 @@ private: bool createAddTableOfContentsItemFunction(); bool createClearTableOfContentsFunction(); bool createReopenDatasourceFunction(); + bool createGetFieldByRowIndexEx(); + bool createGetFieldByRowIndexEx2(); + bool createHeaderData(); + bool createHeaderColumnNameByIndex(); + bool createColumnCount(); + private: ScriptEngineManager(); ScriptEngineType* m_scriptEngine; diff --git a/limereport/objectinspector/lrobjectitemmodel.cpp b/limereport/objectinspector/lrobjectitemmodel.cpp index c0e5398..1f768d9 100644 --- a/limereport/objectinspector/lrobjectitemmodel.cpp +++ b/limereport/objectinspector/lrobjectitemmodel.cpp @@ -174,6 +174,8 @@ void QObjectPropertyModel::translatePropertyName() tr("gridChartLines"); tr("horizontalAxisOnTop"); tr("mixWithPriorPage"); + tr("shadow"); + tr("borderStyle"); } void QObjectPropertyModel::clearObjectsList() diff --git a/limereport/objectinspector/propertyItems/lrenumpropitem.cpp b/limereport/objectinspector/propertyItems/lrenumpropitem.cpp index b9a1a0c..9addfd2 100644 --- a/limereport/objectinspector/propertyItems/lrenumpropitem.cpp +++ b/limereport/objectinspector/propertyItems/lrenumpropitem.cpp @@ -135,9 +135,6 @@ void EnumPropItem::translateEnumItemName() tr("Pie"); tr("VerticalBar"); tr("HorizontalBar"); - tr("LegendAlignTop"); - tr("LegendAlignCenter"); - tr("LegendAlignBottom"); tr("TitleAlignLeft"); tr("TitleAlignRight"); tr("TitleAlignCenter"); @@ -147,6 +144,31 @@ void EnumPropItem::translateEnumItemName() tr("Inches"); tr("Scale"); tr("Split"); + tr("GridLines"); + tr("Lines"); + tr("Solid"); + tr("NoStyle"); + tr("Dashed"); + tr("Dot"); + tr("DashDot"); + tr("DashDotDot"); + tr("Doubled"); + tr("LegendPoints"); + tr("LegendLines"); + tr("LegendAlignRightCenter"); + tr("LegendAlignRightTop"); + tr("LegendAlignRightBottom"); + tr("LegendAlignBottomRight"); + tr("LegendAlignBottomCenter"); + tr("LegendAlignBottomLeft"); + tr("SolidLine"); + tr("NoPen"); + tr("DashLine"); + tr("DotLine"); + tr("DashDotLine"); + tr("DashDotDotLine"); + tr("CustomDashLine"); + } void EnumPropItem::setPropertyEditorData(QWidget *propertyEditor, const QModelIndex &) const diff --git a/limereport/scripteditor/lrcompletermodel.cpp b/limereport/scripteditor/lrcompletermodel.cpp index 29c7116..70299f6 100644 --- a/limereport/scripteditor/lrcompletermodel.cpp +++ b/limereport/scripteditor/lrcompletermodel.cpp @@ -22,16 +22,17 @@ QModelIndex CompleterModel::index(int row, int column, const QModelIndex &parent return createIndex(row, column, parentItem->child(row)); } -QModelIndex CompleterModel::parent(const QModelIndex &child) const -{ - if (child.isValid()){ - CompleterItem *childItem = static_cast(child.internalPointer()); - CompleterItem *parentItem = childItem->parent(); - if (parentItem != &m_root) { - return indexFromItem(parentItem); - } +QModelIndex CompleterModel::parent(const QModelIndex &child) const { + if(child.isValid()) { + if(CompleterItem *childItem = static_cast(child.internalPointer()); + childItem) { + CompleterItem *parentItem = childItem->parent(); + if(parentItem != &m_root) { + return indexFromItem(parentItem); + } } - return QModelIndex(); + } + return QModelIndex(); } int CompleterModel::rowCount(const QModelIndex &parent) const diff --git a/limereport/scripteditor/lrcompletermodel.h b/limereport/scripteditor/lrcompletermodel.h index 862437a..8f218e8 100644 --- a/limereport/scripteditor/lrcompletermodel.h +++ b/limereport/scripteditor/lrcompletermodel.h @@ -12,7 +12,9 @@ public: CompleterItem(QString text, QIcon icon):m_parent(0), m_text(text), m_icon(icon), m_model(0){} ~CompleterItem(); int rowCount() const {return m_children.count();} - CompleterItem* child(int row) const {return m_children.at(row).data();} + CompleterItem *child(int row) const { + return m_children.count() > row ? m_children.at(row).data() : nullptr; + } CompleterItem* parent() const {return m_parent;} int row() const{ if (m_parent){ @@ -33,7 +35,7 @@ public: void appendRow(CompleterItem* child); void appendRows(const QList &children); private: - CompleterItem* m_parent; + CompleterItem* m_parent{nullptr}; QVector > m_children; QString m_text; QIcon m_icon; diff --git a/limereport/serializators/lrxmlwriter.cpp b/limereport/serializators/lrxmlwriter.cpp index fdae62c..d07d8b8 100644 --- a/limereport/serializators/lrxmlwriter.cpp +++ b/limereport/serializators/lrxmlwriter.cpp @@ -80,7 +80,8 @@ bool XMLWriter::setContent(QString fileName) { QFile xmlFile(fileName); if (xmlFile.open(QFile::ReadOnly)){ - return m_doc->setContent(&xmlFile); + m_doc->setContent(&xmlFile); + return true; } return false; } diff --git a/translations/limereport_ar.ts b/translations/limereport_ar.ts index f15e62e..2cef5f6 100644 --- a/translations/limereport_ar.ts +++ b/translations/limereport_ar.ts @@ -8,17 +8,6 @@ - - BorderFrameEditor - - BorderFrameEditor - - - - Text - - - ChartAxisEditor @@ -519,6 +508,62 @@ p, li { white-space: pre-wrap; } Edit borders... + + Align items + + + + Align to left + محاذاة يسار + + + Align to right + محاذاة يمين + + + Align to top + محاذاة لأعلى + + + Align to bottom + محاذاة لأسفل + + + Align to horizontal center + محاذاة وسط (أفقي) + + + Align to vertical center + محاذاة وسط(عمودي) + + + Resize items + + + + Same width + + + + Same height + + + + Align items to page + + + + Align to center + + + + cancel alignement + + + + Align to page width + + LimeReport::BorderEditor @@ -1159,18 +1204,6 @@ p, li { white-space: pre-wrap; } HorizontalBar - - LegendAlignTop - - - - LegendAlignCenter - - - - LegendAlignBottom - - TitleAlignLeft @@ -1207,6 +1240,102 @@ p, li { white-space: pre-wrap; } Split + + GridLines + + + + Lines + + + + Solid + + + + NoStyle + + + + Dashed + + + + Dot + + + + DashDot + + + + DashDotDot + + + + Doubled + + + + LegendPoints + + + + LegendLines + + + + LegendAlignRightCenter + + + + LegendAlignRightTop + + + + LegendAlignRightBottom + + + + LegendAlignBottomRight + + + + LegendAlignBottomCenter + + + + LegendAlignBottomLeft + + + + SolidLine + + + + NoPen + + + + DashLine + + + + DotLine + + + + DashDotLine + + + + DashDotDotLine + + + + CustomDashLine + + LimeReport::FlagsPropItem @@ -2336,6 +2465,14 @@ p, li { white-space: pre-wrap; } mixWithPriorPage + + shadow + + + + borderStyle + + LimeReport::RectPropItem @@ -2676,6 +2813,10 @@ p, li { white-space: pre-wrap; } The rendering is in process + + Print Report + + LimeReport::ReportEnginePrivate @@ -3056,6 +3197,18 @@ This preview is no longer valid. RowIndex + + RoleIndex + + + + RoleName + + + + columnIndex + + LimeReport::SettingDialog diff --git a/translations/limereport_es.ts b/translations/limereport_es.ts index 4171599..a954f05 100644 --- a/translations/limereport_es.ts +++ b/translations/limereport_es.ts @@ -8,17 +8,6 @@ - - BorderFrameEditor - - BorderFrameEditor - - - - Text - - - ChartAxisEditor @@ -647,6 +636,62 @@ p, li { white-space: pre-wrap; } Edit borders... + + Align items + + + + Align to left + Alinear a la izquierda + + + Align to right + Alinear a la derecha + + + Align to top + Alinear arriba + + + Align to bottom + Alinear abajo + + + Align to horizontal center + Centrar horizontalmente + + + Align to vertical center + Centrar verticalmente + + + Resize items + + + + Same width + + + + Same height + + + + Align items to page + + + + Align to center + + + + cancel alignement + + + + Align to page width + + LimeReport::BorderEditor @@ -1287,18 +1332,6 @@ p, li { white-space: pre-wrap; } HorizontalBar Barra horizontal - - LegendAlignTop - Alinear Leyenda Arriba - - - LegendAlignCenter - Centrar leyenda - - - LegendAlignBottom - Alinear Leyenda Abajo - TitleAlignLeft Alinear titulo a la izquierda @@ -1335,6 +1368,102 @@ p, li { white-space: pre-wrap; } Split + + GridLines + + + + Lines + + + + Solid + + + + NoStyle + + + + Dashed + + + + Dot + + + + DashDot + + + + DashDotDot + + + + Doubled + + + + LegendPoints + + + + LegendLines + + + + LegendAlignRightCenter + + + + LegendAlignRightTop + + + + LegendAlignRightBottom + + + + LegendAlignBottomRight + + + + LegendAlignBottomCenter + + + + LegendAlignBottomLeft + + + + SolidLine + + + + NoPen + + + + DashLine + + + + DotLine + + + + DashDotLine + + + + DashDotDotLine + + + + CustomDashLine + + LimeReport::FlagsPropItem @@ -2464,6 +2593,14 @@ p, li { white-space: pre-wrap; } mixWithPriorPage + + shadow + + + + borderStyle + + LimeReport::RectPropItem @@ -2804,6 +2941,10 @@ p, li { white-space: pre-wrap; } The rendering is in process + + Print Report + + LimeReport::ReportEnginePrivate @@ -3186,6 +3327,18 @@ Esta vista previa ya no es válida. RowIndex Índice de fila + + RoleIndex + + + + RoleName + + + + columnIndex + + LimeReport::SettingDialog diff --git a/translations/limereport_fr.ts b/translations/limereport_fr.ts index 28c4a61..88af34f 100644 --- a/translations/limereport_fr.ts +++ b/translations/limereport_fr.ts @@ -9,19 +9,6 @@ - - BorderFrameEditor - - - BorderFrameEditor - - - - - Text - - - ChartAxisEditor @@ -443,123 +430,123 @@ p, li { white-space: pre-wrap; } LimeReport::BandDesignIntf - + DataBand bande de données - + DataHeaderBand En-tête de données - + DataFooterBand Pied de données - + ReportHeader En-tête de rapport - + ReportFooter Pied de rapport - + PageHeader En-tête de page - + PageFooter Pied de page - + SubDetailBand Sous-détails - + SubDetailHeaderBand En-tête de sous-détails - + SubDetailFooterBand Pied de sous-détails - + GroupBandHeader Groupe d'en-tête - + GroupBandFooter Groupe de pieds - + TearOffBand Bande détachable - + connected to Connecté à - + Bring to top Placer au premier-plan - + Send to back Placer en arrière-plan - + Cut Couper - + Copy Copier - - + + Auto height Hauteur automatique - - + + Splittable Divisible - + + - Keep top space Conserver l'espace supérieur - - + + Keep bottom space Conserver l'espace inférieur - - + + Print if empty Imprimer si vide @@ -567,61 +554,133 @@ p, li { white-space: pre-wrap; } LimeReport::BaseDesignIntf - - + + Lock item geometry Verrouiller la géométrie d'un élément - + Copy Copier - + Cut Couper - + Paste Coller - + Bring to top Placer au premier-plan - + Send to back Placer en arrière-plan - + Create Horizontal Layout Créer une disposition horizontale - + Create Vertical Layout Créer une disposition verticale - + No borders Aucune bordure - + All borders Toutes les bordures - + Edit borders... + + + Align items + + + + + + Align to left + Aligner à gauche + + + + + Align to right + Aligner à droite + + + + Align to top + Aligner en haut + + + + Align to bottom + Aligner en bas + + + + Align to horizontal center + Aligner au centre horizontal + + + + Align to vertical center + Aligner au centre vertical + + + + Resize items + + + + + Same width + + + + + Same height + + + + + Align items to page + + + + + Align to center + + + + + cancel alignement + + + + + Align to page width + + LimeReport::BorderEditor @@ -771,8 +830,8 @@ p, li { white-space: pre-wrap; } LimeReport::ConnectionDesc - - + + defaultConnection Connexion par défaut @@ -1456,63 +1515,168 @@ p, li { white-space: pre-wrap; } HorizontalBar Barre horizontale + + + GridLines + + + + + Lines + + + + + Solid + + + + + NoStyle + + + + + Dashed + + + + + Dot + + + + + DashDot + + + + + DashDotDot + + + + + Doubled + + + + + LegendPoints + + + + + LegendLines + + + + + LegendAlignRightCenter + + + + + LegendAlignRightTop + + + + + LegendAlignRightBottom + + + + + LegendAlignBottomRight + + + + + LegendAlignBottomCenter + + + + + LegendAlignBottomLeft + + + + + SolidLine + + + + + NoPen + + + + + DashLine + + + + + DotLine + + + + + DashDotLine + + + + + DashDotDotLine + + + + + CustomDashLine + + - LegendAlignTop - Aligner la légende en haut - - - - LegendAlignCenter - Aligner la légende au centre - - - - LegendAlignBottom - Aligner la légende en bas - - - TitleAlignLeft Aligner le titre à gauche - + TitleAlignRight Aligner le titre à droite - + TitleAlignCenter Aligner le titre au centre - + Layout Disposition - + Table Tableau - + Millimeters Millimètres - + Inches Pouces - + Scale Échèlle - + Split Diviser @@ -1599,7 +1763,7 @@ p, li { white-space: pre-wrap; } LimeReport::GroupBandFooter - + GroupFooter Pied de groupe @@ -1612,12 +1776,12 @@ p, li { white-space: pre-wrap; } En-tête de groupe - + Group field not found Champ de groupe non trouvé - + Datasource "%1" not found! Source de donnée "%1" introuvable! @@ -1782,12 +1946,12 @@ p, li { white-space: pre-wrap; } LimeReport::MasterDetailProxyModel - + Field: "%1" not found in "%2" child datasource Le champ: "%1"est introuvable dans la source de donnée enfant "%2" - + Field: "%1" not found in "%2" master datasource Le champ: "%1"est introuvable dans la source de donnée principale "%2" @@ -1795,7 +1959,7 @@ p, li { white-space: pre-wrap; } LimeReport::ModelToDataSource - + model is destroyed Le modèle a été supprimé @@ -1978,43 +2142,43 @@ p, li { white-space: pre-wrap; } LimeReport::PageItemDesignIntf - - + + Edit Edition - + Paste Coller - - + + Page is TOC Table de contenus - - + + Reset page number Réinitialiser le numéro de page - - + + Full page Page entière - - + + Set page size to printer Adapterr la taille de la page à l'imprimante - - + + Mix with prior page @@ -2234,7 +2398,7 @@ p, li { white-space: pre-wrap; } LimeReport::ProxyHolder - + Datasource has been invalidated La source de donnée n'a pas été validée @@ -2919,17 +3083,27 @@ p, li { white-space: pre-wrap; } - + + shadow + + + + + borderStyle + + + + Property Name Propriété - + Property value Valeur - + Warning Avertissement @@ -2996,7 +3170,7 @@ p, li { white-space: pre-wrap; } LimeReport::ReportDesignWindow - + Rendered %1 pages %1 pages préparées @@ -3106,259 +3280,264 @@ p, li { white-space: pre-wrap; } Afficher l'aperçu du rapport - + + Print Report + + + + Edit layouts mode Modifier le mode de mise en forme - + Horizontal layout Mise en page horizontale - + Vertical layout Disposition verticale - + About A propos - + Hide left panel | Alt+L Masquer le volet gauche - + Hide right panel | Alt+R Masquer le volet droite - + Delete dialog Supprimer la boite du dialogue - + Add new dialog Ajouter une boite de dialogue - + Lock selected items Verrouiller les éléments sélectionnés - + Unlock selected items Déverrouiller les éléments sélectionnés - + Select one level items Sélectionner un niveau d'éléments - + Report Tools Outils de rapport - + Main Tools Outils principales - + Font Police - + Text alignment Alignement de texte - + Items alignment Alignement des éléments - + Borders Bordures - + Report bands Bandesde rapport - + Report Header En-tête du rapport - + Report Footer Pied de rapport - + Page Header En-tête de page - + Page Footer Pied de page - + Data Données - + Data Header En-tête de données - + Data Footer Pied de données - + SubDetail Sous-détails - + SubDetailHeader En-tête de sous-détails - + SubDetailFooter Pied de sous-détails - + GroupHeader En-tête de groupe - + GroupFooter Pied de groupe - + Tear-off Band Bande détachable - + File Fichier - + Edit Edition - + Info - + Recent Files Fichiers récents - - + + Object Inspector Inspecteur d'objets - + Report structure Structure du rapport - + Widget Box Boite de Widget - + Property Editor Editeur de propriété - + Action Editor Editeur d'action - + Resource Editor Editeur de ressource - + SignalSlot Editor Editeur de Signaux & Slots - + Dialog Designer Tools Boite à outils du Designer - + Data Browser Navigateur de données - + Script Browser Navigateur de script - + Report has been modified! Do you want save the report? Le rapport a été modifié! Voulez-vous l'enregistrer? - - + + Report file name Nom du fichier du rapport - + Attention Attention - + The rendering is in process La préparation du rapport est en cours - + Warning Avertissement - + File "%1" not found! Fichier "%1" introuvable! @@ -3424,26 +3603,26 @@ Cet aperçu n'est plus valide. LimeReport::ReportRender - - - + + + Error Erreur - + page index out of range Indice de la page dépassé - - + + Databand "%1" not found Bande de données "%1 introuvable - - + + Wrong using function %1 Utilisation incorrecte de la fonction "%1" @@ -3709,13 +3888,13 @@ Cet aperçu n'est plus valide. LimeReport::ScriptEngineContext - + Dialog with name: %1 can`t be created Le dialogue avec le nom "%1" ne peut pas être crée - - + + Error Erreur @@ -3728,20 +3907,20 @@ Cet aperçu n'est plus valide. Fonctions de groupe - - - - - - - - + + + + + + + + Value Valeur - + BandName Nom de la bande @@ -3752,7 +3931,10 @@ Cet aperçu n'est plus valide. - + + + + FieldName Nom du champ @@ -3769,123 +3951,148 @@ Cet aperçu n'est plus valide. Champ "%1 introuvable dans %2! - + SYSTEM Système - - - + + + NUMBER Nombre - - - - - + + + + + Format - + Precision Précision - - - - + + + + Locale Local - - - - - - + + + + + + DATE&TIME Date&Heure - + CurrencySymbol Symbolde de la monnaie - - - - - - - - - - + + + + + + + + + + + + + + + GENERAL General - - - + + + Name Nom - + Datasource Source de donnée - + ValueField Valeur - + KeyField Clé - + KeyFieldValue Valeur de la clé - + + + RowIndex - - - + + + Unique identifier Identifiant unique - - + + Content Contenu - + Indent Indenter - + + + datasourceName Nom de source de donnée + + + RoleIndex + + + + + + RoleName + + + + + columnIndex + + LimeReport::SettingDialog @@ -4029,66 +4236,66 @@ Cet aperçu n'est plus valide. LimeReport::TextItem - - + + Edit Edition - - + + Auto height Hauteur automatique - - + + Allow HTML Interpréter HTML - - + + Allow HTML in fields Interpréter HTML dans les champs - - + + Stretch to max height Etirer à la hauteur maximale - - + + Transparent Transparent - - + + Watermark Filigrane - - + + Hide if empty Masquer si vide - - + + Error Erreur - + TextItem " %1 " already has folower " %2 " L'élément texte " %1 " a toujours un copain " %2 " - + TextItem " %1 " not found! Elément "%1" introuvable! @@ -4336,27 +4543,27 @@ Cet aperçu n'est plus valide. Connexion invalidé %1 - + Master datasource "%1" not found! Source de donnée principale "%1" introuvable! - + Master datasouce "%1" not found! Source de donnée principale "%1" introuvable! - + Child Enfant - + and child est enfant - + datasouce "%1" not found! Source de donnée "%1" introuvable! @@ -4472,29 +4679,29 @@ Cet aperçu n'est plus valide. - - + + Attention! - - + + Selected elements have different parent containers Les éléments sélectionnés ont un parent différent - + Object with name %1 already exists! L'objet avec le nom "%1" existe déja! - + Function %1 not found or have wrong arguments La fonction %1 est introuvable ou contient des paramètres incorrects - + Datasource manager not found Gestionnaire de source de donnée introuvable diff --git a/translations/limereport_pl.ts b/translations/limereport_pl.ts index 071166e..96c10d7 100644 --- a/translations/limereport_pl.ts +++ b/translations/limereport_pl.ts @@ -9,19 +9,6 @@ - - BorderFrameEditor - - - BorderFrameEditor - - - - - Text - - - ChartAxisEditor @@ -455,123 +442,123 @@ p, li { white-space: pre-wrap; } LimeReport::BandDesignIntf - + DataBand Sekcja danych - + DataHeaderBand Nagłówek sekcji danych - + DataFooterBand Stopka sekcji danych - + ReportHeader Nagłówek raportu - + ReportFooter Stopka raportu - + PageHeader Nagłówek strony - + PageFooter Stopka strony - + SubDetailBand Podsekcja danych - + SubDetailHeaderBand Podsekcja danych nagłówek - + SubDetailFooterBand Podsekcja danych stopka - + GroupBandHeader Nagłówek sekcji grupowania - + GroupBandFooter Stopka sekcji grupowania - + TearOffBand Urwanie sekcji - + connected to połączony do - + Bring to top Przenieś na górę - + Send to back Przenieś na dół - + Cut Wytnij - + Copy Kopiuj - - + + Auto height Automatyczna wysokość - - + + Splittable Rozdzielane - + + - Keep top space - - + + Keep bottom space Zachowaj dolną przestrzeń - - + + Print if empty Drukuj jeśli pusty @@ -579,61 +566,133 @@ p, li { white-space: pre-wrap; } LimeReport::BaseDesignIntf - - + + Lock item geometry Zablokuj geometrię pozycji - + Copy Kopiuj - + Cut Wytnij - + Paste Wklej - + Bring to top Przenieś na górę - + Send to back Przenieś na dół - + Create Horizontal Layout Utwórz układ poziomy - + Create Vertical Layout Utwórz układ pionowy - + No borders Bez obramowania - + All borders Pełne obramowanie - + Edit borders... + + + Align items + + + + + + Align to left + Wyrównaj do lewej + + + + + Align to right + Wyrównaj do prawej + + + + Align to top + Wyrównaj do góry + + + + Align to bottom + Wyrównaj do dołu + + + + Align to horizontal center + Wyrównaj do środka poziomo + + + + Align to vertical center + Wyrównaj do środka pionowo + + + + Resize items + + + + + Same width + + + + + Same height + + + + + Align items to page + + + + + Align to center + + + + + cancel alignement + + + + + Align to page width + + LimeReport::BorderEditor @@ -783,8 +842,8 @@ p, li { white-space: pre-wrap; } LimeReport::ConnectionDesc - - + + defaultConnection Domyślne połączenie @@ -1468,63 +1527,168 @@ p, li { white-space: pre-wrap; } HorizontalBar Pasek poziomy + + + GridLines + + + + + Lines + + + + + Solid + + + + + NoStyle + + + + + Dashed + + + + + Dot + + + + + DashDot + + + + + DashDotDot + + + + + Doubled + + + + + LegendPoints + + + + + LegendLines + + + + + LegendAlignRightCenter + + + + + LegendAlignRightTop + + + + + LegendAlignRightBottom + + + + + LegendAlignBottomRight + + + + + LegendAlignBottomCenter + + + + + LegendAlignBottomLeft + + + + + SolidLine + + + + + NoPen + + + + + DashLine + + + + + DotLine + + + + + DashDotLine + + + + + DashDotDotLine + + + + + CustomDashLine + + - LegendAlignTop - Wyrównaj do góry legendę - - - - LegendAlignCenter - Wyśrodkuj legendę - - - - LegendAlignBottom - Wyrównaj do dołu legendę - - - TitleAlignLeft Wyrównaj do lewej tytuł - + TitleAlignRight Wyrównaj do prawej tytuł - + TitleAlignCenter Wyśrodkuj tytuł - + Layout Układ - + Table Tabela - + Millimeters Milimetry - + Inches Cale - + Scale Skala - + Split Podział @@ -1611,7 +1775,7 @@ p, li { white-space: pre-wrap; } LimeReport::GroupBandFooter - + GroupFooter Stopka grupująca @@ -1624,12 +1788,12 @@ p, li { white-space: pre-wrap; } Nagłówek grupujący - + Group field not found Pole grupujące nie znalezione - + Datasource "%1" not found! Źródło danych "%1" nie znalezione! @@ -1794,12 +1958,12 @@ p, li { white-space: pre-wrap; } LimeReport::MasterDetailProxyModel - + Field: "%1" not found in "%2" child datasource Pole: "%1" nie znalezione w "%2" źródle danch dziecka - + Field: "%1" not found in "%2" master datasource Pole: "%1" nie znalezione w "%2" głównym źródle danch @@ -1807,7 +1971,7 @@ p, li { white-space: pre-wrap; } LimeReport::ModelToDataSource - + model is destroyed Model danych jest zniszczony @@ -1990,43 +2154,43 @@ p, li { white-space: pre-wrap; } LimeReport::PageItemDesignIntf - - + + Edit Edycja - + Paste Wklej - - + + Page is TOC Strona to spis treści - - + + Reset page number Zresetuj numer strony - - + + Full page Cała strona - - + + Set page size to printer Ustaw rozmiar strony na drukarkę - - + + Mix with prior page @@ -2246,7 +2410,7 @@ p, li { white-space: pre-wrap; } LimeReport::ProxyHolder - + Datasource has been invalidated Źródło danych zostało unieważnione @@ -2931,17 +3095,27 @@ p, li { white-space: pre-wrap; } - + + shadow + + + + + borderStyle + + + + Property Name Nazwa właściwości - + Property value Wartość właściwości - + Warning Uwaga @@ -3008,7 +3182,7 @@ p, li { white-space: pre-wrap; } LimeReport::ReportDesignWindow - + Rendered %1 pages @@ -3118,259 +3292,264 @@ p, li { white-space: pre-wrap; } Renderuj raport - + + Print Report + + + + Edit layouts mode Edytuj tryb układu - + Horizontal layout Układ poziomy - + Vertical layout Układ pionowy - + About O - + Hide left panel | Alt+L Ukryj lewy panel | Alt+L - + Hide right panel | Alt+R Ukryj prawy panel | Alt+R - + Delete dialog Dialog kasowania - + Add new dialog Dodaj nowy dialog - + Lock selected items Zablokuj zaznaczone elementy - + Unlock selected items Odblokuj zaznaczone elementy - + Select one level items Wybierz elementy na jednym poziomie - + Report Tools Narzędzia raportu - + Main Tools Główne narzędzia - + Font Czcionka - + Text alignment Wyrównanie tekstu - + Items alignment Wyrównanie elementów - + Borders Krawędzie - + Report bands Pasma raportu - + Report Header Nagłówek raportu - + Report Footer Stopka raportu - + Page Header Nagłówek strony - + Page Footer Stopka strony - + Data Dane - + Data Header Nagłówek danych - + Data Footer Stopka danych - + SubDetail Pod szczegóły - + SubDetailHeader Nagłówek pod szczegółów - + SubDetailFooter Stopka pod szczegółów - + GroupHeader Nagłówek grupujący - + GroupFooter Stopka grupująca - + Tear-off Band Sekcja zrywająca - + File Plik - + Edit Edycja - + Info Informacja - + Recent Files Ostatnie pliki - - + + Object Inspector Inspektor obiektów - + Report structure Struktura raportu - + Widget Box Pudełko widżetów - + Property Editor Edytor właściowości - + Action Editor Edytor akcji - + Resource Editor Edytor zasobów - + SignalSlot Editor Edytor sygnałów i slotów - + Dialog Designer Tools Narzędzia projektowania dialogów - + Data Browser Przeglądarka danych - + Script Browser Przeglądarka skryptów - + Report has been modified! Do you want save the report? Raport został zmodyfikowany! Czy chcesz zapisać raport? - - + + Report file name Nazwa pliku raportu - + Attention Uwaga - + The rendering is in process - + Warning Ostrzeżenie - + File "%1" not found! Plik "%1" nie znaleziony! @@ -3436,26 +3615,26 @@ Ten podgląd nie jest już prawidłowy. LimeReport::ReportRender - - - + + + Error Błąd - + page index out of range indeks strony poza zakresem - - + + Databand "%1" not found Sekcja danych "%1" nie znaleziona - - + + Wrong using function %1 Złe użycie funkcji %1 @@ -3721,13 +3900,13 @@ Ten podgląd nie jest już prawidłowy. LimeReport::ScriptEngineContext - + Dialog with name: %1 can`t be created Okno dialogowe z nazwą:%1 nie można utworzyć - - + + Error Błąd @@ -3740,20 +3919,20 @@ Ten podgląd nie jest już prawidłowy. FUNKCJE GRUPUJĄCE - - - - - - - - + + + + + + + + Value Wartość - + BandName Nazwa sekcji @@ -3764,7 +3943,10 @@ Ten podgląd nie jest już prawidłowy. - + + + + FieldName Nazwa pola @@ -3781,120 +3963,145 @@ Ten podgląd nie jest już prawidłowy. Pole %1 nie znalezione w %2! - + SYSTEM SYSTEM - - - + + + NUMBER LICZBA - - - - - + + + + + Format Format - + Precision Precyzja - - - - + + + + Locale Ustawienia lokalne - - - - - - + + + + + + DATE&TIME Data i czas - + Datasource Źródło danych - + ValueField Pole wartości - + KeyField Pole klucza - + KeyFieldValue Wartość pola klucza - + + + RowIndex Indeks wiersza - - - + + + Unique identifier Unikalny identyfikator - - + + Content Zawartość - + Indent Akapit - + + + datasourceName Nazwa źródła danych - + + RoleIndex + + + + + + RoleName + + + + + columnIndex + + + + CurrencySymbol Symbol waluty - - - - - - - - - - + + + + + + + + + + + + + + + GENERAL OGÓLNY - - - + + + Name Nazwa @@ -4041,66 +4248,66 @@ Ten podgląd nie jest już prawidłowy. LimeReport::TextItem - - + + Edit Edycja - - + + Auto height Automatyczna wysokość - - + + Allow HTML Zezwalaj HTML - - + + Allow HTML in fields Zezwalaj HTML w polach - - + + Stretch to max height Rozciągnij się do maksymalnej wysokości - - + + Transparent Przezroczysty - - + + Watermark Znak wodny - - + + Hide if empty Ukryj jeśli pusty - - + + Error Błąd - + TextItem " %1 " already has folower " %2 " Pole tekstowe " %1 " już ma folower " %2 " - + TextItem " %1 " not found! Nie znaleziono pole tekstowego "%1"! @@ -4348,27 +4555,27 @@ Ten podgląd nie jest już prawidłowy. Nieprawidłowe połączenie! %1 - + Master datasource "%1" not found! Nie znaleziono głównego źródła danych "%1"! - + Master datasouce "%1" not found! Nie znaleziono głównego źródła danych "%1"! - + Child Dziecko - + and child i dziecko - + datasouce "%1" not found! nie znaleziono źródła danych "%1"! @@ -4484,29 +4691,29 @@ Ten podgląd nie jest już prawidłowy. Ciąg znaków - - + + Attention! Uwaga! - - + + Selected elements have different parent containers Wybrane elementy mają różne pojemniki nadrzędne - + Object with name %1 already exists! Obiekt o nazwie %1 już istnieje! - + Function %1 not found or have wrong arguments Funkcja %1 nie znaleziona lub ma błędne argumenty - + Datasource manager not found Nie znaleziono menedżera źródła danych diff --git a/translations/limereport_ru.qm b/translations/limereport_ru.qm index c90174a..b060962 100644 Binary files a/translations/limereport_ru.qm and b/translations/limereport_ru.qm differ diff --git a/translations/limereport_ru.ts b/translations/limereport_ru.ts index ca3444c..9cac29d 100644 --- a/translations/limereport_ru.ts +++ b/translations/limereport_ru.ts @@ -8,17 +8,6 @@ $ClassName$ - - BorderFrameEditor - - BorderFrameEditor - - - - Text - - - ChartAxisEditor @@ -524,6 +513,62 @@ p, li { white-space: pre-wrap; } Edit borders... + + Align items + + + + Align to left + Выровнять по левому краю + + + Align to right + Выровнять по правому краю + + + Align to top + Выровнять по верхнему краю + + + Align to bottom + Выровнять по нижнему краю + + + Align to horizontal center + Центрировать горизонтально + + + Align to vertical center + Центрировать вертикально + + + Resize items + + + + Same width + + + + Same height + + + + Align items to page + + + + Align to center + + + + cancel alignement + + + + Align to page width + + LimeReport::BorderEditor @@ -1172,18 +1217,6 @@ p, li { white-space: pre-wrap; } HorizontalBar Горизонтальная панель - - LegendAlignTop - Легенда сверху - - - LegendAlignCenter - Легенда по центру - - - LegendAlignBottom - Легенда снизу - TitleAlignLeft Название слева @@ -1212,6 +1245,102 @@ p, li { white-space: pre-wrap; } Split Разделить + + GridLines + + + + Lines + + + + Solid + + + + NoStyle + + + + Dashed + + + + Dot + + + + DashDot + + + + DashDotDot + + + + Doubled + + + + LegendPoints + + + + LegendLines + + + + LegendAlignRightCenter + + + + LegendAlignRightTop + + + + LegendAlignRightBottom + + + + LegendAlignBottomRight + + + + LegendAlignBottomCenter + + + + LegendAlignBottomLeft + + + + SolidLine + + + + NoPen + + + + DashLine + + + + DotLine + + + + DashDotLine + + + + DashDotDotLine + + + + CustomDashLine + + LimeReport::FlagsPropItem @@ -2341,6 +2470,14 @@ p, li { white-space: pre-wrap; } horizontalAxisOnTop + + shadow + + + + borderStyle + + LimeReport::RectPropItem @@ -2681,6 +2818,10 @@ p, li { white-space: pre-wrap; } The rendering is in process Отчет находится в процессе создания + + Print Report + + LimeReport::ReportEnginePrivate @@ -3061,6 +3202,18 @@ This preview is no longer valid. RowIndex Индекс строки + + RoleIndex + + + + RoleName + + + + columnIndex + + LimeReport::SettingDialog diff --git a/translations/limereport_zh.ts b/translations/limereport_zh.ts index 264fe9a..2942150 100644 --- a/translations/limereport_zh.ts +++ b/translations/limereport_zh.ts @@ -8,17 +8,6 @@ $ClassName$ - - BorderFrameEditor - - BorderFrameEditor - - - - Text - - - ChartAxisEditor @@ -531,6 +520,62 @@ p, li { white-space: pre-wrap; } Edit borders... + + Align items + + + + Align to left + 左对齐 + + + Align to right + 右对齐 + + + Align to top + 顶部对齐 + + + Align to bottom + 底部对齐 + + + Align to horizontal center + 水平居中 + + + Align to vertical center + 居中对齐 + + + Resize items + + + + Same width + + + + Same height + + + + Align items to page + + + + Align to center + + + + cancel alignement + + + + Align to page width + + LimeReport::BorderEditor @@ -1171,18 +1216,6 @@ p, li { white-space: pre-wrap; } HorizontalBar 条形图 - - LegendAlignTop - 图例靠上对齐 - - - LegendAlignCenter - 图例居中 - - - LegendAlignBottom - 图例靠下对齐 - TitleAlignLeft 标题左对齐 @@ -1219,6 +1252,102 @@ p, li { white-space: pre-wrap; } Split 划分 + + GridLines + + + + Lines + + + + Solid + + + + NoStyle + + + + Dashed + + + + Dot + + + + DashDot + + + + DashDotDot + + + + Doubled + + + + LegendPoints + + + + LegendLines + + + + LegendAlignRightCenter + + + + LegendAlignRightTop + + + + LegendAlignRightBottom + + + + LegendAlignBottomRight + + + + LegendAlignBottomCenter + + + + LegendAlignBottomLeft + + + + SolidLine + + + + NoPen + + + + DashLine + + + + DotLine + + + + DashDotLine + + + + DashDotDotLine + + + + CustomDashLine + + LimeReport::FlagsPropItem @@ -2348,6 +2477,14 @@ p, li { white-space: pre-wrap; } mixWithPriorPage + + shadow + + + + borderStyle + + LimeReport::RectPropItem @@ -2688,6 +2825,10 @@ p, li { white-space: pre-wrap; } The rendering is in process 正在处理中 + + Print Report + + LimeReport::ReportEnginePrivate @@ -3070,6 +3211,18 @@ This preview is no longer valid. RowIndex 行索引 + + RoleIndex + + + + RoleName + + + + columnIndex + + LimeReport::SettingDialog