ページレベルの計算の挿入

PDFおよびPPTでサポートされるページレベルの計算についてさらに学習します。

Publisherでは、PDFおよびPPT出力でのみ、次の各項で説明するページレベルの計算がサポートされています。

ページ合計の表示

レポートに、ページ合計を計算して表示できます。ページは発行時まで作成されないため、合計計算機能は書式設定エンジンで実行する必要があります。

ノート:

ページの合計計算はPDF書式設定レイヤーで実行されます。したがって、HTML、RTFおよびExcelの出力タイプではこの機能を使用できません。このページ合計計算機能は、ソースXMLコードに未処理の数値が含まれている場合のみ機能します。数値を事前に書式設定しないでください。

ページ合計フィールドはXML入力データに存在しないため、値を保持する変数を定義する必要があります。変数を定義するときは、ページの合計を計算するXMLファイルの要素にその変数を関連付けます。合計フィールドを定義した後は、その合計フィールドのデータに対して追加の関数を実行することもできます。

ページ合計を保持する変数を宣言するには、合計する要素のプレースホルダの直後に次の構文を挿入します。

<?add-page-total:TotalFieldName;'element'?>

説明

TotalFieldNameは、合計に割り当てる名前(後の参照用)です。

'element'は、合計するXML要素フィールドです。

この構文は、必要な数の合計計算の対象フィールドに追加できます。

合計フィールドを表示する場合は、次の構文を入力します。

<?show-page-total:TotalFieldName;'Oracle-number-format' number-separators="{$_XDONFSEPARATORS}"?>

説明

TotalFieldNameは、前述のページ合計フィールドを指定する際に割り当てた名称です。

Oracle数値書式は、Oracle書式マスクを使用して表示する際に使用する書式です(たとえば: 'C9G999D00')。Oracle書式マスク記号のリストについては、「Oracle抽象書式マスク」を参照してください。

number-separators="{$_XDONFSEPARATORS}"は、定義した書式マスクに対してグループ化セパレータと小数点セパレータを適用するための必須の属性です。

次の例では、テンプレートにページ合計フィールドを設定し、ページに表示されている貸方と借方の合計を表示して、この2つのフィールドの差引額を計算する方法を示します。

この例では、次のXMLコードが使用されます。

<balance_sheet>
 <transaction>
  <debit>100</debit>
  <credit>90</credit>
 </transaction>
 <transaction>
  <debit>110</debit>
  <credit>80</credit>
 </transaction>
…
<\balance_sheet>

次の図に、値を保持するためにテンプレートに挿入する表を示します。

次の表は、前述の図に表が示されているテンプレートのフォーム・フィールドへの入力を示しています。

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト入力 説明

FE

<?for-each:transaction?>

このフィールドは、transactionグループの開始のfor-eachループを定義します。

100.00

<?debit?><?add-page-total:dt;'debit'?>

このフィールドは、XMLファイルからのdebit要素のプレースホルダです。このフィールドをページごとに合計するために、ページ合計の宣言構文が追加されます。debit要素の合計を保持するために定義された変数はdtです。

90.00

<?credit?> <?add-page-total:ct;'credit'?>

このフィールドは、XMLファイルからのcredit要素のプレースホルダです。このフィールドをページごとに合計するために、ページ合計の宣言構文が追加されます。credit要素の合計を保持するために定義された変数はctです。

Net

<add-page-total:net;'debit - credit'?>

借方値から貸方値を差し引いたページ合計差引額を作成します。

EFE

<?end for-each?>

for-eachループを終了します。

netとして定義した変数では、credit要素とdebit要素の値に対して計算が実行されることに注意してください。

ページ合計フィールドを宣言した後は、ページ合計を表示するフィールドをテンプレートに挿入できます。指定した名称(前述の例ではctおよびdt)を使用して、計算された変数を参照します。ページ合計を表示するための構文は次のとおりです。

たとえば、貸方のページ合計を表示するには、次のように入力します。

<?show-page-total:dt;'C9G990D00';'(C9G990D00)' number-separators="{$_XDONFSEPARATORS}"?>

最後に、テンプレート・ページの最下部またはフッターに、次のフィールドを配置します。

Page Total Debit: <?show-page-total:dt;'C9G990D00';'(C9G990D00)' number-separators="{$_XDONFSEPARATORS}"?>

Page Total Credit: <?show-page-total:ct;'C9G990D00';'(C9G990D00)' number-separators="{$_XDONFSEPARATORS}"?>

Page Total Balance: <?show-page-total:net;'C9G990D00';'(C9G990D00)' number-separators="{$_XDONFSEPARATORS}"?>

次の図に、このレポートの出力を示します。

前からの繰越/次への繰越の合計の挿入

多くのレポートでは、レポート出力全体にわたるページ合計を保持し、各ページの最初と最後に表示する必要があります。これらの合計は、"前からの繰越/次への繰越"の合計と呼ばれます。

ノート:

前からの繰越と次への繰越フィールドの合計計算はPDF書式設定レイヤーで実行されます。したがって、出力タイプがHTML、RTF、Excelなどの場合、この機能は使用できません。

次の図に、繰越合計が表示されたレポートの例を示します。

最初のページの最後に、Amount要素のページ合計が次への繰越合計として表示されます。第2ページの先頭には、この値が前ページからの繰越合計として表示されます。さらに、第2ページの最後には、次への繰越値にそのページの合計を加算した金額が次のページへの新規繰越値として表示されます。レポート全体でこれを繰り返します。

この機能は、ページ合計の表示機能の拡張です。次の例では、発行レポートに前からの繰越と次への繰越の合計の表示に必要な構文と設定について説明します。

次のXMLコードがあるとします。

<?xml version="1.0" encoding="WINDOWS-1252"?>
<INVOICES>
 <INVOICE>
  <INVNUM>10001-1</INVNUM>
  <INVDATE>1-Jan-2005</INVDATE>
  <INVAMT>100</INVOICEAMT>
 </INVOICE>
 <INVOICE>
  <INVNUM>10001-2</INVNUM>
  <INVDATE>10-Jan-2005</INVDATE>
  <INVAMT>200</INVOICEAMT>
 </INVOICE>
 <INVOICE>
  <INVNUM>10001-1</INVNUM>
  <INVDATE>11-Jan-2005</INVDATE>
  <INVAMT>150</INVOICEAMT>
 </INVOICE>
. . .
</INVOICES>

次の図に示すサンプル・テンプレートでは、請求書表を作成し、ページ合計を保持するプレースホルダを宣言します。

次の表は、前述の図に示されたテンプレートのフィールドを示しています。

フィールド フォーム・フィールドのヘルプ・テキスト入力 説明

Init PTs

<?init-page-total: InvAmt?>

InvAmtを、ページ合計を保持するプレースホルダとして宣言します。

FE

<?for-each:INVOICE?>

INVOICEグループを開始します。

10001-1

<?INVNUM?>

請求書番号タグのプレースホルダ。

1-Jan-2005

<?INVDATE?>

請求日タグのプレースホルダ。

100.00

<?INVAMT?>

請求金額タグのプレースホルダ。

InvAmt

<?add-page-total:InvAmt;INVAMT?>

ページ合計オブジェクトInvAmtをデータ内のINVAMT要素に割り当てます。

EFE

<?end for-each?>

INVOICEグループを終了します。

End PTs

<?end-page-total:InvAmt?>

ページ合計オブジェクトInvAmtを終了します。

各ページ(最初のページを除く)の先頭に前からの繰越合計を表示するには、次の構文を使用します。

<xdofo:inline-total
  display-condition="exceptfirst"
  name="InvAmt">
   Brought Forward:
<xdofo:show-brought-forward
  name="InvAmt"
  format="99G999G999D00" number-separators="{$_XDONFSEPARATORS}"/>/>
</xdofo:inline-total>

次に、前からの繰越の構文を構成する要素について説明します。

  • inline-total: この要素には次の2個のプロパティがあります。

    • name: フィールドで宣言した変数の名前を指定します。

    • display-condition - 表示条件を設定します。これはオプションのプロパティで、次のいずれかの値を設定します。

      • first - コンテンツが最初のページにのみ表示されます。

      • last - コンテンツが最後のページにのみ表示されます。

      • exceptfirst - コンテンツが最初のページを除く全ページに表示されます。

      • exceptlast - コンテンツが最後のページを除く全ページに表示されます。

      • everytime - (デフォルト)コンテンツが全ページに表示されます。

      この例では、display-conditionがexceptfirstに設定されているため、値が0(ゼロ)の最初のページには値が表示されません。

  • Brought Forward: - これはオプションの文字列で、レポート上にフィールド名として表示されます。

  • show-brought-forward - ページのこの値を表示します。これには、次のプロパティがあります。

    • name - 表示するフィールド名。この例ではInvAmtです。このプロパティは必須です。

    • format - 実行時に値に適用されるOracle数値書式。このプロパティはオプションですが、書式マスクを指定する場合は、Oracle書式マスクを使用する必要があります。「Oracle抽象書式マスク」を参照してください。

    • number-separators="{$_XDONFSEPARATORS}" - この属性は、定義した書式マスクへのグループ・セパレータと数値セパレータの適用に必要です。

前からの繰越合計を表示するテンプレートの先頭に、前からの繰越オブジェクトを挿入します。このオブジェクトをテンプレート本体に配置すると、構文をフォーム・フィールドに挿入できます。

前からの繰越合計をヘッダーに表示する場合、Microsoft Wordではヘッダーまたはフッター・リージョンでのフォーム・フィールドの使用をサポートしていないため、コード文字列全体をヘッダーに挿入する必要があります。ただし、start body/end body構文を使用して、レポートの本文領域を定義する方法もあります。Publisherでは、定義した本文領域より前の内容はヘッダーとして、本文領域より後の内容はフッターとして認識されます。この場合は、フォーム・フィールドを使用できます。詳細は、複数または複雑なヘッダーおよびフッターの作成を参照してください。

合計を表示するテンプレートの最下部に、次への繰越オブジェクトを配置します。この例の次への繰越オブジェクトは次のとおりです。

<xdofo:inline-total
  display-condition="exceptlast"
  name="InvAmt">
   Carried Forward:
<xdofo:show-carry-forward
  name="InvAmt"
  format="99G999G999D00" number-separators="{$_XDONFSEPARATORS}"/>
</xdofo:inline-total>

前からの繰越オブジェクトと次の点が異なることに注意してください。

  • display-conditionがexceptlastに設定されているため、次への繰越合計は、最後のページを除く全ページに表示されます。

  • 表示文字列は「Carried Forward」です。

  • show-carry-forward要素を使用して次への繰越値を表示します。この要素には、前述のshow-brought-forwardと同じプロパティがあります。

テンプレートでは値の数に制限はありません。前からの繰越/次への繰越オブジェクトをテンプレートに複数作成して、データ内の様々な数値要素を指し示すことができます。

ノート:

前述の例に示すように、コマンド<?init-page-total:invAmnt?>および<?end-page-total:InvAmt?>が含まれていないことを確認します。display-condition論理計算の正しい動作は、これらのコマンドが正しく機能することに依存しています。

累積合計の挿入

変数機能を使用して、請求書一覧レポートに累積合計を追加できます。

詳細は、変数の設定を参照してください。この例では、次のXML構造を使用します。

<?xml version="1.0" encoding="WINDOWS-1252"?>
<INVOICES>
 <INVOICE>
  <INVNUM>10001-1</INVNUM>
  <INVDATE>1-Jan-2005</INVDATE>
  <INVAMT>100</INVOICEAMT>
 </INVOICE>
 <INVOICE>
  <INVNUM>10001-2</INVNUM>
  <INVDATE>10-Jan-2005</INVDATE>
  <INVAMT>200</INVOICEAMT>
 </INVOICE>
 <INVOICE>
  <INVNUM>10001-1</INVNUM>
  <INVDATE>11-Jan-2005</INVDATE>
  <INVAMT>150</INVOICEAMT>
 </INVOICE>
</INVOICES>

このXMLコードを使用して、次の図に示すような累積合計を含むレポートを作成できます。

「Running Total」フィールドを作成するには、合計を追跡するための変数を定義し、その変数を0(ゼロ)に初期化します。次の図に、このテンプレートを示します。

次の表に、前述の図に示されたテンプレートのフォーム・フィールドの値の説明を示します。

フォーム・フィールド 構文 説明

RtotalVar

<?xdoxslt:set_variable($_XDOCTX, 'RTotalVar', 0)?>

RTotalVar変数を宣言して0(ゼロ)に初期化します。

FE

<?for-each:INVOICE?>

Invoiceグループを開始します。

10001-1

<?INVNUM?>

請求書番号タグ

1-Jan-2005

<?INVDATE?>

請求日タグ

100.00

<?xdoxslt:set_variable($_XDOCTX, 'RTotalVar', xdoxslt:get_variable($_XDOCTX, 'RTotalVar') + INVAMT)?><?xdoxslt:get_variable($_XDOCTX, 'RTotalVar')?>

RTotalVarを、現在値に新しい請求金額を加算した値に設定します。RTotalVarの値を取得して表示します。

EFE

<?end for-each?>

INVOICEグループを終了します。