あなたの買掛金``支払い``処理``データ``テンプレート
SAP S/4HANAあなたの買掛金``支払い``処理``データ``テンプレート
- 仕入先および支払分析の中核となる属性
- 支払サイクルの重要なプロセスマイルストーン
- SAP S/4HANAシステム向けに特化した抽出ロジック
買掛金支払い処理属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ Activity | 請求書に対して記録された特定のタスクまたはイベントのステータス変更。 | ||
| 説明 この属性は、請求書のライフサイクル中に発生する個別のプロセスステップを表します。請求書の作成、転記、ブロック、承認、支払い消込などのイベントを捕捉します。活動名は、ソースシステムで見つかるトランザクションコード、変更ログエントリ、またはワークフローステータスの更新から派生します。 分析では、このフィールドはプロセスフローバリアントをマッピングするために非常に重要です。プロセスマイニングエンジンがステップのシーケンスを視覚化し、再作業ループを特定し、プロセスが標準の「ハッピーパス」からどこで逸脱しているかを判断することを可能にします。これはイベントログのコアコンポーネントです。 その重要性 プロセスマップ内のノードを定義し、ワークフローとボトルネックの可視化を可能にします。 取得元 トランザクションコード(TCODE)または変更伝票ヘッダー(CDHDR)と明細(CDPOS)から導出されます。 例 請求書仕訳計上済み支払いブロックが適用されました支払い実行が実施されました請求書 消込済み | |||
| イベント日時 EventTime | 活動が発生した正確なタイムスタンプ。 | ||
| 説明 イベント時間は、活動がSAPデータベースにコミットされた特定の年月日と時刻を記録します。これにより、ケース内でイベントを時系列に並べるために必要な時間的次元が提供されます。このタイムスタンプは通常、システムログまたは伝票ヘッダーのCPU日付とCPU時間フィールドを組み合わせて構築されます。 分析において、この属性はサイクルタイム、期間、スループットを計算するために不可欠です。請求書受領から最終承認までの所要時間など、ステップ間の時間ギャップを測定することを可能にし、ボトルネックの特定や平均請求書承認時間のようなKPIパフォーマンスの評価に不可欠です。 その重要性 イベントを時系列で整理し、時間に関連するあらゆるパフォーマンス指標を算出する際の基盤となります。 取得元 SAPテーブルBKPFフィールドCPUDT(入力日)およびCPUTM(入力時刻)、またはCDHDRフィールドUDATEおよびUTIME 例 2023-10-12T08:30:00.000Z2023-10-12T14:15:22.000Z2023-10-15T09:00:00.000Z | |||
| 請求書番号 InvoiceNumber | 処理中の仕入先請求書の一意の識別子。 | ||
| 説明 請求書番号は、SAP S/4HANAシステム内で支払項目(買掛金)のライフサイクルを追跡するための主キーです。具体的には、請求書を総勘定元帳に転記する際に生成される会計伝票番号を指します。標準的なSAP用語では、特定の会社コードと会計年度内で見つかる伝票番号(BELNR)に相当します。 プロセス分析では、この属性がケースIDとして機能します。請求書の最初の受領と仮保存から、さまざまな承認ブロックや変更、最終的な消込支払いまで、すべての異なる活動をリンクさせます。この識別子でイベントをグループ化することで、アナリストはすべての支払い義務の完全なエンドツーエンド履歴を再構築できます。 その重要性 確定的なケースIDとして機能し、支払プロセスフローのエンドツーエンドの再構築を可能にします。 取得元 SAPテーブルBKPF(会計伝票ヘッダー)のフィールドBELNR、またはACDOCAフィールドBELNR 例 1900000523510000289119000006015100003002 | |||
| ソースシステム SourceSystem | データが生成されたSAP S/4HANAインスタンスの識別子。 | ||
| 説明 この属性は、プロセスデータが抽出された特定のERPインストールまたはクライアントを識別します。複数のSAPインスタンスまたはレガシーシステムが並行して稼働している環境では、このフィールドはデータリネージの維持を保証し、システム間の比較を可能にします。 分析では、このフィールドは高レベルのフィルターとして機能します。異なる地域のシステムインストール間でパフォーマンスをベンチマークする際や、システム移行プロジェクト中にデータの一貫性を検証する際に、アナリストがデータを分離するのに役立ちます。システム構成に起因するプロセスの変動が適切に文脈化されることを保証します。 その重要性 マルチシステム環境でデータソースを区別し、正確なセグメンテーションを保証します。 取得元 SAPインストールコンテキストからのシステムID (SY-SYSID) 例 SAP_PROD_01S4H_NA_100ERP_EU_200 | |||
| 最終データ更新 LastDataUpdate | レコードが最後に抽出または更新された日時を示すタイムスタンプ。 | ||
| 説明 最終データ更新は、データがプロセスマイニングプラットフォームに正常にロードされた時点を示します。これはビジネスイベントの時刻ではなく、データセット自体の鮮度を反映しています。これは、分析ダッシュボードへの信頼を維持するために不可欠です。 分析において、この属性はユーザーが閲覧している情報の鮮度を理解するのに役立ちます。特に、支払ブロック分析のようなニアリアルタイムダッシュボードを監視する際に重要であり、SAP S/4HANAシステムの最新の状態に基づいて決定が下されることを保証します。 その重要性 データの鮮度をユーザーに通知し、運用ダッシュボードにとって重要です。 取得元 ETL/抽出プロセスによって生成されます。 例 2023-10-27T23:59:59.000Z2023-11-01T06:00:00.000Z | |||
| Net 期日 NetDueDate | 違約金を回避するために請求書を支払う必要がある計算上の期日。 | ||
| 説明 正味支払期日は、支払いの最終期限です。これは、基準日に最大支払条件日数を加算して計算されます。明示的に保存されることもありますが、分析ビューでは計算フィールドであることが多いです。 分析において、これは遅延支払いおよび違約金トラッカーの主要なベンチマークです。実際の消込日を正味支払期日と比較することで、「支払い遅延日数」メトリックが生成され、APチームの効率性と仕入先との摩擦のリスクを定量化するのに役立ちます。 その重要性 プロセスの目標期限であり、これを逃すと信用格付けに影響を与え、コストが発生します。 取得元 計算式:基準日付 + 最大支払条件日数(ZBD1T/ZBD2T/ZBD3T) 例 2023-11-302023-12-01 | |||
| タッチレスかどうか IsTouchless | 請求書が手動介入なしで処理されたかどうかを示すブール値フラグです。 | ||
| 説明 この属性は、ケースのイベントストリームを分析して計算されます。ケースに自動化された活動(例:「システム」ユーザー、特定のバックグラウンドTCODE)のみが含まれ、手動による変更やブロックがない場合、「タッチレス」としてフラグが立てられます。 分析において、これはタッチレス請求書率KPIの主要なメトリックです。組織は自動化イニシアチブの成功を追跡し、どのケースタイプ(例:仕入先別または地域別)が人間の介入なしにシステムを正常に流れているかを特定できます。 その重要性 プロセス自動化と効率の主要な指標です。 取得元 活動の順序とユーザータイプに基づいて計算されます 例 truefalse | |||
| ドキュメントタイプ DocumentType | 会計伝票(例:仕入先請求書、支払、クレジットメモ)を分類します。 | ||
| 説明 伝票タイプは、SAPにおいて会計トランザクションを分類する2文字のコードです。一般的なタイプには、仕入先請求書用の「KR」、仕入先支払い用の「KZ」、総額請求書受領用の「RE」などがあります。これは伝票の番号範囲とフィールドステータスを決定します。 分析において、この属性はプロセスのスコープをフィルタリングするために使用されます。例えば、アナリストは、支払いの効率性のみに焦点を当てるために、クレジットメモを除外したいと考えるかもしれません。また、処理されているトランザクションタイプの組み合わせを特定し、プロセスバリアント複雑性ダッシュボードをサポートするのにも役立ちます。 その重要性 ケース(請求書 vs. クレジットメモ)を分類し、フィルター分析を可能にします。 取得元 SAPテーブルBKPFフィールドBLART 例 KRREKZKG | |||
| ユーザー名 UserName | 特定の活動を実行したユーザーのID。 | ||
| 説明 ユーザー名は、プロセスステップの実行を担当する人物またはシステムエージェントのログインIDを捕捉します。これは、手動でデータを入力するユーザーである場合もあれば、自動化されたタスクを実行するバックグラウンドジョブID(例:「BATCH_USER」)である場合もあります。 分析において、この属性は活動自動化率の計算を可能にします。人間ユーザーとシステムアカウントを区別することで、アナリストはプロセスの自動化レベルを測定できます。また、チーム間の作業負荷を評価するために、手動タッチポイント分布ダッシュボードでも使用されます。 その重要性 手動作業と自動化作業を区別し、自動化率の計算を可能にします。 取得元 SAPテーブルBKPFフィールドUSNAMまたはCDHDRフィールドUSERNAME 例 BSMITHWF-BATCHRJONES | |||
| 仕入先コード VendorNumber | 請求書に関連付けられた仕入先の一意の識別子。 | ||
| 説明 仕入先番号は、SAPの補助元帳における特定の債権者勘定に対応します。請求書を、支払条件、銀行詳細、連絡先情報を含むマスターデータにリンクします。S/4HANAでは、これはしばしばビジネスパートナの概念にリンクされますが、多くのテーブルで従来のフィールド名LIFNRが保持されています。 分析において、この属性は仕入先支払条件コンプライアンスダッシュボードの基礎となります。アナリストは、この属性を使用してサプライヤーごとのプロセスパフォーマンスを集計し、ブロック、価格差異、遅延を常に引き起こす特定の仕入先を特定できます。これは、戦略的ソーシングの決定とサプライヤー関係管理をサポートします。 その重要性 サプライヤーごとのパフォーマンス集計を可能にし、遅延の根本原因特定に不可欠です。 取得元 SAPテーブルBKPFフィールドLIFNRまたはACDOCAフィールドLIFNR 例 100050VEND-US-99200400 | |||
| 会社コード CompanyCode | 貸借対照表と損益計算書が作成される組織単位。 | ||
| 説明 会社コードは、企業内の独立した会計エンティティを表します。これは外部会計における中心的な組織単位であり、財務データの構造化に使用されます。すべての請求書は、厳密に1つの会社コードに割り当てられます。 分析において、この属性はKPIを法人または地域別にセグメント化することを可能にします。ダッシュボードでは、異なる子会社間の買掛金チームの効率を比較するために使用されます。たとえば、特定の支店が企業標準と比較して手動支払いブロックの割合が高いかどうかを特定するのに役立ちます。 その重要性 法的エンティティごとにプロセスをセグメント化し、内部ベンチマーキングを容易にします。 取得元 SAPテーブルBKPFフィールドBUKRS 例 US01DE1010002000 | |||
| 延滞 IsLatePayment | 支払が正味期日後に実行されたかどうかを示すブール値フラグです。 | ||
| 説明 この計算属性は、消込日が正味支払期日より厳密に大きい場合にTrueと評価されます。これはプロセスパフォーマンスのバイナリ分類子として機能します。 分析において、このフラグは遅延支払い違約金頻度KPIの非準拠ケース数をカウントするために使用されます。これにより、視覚化レイヤーで複雑な日付計算を必要とせず、「True」値の単純なカウントを可能にすることで、ダッシュボード作成を簡素化します。 その重要性 期日内パフォーマンスKPIの計算を簡素化します。 取得元 計算式:消込日付 > 正味期日 例 truefalse | |||
| 支払ブロック理由 PaymentBlockReason | 請求書が支払いブロックされている理由を示すコード。 | ||
| 説明 この属性には、自動支払い実行が請求書をピックアップするのを妨げる、請求書に適用された特定の理由コードが含まれます。例としては、支払ブロックの「A」、請求書照合の「R」、またはユーザーによって設定された手動ブロックなどがあります。 分析において、このフィールドは手動支払いブロック分析ダッシュボードの主要な推進要因です。異なるブロック理由の頻度を集計することで、組織は支払いプロセスを停滞させている頻繁な価格差異や商品受領の欠落などのシステム的な問題を診断できます。 その重要性 プロセス停滞の具体的な原因を特定し、ターゲットを絞った根本原因分析を可能にします。 取得元 SAPテーブルBSEGフィールドZLSPR 例 ABR* | |||
| 支払条件 PaymentTerms | 支払いと割引の合意条件を表すキー。 | ||
| 説明 支払条件は、請求書の支払期日や早期支払いにキャッシュディスカウントが適用されるかどうかを定義します。このコード(例:「Z001」)は、「正味30日」や「10日以内に2%割引、正味30日」といったルールに対応します。仕入先マスターから請求書にコピーされますが、手動で変更することも可能です。 分析において、この属性は早期支払割引最適化と仕入先支払条件コンプライアンスのダッシュボードの中心となります。システムが基準となる支払期日を計算し、節約を達成するために最適な期間内に支払が行われたかを特定できます。 その重要性 予想されるタイムラインと財務上のインセンティブを決定し、割引分析の鍵となります。 取得元 SAPテーブルBSEGフィールドZTERM 例 Z001NT300001 | |||
| 決済日 ClearingDate | 請求書が支払いによって消し込まれた日付。 | ||
| 説明 消込日は、買掛金元帳の未決済項目がいつ消し込まれたかを記録します。通常、これは支払実行または手動支払い転記によって行われます。これにより、債務の終了が効果的に示されます。 分析において、この属性はプロセスの最終サイクルタイムを計算するために使用されます。「支払い消込済み」アクティビティのタイムスタンプとして使用され、正味支払期日と比較して期日内支払いのパフォーマンスを判断します。これは支払い消込効率ダッシュボードに直接反映されます。 その重要性 支払プロセスの完了を示し、支払適時性を判断するために使用されます。 取得元 SAPテーブルBSEGまたはAUGDTフィールドAUGDT 例 2023-11-012023-11-15 | |||
| 請求金額 InvoiceAmount | 伝票通貨における請求書の合計総額。 | ||
| 説明 この属性は、ソース伝票に記録された請求書の財務的価値を反映しています。これは、仕入先に対して決済されるべき負債を表します。SAP S/4HANAでは、これは通常、「伝票通貨の金額」フィールドに格納されます。 分析では、請求金額は作業の優先順位付けに使用されます。手動タッチポイント分布のようなダッシュボードは、このフィールドを使用して、多大な労力を要する手動活動が低価値の請求書に無駄に費やされているかどうかを強調します。これにより、組織はプロセス障害がより大きな財務リスクを伴う高価値の取引に最適化の努力を集中させることができます。 その重要性 ケースの財務上の重要性を提供し、高価値なプロセスの非効率性を優先順位付けするために不可欠です。 取得元 SAPテーブルBKPFまたはBSEGフィールドWRBTR 例 1500.00250.5010000.00 | |||
| 会計年度 FiscalYear | 請求書が属する会計年度。 | ||
| 説明 会計年度は、財務報告に使用される期間です。会社コードおよび伝票番号とともに、SAPにおける財務伝票の複合主キーを形成します。 分析において、これはケースを一意に識別するための技術的な要件ですが、年次報告もサポートします。「請求書番号」のケースIDが何十年にもわたるデータ履歴を通じて一意であることを保証します。 その重要性 SAP FIにおけるユニークなケース識別のための技術要件。 取得元 SAPテーブルBKPFフィールドGJAHR 例 20232024 | |||
| 割引損失額 DiscountLostAmount | 利用可能であったが適用されなかったキャッシュディスカウントの金額。 | ||
| 説明 この計算属性は、「逸失利益」を表します。これは、支払いが割引期限後に行われたかどうかを確認し、もしそうであれば、請求金額に適用された失われた割引率の値を計算することで導き出されます。 分析において、これは早期支払割引最適化にとって重要な財務メトリックです。非効率性のコストを具体的な通貨で定量化し、プロセス改善のための説得力のあるビジネスケースを提供します。 その重要性 プロセス遅延による直接的な財務損失を定量化します。 取得元 計算式:もし消込日付 > 割引日付の場合、請求書金額 * 割引率 例 30.000.00150.00 | |||
| 基準日付 BaselineDate | 支払条件が適用され、支払期日が計算される日付。 | ||
| 説明 基準日は、正味支払期日とキャッシュディスカウント期間を計算するための開始点です。設定や仕入先マスターデータに応じて、通常は請求書日付または転記日付となります。 分析において、この日付は「遅延」ステータスを計算するための技術的な前提条件です。基準日の誤りは、早期支払い(キャッシュフローへの影響)や遅延支払い(違約金への影響)につながることがよくあります。この日付の正確性を検証することは、仕入先支払条件コンプライアンス分析の一部です。 その重要性 すべての期日計算の基準点です。 取得元 SAPテーブルBSEGフィールドZFBDT 例 2023-10-012023-10-15 | |||
| 現金割引日数1 CashDiscountDays1 | 基準日から最初のキャッシュディスカウントが利用可能な期間の日数。 | ||
| 説明 この属性は、最も有利な支払条件(例:「10日以内に2%割引、正味30日」の「10」)の時間枠を定義します。これは、請求書明細項目に格納されている条件から取得されます。 分析において、これは早期支払割引最適化のための「目標日」を決定するのに役立ちます。この期間内に請求書が消し込まれた場合、割引が実現されます。このフィールドは、処理サイクルの遅延による機会費用を測定するのに役立ちます。 その重要性 財務上の節約機会を定義します。 取得元 SAPテーブルBSEGフィールドZBD1T 例 10140 | |||
| 現金割引率1 CashDiscountPercentage1 | 最初の割引期間内に支払われた場合に利用可能な割引率。 | ||
| 説明 この属性は、早期支払いに対して仕入先が提供する財務インセンティブ率(例:「10日以内に2%割引」の「2」)を表します。 分析において、これは「潜在的なキャッシュディスカウント」の値を計算するために使用されます。この割引率を請求金額に乗算することで、ダッシュボードはプロセス非効率性によって失われた総額を視覚化し、自動化のビジネスケースをサポートします。 その重要性 潜在的な節約率を定量化し、ROI計算に不可欠です。 取得元 SAPテーブルBSEGフィールドZBD1P 例 2.03.00.0 | |||
| 購買伝票 PurchasingDocument | 請求書に関連付けられた購買発注書番号。 | ||
| 説明 この属性は、請求書を上流の調達プロセスにリンクします。請求書が照合されている購買発注書(PO)番号が含まれています。すべての請求書(例:雑費)にPO参照があるわけではありません。 分析において、このフィールドはスリーウェイマッチ率分析に不可欠です。アナリストは、POに裏付けられた請求書と、通常は承認ワークフローが大きく異なる非PO請求書とを分離できます。また、買掛金データと調達データをリンクすることで、エンドツーエンドのプロセスマイニングを促進します。 その重要性 買掛金(AP)を調達にリンクさせ、3者照合分析とプロセス拡張を可能にします。 取得元 SAPテーブルBSEGフィールドEBELN 例 45000012344500009876 | |||
| 通貨 Currency | 請求金額に関連付けられた通貨コード。 | ||
| 説明 通貨属性は、請求金額の単位(USD、EUR、GBPなど)を指定します。これにより、財務値の正しい解釈が可能になり、国際的な会社コード間でデータを集計する際に不可欠です。 分析において、このフィールドは財務KPIが正しく計算されることを保証します。グローバルダッシュボードの報告通貨に値を正規化するためによく使用されます。この属性がなければ、マルチ通貨環境では、総支出や平均請求金額のような集計メトリックは意味をなさなくなります。 その重要性 財務金額のコンテキストを提供し、正確なグローバルレポーティングに不可欠です。 取得元 SAPテーブルBKPFフィールドWAERS 例 USDEURGBPJPY | |||
買掛金支払い処理活動
| アクティビティ | 説明 | ||
|---|---|---|---|
| 支払いブロックが適用されました | 請求書明細に支払いブロックが設定され、支払い実行で処理されないことを示します。これは、変更伝票を介したBSEGテーブルのZLSPRフィールドへの変更を監視することで捕捉されます。 | ||
| その重要性 ブロックは、支払遅延とプロセスの摩擦の主な原因であり、手動支払ブロック分析ダッシュボードに直接影響します。 取得元 CDPOSおよびCDHDRテーブル(変更伝票)、BSEG-ZLSPRフィールドの更新を探します。 取得 CDPOSレコードのZLSPRが変更されたときにログ記録 イベントタイプ explicit | |||
| 支払い実行が実施されました | 送金指示が生成される支払い実行を表します。これはREGUHまたはREGUPテーブルのステータス更新を通じて追跡されます。 | ||
| その重要性 支払い実行の運用上のコミットメントで、支払バッチ処理の効率を分析するために重要です。 取得元 REGUHテーブルは、通常、実行日と識別に関連付けられています。 取得 支払実行ステータスが更新されたときにログ記録 イベントタイプ explicit | |||
| 支払い決済済み | 仕入先勘定の未消込明細が支払と相殺される最終的な調整を示します。BSEGテーブルのAUGDT(消込日付)フィールドから取得されます。 | ||
| その重要性 プロセスの最終状態であり、ライフサイクルが完了し帳簿が均衡していることを示します。手動消込率が高い場合は、照合の非効率性を示します。 取得元 BSEGテーブル、AUGDT(消込日付)項目。 取得 AUGDTフィールドが入力されたときにログ記録 イベントタイプ explicit | |||
| 支払ブロック解除 | 以前に適用された支払ブロックが解除され、請求書が支払いのために事実上リリースされたことを示します。これは、BSEGのZLSPRフィールドの値がNULLまたは空に変わったときに識別されます。 | ||
| その重要性 明示的なワークフローログがないシステムでは「請求書承認済み」のプロキシとして機能し、ボトルネック期間の終了を示します。 取得元 CDPOSおよびCDHDRテーブル、BSEG-ZLSPRが空に変更されるのを探します。 取得 CDPOSレコードのZLSPRが削除されたときにログ記録 イベントタイプ explicit | |||
| 支払伝票作成済み | 銀行を貸方に、仕入先を借方にする会計伝票の生成。これは、支払い伝票タイプ(例:ZP、KZ)を持つBKPFで確認できます。 | ||
| その重要性 支払い実行の財務上の確定で、買掛金支払日数(DPO)の計算に使用されます。 取得元 BKPFテーブル、支払に特化した伝票タイプ(BLART)でフィルタリング。 取得 BKPF支払伝票が作成されたときにログ記録 イベントタイプ explicit | |||
| 請求書仕訳計上済み | 総勘定元帳における債務の公式記録を表します。この活動は、BKPFテーブルの作成タイムスタンプまたはACDOCAテーブルの入力日から派生します。 | ||
| その重要性 これは財務タイムラインの主要な開始点であり、支払期日と債権・債務の期間分析の基準を確立します。 取得元 BKPFテーブル、CPUDT(入力日付)とCPUTM(入力時間)を使用。 取得 BKPFレコードが作成されたときにログ記録 イベントタイプ explicit | |||
| 価格差異が検出されました | 請求書価格と購買発注価格の間の不一致を示す推測活動です。これは、転記時に自動的に適用される特定の支払ブロックキー(通常、請求書検証を示す'R')を観察することで導出されます。 | ||
| その重要性 手動での手戻りの根本原因を特定し、3者照合率分析をサポートします。 取得元 転記時のBSEG-ZLSPRの値「R」(または価格ブロックに対するシステム固有の設定)から推測されます。 取得 ZLSPR値を'R'と比較 イベントタイプ inferred | |||
| 支払提案作成 | 請求書が自動支払いプログラムの最初のステップである支払い提案実行(F110)に含まれたことを示します。これは、決済データを格納するREGUHテーブルから捕捉されます。 | ||
| その重要性 請求書が支払のために選択され、支払プログラム内の検証チェックに合格したことを示します。 取得元 REGUHテーブルの作成タイムスタンプ(LAUFDおよびLAUFIキー)。 取得 REGUHレコードが作成されたときにログ記録 イベントタイプ explicit | |||
| 支払条件変更済み | 未処理の請求書の支払条件に対する更新を記録し、支払期日または割引の適用資格を変更します。これはBSEGテーブルのZTERMフィールドの変更ログを通じて追跡されます。 | ||
| その重要性 頻繁な変更は、マスターデータのエラーまたは手動による上書きを示唆しており、キャッシュフロー予測と仕入先支払条件コンプライアンスに影響を与えます。 取得元 CDPOSおよびCDHDRテーブル、BSEG-ZTERMフィールドの更新を探します。 取得 CDPOSレコードのZTERMが変更されたときにログ記録 イベントタイプ explicit | |||
| 数量差異が検出されました | 請求数量と入庫数量の間の差異を示す推測活動です。これは、明細に適用された特定の支払ブロックキー(通常、数量差異を示す'M')を観察することで導出されます。 | ||
| その重要性 照合効率とサプライチェーンのデータ品質分析に不可欠です。 取得元 BSEG-ZLSPRの値「M」(または数量ブロックに対するシステム固有の設定)から推測されます。 取得 ZLSPR値を'M'と比較 イベントタイプ inferred | |||
| 現金割引損失 | 現金割引の資格が失効した日付を示す計算イベントです。割引期日と現在日付または支払日付を比較することで導出されます。 | ||
| その重要性 早期支払割引最適化機能が失われた財務機会を可視化するために不可欠です。 取得元 計算式:BSEG-ZFBDT + BSEG-ZBD1T(割引日数1)。 取得 日付を割引期日と比較して導出 イベントタイプ calculated | |||
| 請求書の逆仕訳 | 請求書伝票が取消またはキャンセルされたことを示します。これは、BKPFテーブルのSTBLG(取消伝票)フィールドをチェックすることで捕捉されます。 | ||
| その重要性 再作業とプロセス失敗を表し、無駄と重複する可能性のある作業を特定します。 取得元 BKPFテーブルのSTBLG項目が空でない。 取得 STBLGフィールドが入力されたときにログ記録 イベントタイプ explicit | |||
| 請求書仮登録 | 請求書がSAPに入力されたものの、まだ総勘定元帳に転記されていないことを示し、多くの場合、事前データ入力に使用されます。これは、VBKPFテーブルから明示的に取得されるか、BKPF内の伝票で、転記済みに移行する前の仮保存ステータスコードを特定することで取得されます。 | ||
| その重要性 仮保存はデータ入力フェーズの開始を示し、請求書受領から財務上の債務発生までの遅延時間を測定するのに役立ちます。 取得元 仮保存された伝票のヘッダーデータ用のVBKPFテーブル、または特定の伝票ステータス(BSTAT = V)を持つBKPF。 取得 VBKPFエントリが作成されたときにログ記録 イベントタイプ explicit | |||
| 請求書期日 | 請求書が正味期日に達した瞬間を示す計算タイムスタンプです。これは、BSEGテーブルにある基準日付に支払条件日数を加算することで導出されます。 | ||
| その重要性 期限内支払実績および遅延損害金追跡の参照点として機能します。 取得元 計算式:BSEG-ZFBDT(基準日付) + BSEG-ZBD1T/ZBD2T/ZBD3T(日数)。 取得 現在日付を正味期日と比較して導出 イベントタイプ calculated | |||
抽出ガイド
ステップ
必要なCDSビューの特定: 標準のSAP S/4HANA CDSビューが利用可能であることを確認します。主要なビューは、I_JournalEntry(ヘッダー)、I_OperationalAcctgDocItem(明細/BSEG相当)、I_SupplierInvoice(ロジスティクス)、I_PaymentProposalItem(F110)、およびI_ChangeDocument(ログ用)です。
ユーザー権限の設定: データベースユーザーまたは技術サービスユーザーが、CDSエンティティに関連付けられたDDL SQLビューに対するSELECT権限を持っていることを確認します。これは通常、SAP HANA StudioまたはABAP Eclipse Development Tools(ADT)を介して管理されます。
SQL環境の準備: SQLインターフェース(例:SAP HANA Studio、HANAに接続されたDBeaver、またはSQLを受け入れるプロセスマイニングコネクタ)を開きます。この方法は、CDSビューがビューとして公開されているHANAレイヤーへの直接SQLアクセスを前提としています。
スコープの定義: データ量を制限するために、会社コード(CompanyCode)と会計年度の範囲を決定します。これは、業務会計伝票明細ビューをクエリする際のパフォーマンスにとって重要です。
活動ロジックの実装: 以下に示すSQLクエリをコピーします。このクエリは、UNION ALLを使用して14個の異なるロジックブロックを1つのイベントログ構造に結合します。各ブロックは特定の活動(例:請求書転記済み、支払消込済み)をターゲットとします。
変更伝票の処理: クエリには、支払条件の変更とブロック操作に関するセクションが含まれています。これらはI_ChangeDocumentビューに依存します。特定のS/4リリースでこのビューがアクティブでない場合は、基になるテーブル(CDHDR/CDPOS)をカスタムCDSビューでラップする必要がある場合があります。
計算イベントの対応: 請求書期日(Invoice Due)および現金割引損失(Cash Discount Lost)のロジックを確認します。これらは、業務明細ビューにある基準日付に日数を加算して生成される計算イベントです。
抽出の実行: クエリを実行します。大規模なデータセットの場合、メモリオーバーフローを避けるために、会計年度または会社コードによって抽出をパーティション化することを強く推奨します。
日付形式の確認: EventTime列がYYYY-MM-DD HH:MM:SS形式であることを確認します。SAP HANA SQLは、ターゲットアプリケーションに応じてキャストが必要になる可能性のあるタイムスタンプを返します。
データのエクスポート: 結果セットをCSVまたはParquetファイルとして保存します。ヘッダーが最終SELECTステートメントで定義された列と一致することを確認します。
アップロードのための変換: 使用するプロセスマイニングツールが特定のCSV形式(例:特定の日付マスキング)を要求する場合、これらの変換を後処理スクリプトまたはTO_VARCHAR関数を使用したSQL内で適用します。
最終検証: ProcessMindにサンプルをロードし、ケースID(請求書番号)が転記から消込までのすべての活動を正しくグループ化していることを確認します。
設定
- 会社コードフィルター: クエリを特定の組織単位(CompanyCode = '1000')に制限し、コンテキストとパフォーマンスを維持します。
- 日付範囲: データ量を管理するために、転記日付または作成日付(例:過去12ヶ月間)でフィルターを適用します。
- 勘定タイプ: I_OperationalAcctgDocItemをFinancialAccountType = 'K'(仕入先)でフィルターし、GLおよび顧客の明細を除外します。
- CDSビューの有効化: I_JournalEntry、I_OperationalAcctgDocItem、およびI_PaymentProposalItemの各ビューがSQLアクセス用にアクティブ化され、リリースされていることを確認します。
- 変更ログのパフォーマンス: I_ChangeDocumentへのクエリはリソースを大量に消費する可能性があります。これらのサブクエリをObjectClass 'BELEG'やZLSPR、ZTERMなどの特定のフィールド名で制限してください。
a クエリ例 sql
/* SAP S/4HANA CDS View Extraction for Accounts Payable */
/* Combined Event Log Query */
/* 1. Invoice Parked */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Parked' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JE.CreationDateTime > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
'False' AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K' -- Vendor
AND JE.AccountingDocumentCategory = 'V' -- Parked Document
UNION ALL
/* 2. Invoice Posted */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Posted' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
'False' AS IsLatePayment,
CASE WHEN JE.CreatedByUser = 'BATCH_USER' THEN 'True' ELSE 'False' END AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.AccountingDocumentCategory <> 'V' -- Exclude Parked
UNION ALL
/* 3. Price Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Price Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'R' -- Standard SAP Price Variance Block Key
UNION ALL
/* 4. Quantity Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Quantity Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'M' -- Standard SAP Quantity Variance Block Key
UNION ALL
/* 5. Payment Block Applied (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Applied' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
CD.NewValue AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NULL AND CD.NewValue IS NOT NULL
UNION ALL
/* 6. Payment Block Removed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Removed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NOT NULL AND (CD.NewValue IS NULL OR CD.NewValue = '')
UNION ALL
/* 7. Payment Terms Changed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Terms Changed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
CD.NewValue AS PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZTERM'
UNION ALL
/* 8. Invoice Due (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Due' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) < CURRENT_DATE
UNION ALL
/* 9. Cash Discount Lost (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Cash Discount Lost' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.CashDiscount1Days > 0
AND (JEItem.ClearingDate IS NULL OR JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days)))
UNION ALL
/* 10. Payment Proposal Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Proposal Created' AS Activity,
PPI.ProposalRunDate AS EventTime, -- Often just a date, cast to timestamp if needed
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
AND PPI.FiscalYear = JE.FiscalYear
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JEItem.FinancialAccountType = 'K'
UNION ALL
/* 11. Payment Run Executed */
/* Derived from existence in payment tables with a run ID */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Run Executed' AS Activity,
PPI.PaymentRunDate AS EventTime,
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
WHERE PPI.PaymentRunID IS NOT NULL
UNION ALL
/* 12. Payment Document Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Document Created' AS Activity,
PayJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
PayJE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PayJE.CreatedByUser AS UserName,
PayJE.PostingDate AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS PayJE
ON JEItem.ClearingJournalEntry = PayJE.AccountingDocument
AND JEItem.ClearingJournalEntryFiscalYear = PayJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingJournalEntry IS NOT NULL
UNION ALL
/* 13. Payment Cleared */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Cleared' AS Activity,
TO_TIMESTAMP(JEItem.ClearingDate) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
JEItem.ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingDate IS NOT NULL
UNION ALL
/* 14. Invoice Reversed */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Reversed' AS Activity,
RevJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
RevJE.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS RevJE
ON JE.ReverseDocument = RevJE.AccountingDocument
AND JE.ReverseDocumentFiscalYear = RevJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.ReverseDocument IS NOT NULL ステップ
必要なCDSビューの特定: 標準のSAP S/4HANA CDSビューが利用可能であることを確認します。主要なビューは、I_JournalEntry(ヘッダー)、I_OperationalAcctgDocItem(明細/BSEG相当)、I_SupplierInvoice(ロジスティクス)、I_PaymentProposalItem(F110)、およびI_ChangeDocument(ログ用)です。
ユーザー権限の設定: データベースユーザーまたは技術サービスユーザーが、CDSエンティティに関連付けられたDDL SQLビューに対するSELECT権限を持っていることを確認します。これは通常、SAP HANA StudioまたはABAP Eclipse Development Tools(ADT)を介して管理されます。
SQL環境の準備: SQLインターフェース(例:SAP HANA Studio、HANAに接続されたDBeaver、またはSQLを受け入れるプロセスマイニングコネクタ)を開きます。この方法は、CDSビューがビューとして公開されているHANAレイヤーへの直接SQLアクセスを前提としています。
スコープの定義: データ量を制限するために、会社コード(CompanyCode)と会計年度の範囲を決定します。これは、業務会計伝票明細ビューをクエリする際のパフォーマンスにとって重要です。
活動ロジックの実装: 以下に示すSQLクエリをコピーします。このクエリは、UNION ALLを使用して14個の異なるロジックブロックを1つのイベントログ構造に結合します。各ブロックは特定の活動(例:請求書転記済み、支払消込済み)をターゲットとします。
変更伝票の処理: クエリには、支払条件の変更とブロック操作に関するセクションが含まれています。これらはI_ChangeDocumentビューに依存します。特定のS/4リリースでこのビューがアクティブでない場合は、基になるテーブル(CDHDR/CDPOS)をカスタムCDSビューでラップする必要がある場合があります。
計算イベントの対応: 請求書期日(Invoice Due)および現金割引損失(Cash Discount Lost)のロジックを確認します。これらは、業務明細ビューにある基準日付に日数を加算して生成される計算イベントです。
抽出の実行: クエリを実行します。大規模なデータセットの場合、メモリオーバーフローを避けるために、会計年度または会社コードによって抽出をパーティション化することを強く推奨します。
日付形式の確認: EventTime列がYYYY-MM-DD HH:MM:SS形式であることを確認します。SAP HANA SQLは、ターゲットアプリケーションに応じてキャストが必要になる可能性のあるタイムスタンプを返します。
データのエクスポート: 結果セットをCSVまたはParquetファイルとして保存します。ヘッダーが最終SELECTステートメントで定義された列と一致することを確認します。
アップロードのための変換: 使用するプロセスマイニングツールが特定のCSV形式(例:特定の日付マスキング)を要求する場合、これらの変換を後処理スクリプトまたはTO_VARCHAR関数を使用したSQL内で適用します。
最終検証: ProcessMindにサンプルをロードし、ケースID(請求書番号)が転記から消込までのすべての活動を正しくグループ化していることを確認します。
設定
- 会社コードフィルター: クエリを特定の組織単位(CompanyCode = '1000')に制限し、コンテキストとパフォーマンスを維持します。
- 日付範囲: データ量を管理するために、転記日付または作成日付(例:過去12ヶ月間)でフィルターを適用します。
- 勘定タイプ: I_OperationalAcctgDocItemをFinancialAccountType = 'K'(仕入先)でフィルターし、GLおよび顧客の明細を除外します。
- CDSビューの有効化: I_JournalEntry、I_OperationalAcctgDocItem、およびI_PaymentProposalItemの各ビューがSQLアクセス用にアクティブ化され、リリースされていることを確認します。
- 変更ログのパフォーマンス: I_ChangeDocumentへのクエリはリソースを大量に消費する可能性があります。これらのサブクエリをObjectClass 'BELEG'やZLSPR、ZTERMなどの特定のフィールド名で制限してください。
a クエリ例 sql
/* SAP S/4HANA CDS View Extraction for Accounts Payable */
/* Combined Event Log Query */
/* 1. Invoice Parked */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Parked' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JE.CreationDateTime > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
'False' AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K' -- Vendor
AND JE.AccountingDocumentCategory = 'V' -- Parked Document
UNION ALL
/* 2. Invoice Posted */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Posted' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
'False' AS IsLatePayment,
CASE WHEN JE.CreatedByUser = 'BATCH_USER' THEN 'True' ELSE 'False' END AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.AccountingDocumentCategory <> 'V' -- Exclude Parked
UNION ALL
/* 3. Price Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Price Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'R' -- Standard SAP Price Variance Block Key
UNION ALL
/* 4. Quantity Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Quantity Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'M' -- Standard SAP Quantity Variance Block Key
UNION ALL
/* 5. Payment Block Applied (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Applied' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
CD.NewValue AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NULL AND CD.NewValue IS NOT NULL
UNION ALL
/* 6. Payment Block Removed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Removed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NOT NULL AND (CD.NewValue IS NULL OR CD.NewValue = '')
UNION ALL
/* 7. Payment Terms Changed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Terms Changed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
CD.NewValue AS PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZTERM'
UNION ALL
/* 8. Invoice Due (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Due' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) < CURRENT_DATE
UNION ALL
/* 9. Cash Discount Lost (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Cash Discount Lost' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.CashDiscount1Days > 0
AND (JEItem.ClearingDate IS NULL OR JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days)))
UNION ALL
/* 10. Payment Proposal Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Proposal Created' AS Activity,
PPI.ProposalRunDate AS EventTime, -- Often just a date, cast to timestamp if needed
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
AND PPI.FiscalYear = JE.FiscalYear
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JEItem.FinancialAccountType = 'K'
UNION ALL
/* 11. Payment Run Executed */
/* Derived from existence in payment tables with a run ID */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Run Executed' AS Activity,
PPI.PaymentRunDate AS EventTime,
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
WHERE PPI.PaymentRunID IS NOT NULL
UNION ALL
/* 12. Payment Document Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Document Created' AS Activity,
PayJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
PayJE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PayJE.CreatedByUser AS UserName,
PayJE.PostingDate AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS PayJE
ON JEItem.ClearingJournalEntry = PayJE.AccountingDocument
AND JEItem.ClearingJournalEntryFiscalYear = PayJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingJournalEntry IS NOT NULL
UNION ALL
/* 13. Payment Cleared */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Cleared' AS Activity,
TO_TIMESTAMP(JEItem.ClearingDate) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
JEItem.ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingDate IS NOT NULL
UNION ALL
/* 14. Invoice Reversed */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Reversed' AS Activity,
RevJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
RevJE.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS RevJE
ON JE.ReverseDocument = RevJE.AccountingDocument
AND JE.ReverseDocumentFiscalYear = RevJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.ReverseDocument IS NOT NULL