33
請求書レポートの作成
この章では、請求書に出力するレポートについて学習します。この章の手順に従うと、図33-1に示すようなレポート出力を生成できます。
図33-1 請求書レポートの出力
画像の説明
概要
データ・リレーションシップ
このレポートのデータは、マスター/ディテール・リレーションシップでリンクされた2つの問合せを使用してフェッチします。また、ブレークと2つのサマリーを定義します。
レイアウト
このレイアウトは、印刷済フォーム・レポートのレイアウトに似ています。ただし、このレイアウトでは、フォームのTIFFイメージにリンクし、それをガイドとして使用して、複数のフィールドの位置を調整します。
使用例
この例では、請求書を顧客別に印刷するレポートを作成します。レポートには次の情報が含まれます。
- 名前、住所、日付、発注書番号などの標準的な支払情報
- 品目番号、説明、価格を含む購入品目のリスト
- すべての購入品目の合計額
印刷済フォームのイメージ(この場合、空白の請求書イメージ)をインポートする方法や、ペーパー・レイアウト・ビューのツールを使用してこのようなフォームでレポートを印刷する方法も学習します。
このサンプル・レポートの作成過程では、次を行います。
請求書レポートのサンプルを表示するには、サンプル・フォルダinvoiceを開き、Oracle Reportsのサンプルinvoice.rdfを開きます。このファイルの開き方の詳細は、「はじめに」の「サンプル・レポートへのアクセス」を参照してください。
33.1 この例の前提条件
この章の例を作成するには、Oracle Database付属のOrder Entryサンプル・スキーマに対するアクセス権が必要です。このサンプル・スキーマに対するアクセス権の有無が不明のときは、データベース管理者に問い合せてください。
33.2 手動での新規レポートの作成
この場合、データ・モデルとレイアウトを別々に作成した方が簡単です。したがって、まず空のレポートを作成してから、問合せを追加し、レイアウトを作成します。
空のレポートを作成するには:
- Reports Builderを起動します。すでに起動している場合は、「ファイル」→「新規」→「レポート」を選択します。
- 「ようこそ」ダイアログ・ボックスまたは「新規レポート」ダイアログ・ボックスで、「新規レポートを手動で作成」を選択して「OK」をクリックします。
33.3 データ・リンクを含むデータ・モデルの作成
複数の問合せを使用するレポートを作成する場合、すべての問合せをデータ・モデル・ビューのデータ・ウィザードで作成する方が簡単です。このレポートでは、グループ間データ・リンクでリンクされた2つの問合せを作成します。
問合せを作成するには:
- データ・モデル・ビューで、「挿入」→「問合せ」を選択してデータ・ウィザードを表示します。
- 「ようこそ」ページが表示されたら、「次へ」をクリックします。
- 「問合せ」ページで、「問合せ名」に
Q_Orderと入力し、「次へ」をクリックします。
- 「データ・ソース」ページで、「SQL問合せ」を選択し、「次へ」をクリックします。
- 「データ」ページの「データ・ソース定義」フィールドに次の
SELECT文を入力します。
SELECT
ORDER_ID,
ORDER_DATE,
ORDER_TOTAL,
ORDERS.CUSTOMER_ID,
SALES_REP_ID,
C1.CUST_FIRST_NAME,
C1.CUST_LAST_NAME,
C1.CUST_ADDRESS,
C1.CUSTOMER_ID,
C2.CUST_FIRST_NAME,
C2.CUST_LAST_NAME,
C2.CUST_ADDRESS,
C2.CUSTOMER_ID
FROM ORDERS, CUSTOMERS C1, CUSTOMERS C2
WHERE ORDERS.CUSTOMER_ID = C1.CUSTOMER_ID AND
ORDERS.SALES_REP_ID = C2.CUSTOMER_ID
この問合せでは、Orders表をCustomers表に結合し、顧客情報と営業担当者情報を取得します。
注意
この問合せは、次のいずれかの方法で入力できます。
- 提供されているテキスト・ファイル
invoice_code.txtから、コードをコピーして「データ・ソース定義」フィールドに貼り付けます。
- 「クエリー・ビルダー」をクリックして、コードを入力せずに問合せを作成します。
- 「データ・ソース定義」フィールドにコードを入力します。
|
- 「次へ」をクリックします。
注意
データベースにまだ接続していない場合は、「クエリー・ビルダー」または「次へ」をクリックしたときに、データベースに接続するよう求められます。この例に該当するスキーマが含まれるデータベースに接続してください。第33.1項「この例の前提条件」に、この例のサンプル・スキーマの要件に関する説明があります。
|
- 「グループ」ページで「次へ」をクリックします。
- 「終了」をクリックして、データ・モデル・ビューに最初の問合せを表示します。
- 前述の手順を2番目の問合せにも繰り返しますが、この場合、問合せ名は
Q_Itemとし、次のSELECT文を使用します。
SELECT
O.ORDER_ID,
O.LINE_ITEM_ID,
O.PRODUCT_ID,
O.QUANTITY,
O.UNIT_PRICE,
TRANSLATED_DESCRIPTION,
P.PRODUCT_ID,
O.QUANTITY * O.UNIT_PRICE
FROM ORDER_ITEMS O, PRODUCT_DESCRIPTIONS P
WHERE O.PRODUCT_ID = P.PRODUCT_ID
AND P.LANGUAGE_ID = 'US'
この問合せでは、Orderの項目をProduct表に結合し、製品の説明を取得します。
- データ・モデル・ビューで、「G_ORDER_ID」グループ(マスター問合せ「Q_ORDER」用)のタイトル・バーをダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「一般情報」で、「名前」プロパティを「G_ORDER」に設定します。
- 「G_ORDER_ID1」グループ(ディテール問合せ「Q_ITEM」用)のタイトル・バーをダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「一般情報」で、「名前」プロパティを「G_LIST」に設定します。
その結果、データ・モデルは次のようになります。
図33-2 データ・モデル・ビューの問合せ
画像の説明
データ・リンクを追加するには:
- データ・モデル・ビューで、ツール・パレットの「データ・リンク」ツールをクリックします。
- 「G_ORDER」グループの「ORDER_ID」列をクリックし、「G_LIST」グループの「ORDER_ID1」列までドラッグします。「G_ORDER」グループの下から「Q_Item」問合せに線が描かれます。「ORDER_ID」と「ORDER_ID1」のラベルがこの線の両端に作成され、「ORDER_ID」と「ORDER_ID1」が、「Q_Item」に「G_ORDER」をリンクさせる列であることを示します。
33.4 サマリー列と式列の作成
小計額、合計額および支払期日用のサマリー列と式列を作成して、請求書に必要な情報を表示します。
請求書のサマリー列と式列を作成するには:
- ツール・パレットの「サマリー列」ツールをクリックし、データ・モデル・ビューの空き領域をクリックしてサマリー列を作成します。
- 新しいサマリー列オブジェクトをダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「一般情報」で、「名前」プロパティを「CS_SUB_TOTAL」に設定します。
- 「サマリー」で、「ソース」プロパティを「O_QUANTITY_O_UNIT_PRICE」、「リセット位置」プロパティを「Page」に設定します。
このサマリーは、請求書の各ページの小計額に使用します。
- 「G_ORDER」グループをクリックし、下の境界線のハンドルを下にドラッグして、グループの下部に空き領域を作成します。
- ツール・パレットの「サマリー列」ツールを再度クリックして、「G_ORDER」グループ内の空き領域をクリックし、2つ目のサマリー列を作成します。
- 新しいサマリー列オブジェクトをダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「一般情報」で、「名前」プロパティを「CS_TOTAL」に設定します。
- 「サマリー」で、「ソース」プロパティを「O_QUANTITY_O_UNIT_PRICE」、「リセット位置」プロパティを「G_ORDER」に設定します。
このサマリーは、各請求書の合計額に使用します。
- ツール・パレットの「式列」ツールをクリックし、データ・モデル・ビューの空き領域をクリックして式列を作成します。
- 新しい式列オブジェクトをダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「一般情報」で、「名前」プロパティを「CF_DUE_DATE」に設定します。
- 「列」で、「データ型」プロパティを「Date」に設定します。
- 「プレースホルダ/式」で、「PL/SQL式」プロパティ・フィールドをクリックしてPL/SQLエディタを表示します。
- PL/SQLエディタで、テンプレートを使用して次のPL/SQLコードを入力します。
function CF_DUE_DATEFormula return Date is
today date;
begin
select sysdate into today from dual;
return today + 30;
end;
この式は、支払期日(本日から30日後)の計算に使用します。
- 「コンパイル」をクリックします。
- 「閉じる」をクリックします。
その結果、データ・モデルは次のようになります。
図33-3 データ・リンク、サマリー列および式列が表示されたデータ・モデル・ビュー
画像の説明
- レポートを
invoice_<自分のイニシャル>.rdfという名前で保存します。
33.5 レイアウトの準備
請求書レポートのレイアウトを作成するには、請求書フォームのイメージをインポートし、そのイメージの上で適切なフィールドと枠を作成します。まず、請求書フォームを使用してレイアウトを設定する必要があります。
請求書レポートのレイアウトを準備するには:
- ツールバーの「ペーパー・レイアウト」ボタンをクリックして、ペーパー・レイアウト・ビューを表示します。
- ペーパー・レイアウト・ビューで、「挿入」→「イメージ」を選択し、提供されているファイル
invdemo.tifを選択します。イメージを、ペーパー・レイアウト・ビューの左上隅に配置します。
- 新しいイメージ・オブジェクトをダブルクリックして、プロパティ・インスペクタを表示します。
- プロパティ・インスペクタの「拡張レイアウト」で、「オブジェクトの印刷」プロパティを「全ページ」に設定します。
- オブジェクト・ナビゲータで、「ペーパー・レイアウト」ノードを開き、「メイン・セクション」の横のプロパティ・アイコンをダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「セクション」で、「幅」プロパティを「11」、「高さ」プロパティを「8.5」に設定し、請求書イメージにあうように「方向」プロパティを「Landscape」に指定します。
- ペーパー・レイアウト・ビューで、ツール・パレットの「繰返し枠」ツールをクリックし、請求書イメージの周囲に繰返し枠をドラッグして、イメージが繰返し枠の内側にぴったり収まるようにします。作成する繰返し枠は、このイメージ全体を覆うようにします。
- 繰返し枠をダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「一般情報」で、「名前」プロパティを「R_ORDER」に設定します。
- 「繰返し枠」で、「ソース」プロパティを「G_ORDER」、「印刷方向」プロパティを「縦」、「ページ当りの最大レコード数」プロパティを「1」に設定します。
- ツール・パレットの「枠」ツールをクリックし、R_ORDER繰返し枠の境界線の少し内側に枠を作成します。
- 枠オブジェクトをダブルクリックしてプロパティ・インスペクタを表示し、次のプロパティを設定します。
- 「一般情報」で、「名前」プロパティを「M_INVOICE」に設定します。
- 「拡張レイアウト」で、「オブジェクトの印刷」プロパティを「全ページ」に設定します。
- 繰返し枠をクリックし、ツール・パレットの「塗りつぶしカラー」ツールをクリックして、「塗りなし」を選択します。枠に対しても同じ操作を繰り返します。枠および繰返し枠の背後にまだレイヤー化されていますが、請求書イメージが表示されます。
33.6 請求書情報の挿入
これで、請求書イメージのフィールドを作成して、請求書レポートに必要な情報を取得できます。このレポートを印刷すると、フィールド値が請求書フォーム上の正しい位置に印刷されます。次の手順を実行する際は、次の図をガイドとして使用してください(提供されているサンプル・レポートinvoice.rdfをReports Builderで開くこともできます)。
図33-4 請求書レポートのレイアウト
画像の説明
請求書レポートに情報を挿入するには:
- ペーパー・レイアウト・ビューで、ツール・パレットの「テキスト」ツールをクリックし、請求書イメージ上の「Terms」というラベルが付いている領域でボイラープレート・テキスト・オブジェクトを作成します。ボイラープレート・テキスト・オブジェクトの中に、
30 daysと入力します。
- ツール・パレットの「フィールド」ツールをクリックして、請求書イメージ上の次の各領域でフィールドを作成します。
- Bill To(名前および住所の要素ごとに1つのフィールド):
「名前」プロパティを「F_FIRST_NAME」、「ソース」プロパティを「CUST_FIRST_NAME」に設定します。
「名前」プロパティを「F_LAST_NAME」、「ソース」プロパティを「CUST_LAST_NAME」に設定します。
「名前」プロパティを「F_STREET」、「ソース」プロパティを「C_STREET_ADDRESS」に設定します。
「名前」プロパティを「F_CITY」、「ソース」プロパティを「C_CITY」に設定します。
「名前」プロパティを「F_STATE」、「ソース」プロパティを「C_STATE_PROVINCE」に設定します。
「名前」プロパティを「F_POSTAL」、「ソース」プロパティを「C_POSTAL_CODE」に設定します。
- Ship To(名前および住所の要素ごとに1つのフィールド):
「名前」プロパティを「F_FIRST_NAME1」、「ソース」プロパティを「CUST_FIRST_NAME」に設定します。
「名前」プロパティを「F_LAST_NAME1」、「ソース」プロパティを「CUST_LAST_NAME」に設定します。
「名前」プロパティを「F_STREET1」、「ソース」プロパティを「C_STREET_ADDRESS」に設定します。
「名前」プロパティを「F_CITY1」、「ソース」プロパティを「C_CITY」に設定します。
「名前」プロパティを「F_STATE1」、「ソース」プロパティを「C_STATE_PROVINCE」に設定します。
「名前」プロパティを「F_POSTAL1」、「ソース」プロパティを「C_POSTAL_CODE」に設定します。
- Date: 「名前」プロパティを「F_TODAY」、「ソース」プロパティを「現在の日付」、「書式マスク」プロパティを「MM/DD/RR」に設定します。
- Page: 「名前」プロパティを「F_PAGE」、「ソース」プロパティを「ページ番号」、「ページ番号付け」プロパティ(「ページ番号付け」ダイアログ・ボックス内)の「リセット位置」を「R_ORDER」に設定します。
- Purchase Order Number: 「名前」プロパティを「F_ORDER_NO」、「ソース」プロパティを「ORDER_ID」に設定します。
- Sales Order Number: 「名前」プロパティを「F_ORDER_NO1」、「ソース」プロパティを「ORDER_ID」に設定します。
- Customer Number: 「名前」プロパティを「F_CUST_NO」、「ソース」プロパティを「CUSTOMER_ID」に設定します。
- Due Date: 「名前」プロパティを「F_DUE_DAY」、「ソース」プロパティを「CF_DUE_DATE」に設定します。
- Salesperson(2フィールド。名前に1フィールド、名字に1フィールド):
「名前」プロパティを「F_SALES_REP_FNAME」、「ソース」プロパティを「CUST_FIRST_NAME1」に設定します。
「名前」プロパティを「F_SALES_REP_LNAME」、「ソース」プロパティを「CUST_LAST_NAME1」に設定します。
- Customer Contact(2フィールド。名前に1フィールド、名字に1フィールド):
「名前」プロパティを「F_SALES_REP_FNAME1」、「ソース」プロパティを「CUST_FIRST_NAME1」に設定します。
「名前」プロパティを「F_SALES_REP_LNAME1」、「ソース」プロパティを「CUST_LAST_NAME1」に設定します。
注意
この例では、顧客担当者と営業担当者は同じ人物であると仮定します。
|
- Ship Date: 「名前」プロパティを「F_TODAY1」、「ソース」プロパティを「現在の日付」、「書式マスク」プロパティを「MM/DD/RR」に設定します。
- Item No.: 「名前」プロパティを「F_ITEM_NO」、「ソース」プロパティを「LINE_ITEM_ID」に設定します。このフィールドを選択して、ツールバーの「右に整列」ボタンをクリックします。
- Description(列ヘッダーなし): 「名前」プロパティを「F_ITEM_DESC」、「ソース」プロパティを「TRANSLATED_DESCRIPTION」に設定します。
- Quantity Ordered: 「名前」プロパティを「F_QUANTITY」、「ソース」プロパティを「QUANTITY」に設定します。このフィールドを選択して、ツールバーの「右に整列」ボタンをクリックします。
- Unit Price: 「名前」プロパティを「F_UNIT_PRICE」、「ソース」プロパティを「UNIT_PRICE」、「書式マスク」プロパティを「$NNN,NN0.00」に設定します。このフィールドを選択して、ツールバーの「右に整列」ボタンをクリックします。
- Extended Amount: 「名前」プロパティを「F_ITEM_PRICE」、「ソース」プロパティを「O_QUANTITY_O_UNIT_PRICE」、「書式マスク」プロパティを「$NNN,NN0.00」に設定します。このフィールドを選択して、ツールバーの「右に整列」ボタンをクリックします。
- Subtotal: 「名前」プロパティを「F_SUB_TOTAL」、「ソース」プロパティを「CS_SUB_TOTAL」に設定します。
- Total: 「名前」プロパティを「F_TOTAL」、「ソース」プロパティを「CS_TOTAL」、に設定します。
- ツール・パレットの「枠」ツールをクリックし、次のフィールドの周囲に枠を描画して、これらのフィールドをグループ化します。
- Bill To: F_FIRST_NAME、F_LAST_NAME、F_STREET、F_CITY、F_STATEおよびF_POSTAL。枠の「名前」プロパティを「M_BILL_TO」に設定します。
- Ship To: F_FIRST_NAME1、F_LAST_NAME1、F_STREET1、F_CITY1、F_STATE1およびF_POSTAL1。枠の「名前」プロパティを「M_SHIP_TO」に設定します。
- Salesperson: F_SALES_REP_FNAMEおよびF_SALES_REP_LNAME。枠の「名前」プロパティを「M_SALES_REP」に設定します。
- Customer Contact: F_SALES_REP_FNAME1およびF_SALES_REP_LNAME1。枠の「名前」プロパティを「M_CUST_CONTACT」に設定します。
- Item list: F_ITEM_NO、F_ITEM_DESC、F_QUANTITY、F_UNIT_PRICE、F_ITEM_PRICEおよびすべての空き領域(これらのフィールドの下からリスト領域下部の境界線までの領域)。枠の「名前」プロパティを「M_ORDER_LIST」に設定します。この枠は、ディテール項目リストの繰返し枠の位置およびサイズを設定するために使用します。
注意: 枠を使用すると、名前フィールドの水平方向の可変サイズで他のオブジェクトが押されなくなります。
- ツール・パレットの「繰返し枠」ツールをクリックし、次のフィールドの周囲に繰返し枠を描画して、これらのフィールドをグループ化します。
- Item list: F_ITEM_NO、F_ITEM_DESC、F_QUANTITY、F_UNIT_PRICEおよびF_ITEM_PRICE。これらのフィールドの下の空き領域は含めません。繰返し枠の「名前」プロパティを「R_ORDER_LIST」、「ソース」プロパティを「G_LIST」に設定します。
- レポートを保存して、実行します。必要に応じて、請求書イメージのバックグラウンドにあわせてオブジェクトの位置を調整します。最終的なレポート出力は次のようになります。
図33-5 請求書レポートの最終出力
画像の説明
33.7 まとめ
これで、すべての作業が完了しました。請求書レポートは正常に作成されました。この章で学習した内容は次のとおりです。
- データ・リンクが設定された2つの問合せを作成する。
- データ・モデルに2つのサマリー列と1つの式列を追加して、請求書に含める。
- レポート・レイアウトを準備して、請求書イメージ上に情報を追加する。
- フィールドを作成して、請求書フォームの正確な位置に配置する。
この例で使用されているウィザード、ビュー、プロパティの詳細は、Oracle Reportsオンライン・ヘルプを参照してください。このヘルプは、第3.1.1項「Oracle Reportsオンライン・ヘルプの使用」で説明しているとおり、Reports BuilderまたはOracle Technology Network(OTN)から表示できます。