コンテンツにスキップ

BIP 演習:仕訳明細レポートのデータモデルを作る

  • GL の仕訳テーブル(バッチ → ヘッダー → 明細)と勘定組合せを結合し、仕訳明細を返す SQL を BIP のデータモデルとして作れる
  • バインド変数と値リストで、元帳・期間・仕訳ソースのパラメータを作れる(期間は元帳に連動、仕訳ソースは複数選択)
  • 同じデータを RTF テンプレート(PDF 帳票)と Excel テンプレート(加工用の明細)で出力し、使い分けを説明できる
  • BIP のスケジュールで月次出力し、メール配信まで設定できる。ESS ジョブ化の手順も説明できる
  • Fusion 環境がなくても、サンプルデータで SQL を試し、設計シートを作れる

用語と部品の解説は BI Publisher、Fusion のテーブルを使う SQL の書き方は BI Publisher の SQL 実践 を参照してください。

前提・準備(Fusion 環境あり/なし)

Section titled “前提・準備(Fusion 環境あり/なし)”

サンプル商事株式会社(JP プライマリ元帳、元帳通貨 JPY)の経理部は、月次決算で「転記済みの仕訳を、仕訳ソース別に確認したい」と考えています。要件は次の 3 つです。

  1. 監査向けに、PDF の「仕訳明細書」が欲しい
  2. 経理担当が Excel で集計・加工できる明細が欲しい
  3. 毎月、決まった時刻に自動で作成し、メールで配信したい
項目 内容
カタログの保存先 /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 に書きます。

  • 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 ジョブ定義を管理できる権限

Fusion の環境がなくても、次の 2 つで SQL と設計を体験できます。

  1. サンプル表で SQL を動かす:手元の Oracle Database(無償版や、Web 上で SQL を試せる環境など)に、下のスクリプトで簡易な表を作ります。表名は Fusion と同じですが、列はこの演習で使うものだけの 学習用の簡易版 です
  2. 設計シートを埋める:「机上演習」で、パラメータ・レイアウト・スケジュールの設計表を作ります。RTF と Excel のレイアウトの作成は、手順を読んで設計までを行います
サンプル表の作成スクリプト(Oracle Database 用・学習用の簡易版)を表示
sample-gl.sql(学習用。Fusion の表の簡易版)
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 データモデルとデータセットを作る”
  1. ナビゲータ > Tools > Reports and Analytics で Browse Catalog を開き、/Shared/Custom/Financials/GL フォルダを作ります(なければ)
  2. そのフォルダで Create > Data Model を選び、データモデル・エディタを開きます
  3. Properties で、Financials の業務テーブル用のデータソースを選びます(Fusion では ApplicationDB_FSCM が一般的です。実機のリストで確認してください)
  4. New Dataset > SQL Query を選び、名前を GL_JE_DETAIL、Type of SQL を Standard SQL にします
  5. 「解答例 1」の SQL を、自分で考えてから貼り付けます。要件は次のとおりです
    • 仕訳ヘッダーを軸に、バッチ・明細・勘定組合せ・元帳を結合する
    • 元帳・期間・転記済み(P)・実績(A)で絞る
    • 仕訳ソースは、ALL または選んだ値で絞る
    • 並び順は、仕訳ソース、バッチ名、仕訳名、明細番号
  6. 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 つです。

  1. 期間は元帳に連動させる:元帳を選び直すと期間の選択肢が変わります。元帳のパラメータで「変更時に他のパラメータを更新」を有効にします
  2. 仕訳ソースは複数選択にする:複数選択のパラメータは、選んだ値の数だけバインド値に展開されます。そのため :P_SOURCE IS NULL のような単独の比較は避け、IN (:P_SOURCE) の形で使います。「すべて」は、値リストの先頭に ALL の行を用意して 'ALL' IN (:P_SOURCE) で判定します(BI Publisher の SQL 実践 の NULL を渡す方式は、単一選択向けです)
  3. 既定値を設定する:全件実行を避けるため、元帳と期間には既定値を設定します

ステップ 3 データを確認してサンプルデータを保存する

Section titled “ステップ 3 データを確認してサンプルデータを保存する”
  1. データモデル・エディタの Data タブで、元帳・期間・仕訳ソース(まず ALL)を指定して実行します
  2. 件数と金額を確認します。仕訳ソースを 1 つだけ、複数、ALL と切り替えて、どれもエラーなく動くことを確認します
  3. 結果を サンプル・データとして保存 します。続けて、データを XML でダウンロード(Export)します。XML の要素名は、SQL の列の別名(大文字)になります
  4. データモデルを /Shared/Custom/Financials/GL に XX_GL_JOURNAL_DETAIL_DM として保存します
データ XML の構造(イメージ。グループ名・要素名はデータ構造タブで確認)
<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 帳票)を作る”
  1. カタログで Create > Report を選び、XX_GL_JOURNAL_DETAIL_DM をデータモデルに指定して、XX_GL_JOURNAL_DETAIL として保存します。レイアウト・エディタが開いたら、ここでは使わずに閉じます
  2. Word で Template Builder を開き、ステップ 3 の XML を サンプル XML として読み込み ます
  3. 次のレイアウトを設計します
領域 内容
ページヘッダー 帳票名(仕訳明細書)、元帳名、期間、出力日時
本体 仕訳ソース → バッチ → 仕訳でグループ化。仕訳ごとに、見出し行(仕訳名・計上日・カテゴリ・通貨)、明細行、仕訳の合計行を置く
明細行の列 明細番号、会社・部門・勘定科目、入力借方/貸方、元帳通貨借方/貸方、摘要
最後 元帳通貨の借方・貸方の総合計
ページフッター ページ番号
  1. Template Builder の表ウィザード(Table Wizard)で、グループ化と並び順を設定して表を作ります。金額の列には桁区切りの数値書式を設定し、借方・貸方が空(NULL)の明細は空欄のまま表示します
  2. 合計行は、グループ内の金額を合計するタグで作ります。タグの形は次のようになります(表ウィザードが同様のタグを生成するので、手で書く必要はありません。レビューで読めるようにするための例です)
RTF テンプレートのタグの例(概念を知るための例)
<?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?>
  1. Template Builder で PDF にプレビューし、仕訳ごとの合計と改ページ位置を確認します。日本語のフォントが正しく表示されるかも、本番相当のデータで確認します
  2. テンプレートを .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. シートの 1 行目に列見出し、2 行目にデータ行を置きます。列は、仕訳ソース、カテゴリ、バッチ名、仕訳名、計上日、通貨、明細番号、会社、部門、勘定科目、入力借方、入力貸方、元帳通貨借方、元帳通貨貸方、摘要の順にします
  2. Template Builder for Excel で、サンプル XML を読み込み、データ行の項目と繰り返しグループ(G_1)を挿入します。名前定義が自動で作られます
  3. 見出し行にオートフィルタとウィンドウ枠の固定を設定し、金額列に桁区切りの書式を設定します
  4. 合計行が必要なら、表の下に Excel の SUM を置きます(単純な表なので XDO_ の名前を使えます)
  5. XDO_METADATA を非表示にして .xlsx で保存し、カタログのレポートで Add New Layout > Upload から、レイアウト名 Excel 明細 として登録します

詳しい作り方は、公式ドキュメントの「Excel テンプレート」の章で確認してください。

  1. カタログでレポートを開き、元帳・期間・仕訳ソースを指定して実行します。レイアウトと出力形式を、仕訳明細書(PDF)と Excel 明細(xlsx)で切り替えます
  2. 次の観点で検算します
    • 仕訳単位:元帳通貨の借方合計と貸方合計が一致するか(「解答例 5」の検算用 SQL で、一致しない仕訳を探せます)
    • 画面との突合せ:ナビゲータ > General Accounting > Journals の Manage Journals で、いくつかの仕訳の明細・金額を画面と比べます
    • 試算表との突合せ:同じ元帳・期間の当期発生額(借方)の合計を、BI Publisher の SQL 実践 の GL 試算表 SQL の結果と比べます。一致しない場合は、通貨・調整期間・残高の種類の条件を確認します
    • OTBI との突合せ:General Ledger - Journals Real Time のサブジェクト領域で同じ条件の分析を作り、件数と合計を比べます
  3. 未転記(U)の仕訳と、別の期間の仕訳が出力に含まれていないことを確認します

ステップ 7 セキュリティを確認する

Section titled “ステップ 7 セキュリティを確認する”

BIP の SQL データセットには、Fusion のデータセキュリティが 自動では効きません(BI Publisher の SQL 実践 を参照)。この演習の SQL にも、元帳へのデータアクセスを確認する条件はありません。

  1. テスト環境で、このレポートを開ける権限があり、JP プライマリ元帳へのデータアクセスを持たないユーザーを用意します(持っていなければ、セキュリティ管理者に依頼します)
  2. そのユーザーで元帳の値リストと出力を確認し、SQL に条件がないために元帳のデータが見えることを確認します
  3. 対策を決めます。実務では、次の組合せにします
    • カタログのフォルダ・レポートの権限を、経理部門の 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)に作ります。複数選択のパラメータをジョブ定義でどう扱えるかは、リリースにより異なる可能性があるため、実機で確認してください。ジョブ定義は、カタログのアーカイブには含まれません。環境を移送するときは、移送先で作り直すか設定データの移行手段を使います。

  1. 上のスクリプトでサンプル表を作り、「解答例 1」の SQL を、P_LEDGER_ID = 1001、P_PERIOD_NAME = 'Apr-26'、P_SOURCE = 'ALL' で実行します。結果が何行になるか、予想してから実行してください
  2. 次に、仕訳ソースを Payables だけ、Payables と Receivables の 2 つにして実行します。複数のときは、SQL の IN (:P_SOURCE) を IN ('Payables', 'Receivables') に書き換えます(BIP が展開する形です)
  3. 次のパラメータ設計表の空欄を埋めてください
パラメータ 型 必須 複数選択 値リストの条件
元帳 ? ? ? ?
期間 ? ? ? ?
仕訳ソース ? ? ? ?
  1. 月次スケジュールの設計表(実行日時・期間パラメータの決め方・配信先・失敗時の対応)を作ってください
  • パラメータの順序が「元帳 → 期間 → 仕訳ソース」になっている
  • 元帳を変えると、期間の値リストが更新される
  • 仕訳ソースを、ALL・1 つ・複数のどれにしてもエラーなく実行できる
  • 未転記(U)の仕訳と、別の期間の仕訳が出力に含まれない
  • 仕訳ごとに、元帳通貨の借方合計と貸方合計が一致している
  • 外貨の仕訳で、入力通貨の金額と元帳通貨の金額が別の列に出る
  • RTF(PDF)と Excel(xlsx)の両方が出力でき、合計が一致する
  • カタログの権限と ESS ジョブの Run 権限で、実行できる人を限定した
  • スケジュールが成功し、メールが届いた(またはジョブ履歴で成功を確認した)
解答例 1:データセットの SQL(仕訳明細)を表示
GL_JE_DETAIL(仕訳明細。BIP の SQL Query データセット)
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_description
FROM 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_id
WHERE gjh.ledger_id = :P_LEDGER_ID
AND gjh.period_name = :P_PERIOD_NAME
AND 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 を表示
解答例 2:元帳(P_LEDGER_ID の値リスト)
SELECT gl.name AS label,
gl.ledger_id AS value
FROM gl_ledgers gl
ORDER BY gl.name
解答例 3:期間(P_PERIOD_NAME の値リスト。元帳に連動。調整期間を除く)
SELECT gps.period_name AS label,
gps.period_name AS value
FROM gl_period_statuses gps
WHERE gps.application_id = 101 -- GL
AND gps.ledger_id = :P_LEDGER_ID
AND NVL(gps.adjustment_period_flag, 'N') = 'N'
ORDER BY gps.start_date DESC
解答例 4:仕訳ソース(P_SOURCE の値リスト。先頭に ALL の行)
SELECT label, value
FROM (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_cr
FROM gl_je_headers gjh
JOIN gl_je_lines gjl ON gjl.je_header_id = gjh.je_header_id
WHERE gjh.ledger_id = :P_LEDGER_ID
AND gjh.period_name = :P_PERIOD_NAME
AND gjh.status = 'P'
GROUP BY gjh.je_header_id, gjh.name
HAVING SUM(NVL(gjl.accounted_dr, 0)) <> SUM(NVL(gjl.accounted_cr, 0))

統計仕訳(統計通貨の仕訳)は借方と貸方が一致しないことがあります。含まれる環境では、扱いを実データで確認してから条件に加えます。

仕訳ソース別の合計(ステップ 6 の突合せ用)
SELECT gjh.je_source,
SUM(NVL(gjl.accounted_dr, 0)) AS total_dr,
SUM(NVL(gjl.accounted_cr, 0)) AS total_cr
FROM gl_je_headers gjh
JOIN gl_je_lines gjl ON gjl.je_header_id = gjh.je_header_id
WHERE gjh.ledger_id = :P_LEDGER_ID
AND gjh.period_name = :P_PERIOD_NAME
AND gjh.status = 'P'
AND gjh.actual_flag = 'A'
GROUP BY gjh.je_source
ORDER 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 権限で限定する。配信先の部門を限定する
症状 原因と対処
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 ジョブにします。期間・元帳の条件が効いているかも確認します
  1. 仕訳ソースとカテゴリを、内部名ではなく表示用の名称で出力する。GL_JE_SOURCES_TL と GL_JE_CATEGORIES_TL を言語の条件つきで結合する(列名は Tables and Views で確認してから書く)
  2. 勘定科目名・部門名を付ける。値セットの説明の取り方は BI Publisher の SQL 実践 の「COA セグメントを扱う」を読み、SQL で取るか、OTBI の分析をデータセットにするかを比べる
  3. 期間パラメータを省略可能にし、省略時は直近の期間(例:オープン期間のうち最新のもの)を使う SQL にする。スケジュール実行でも毎月更新しなくてよくなる。実行計画への影響も確認する
  4. バースト定義で、仕訳ソース(または部門)ごとに Excel を分割し、担当者へメールで配信する(BI Publisher の「バースト定義」)
  5. :xdo_user_name を使って、実行ユーザーに許可された元帳だけを返すように SQL を変更する。オンライン実行とスケジュール実行の両方でテストする
  6. レポートを /Shared/Custom のアーカイブで別の環境へ移送し、配信先と ESS ジョブ定義を移送先で作り直す手順書を作る
  7. OTBI の General Ledger - Journals Real Time で同じ分析を作り、BIP との使い分け(件数、鮮度、レイアウトの自由度、セキュリティ)を表にまとめる

本サイトは学習目的で個人が作成した非公式の教材であり、Oracle Corporation およびその関連会社とは関係ありません。内容の正確性は保証しません。最新の仕様・試験範囲は必ず公式ドキュメントと Oracle University の情報で確認してください。

模擬テストの問題は公開されている出題範囲(Exam Topics)と公式ドキュメントをもとに独自に作成したもので、実際の試験問題ではありません。

Oracle、Java、MySQL は Oracle Corporation およびその子会社、関連会社の米国およびその他の国における登録商標です。その他の製品名・会社名は各社の商標です。

© 2026 Fusion ERP 実装ラボ