BIP 演習:仕訳明細レポートのデータモデルを作る
この演習で身につくこと
Section titled “この演習で身につくこと”- GL の仕訳テーブル(バッチ → ヘッダー → 明細)と勘定組合せを結合し、仕訳明細を返す SQL を BIP のデータモデルとして作れる
- バインド変数と値リストで、元帳・期間・仕訳ソースのパラメータを作れる(期間は元帳に連動、仕訳ソースは複数選択)
- 同じデータを RTF テンプレート(PDF 帳票)と Excel テンプレート(加工用の明細)で出力し、使い分けを説明できる
- BIP のスケジュールで月次出力し、メール配信まで設定できる。ESS ジョブ化の手順も説明できる
- Fusion 環境がなくても、サンプルデータで SQL を試し、設計シートを作れる
用語と部品の解説は BI Publisher、Fusion のテーブルを使う SQL の書き方は BI Publisher の SQL 実践 を参照してください。
前提・準備(Fusion 環境あり/なし)
Section titled “前提・準備(Fusion 環境あり/なし)”シナリオ(架空)
Section titled “シナリオ(架空)”サンプル商事株式会社(JP プライマリ元帳、元帳通貨 JPY)の経理部は、月次決算で「転記済みの仕訳を、仕訳ソース別に確認したい」と考えています。要件は次の 3 つです。
- 監査向けに、PDF の「仕訳明細書」が欲しい
- 経理担当が Excel で集計・加工できる明細が欲しい
- 毎月、決まった時刻に自動で作成し、メールで配信したい
| 項目 | 内容 |
|---|---|
| カタログの保存先 | /Shared/Custom/Financials/GL |
| データモデル名/レポート名 | XX_GL_JOURNAL_DETAIL_DM/XX_GL_JOURNAL_DETAIL |
| パラメータ(この順序) | 元帳(必須・単一)、期間(必須・単一・元帳に連動)、仕訳ソース(複数選択・すべて可) |
| 対象 | 転記済み(STATUS = 'P')の実績の仕訳 |
| 出力列 | 元帳名、期間、仕訳ソース、カテゴリ、バッチ名、仕訳名、計上日、入力通貨、明細番号、会社・部門・勘定科目、入力金額(借方・貸方)、元帳通貨金額(借方・貸方)、摘要 |
| 出力形式 | PDF(RTF レイアウト)、Excel(Excel テンプレート) |
COA は、SEGMENT1 が会社、SEGMENT2 が部門、SEGMENT3 が勘定科目という設計(架空)とします。実際の COA では、セグメントの並びを設計書で確認してから SQL に書きます。
Fusion 環境ありルート
Section titled “Fusion 環境ありルート”- BI Publisher のデータモデルとレポートを作成できる権限(Business Intelligence Authoring などの BI 作成者向けのロール)と、
/Shared/Custom/Financials/GLへの書込権限。必要なロールは、環境のセキュリティ管理者に確認してください - 転記済みの仕訳がある テスト環境(本番では行いません)。元帳名・期間名は自社の環境に読み替えます
- Template Builder for Word(RTF 用)と Template Builder for Excel(Excel テンプレート用)。入手方法とインストール手順は、公式ドキュメントで確認してください
- メール配信を試す場合は、管理者が配信先のメールサーバーを登録済みであること(BI Publisher の「配信先」を参照)
- ESS ジョブ化を試す場合は、Setup and Maintenance で ESS ジョブ定義を管理できる権限
環境なしルート(机上演習)
Section titled “環境なしルート(机上演習)”Fusion の環境がなくても、次の 2 つで SQL と設計を体験できます。
- サンプル表で SQL を動かす:手元の Oracle Database(無償版や、Web 上で SQL を試せる環境など)に、下のスクリプトで簡易な表を作ります。表名は Fusion と同じですが、列はこの演習で使うものだけの 学習用の簡易版 です
- 設計シートを埋める:「机上演習」で、パラメータ・レイアウト・スケジュールの設計表を作ります。RTF と Excel のレイアウトの作成は、手順を読んで設計までを行います
サンプル表の作成スクリプト(Oracle Database 用・学習用の簡易版)を表示
CREATE TABLE gl_ledgers ( ledger_id NUMBER PRIMARY KEY, name VARCHAR2(30), currency_code VARCHAR2(15));CREATE TABLE gl_code_combinations ( code_combination_id NUMBER PRIMARY KEY, segment1 VARCHAR2(25), segment2 VARCHAR2(25), segment3 VARCHAR2(25));CREATE TABLE gl_je_batches ( je_batch_id NUMBER PRIMARY KEY, name VARCHAR2(100));CREATE TABLE gl_je_headers ( je_header_id NUMBER PRIMARY KEY, je_batch_id NUMBER, ledger_id NUMBER, period_name VARCHAR2(15), name VARCHAR2(100), je_source VARCHAR2(25), je_category VARCHAR2(25), status VARCHAR2(1), actual_flag VARCHAR2(1), currency_code VARCHAR2(15), default_effective_date DATE);CREATE TABLE gl_je_lines ( je_header_id NUMBER, je_line_num NUMBER, ledger_id NUMBER, period_name VARCHAR2(15), code_combination_id NUMBER, entered_dr NUMBER, entered_cr NUMBER, accounted_dr NUMBER, accounted_cr NUMBER, description VARCHAR2(240), PRIMARY KEY (je_header_id, je_line_num));CREATE TABLE gl_period_statuses ( application_id NUMBER, ledger_id NUMBER, period_name VARCHAR2(15), start_date DATE, closing_status VARCHAR2(1), adjustment_period_flag VARCHAR2(1));
INSERT INTO gl_ledgers VALUES (1001, 'JP Primary Ledger', 'JPY');
-- 勘定組合せ(会社 / 部門 / 勘定科目)INSERT INTO gl_code_combinations VALUES (1, '101', '2100', '5110'); -- 仕入高INSERT INTO gl_code_combinations VALUES (2, '101', '0000', '2110'); -- 買掛金INSERT INTO gl_code_combinations VALUES (3, '101', '0000', '1110'); -- 普通預金INSERT INTO gl_code_combinations VALUES (4, '101', '1100', '6110'); -- 給料手当INSERT INTO gl_code_combinations VALUES (5, '101', '0000', '2210'); -- 未払費用INSERT INTO gl_code_combinations VALUES (6, '101', '0000', '1310'); -- 売掛金INSERT INTO gl_code_combinations VALUES (7, '101', '2100', '4110'); -- 売上高
INSERT INTO gl_je_batches VALUES (5001, 'Payables 2026-04 batch');INSERT INTO gl_je_batches VALUES (5002, 'Manual accrual 2026-04');INSERT INTO gl_je_batches VALUES (5003, 'Receivables 2026-04 batch');INSERT INTO gl_je_batches VALUES (5004, 'Manual draft 2026-04');INSERT INTO gl_je_batches VALUES (5005, 'Payables 2026-05 batch');
-- 仕訳ヘッダー(9005 は未転記 'U'、9006 は別の期間)INSERT INTO gl_je_headers VALUES (9001, 5001, 1001, 'Apr-26', 'AP Invoice INV-0001', 'Payables', 'Purchase Invoices', 'P', 'A', 'JPY', DATE '2026-04-15');INSERT INTO gl_je_headers VALUES (9002, 5001, 1001, 'Apr-26', 'AP Payment PAY-0001', 'Payables', 'Payments', 'P', 'A', 'JPY', DATE '2026-04-25');INSERT INTO gl_je_headers VALUES (9003, 5002, 1001, 'Apr-26', 'Salary accrual', 'Manual', 'Accrual', 'P', 'A', 'JPY', DATE '2026-04-30');INSERT INTO gl_je_headers VALUES (9004, 5003, 1001, 'Apr-26', 'AR Invoice USD-0001', 'Receivables', 'Sales Invoices', 'P', 'A', 'USD', DATE '2026-04-20');INSERT INTO gl_je_headers VALUES (9005, 5004, 1001, 'Apr-26', 'Draft adjustment', 'Manual', 'Adjustment', 'U', 'A', 'JPY', DATE '2026-04-30');INSERT INTO gl_je_headers VALUES (9006, 5005, 1001, 'May-26', 'AP Invoice INV-0002', 'Payables', 'Purchase Invoices', 'P', 'A', 'JPY', DATE '2026-05-10');
-- 仕訳明細(借方・貸方のうち使わない側は NULL)。9004 は USD 1,000 を 150 円で換算INSERT INTO gl_je_lines VALUES (9001, 1, 1001, 'Apr-26', 1, 110000, NULL, 110000, NULL, 'INV-0001 purchase');INSERT INTO gl_je_lines VALUES (9001, 2, 1001, 'Apr-26', 2, NULL, 110000, NULL, 110000, 'INV-0001 payable');INSERT INTO gl_je_lines VALUES (9002, 1, 1001, 'Apr-26', 2, 110000, NULL, 110000, NULL, 'PAY-0001 clear payable');INSERT INTO gl_je_lines VALUES (9002, 2, 1001, 'Apr-26', 3, NULL, 110000, NULL, 110000, 'PAY-0001 bank');INSERT INTO gl_je_lines VALUES (9003, 1, 1001, 'Apr-26', 4, 500000, NULL, 500000, NULL, 'April salary accrual');INSERT INTO gl_je_lines VALUES (9003, 2, 1001, 'Apr-26', 5, NULL, 500000, NULL, 500000, 'April salary accrual');INSERT INTO gl_je_lines VALUES (9004, 1, 1001, 'Apr-26', 6, 1000, NULL, 150000, NULL, 'USD invoice receivable');INSERT INTO gl_je_lines VALUES (9004, 2, 1001, 'Apr-26', 7, NULL, 1000, NULL, 150000, 'USD invoice revenue');INSERT INTO gl_je_lines VALUES (9005, 1, 1001, 'Apr-26', 4, 30000, NULL, 30000, NULL, 'Draft line 1');INSERT INTO gl_je_lines VALUES (9005, 2, 1001, 'Apr-26', 5, NULL, 30000, NULL, 30000, 'Draft line 2');INSERT INTO gl_je_lines VALUES (9006, 1, 1001, 'May-26', 1, 55000, NULL, 55000, NULL, 'INV-0002 purchase');INSERT INTO gl_je_lines VALUES (9006, 2, 1001, 'May-26', 2, NULL, 55000, NULL, 55000, 'INV-0002 payable');
-- 期間ステータス(application_id = 101 が GL。Adj-26 は調整期間、200 は別アプリケーションの例)INSERT INTO gl_period_statuses VALUES (101, 1001, 'Mar-26', DATE '2026-03-01', 'C', 'N');INSERT INTO gl_period_statuses VALUES (101, 1001, 'Apr-26', DATE '2026-04-01', 'O', 'N');INSERT INTO gl_period_statuses VALUES (101, 1001, 'May-26', DATE '2026-05-01', 'F', 'N');INSERT INTO gl_period_statuses VALUES (101, 1001, 'Adj-26', DATE '2026-03-31', 'O', 'Y');INSERT INTO gl_period_statuses VALUES (200, 1001, 'Apr-26', DATE '2026-04-01', 'O', 'N');COMMIT;ステップ 0 テーブルと列を確認する
Section titled “ステップ 0 テーブルと列を確認する”実装でも最初の作業です。SQL を書く前に、使う表を確認します。
| 表 | 役割 | 結合キー |
|---|---|---|
| GL_JE_BATCHES | 仕訳バッチ(バッチ名) | JE_BATCH_ID で GL_JE_HEADERS と結合 |
| GL_JE_HEADERS | 仕訳ヘッダー(ソース・カテゴリ・期間・状態・通貨・計上日) | LEDGER_ID で GL_LEDGERS、JE_BATCH_ID で GL_JE_BATCHES |
| GL_JE_LINES | 仕訳明細(勘定・借方/貸方・摘要) | JE_HEADER_ID で GL_JE_HEADERS、CODE_COMBINATION_ID で勘定組合せ |
| GL_CODE_COMBINATIONS | 勘定組合せ(SEGMENT1〜) | CODE_COMBINATION_ID |
| GL_LEDGERS | 元帳名 | LEDGER_ID |
| GL_PERIOD_STATUSES | 期間の値リスト用(GL は APPLICATION_ID = 101) | LEDGER_ID |
Tables and Views for Financials の GL_JE_HEADERS(25D)で確認できる点は次のとおりです。
STATUSは U(未転記)と P(転記済)です。それ以外の値は、インポートなどのエラー状態を表しますJE_SOURCEとJE_CATEGORYには 内部名 が入ります(GL_JE_SOURCES_B、GL_JE_CATEGORIES_B を参照)。画面に出る名称ではありませんDEFAULT_EFFECTIVE_DATEが仕訳の計上日の既定値、ACTUAL_FLAGが残高タイプ(実績・予算・予算引当)です。コード値はドキュメントに書かれていないため、SELECT DISTINCT actual_flagで実データを確認します- 索引に GL_JE_HEADERS_N2(PERIOD_NAME、JE_CATEGORY)があります。期間で絞る条件を必ず入れると、索引を使いやすくなります
ステップ 1 データモデルとデータセットを作る
Section titled “ステップ 1 データモデルとデータセットを作る”- ナビゲータ > Tools > Reports and Analytics で Browse Catalog を開き、
/Shared/Custom/Financials/GLフォルダを作ります(なければ) - そのフォルダで Create > Data Model を選び、データモデル・エディタを開きます
- Properties で、Financials の業務テーブル用のデータソースを選びます(Fusion では ApplicationDB_FSCM が一般的です。実機のリストで確認してください)
- New Dataset > SQL Query を選び、名前を
GL_JE_DETAIL、Type of SQL を Standard SQL にします - 「解答例 1」の SQL を、自分で考えてから貼り付けます。要件は次のとおりです
- 仕訳ヘッダーを軸に、バッチ・明細・勘定組合せ・元帳を結合する
- 元帳・期間・転記済み(
P)・実績(A)で絞る - 仕訳ソースは、
ALLまたは選んだ値で絞る - 並び順は、仕訳ソース、バッチ名、仕訳名、明細番号
- OK を押すと SQL が検証され、バインド変数
:P_LEDGER_ID、:P_PERIOD_NAME、:P_SOURCEからパラメータが作られます
SQL は 明細 1 行が 1 行 のフラットな形で返します。グループ化(仕訳ソース → バッチ → 仕訳)は RTF テンプレート側で行います。Excel テンプレートは、データの階層がレイアウトと一致しているほど作りやすいためです。
ステップ 2 パラメータと値リストを作る
Section titled “ステップ 2 パラメータと値リストを作る”コンポーネント・ペインの List of Values と Parameters で、次のとおり作ります。パラメータの並び順は 元帳 → 期間 → 仕訳ソース にします(ESS ジョブ化のときに、ジョブ側のパラメータ順序と合わせる必要があるためです)。
| パラメータ | 型 | 表示ラベル | オプション | 値リスト |
|---|---|---|---|---|
P_LEDGER_ID |
Menu(整数) | 元帳 | 変更時に他のパラメータを更新(Refresh other parameters on change) | 解答例 2 |
P_PERIOD_NAME |
Menu(文字列) | 期間 | 値リストが :P_LEDGER_ID を参照する |
解答例 3 |
P_SOURCE |
Menu(文字列) | 仕訳ソース | 複数選択(Multiple Selection) | 解答例 4 |
設計のポイントは次の 3 つです。
- 期間は元帳に連動させる:元帳を選び直すと期間の選択肢が変わります。元帳のパラメータで「変更時に他のパラメータを更新」を有効にします
- 仕訳ソースは複数選択にする:複数選択のパラメータは、選んだ値の数だけバインド値に展開されます。そのため
:P_SOURCE IS NULLのような単独の比較は避け、IN (:P_SOURCE)の形で使います。「すべて」は、値リストの先頭にALLの行を用意して'ALL' IN (:P_SOURCE)で判定します(BI Publisher の SQL 実践 の NULL を渡す方式は、単一選択向けです) - 既定値を設定する:全件実行を避けるため、元帳と期間には既定値を設定します
ステップ 3 データを確認してサンプルデータを保存する
Section titled “ステップ 3 データを確認してサンプルデータを保存する”- データモデル・エディタの Data タブで、元帳・期間・仕訳ソース(まず
ALL)を指定して実行します - 件数と金額を確認します。仕訳ソースを 1 つだけ、複数、
ALLと切り替えて、どれもエラーなく動くことを確認します - 結果を サンプル・データとして保存 します。続けて、データを XML でダウンロード(Export)します。XML の要素名は、SQL の列の別名(大文字)になります
- データモデルを
/Shared/Custom/Financials/GLにXX_GL_JOURNAL_DETAIL_DMとして保存します
<DATA_DS> <G_1> <LEDGER_NAME>JP Primary Ledger</LEDGER_NAME> <JE_SOURCE>Payables</JE_SOURCE> <JOURNAL_NAME>AP Invoice INV-0001</JOURNAL_NAME> <JE_LINE_NUM>1</JE_LINE_NUM> <ACCOUNTED_DR>110000</ACCOUNTED_DR> <!-- 以下、SQL の列の数だけ要素が並ぶ --> </G_1> <!-- 明細の行数だけ G_1 が繰り返される --></DATA_DS>ステップ 4 RTF レイアウト(PDF 帳票)を作る
Section titled “ステップ 4 RTF レイアウト(PDF 帳票)を作る”- カタログで Create > Report を選び、
XX_GL_JOURNAL_DETAIL_DMをデータモデルに指定して、XX_GL_JOURNAL_DETAILとして保存します。レイアウト・エディタが開いたら、ここでは使わずに閉じます - Word で Template Builder を開き、ステップ 3 の XML を サンプル XML として読み込み ます
- 次のレイアウトを設計します
| 領域 | 内容 |
|---|---|
| ページヘッダー | 帳票名(仕訳明細書)、元帳名、期間、出力日時 |
| 本体 | 仕訳ソース → バッチ → 仕訳でグループ化。仕訳ごとに、見出し行(仕訳名・計上日・カテゴリ・通貨)、明細行、仕訳の合計行を置く |
| 明細行の列 | 明細番号、会社・部門・勘定科目、入力借方/貸方、元帳通貨借方/貸方、摘要 |
| 最後 | 元帳通貨の借方・貸方の総合計 |
| ページフッター | ページ番号 |
- Template Builder の表ウィザード(Table Wizard)で、グループ化と並び順を設定して表を作ります。金額の列には桁区切りの数値書式を設定し、借方・貸方が空(NULL)の明細は空欄のまま表示します
- 合計行は、グループ内の金額を合計するタグで作ります。タグの形は次のようになります(表ウィザードが同様のタグを生成するので、手で書く必要はありません。レビューで読めるようにするための例です)
<?for-each-group:G_1;./JE_SOURCE?> ← 仕訳ソースごとのグループ <?for-each-group:current-group();./JOURNAL_NAME?> ← 仕訳ごとのグループ <?for-each:current-group()?> ← 明細行の繰り返し <?JE_LINE_NUM?> <?ACCOUNT?> <?ACCOUNTED_DR?> <?ACCOUNTED_CR?> <?end for-each?> 仕訳合計:<?sum(current-group()/ACCOUNTED_DR)?> <?sum(current-group()/ACCOUNTED_CR)?> <?end for-each-group?><?end for-each-group?>- Template Builder で PDF にプレビューし、仕訳ごとの合計と改ページ位置を確認します。日本語のフォントが正しく表示されるかも、本番相当のデータで確認します
- テンプレートを
.rtfで保存し、カタログのレポートで Edit > Add New Layout > Upload(Upload or Generate Layout)を選んで、レイアウト名仕訳明細書、タイプ RTF として登録します
ステップ 5 Excel レイアウト(加工用の明細)を作る
Section titled “ステップ 5 Excel レイアウト(加工用の明細)を作る”Excel テンプレートは、Excel の 定義名(XDO_ で始まる名前)で、XML のデータとセルの位置を対応付けるテンプレートです。公式ドキュメントで確認できる要点は次のとおりです。
- 名前付きセルがデータ項目を、名前付きセル範囲が繰り返しグループを受け取ります。Template Builder for Excel を使うと、項目やグループを挿入したときに
XDO_の名前が自動で作られます - テンプレートのレイアウトは、XML のデータの階層に合わせます。階層が合わない場合は XSLT で再グループ化できますが、公式ドキュメントは「レポートのレイアウトに合わせてデータモデルを設計する」ことを勧めています
- 各テンプレートには、非表示のシート
XDO_METADATAが必要です。カタログにアップロードする前に、このシートを非表示にします - Excel の数式で
XDO_の名前を使えるのは、単純な表(グループが入れ子でない表)に限られます - xlsx では、1 シートの行数の上限は 1,048,576 行で、大量データ向けのスケーラブル・モードが既定で有効です
この演習の設計は次のとおりです。
- シートの 1 行目に列見出し、2 行目にデータ行を置きます。列は、仕訳ソース、カテゴリ、バッチ名、仕訳名、計上日、通貨、明細番号、会社、部門、勘定科目、入力借方、入力貸方、元帳通貨借方、元帳通貨貸方、摘要の順にします
- Template Builder for Excel で、サンプル XML を読み込み、データ行の項目と繰り返しグループ(
G_1)を挿入します。名前定義が自動で作られます - 見出し行にオートフィルタとウィンドウ枠の固定を設定し、金額列に桁区切りの書式を設定します
- 合計行が必要なら、表の下に Excel の SUM を置きます(単純な表なので
XDO_の名前を使えます) XDO_METADATAを非表示にして.xlsxで保存し、カタログのレポートで Add New Layout > Upload から、レイアウト名Excel 明細として登録します
詳しい作り方は、公式ドキュメントの「Excel テンプレート」の章で確認してください。
ステップ 6 実行して検算する
Section titled “ステップ 6 実行して検算する”- カタログでレポートを開き、元帳・期間・仕訳ソースを指定して実行します。レイアウトと出力形式を、仕訳明細書(PDF)と Excel 明細(xlsx)で切り替えます
- 次の観点で検算します
- 仕訳単位:元帳通貨の借方合計と貸方合計が一致するか(「解答例 5」の検算用 SQL で、一致しない仕訳を探せます)
- 画面との突合せ:ナビゲータ > General Accounting > Journals の Manage Journals で、いくつかの仕訳の明細・金額を画面と比べます
- 試算表との突合せ:同じ元帳・期間の当期発生額(借方)の合計を、BI Publisher の SQL 実践 の GL 試算表 SQL の結果と比べます。一致しない場合は、通貨・調整期間・残高の種類の条件を確認します
- OTBI との突合せ:General Ledger - Journals Real Time のサブジェクト領域で同じ条件の分析を作り、件数と合計を比べます
- 未転記(
U)の仕訳と、別の期間の仕訳が出力に含まれていないことを確認します
ステップ 7 セキュリティを確認する
Section titled “ステップ 7 セキュリティを確認する”BIP の SQL データセットには、Fusion のデータセキュリティが 自動では効きません(BI Publisher の SQL 実践 を参照)。この演習の SQL にも、元帳へのデータアクセスを確認する条件はありません。
- テスト環境で、このレポートを開ける権限があり、JP プライマリ元帳へのデータアクセスを持たないユーザーを用意します(持っていなければ、セキュリティ管理者に依頼します)
- そのユーザーで元帳の値リストと出力を確認し、SQL に条件がないために元帳のデータが見えることを確認します
- 対策を決めます。実務では、次の組合せにします
- カタログのフォルダ・レポートの権限を、経理部門の BI ロールに限定する
- ESS ジョブ化したときに自動で作られる「Run+ジョブ定義名」の権限を、経理部門のカスタムロールにだけ付与する(セキュリティ演習)
- 元帳ごとに担当者を分ける場合は、実行ユーザー(
:xdo_user_name)で元帳を絞る設計、または OTBI の分析をデータセットにする設計を検討する
ステップ 8 スケジュール実行する
Section titled “ステップ 8 スケジュール実行する”8-1 BIP のスケジュールで月次出力する
カタログでレポートの Schedule を選び、次の値で設定します(手順の考え方は BI Publisher の「スケジュールと配信」と同じです)。
| 設定 | 値(例) |
|---|---|
| パラメータ | 元帳 = JP プライマリ元帳、期間 = 対象月(固定値)、仕訳ソース = すべて |
| 出力 | 仕訳明細書を PDF、Excel 明細を xlsx で出力する |
| 配信 | メール。宛先は経理部門の配布リスト(架空)。件名と本文に期間を入れる |
| 頻度 | 月次。月次決算の GL クローズより後の日時(例:毎月 6 日の 6:00)にする |
| 通知 | 失敗時に担当者へ通知する |
登録後は、レポート・ジョブ履歴(Report Job History)で状態を確認し、メールの添付と本文を確認します。
8-2 ESS ジョブにして、業務ユーザーがスケジュール済プロセスから実行できるようにする
BI Publisher の「ESS ジョブ化」の手順に沿って、次の値でジョブ定義を作ります。
| 項目 | 値(例) |
|---|---|
| Display Name | 仕訳明細レポート |
| Name | XxGlJournalDetail |
| Job Application Name | FscmEss |
| Job Type | BIPJobType |
| Report ID | Custom/Financials/GL/XX_GL_JOURNAL_DETAIL.xdo |
| パラメータ | Ledger、Period、Source の順(データモデルと同じ順序) |
ジョブ定義のパラメータの値リストは、データモデル側ではなく、ジョブ定義側(Manage List of Values Sources)に作ります。複数選択のパラメータをジョブ定義でどう扱えるかは、リリースにより異なる可能性があるため、実機で確認してください。ジョブ定義は、カタログのアーカイブには含まれません。環境を移送するときは、移送先で作り直すか設定データの移行手段を使います。
机上演習(環境なしルート)
Section titled “机上演習(環境なしルート)”- 上のスクリプトでサンプル表を作り、「解答例 1」の SQL を、
P_LEDGER_ID = 1001、P_PERIOD_NAME = 'Apr-26'、P_SOURCE = 'ALL'で実行します。結果が何行になるか、予想してから実行してください - 次に、仕訳ソースを
Payablesだけ、PayablesとReceivablesの 2 つにして実行します。複数のときは、SQL のIN (:P_SOURCE)をIN ('Payables', 'Receivables')に書き換えます(BIP が展開する形です) - 次のパラメータ設計表の空欄を埋めてください
| パラメータ | 型 | 必須 | 複数選択 | 値リストの条件 |
|---|---|---|---|---|
| 元帳 | ? | ? | ? | ? |
| 期間 | ? | ? | ? | ? |
| 仕訳ソース | ? | ? | ? | ? |
- 月次スケジュールの設計表(実行日時・期間パラメータの決め方・配信先・失敗時の対応)を作ってください
確認ポイント
Section titled “確認ポイント”- パラメータの順序が「元帳 → 期間 → 仕訳ソース」になっている
- 元帳を変えると、期間の値リストが更新される
- 仕訳ソースを、
ALL・1 つ・複数のどれにしてもエラーなく実行できる - 未転記(
U)の仕訳と、別の期間の仕訳が出力に含まれない - 仕訳ごとに、元帳通貨の借方合計と貸方合計が一致している
- 外貨の仕訳で、入力通貨の金額と元帳通貨の金額が別の列に出る
- RTF(PDF)と Excel(xlsx)の両方が出力でき、合計が一致する
- カタログの権限と ESS ジョブの Run 権限で、実行できる人を限定した
- スケジュールが成功し、メールが届いた(またはジョブ履歴で成功を確認した)
解答例 1:データセットの SQL(仕訳明細)を表示
SELECT gl.name AS ledger_name, gjh.period_name, gjh.je_source, -- 内部名(表示名は発展課題 1) gjh.je_category, gjb.name AS batch_name, gjh.name AS journal_name, gjh.default_effective_date AS accounting_date, gjh.currency_code AS entered_currency, gjl.je_line_num, gcc.segment1 AS company, -- 例:会社(何番目かは COA の設計による) gcc.segment2 AS department, -- 例:部門 gcc.segment3 AS account, -- 例:勘定科目 gjl.entered_dr, gjl.entered_cr, gjl.accounted_dr, gjl.accounted_cr, gjl.description AS line_descriptionFROM gl_je_headers gjh JOIN gl_je_batches gjb ON gjb.je_batch_id = gjh.je_batch_id JOIN gl_je_lines gjl ON gjl.je_header_id = gjh.je_header_id JOIN gl_code_combinations gcc ON gcc.code_combination_id = gjl.code_combination_id JOIN gl_ledgers gl ON gl.ledger_id = gjh.ledger_idWHERE gjh.ledger_id = :P_LEDGER_IDAND gjh.period_name = :P_PERIOD_NAMEAND gjh.status = 'P' -- 転記済みAND gjh.actual_flag = 'A' -- 実績(コード値は実データで確認)AND ('ALL' IN (:P_SOURCE) OR gjh.je_source IN (:P_SOURCE))ORDER BY gjh.je_source, gjb.name, gjh.name, gjl.je_line_numポイントは次のとおりです。
- 元帳と期間の条件を、必ず最初に入れます(
GL_JE_HEADERSの期間系の索引を使いやすくするためです) - 仕訳ソースは
'ALL' IN (:P_SOURCE) OR ... IN (:P_SOURCE)の形です。1 つ選んでも複数選んでも、SQL が成立します - 列は必要なものだけを返します。
SELECT *は使いません - 勘定科目名・部門名は、この SQL では取っていません(発展課題 2)
解答例 2〜4:値リストの SQL を表示
SELECT gl.name AS label, gl.ledger_id AS valueFROM gl_ledgers glORDER BY gl.nameSELECT gps.period_name AS label, gps.period_name AS valueFROM gl_period_statuses gpsWHERE gps.application_id = 101 -- GLAND gps.ledger_id = :P_LEDGER_IDAND NVL(gps.adjustment_period_flag, 'N') = 'N'ORDER BY gps.start_date DESCSELECT label, valueFROM (SELECT '(すべて)' AS label, 'ALL' AS value, 0 AS sort_key FROM dual UNION ALL SELECT s.je_source, s.je_source, 1 FROM (SELECT DISTINCT gjh.je_source FROM gl_je_headers gjh WHERE gjh.ledger_id = :P_LEDGER_ID AND gjh.period_name = :P_PERIOD_NAME AND gjh.status = 'P') s)ORDER BY sort_key, label注意点は次のとおりです。
- 解答例 2 は、すべての元帳が選択肢に出ます。値リストは入力の補助であり、データを守る仕組みではありません(ステップ 7)。元帳以外の行が混ざる場合は、Tables and Views で GL_LEDGERS の列を確認して条件を足します
- 解答例 3 は、BI Publisher の SQL 実践 の期間の値リストと同じ形です。期間の並び順は、期間名の文字列ではなく開始日で決めます
- 解答例 4 は、元帳と期間に連動します。パラメータの順序が「元帳 → 期間 → 仕訳ソース」なのは、この依存関係のためです
解答例 5:検算用 SQL と、サンプルデータの期待結果を表示
SELECT gjh.name AS journal_name, SUM(NVL(gjl.accounted_dr, 0)) AS total_dr, SUM(NVL(gjl.accounted_cr, 0)) AS total_crFROM gl_je_headers gjh JOIN gl_je_lines gjl ON gjl.je_header_id = gjh.je_header_idWHERE gjh.ledger_id = :P_LEDGER_IDAND gjh.period_name = :P_PERIOD_NAMEAND gjh.status = 'P'GROUP BY gjh.je_header_id, gjh.nameHAVING SUM(NVL(gjl.accounted_dr, 0)) <> SUM(NVL(gjl.accounted_cr, 0))統計仕訳(統計通貨の仕訳)は借方と貸方が一致しないことがあります。含まれる環境では、扱いを実データで確認してから条件に加えます。
SELECT gjh.je_source, SUM(NVL(gjl.accounted_dr, 0)) AS total_dr, SUM(NVL(gjl.accounted_cr, 0)) AS total_crFROM gl_je_headers gjh JOIN gl_je_lines gjl ON gjl.je_header_id = gjh.je_header_idWHERE gjh.ledger_id = :P_LEDGER_IDAND gjh.period_name = :P_PERIOD_NAMEAND gjh.status = 'P'AND gjh.actual_flag = 'A'GROUP BY gjh.je_sourceORDER BY gjh.je_sourceサンプルデータでの期待結果(P_LEDGER_ID = 1001、P_PERIOD_NAME = 'Apr-26')
| 条件 | 解答例 1 の行数 | 内容 |
|---|---|---|
P_SOURCE = 'ALL' |
8 行 | Manual(1 仕訳 2 行)、Payables(2 仕訳 4 行)、Receivables(1 仕訳 2 行) |
P_SOURCE = 'Payables' |
4 行 | AP Invoice INV-0001 と AP Payment PAY-0001 |
Payables+Receivables |
6 行 | 上の 4 行と、AR Invoice USD-0001 の 2 行 |
- 未転記の
Draft adjustment(9005)と、May-26のAP Invoice INV-0002(9006)は、どの条件でも出力されません AR Invoice USD-0001は、入力借方 1,000(USD)に対して元帳通貨借方 150,000(JPY)で出力されます- 仕訳ソース別の合計(元帳通貨)は、Manual が借方・貸方とも 500,000、Payables が 220,000、Receivables が 150,000 です。総合計は借方・貸方とも 870,000 で、一致します
- 検算用 SQL(借貸不一致の仕訳)は、サンプルデータでは 0 行です
机上演習の解答例(パラメータ設計表・スケジュール設計表)を表示
パラメータ設計表
| パラメータ | 型 | 必須 | 複数選択 | 値リストの条件 |
|---|---|---|---|---|
元帳(P_LEDGER_ID) |
整数 | 必須 | 単一 | 元帳名を表示し、元帳 ID を渡す。変更時に他のパラメータを更新する |
期間(P_PERIOD_NAME) |
文字列 | 必須 | 単一 | 選んだ元帳の GL の期間(調整期間を除く)を新しい順に表示する |
仕訳ソース(P_SOURCE) |
文字列 | 必須(ALL で全件) |
複数 | 先頭に ALL。以降は、選んだ元帳・期間の転記済み仕訳にあるソース |
月次スケジュール設計表
| 項目 | 設計 |
|---|---|
| 実行日時 | 月次決算の GL クローズの翌営業日の朝(例:毎月 6 日 6:00)。締めの完了を待つ運用なら、ESS ジョブ化して決算手順に組み込む |
| 期間パラメータ | 固定値だと毎月の更新が必要。省略時は直近の期間を使う設計にする(発展課題 3)。決まるまでの暫定運用は、チェックリストで更新担当を決める |
| 出力・配信先 | 仕訳明細書(PDF)と Excel 明細(xlsx)をメールで経理部門の配布リストへ。送信元アドレスと添付サイズを確認する |
| 失敗時の対応 | 失敗通知を担当者へ送り、レポート・ジョブ履歴でエラーを確認する。手動での再実行手順を手順書に書く |
| セキュリティ | 実行できる人をフォルダ権限と Run 権限で限定する。配信先の部門を限定する |
よくあるエラーと対処
Section titled “よくあるエラーと対処”| 症状 | 原因と対処 |
|---|---|
ORA-00904: invalid identifier |
列名の誤りです。自分の環境の Tables and Views で列名を確認します。EBS と同じ名前に見えても、Fusion にない列があります |
ORA-00942: table or view does not exist |
表名の誤り、または選んだデータソースでは参照できない表です。データソースの選択(Financials 用)と表名を確認します |
| 期間の値リストが空 | P_LEDGER_ID が値リストに渡っていません。元帳のパラメータで「変更時に他のパラメータを更新」が有効か、値リストが :P_LEDGER_ID を参照しているかを確認します |
| 仕訳ソースを 2 つ以上選ぶとエラーになる | :P_SOURCE IS NULL のような単独の比較が残っています。IN (:P_SOURCE) と 'ALL' IN (:P_SOURCE) の形にします |
| 行数が想定より多い | 結合条件の漏れがないか確認します。勘定の名称を取るために _TL 表を結合する場合は、言語の条件(language)も必要です |
| 外貨の仕訳の金額が合わない | 入力通貨の金額(ENTERED_*)と元帳通貨の金額(ACCOUNTED_*)を混ぜて合計していないか確認します |
| Excel の出力が空になる、または書式が崩れる | XDO_ の名前がデータの階層と合っていません。データをフラットにするか、名前定義を見直します。アップロード前に XDO_METADATA を非表示にしたかも確認します |
| PDF で日本語が文字化けする、改ページが崩れる | RTF のフォント設定と、本番相当のデータでの確認が不足しています。フォントの扱いは、環境の設定を管理者に確認します |
| スケジュールは成功したがメールが届かない | 配信先(メールサーバー)は管理者が登録します。登録の有無、宛先、迷惑メールの設定を確認します。開発環境と本番環境で設定が違う場合も確認します |
| オンライン実行がタイムアウトする | 件数が多い場合は、スケジュール実行か ESS ジョブにします。期間・元帳の条件が効いているかも確認します |
- 仕訳ソースとカテゴリを、内部名ではなく表示用の名称で出力する。GL_JE_SOURCES_TL と GL_JE_CATEGORIES_TL を言語の条件つきで結合する(列名は Tables and Views で確認してから書く)
- 勘定科目名・部門名を付ける。値セットの説明の取り方は BI Publisher の SQL 実践 の「COA セグメントを扱う」を読み、SQL で取るか、OTBI の分析をデータセットにするかを比べる
- 期間パラメータを省略可能にし、省略時は直近の期間(例:オープン期間のうち最新のもの)を使う SQL にする。スケジュール実行でも毎月更新しなくてよくなる。実行計画への影響も確認する
- バースト定義で、仕訳ソース(または部門)ごとに Excel を分割し、担当者へメールで配信する(BI Publisher の「バースト定義」)
:xdo_user_nameを使って、実行ユーザーに許可された元帳だけを返すように SQL を変更する。オンライン実行とスケジュール実行の両方でテストする- レポートを
/Shared/Customのアーカイブで別の環境へ移送し、配信先と ESS ジョブ定義を移送先で作り直す手順書を作る - OTBI の General Ledger - Journals Real Time で同じ分析を作り、BIP との使い分け(件数、鮮度、レイアウトの自由度、セキュリティ)を表にまとめる
公式ドキュメント
Section titled “公式ドキュメント”- Tables and Views for Financials:GL_JE_HEADERS(25D)
- Tables and Views for Financials(26D)
- Understand Excel Templates(Designing Pixel-Perfect Reports in Oracle Transactional Business Intelligence)
- Using the Template Builder for Excel(Oracle Analytics Publisher の参考ドキュメント)
- Create Datasets Using SQL Queries
- Include User Information Stored in System Variables in Your Report Data
- Creating and Administering Analytics and Reports for Financials(PDF:Set Up Reports as Scheduled Processes を含む)
本サイトは学習目的で個人が作成した非公式の教材であり、Oracle Corporation およびその関連会社とは関係ありません。内容の正確性は保証しません。最新の仕様・試験範囲は必ず公式ドキュメントと Oracle University の情報で確認してください。
模擬テストの問題は公開されている出題範囲(Exam Topics)と公式ドキュメントをもとに独自に作成したもので、実際の試験問題ではありません。
Oracle、Java、MySQL は Oracle Corporation およびその子会社、関連会社の米国およびその他の国における登録商標です。その他の製品名・会社名は各社の商標です。
© 2026 Fusion ERP 実装ラボ