I have created the report that provides the department wise sales done in a particular day, It's design is being done in xsl as shown below..Please see department sales report...
The xsl used for that is
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:set="http://exslt.org/sets" extension-element-prefixes="set" exclude-result-prefixes="fo">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes"/>
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4" page-width="21cm" page-height="29.7cm" margin-top="2cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm">
<fo:region-body margin-bottom="2cm" margin-top="4cm"/>
<fo:region-after extent="2cm"/>
<fo:region-before extent="4cm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4" initial-page-number="1">
<fo:static-content flow-name="xsl-region-after">
<fo:block border-bottom-style="solid"
text-align="left" font-size="9pt" >
</fo:block>
<fo:block font-size="9pt" text-align="end">
<fo:table table-layout="fixed">
<fo:table-column column-width="9.5cm"/>
<fo:table-column column-width="9.5cm"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell
text-align="center">
<fo:block text-align="left">
Run:
<xsl:value-of select="substring( DepartmentSalesReport/CurrentDate , 6, 2 )" />
/
<xsl:value-of select="substring( DepartmentSalesReport/CurrentDate , 9, 2 )" />
/
<xsl:value-of select="substring( DepartmentSalesReport/CurrentDate , 1, 4 )" />
@
<xsl:value-of select="DepartmentSalesReport/currentTime" />
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="right">
<!--fo:block space-before="8mm">
<xsl:text>Keep this report for 6 months</xsl:text>
</fo:block-->
</fo:table-cell>
<fo:table-cell >
<fo:block space-before="8mm">Page <fo:page-number/> of <fo:page-number-citation ref-id="terminator"/></fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</fo:static-content>
<fo:static-content flow-name="xsl-region-before">
<fo:block text-align-last="center" space-after="1.5cm">
<fo:table table-layout="fixed">
<fo:table-column column-width="4cm"/>
<fo:table-column column-width="10cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell font-size="9pt">
<fo:block>Store Number:
<xsl:value-of select="DepartmentSalesReport/store_code"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center">
<fo:block text-align-last="center" font-size="14pt" font-weight="bold" space-after="1mm">
<fo:inline text-decoration="underline">Department Sales Report</fo:inline>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="right" font-size="9pt">
<fo:block >
<xsl:value-of select="DepartmentSalesReport/tradingday"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="right" font-size="9pt">
<xsl:variable name="date"><xsl:value-of select="DepartmentSalesReport/tradingdate"/></xsl:variable>
<fo:block>
<xsl:value-of select="substring($date,5,2)"/>/<xsl:value-of select="substring($date,7,2)"/>/<xsl:value-of select="substring($date,1,4)"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
<fo:table table-layout="fixed">
<fo:table-column column-width="19cm"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell text-align="center">
<fo:block text-align-last="center" font-size="9pt" >
Summary of Sales by department, only those
departments with activity (Sales,
refunds, voids) will appear on this
report.Use this report to monitor sales in
key departments and make merchandising
decisions as needed.
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
<fo:block font-size="9pt" >
<fo:table table-layout="fixed" >
<fo:table-column
column-width="1.6cm" />
<fo:table-column
column-width="6cm"
text-align="center"/>
<fo:table-column
column-width="1.6cm" />
<fo:table-column
column-width="1.6cm" />
<fo:table-column
column-width="1.8cm"
text-align="center"/>
<fo:table-column
column-width="1.6cm" />
<fo:table-column
column-width="1.6cm" />
<fo:table-column
column-width="1.6cm"
text-align="center"/>
<fo:table-column
column-width="1.6cm" />
<fo:table-body>
<fo:table-row>
<fo:table-cell number-columns-spanned="9"> <fo:block color="black"
space-before.optimum="-8pt">
<fo:block border-bottom-style="solid"
text-align="left" font-size="9pt" />
</fo:block></fo:table-cell>
</fo:table-row>
<fo:table-row font-weight="bold">
<fo:table-cell number-columns-spanned="2">
<fo:block text-align="left"><xsl:text>-------------------------Department-------------------</xsl:text></fo:block>
</fo:table-cell>
<fo:table-cell number-rows-spanned="2">
<fo:block text-align="right"><xsl:text>Net Sales</xsl:text></fo:block>
</fo:table-cell>
<fo:table-cell number-rows-spanned="2">
<fo:block text-align="right"><xsl:text>Qty</xsl:text></fo:block>
</fo:table-cell>
<fo:table-cell number-rows-spanned="2">
<fo:block text-align="right"><xsl:text>% of Sales</xsl:text></fo:block>
</fo:table-cell>
<fo:table-cell number-columns-spanned="2">
<fo:block text-align="right"><xsl:text>--------Void--------</xsl:text></fo:block>
</fo:table-cell>
<fo:table-cell number-columns-spanned="2">
<fo:block text-align="right"><xsl:text>-------Return-------</xsl:text></fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row font-weight="bold">
<fo:table-cell>
<fo:block text-align="left">
<xsl:text>#</xsl:text>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="left">
<xsl:text>Description</xsl:text>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="right">
<xsl:text>Qty</xsl:text>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="right">
<xsl:text>Amount</xsl:text>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="right">
<xsl:text>Qty</xsl:text>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="right">
<xsl:text>Amount</xsl:text>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row >
<fo:table-cell number-columns-spanned="9" > <fo:block color="black"
space-before.optimum="-8pt">
</fo:block></fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
<fo:block border-bottom-style="solid"
text-align="left" font-size="9pt" />
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<xsl:variable name="storeSales" select="sum(DepartmentSalesReport/DepartmentDesc/netSales)"/>
<br/>
<!-- <fo:block font-size="9pt" space-after="3mm" break-before="page">-->
<xsl:for-each select="DepartmentSalesReport/DepartmentDesc">
<fo:block font-size="9pt" space-after="1mm">
<fo:table table-layout="fixed" >
<fo:table-column
column-width="1.6cm" />
<fo:table-column
column-width="6cm"
text-align="center"/>
<fo:table-column
column-width="1.6cm" />
<fo:table-column
column-width="1.6cm" />
<fo:table-column
column-width="1.8cm" />
<fo:table-column
column-width="1.6cm" />
<fo:table-column
column-width="1.6cm" />
<fo:table-column
column-width="1.6cm"
text-align="center"/>
<fo:table-column
column-width="1.6cm" />
<fo:table-body>
<xsl:variable name="levelNo"><xsl:value-of select="levelNbr"/></xsl:variable>
<xsl:variable name="levelCheck"><xsl:value-of select="level"/></xsl:variable>
<xsl:if test="$levelCheck!=''">
<xsl:if test="$levelNo='2'">
<fo:table-row>
<fo:table-cell number-columns-spanned="9">
<fo:block>
<xsl:text> </xsl:text>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:if>
<fo:table-row >
<fo:table-cell>
<fo:block text-align="left">
<xsl:value-of select="level"/>
</fo:block>
</fo:table-cell>
<xsl:choose>
<xsl:when test="$levelNo!='2'">
<fo:table-cell>
<fo:block text-align="left">
<xsl:value-of select="prgpName"/>
</fo:block>
</fo:table-cell>
</xsl:when>
<xsl:otherwise>
<fo:table-cell>
<fo:block text-align="left">
***DEPT TOTAL*** </fo:block>
</fo:table-cell>
</xsl:otherwise>
</xsl:choose>
<fo:table-cell>
<fo:block text-align="right">
<xsl:value-of
select="format-number(netSales,'0.00')"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="right">
<xsl:value-of
select="format-number(prodCount,'0')"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<xsl:variable name="salesPercentage"><xsl:value-of select="format-number((netSales div $storeSales)*100, '###,##0')"/></xsl:variable>
<xsl:if test="$salesPercentage='NaN'">
<fo:block text-align="right">
<xsl:text>0</xsl:text>
</fo:block>
</xsl:if>
<xsl:if test="$salesPercentage!='NaN'">
<fo:block text-align="right">
<xsl:value-of
select="$salesPercentage"/>
</fo:block>
</xsl:if>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="right">
<xsl:value-of
select="format-number(postVoidQuantity,'0')"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="right">
<xsl:value-of
select="format-number(postVoidAmount,'0.00')"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="right">
<xsl:value-of
select="format-number(returnQuantity,'0')"/>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="right">
<xsl:value-of
select="format-number(returnAmount,'0.00')"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
<xsl:if test="$levelNo='2'">
<fo:table-row>
<fo:table-cell number-columns-spanned="9">
<fo:block>
<xsl:text> </xsl:text>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:if>
</xsl:if>
</fo:table-body>
</fo:table>
</fo:block>
</xsl:for-each>
<fo:block border-bottom-style="solid" text-align="left"
font-size="9pt" space-before="3mm" />
<fo:block font-size="9pt" space-after="4mm">
<fo:table>
<fo:table-column column-width="1.5cm" />
<fo:table-column column-width="4.5cm" />
<fo:table-column column-width="3.3cm" />
<fo:table-header>
<fo:table-row>
<fo:table-cell>
<fo:block font-weight="bold"></fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="left" space-after="4mm"
space-before="3mm" font-weight="bold">
<xsl:text>DEPARTMENT TOTALS</xsl:text>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block></fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-weight="bold">
<xsl:text>SS SALES</xsl:text>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-weight="bold" text-align="right">
<xsl:variable name="ssSales"><xsl:value-of select="format-number(DepartmentSalesReport/DepartmentTotals/ssSales,'0.00')"/></xsl:variable>
<xsl:if test="$ssSales='NaN'">
<fo:block text-align="right">
<xsl:text>0</xsl:text>
</fo:block>
</xsl:if>
<xsl:if test="$ssSales!='NaN'">
<fo:block text-align="right">
<xsl:value-of
select="$ssSales"/>
</fo:block>
</xsl:if>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block></fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-weight="bold">
<xsl:text>CIGARETTE SALES</xsl:text>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block text-align="right" font-weight="bold">
<xsl:variable name="cigeratteSales"><xsl:value-of select="format-number(DepartmentSalesReport/DepartmentTotals/cigeratteSales,'0.00')"/></xsl:variable>
<xsl:if test="$cigeratteSales='NaN'">
<fo:block text-align="right">
<xsl:text>0</xsl:text>
</fo:block>
</xsl:if>
<xsl:if test="$cigeratteSales!='NaN'">
<fo:block text-align="right">
<xsl:value-of
select="$cigeratteSales"/>
</fo:block>
</xsl:if>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block></fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block space-after="1.5mm" font-weight="bold">
<xsl:text>LIQUOR SALES</xsl:text>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-weight="bold" text-align="right"
space-after="4mm">
<xsl:variable name="liquorSales"><xsl:value-of select="format-number(DepartmentSalesReport/DepartmentTotals/liquorSales,'0.00')"/></xsl:variable>
<xsl:if test="$liquorSales='NaN'">
<fo:block text-align="right">
<xsl:text>0</xsl:text>
</fo:block>
</xsl:if>
<xsl:if test="$liquorSales!='NaN'">
<fo:block text-align="right">
<xsl:value-of
select="$liquorSales"/>
</fo:block>
</xsl:if>
</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row>
<fo:table-cell>
<fo:block></fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-weight="bold" space-after="8mm">
<xsl:text>TOTAL FRONT END SALES</xsl:text>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-weight="bold" text-align="right"
space-after="4mm">
<xsl:variable name="totalSales"><xsl:value-of select="format-number(DepartmentSalesReport/DepartmentTotals/totalSales,'0.00')"/></xsl:variable>
<xsl:if test="$totalSales='NaN'">
<fo:block text-align="right">
<xsl:text>0</xsl:text>
</fo:block>
</xsl:if>
<xsl:if test="$totalSales!='NaN'">
<fo:block text-align="right">
<xsl:value-of
select="$totalSales"/>
</fo:block>
</xsl:if>
</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
<fo:block space-before="5mm" text-align="center" font-size="9pt" font-weight="bold" id="terminator">
<xsl:text></xsl:text>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
and the xml is..
<?xml version="1.0" encoding="UTF-8"?>
<Report Name="DepartmentSalesReport" Title="Department Sales Report"
Description="Department Sales Report" Version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InitParam Name="tradingdate" Type="java.lang.String" />
<InitParam Name="tradingday" Type="java.lang.String" />
<ReportBand BandType="HeaderBand" Name="DepartmentSalesReportBand">
<ReportElement Type="Header" DataSource="OutletSQL">
<DataField Name="store_code" Type="Data" FieldName="ORGU_CODE" />
</ReportElement>
<ReportElement Type="Header" DataSource="InitParams">
<DataField Name="tradingdate" Type="Data" FieldName="tradingdate" />
</ReportElement>
<ReportElement Type="Header" DataSource="InitParams">
<DataField Name="tradingday" Type="Data" FieldName="tradingday" />
</ReportElement>
</ReportBand>
<ReportBand BandType="DetailBand" Name="Terminal">
<ReportElement Type="Detail" Name="DepartmentDesc" DataSource="DataSql">
<DataField Name="level" Type="Data" FieldName="LEVEL"/>
<DataField Name="levelNbr" Type="Data" FieldName="LEVELNBR"/>
<DataField Name="prgpName" Type="Data" FieldName="PRGP_NAME"/>
<DataField Name="prodCount" Type="Data" FieldName="PROD_COUNT"/>
<DataField Name="netSales" Type="Data" FieldName="NET_SALES"/>
<DataField Name="postVoidQuantity" Type="Data" FieldName="POST_VOID_QUANTITY"/>
<DataField Name="postVoidAmount" Type="Data" FieldName="POST_VOID_AMOUNT"/>
<DataField Name="returnQuantity" Type="Data" FieldName="RETURN_QUANTITY"/>
<DataField Name="returnAmount" Type="Data" FieldName="RETURN_AMOUNT"/>
</ReportElement>
<ReportElement Type="Detail" Name="DepartmentTotals" DataSource="TotalsDataSql" MaxResults="1">
<DataField Name="ssSales" Type="Data" FieldName="LINE_NUM_50"/>
<DataField Name="cigeratteSales" Type="Data" FieldName="LINE_NUM_30"/>
<DataField Name="liquorSales" Type="Data" FieldName="LINE_NUM_60"/>
<DataField Name="totalSales" Type="Data" FieldName="TOTAL_FRONT_END_SALES"/>
</ReportElement>
<ReportElement Type="Header" DataSource="DateSQL">
<DataField Name="CurrentDate" Type="Data" FieldName="1" />
<DataField Name="currentTime" Type="Data" FieldName="2" />
</ReportElement>
</ReportBand>
<DataSource
Type="walgreens.pos.maintenance.eod.CurrentDepartmentSalesReportDataSource"
Name="DataSql"
Statement="">
</DataSource>
<DataSource
Type="walgreens.pos.maintenance.eod.DepartmentTotalsReportDataSource"
Name="TotalsDataSql"
Statement="">
</DataSource>
<DataSource
Type="com.pcmsgroup.v21.star.framework.application.reports.SpringReadOnlySQLStatement"
Name="OutletSQL"
Statement="select ORGU_CODE,OUTL_TRADE_DATE from outlet,org_unit where outlet.OUTL_ID = org_unit.OUTL_ID">
</DataSource>
<DataSource
Type="com.pcmsgroup.v21.star.framework.application.reports.SpringReadOnlySQLStatement"
Name="DateSQL"
Statement="SELECT current date,current time FROM sysibm.sysdummy1">
</DataSource>
</Report>
Now the problem come when the report is increased from one page to second page or more as shown below the heading department totals also get printed on the next page which should not as shown below..
Please advise what changes need to be done in xsl for this so that it should not come in second page.
You need to give page break. Please refer few examples here how to Use XSL-FO for page breaks and tables
Can you try this :
this will keep table in single page.