返品・返金処理データテンプレート
SAP S/4HANA返品・返金処理データテンプレート
- 収集を推奨する項目
- 追跡すべき主要アクティビティ
- 抽出の手引き
返品・返金処理属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 ActivityName | 返品および返金`プロセス`内で発生した特定の業務アクティビティまたは`イベント`の名称。 | ||
| 説明 この これらのアクティビティの順序と頻度を分析することが、 その重要性 アクティビティはプロセスマップの根幹をなし、プロセスフロー、ボトルネック、およびバリエーションの可視化と分析を可能にします。 取得元 アクティビティ名は通常、VBUK/VBUP などのテーブルにおける伝票ステータスの変更、VBAK(販売伝票)や BKPF(会計伝票)などのヘッダーテーブルでの作成イベント、および MSEG における在庫移動ステータスなどのデータを組み合わせて生成されます。 例 返品リクエスト開始倉庫で商品受領済みクレジットメモ作成返金処理済み | |||
| イベント日時 EventTime | 特定のアクティビティが発生した正確な`タイムスタンプ`。 | ||
| 説明 イベント時間は、システムにビジネスイベントが記録された日付と時刻を捉えます。このタイムスタンプは、アクティビティを時系列に並べ、すべての時間ベースの分析を行う上で極めて重要です。 プロセスマイニングでは、この属性はアクティビティ間のサイクルタイムを計算し、各ステップの期間を特定し、時間の経過に伴うプロセスパフォーマンスを分析するために使用されます。これは、ボトルネックの発見、SLA遵守の監視、および返品プロセスの時間的ダイナミクスを理解するための基礎となります。 その重要性 この 取得元 通常、 例 2023-10-26T10:05:00Z2023-10-27T14:30:15Z2023-10-28T09:00:00Z | |||
| 返品`ケースID` ReturnCaseId | 単一の顧客返品`プロセス`の一意の識別子であり、開始から終了までのすべての関連アクティビティをリンクします。 | ||
| 説明 「返品
その重要性 これは、最初から最後まで返品を追跡するための不可欠な 取得元 これは通常、返品 例 600001896000019060000191 | |||
| `ソースシステムID` SourceSystemId | データが抽出されたソースシステムの識別子。 | ||
| 説明 この 複数の その重要性 特に複数の 取得元 この値は通常、 例 S4H_PROD_100S4Q_DEV_200 | |||
| 最終データ更新 LastDataUpdateTimestamp | このイベントのデータが最後に更新または抽出された日時を示すタイムスタンプ。 | ||
| 説明 この これは、 その重要性 データの鮮度を示します。これは、分析とダッシュボードが最新の情報に基づいていることを確認するために不可欠です。 取得元 これは通常、 例 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| イベントの終了時刻 EventEndTime | 活動の完了を示すタイムスタンプで、その期間を計算するために使用されます。 | ||
| 説明
この その重要性 個々のアクティビティ期間の正確な計算を可能にし、特定のプロセスステップ内の非効率性を特定するための鍵となります。 取得元 これはしばしば導出されます。一部のアクティビティについては、別の 例 2023-10-26T11:25:30Z2023-10-27T15:00:00Z2023-10-28T09:10:45Z | |||
| ユーザー名 UserName | アクティビティを実行した従業員のユーザーIDです。 | ||
| 説明 この
その重要性 プロセスアクティビティを特定のユーザーに紐付け、チームパフォーマンス、ワークロード、およびコンプライアンスの分析を可能にします。 取得元 通常、VBAK(販売伝票)、LIKP(出荷伝票)、BKPF(会計伝票)などの伝票ヘッダーテーブルにある「登録者(ERNAM)」項目から取得されます。ユーザー詳細はユーザーマスタテーブル USR21 から補完できます。 例 CBROWNASMITHWF_BATCH | |||
| 製品ID ProductId | 返品される品目の一意の識別子。 | ||
| 説明 この 製品ごとの返品を分析することは、高い返品率を持つ品目を特定するために不可欠であり、これは品質欠陥、不適切な製品説明、または製造上の問題を示す可能性があります。この その重要性 返品プロセスを特定の製品にリンクさせ、品目レベルの返品率分析や品質・説明の問題特定を可能にします。 取得元 返品受注明細テーブル(VBAP)または返品出荷明細テーブル(LIPS)の品目コード項目(MATNR)から取得されます。 例 FG-10023HW-45981SW-LICENSE-PREM | |||
| 返品理由 ReturnReason | 顧客が品目を返品した理由。 | ||
| 説明 この 返品理由の分析は、製品品質の問題を特定し、製品説明を改善し、または販売 その重要性 返品が発生する理由に関する重要な 取得元 通常、返品販売 例 001 - 品質不良002 - 輸送中の損傷005 - 誤った商品が発送された | |||
| 返金額 RefundAmount | 顧客に発行される返金の最終的な金銭的価値。 | ||
| 説明 この これは、さまざまな分析で使用される主要な財務 その重要性 返品の財務的影響を追跡し、返金精度の分析、高価値 取得元
例 125.50999.0049.99 | |||
| 顧客ID CustomerId | 返品を開始した顧客の一意の識別子。 | ||
| 説明 この 顧客ごとの返品を分析することは、不正行為や不満を示す可能性のある異常に高い返品率を持つ顧客などのパターンを特定するのに役立ちます。また、顧客 その重要性 返品を特定の顧客と結び付け、顧客行動の分析、セグメンテーション、および頻繁な返品者の特定を可能にします。 取得元 返品受注ヘッダーテーブル(VBAK)の得意先コード項目(KUNNR)から取得されます。 例 CUST-001234CUST-005678CUST-009012 | |||
| `ケース``サイクルタイム` CycleTime | 返品`ケース`の開始から終了までの経過時間。 | ||
| 説明 この計算
その重要性 これは、全体の 取得元 これは計算 例 5日 4時間 30分12日 2時間 15分2日 8時間 0分 | |||
| クレジットメモ番号 CreditMemoNumber | 返金を承認する`クレジットメモ`伝票の一意の識別子。 | ||
| 説明 クレジットメモとは、返品された商品に対して顧客口座に正式に貸方記入を行う請求書文書です。この属性は、その財務文書の一意の番号を示します。 クレジットメモ番号を追跡することは、返品プロセスにおける財務決済部分を分析するために不可欠です。これは重要な節目であり、多くの場合、実際の返金支払いをトリガーし、財務照合および監査に必要となります。 その重要性 返金に関する公式な財務取引を表し、 取得元 これは、請求伝票 例 900003459000034690000347 | |||
| 依頼された返金額 RequestedRefundAmount | `プロセス`開始時に最初に要求または`想定`された返金額。 | ||
| 説明 この この その重要性 返金精度の測定基準として機能し、期待される返金額と実際の返金額の間の不一致を特定し、分析するのに役立ちます。 取得元 通常、最初の返品販売 例 125.501050.0049.99 | |||
| 処理`エージェント` ProcessingAgent | 手作業のアクティビティの処理を担当する特定の`エージェント`またはリソース`グループ`。 | ||
| 説明 この これは、「返金承認効率 その重要性 担当者またはチームレベルでのパフォーマンス分析を可能にし、ワークロード管理、トレーニング機会の特定、効率向上に役立ちます。 取得元 この情報は、 例 `Tier 1` `サポート`倉庫検査`チーム`経理部 - 買掛金 | |||
| 商品検査結果 ItemInspectionOutcome | 返品された品目の物理的検査の結果。 | ||
| 説明 この この その重要性 返金承認または却下の背後にある意思決定プロセスを説明し、商品状態や返金調整理由に関する貴重なデータを提供します。 取得元 この情報は、品質管理 例 承認済み - 再販可能承認済み - 修復が必要却下 - 顧客による損傷却下 - 誤った品目が返品された | |||
| 営業組織 SalesOrganization | 元の販売と返品を担当する組織単位。 | ||
| 説明 「販売組織」は、SAPにおける主要な組織構造要素であり、製品および この その重要性 異なる事業部門、地域、または販売チャネル間での返品プロセスパフォーマンスとレートの比較を可能にします。 取得元 返品受注ヘッダーテーブル(VBAK)の販売組織項目(VKORG)から取得されます。 例 10002100US01 | |||
| 手戻り IsRework | ケース内のアクティビティが以前のアクティビティの繰り返しであるかどうかを示すフラグ。 | ||
| 説明 この計算 この その重要性 繰り返しの作業にフラグを立てることで、プロセスの非効率性やエラーを浮き彫りにし、無駄と遅延を削減するためのターゲットを絞った改善を可能にします。 取得元 この 例 truefalse | |||
| 自動化 IsAutomated | アクティビティがシステムまたは人によって実行されたかどうかを示すフラグ。 | ||
| 説明 この これは、「自動返金承認率 その重要性 手動タスクと自動化されたタスクを区別することは、自動化の機会を特定し、デジタルトランスフォーメーションの影響を測定するために不可欠です。 取得元 これは通常、「 例 truefalse | |||
| 返品`オーダー``ステータス` ReturnOrderStatus | 返品`ケース`の現在の全体`ステータス`。 | ||
| 説明 この これは、現在の作業負荷と その重要性 各 取得元 関連する伝票のステータス項目から派生します。例えば、関連する販売伝票(VBUK/VBUP)や出荷伝票のヘッダステータス(GBSTK)または明細ステータス(LFSTK)などが対象です。 例 商品受領待ち検査待ち返金待ちクローズ | |||
| 返品`ポリシー`順守 ReturnPolicyAdherence | 返品ケースが定義された返品ポリシーに準拠しているかどうかを示すフラグ。 | ||
| 説明 この計算 この その重要性 業務規則への 取得元 ビジネスルールに基づいて計算されます。例えば、(返品開始日 - 元の購入日)<= [許可される返品日数] のようになります。これには元の購入日とポリシー規則が必要です。 例 truefalse | |||
| 返品`ポリシーID` ReturnPolicyId | この特定の返品`ケース`に適用される返品`ポリシー`の識別子。 | ||
| 説明 この この その重要性 ビジネスルールに対する自動コンプライアンスチェックを可能にし、返品がポリシーに従って一貫して処理されることを確実にします。 取得元 これは多くの場合、標準のSAP 例 STD-30DAYELEC-90DAY-WARRANTYFINAL-SALE-DEFECT | |||
| 返品伝票番号 ReturnDeliveryNumber | 返品`デリバリー`伝票の一意の識別子。 | ||
| 説明 顧客が商品を物理的に返品する際、 この その重要性 返品 取得元 これは、 例 840000128400001384000014 | |||
| 返金`SLA`順守 RefundSlaAdherence | 返金がサービスレベル契約(SLA)目標内で処理されたかどうかを示すフラグ。 | ||
| 説明 この計算 これは、「返金 その重要性 顧客に対するコミットメントに対するパフォーマンスを直接測定し、サービス品質と顧客満足度の重要な指標となります。 取得元 各ケースの「返金処理済み」アクティビティのEventTimeと「RefundSlaTargetDate」を比較して算出されます。 例 truefalse | |||
| 返金SLA目標日 RefundSlaTargetDate | 返品`ケース`の返金が処理されるべき目標期日。 | ||
| 説明 この この その重要性
取得元 これはほとんどの場合、導出 例 2023-11-10T23:59:59Z2023-11-15T23:59:59Z2023-11-20T23:59:59Z | |||
返品・返金処理アクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| クレジットメモ作成 | これは、返品された品目について顧客口座に`クレジット`を付与する公式の請求伝票の作成です。これは、`クレジットメモ`依頼から`クレジットメモ`が生成されたときに捕捉される明示的な`イベント`です。 | ||
| その重要性 クレジットメモの作成は、財務上の重要な節目です。これは返金額を確認し、支払いプロセスを開始することを承認します。 取得元 伝票カテゴリがクレジットメモを示す VBRK テーブルの請求伝票作成から取得されます。これは VBFA テーブルを介してクレジットメモ依頼に紐付けられています。 取得 新しいクレジットメモ請求伝票の保存時(例:トランザクションVF01を使用)にイベントが記録されます。 イベントタイプ explicit | |||
| クレジットメモ申請作成済み | 検査が成功した後、このアクティビティは顧客へのクレジット発行リクエストの作成を示します。これは新しい販売伝票であるクレジットメモ申請として捕捉され、元の返品注文を参照します。 | ||
| その重要性 これは、返品 取得元 伝票カテゴリがクレジットメモ依頼である VBAK テーブルの販売伝票作成から取得されます。返品へのリンクは文書フローテーブル VBFA で管理されています。 取得 新しいクレジットメモ申請伝票の保存時にイベントが記録されます。 イベントタイプ explicit | |||
| 倉庫で商品受領済み | この`イベント`は、倉庫または処理`センター`での返品された品目の物理的な受領を示します。これは、返品`デリバリー`に対して`入庫転記`(`PGR`)が実行され、品目伝票が作成されたときに明示的に捕捉されます。 | ||
| その重要性 これは、検査と処分への 取得元 返品に関連する入庫移動タイプの在庫移動文書テーブル MSEG および MKPF から取得されます。転記日付(MKPF-BUDAT)がイベント時刻(EventTime)として使用されます。 取得 イベントは、返品配送の入庫記帳に対応します。 イベントタイプ explicit | |||
| 商品検査完了 | 返品された商品の品質および状態評価の完了を表します。`Advanced Returns Management`では、これは検査結果を記録し、返金または廃棄などのその後のアクションを決定する明確なステップとなることがよくあります。 | ||
| その重要性 検査の期間と結果は、返金処理時間と在庫管理に直接影響します。このアクティビティは、検査効率と手戻りを分析するために不可欠です。 取得元 SAP Advanced Returns Management(ARM)では、検査トランザクションからの明示的なイベントとして取得できます。また、返品受注明細の検査結果を示すステータス変更から推論することも可能です。 取得 Advanced Returns Management(ARM)における物流フォローアップ活動に関連するトランザクションログまたはステータス変更から取得されます。 イベントタイプ explicit | |||
| 返品`ケース`終了 | これは最終アクティビティであり、返品`プロセス`が完了し、`ケース`に対してこれ以上の操作は`想定`されないことを示します。これは通常、返品`オーダー`伝票が`システム`内で最終的な完了`ステータス`に達したときに推測されます。 | ||
| その重要性 この 取得元 VBAK テーブルの返品受注全体のステータス、または VBAP 内の明細ステータスが「完了」または「クローズ」状態に達したことから特定されます。これはシステムのステータス管理設定に基づいて判断されます。 取得 返品注文伝票のステータスが「完了」に変更されたことから推測されます。 イベントタイプ inferred | |||
| 返品リクエスト開始 | これは返品`プロセス`の開始点であり、返品`オーダー`が`システム`内で正式に作成されます。この`イベント`は、SAP S/4HANAで返品`オーダータイプ`の新しい販売伝票が保存されたときに明示的に捕捉されます。 | ||
| その重要性 このアクティビティは、返品 取得元 これは、 取得 新しい返品受注伝票の保存時(例:トランザクションVA01を使用)にイベントが記録されます。 イベントタイプ explicit | |||
| 返金処理済み | このアクティビティは、返金`プロセス`の最終ステップを示します。ここでは財務上の`クレジット`が決済され、顧客への支払いが完了したことを意味します。これは、財務`モジュール`で顧客口座の未決済`クレジット`を決済する決済伝票が作成されることで推測されます。 | ||
| その重要性 これは顧客に実際に支払いが 取得元 財務会計の会計伝票明細テーブル BSEG 内の消込伝票情報から特定されます。クレジットメモに関連する得意先明細の消込日(BSEG-AUGDT)が、返金が処理された日時を示します。 取得 クレジットメモに関連付けられた会計伝票の消込日付フィールドが入力されたことから推測されます。 イベントタイプ inferred | |||
| 交換注文が作成された | このアクティビティは、返金の代わりに、顧客に交換品を出荷するための新しい販売`オーダー`が作成される代替解決策を表します。これは、元の返品を参照して新しい販売`オーダー`が作成されたときに捕捉されます。 | ||
| その重要性 このアクティビティは、返金のための返品と交換のための返品を区別するのに役立ちます。これらは異なる 取得元 文書フローテーブル(VBFA)内で返品受注に紐付けられている、VBAK テーブルの新しい販売伝票の作成から取得されます。 取得 交換品として指定された新しい受注伝票の保存時にイベントが記録されます。 イベントタイプ explicit | |||
| 会計伝票作成済み | この`イベント`は、`クレジットメモ`が財務会計`モジュール`に正常に`ポスティング`されたときに発生します。これにより、総勘定元帳に対応する`エントリ`が作成され、会計上の`クレジット`が正式なものとなります。 | ||
| その重要性 このアクティビティは、 取得元 会計伝票テーブル BKPF の伝票ヘッダー作成から取得されます。これは VBRK 内のクレジットメモ(VBRK-BELNR)に紐付けられています。 取得 請求伝票が財務会計に正常に転記されたときにイベントが記録されます。 イベントタイプ explicit | |||
| 返品`オーダー`承認済み | 返品`オーダー`の正式な承認またはリリースを表し、次の`ステージ`に進むことを可能にします。これは通常、販売伝票`ヘッダー`または品目上の`ステータス`変更から推測され、`ブロック`が解除されたことを示します。 | ||
| その重要性 承認ステップは遅延の大きな原因となることがあります。このアクティビティを追跡することで、返品プロセスの初期承認フェーズにおけるボトルネックを特定するのに役立ちます。 取得元 ステータス管理テーブル、あるいは VBAK や VBAP テーブル内の直接のステータス項目から特定されます。承認ステータスの変更や、出荷ブロック(VBAP-LIFSP)の解除が承認を意味します。 取得 返品注文のヘッダーまたは明細ステータスフィールドの変更から推測され、リリースまたは承認を示します。 イベントタイプ inferred | |||
| 返品伝票登録済み | このアクティビティは、返品された商品の物理的な受領を管理するために使用される入庫`デリバリー`伝票の作成を示します。`システム`はこれを、返品`オーダー`を参照する`デリバリー`伝票の明示的な作成`イベント`として捕捉します。 | ||
| その重要性 このステップは重要な 取得元 LIKP テーブルの出荷ヘッダーの作成から取得され、文書フローテーブル VBFA を介して先行する返品受注に紐付けられます。 取得 新しい返品配送伝票の保存時(例:トランザクションVL01Nを使用)にイベントが記録されます。 イベントタイプ explicit | |||
| 返品却下 | 返品された商品が返品ポリシーの基準を満たさず、返金またはクレジットのリクエストが却下されたことを示します。これは通常、検査後に返品注文明細に特定のステータスまたは理由コードが適用されることで捕捉されます。 | ||
| その重要性 却下を追跡することは、返品 取得元 返品受注明細に設定された拒否理由(VBAP-ABGRU)、または Advanced Returns Management の検査プロセス中に割り当てられた特定のステータスから特定されます。 取得 返品伝票明細に却下理由または特定の「却下済み」ステータスが設定されたことから推測されます。 イベントタイプ inferred | |||
抽出ガイド
ステップ
- 事前準備の確認: 抽出を実行するユーザーアカウントに、必要なコアデータサービス(CDS)ビューにアクセスするための SAP S/4HANA 権限があることを確認してください。主要なビューには、I_SalesDocument、I_SalesDocumentItem、I_SDDocumentFlow、I_DeliveryDocument、I_MaterialDocumentHeader、I_BillingDocument、I_JournalEntry、I_ClearedItem が含まれます。
- クエリツールへのアクセス: SAP S/4HANA データベースへの接続が確立されている、SQLクライアントまたはデータ統合ツールにログインします。これには、SAP Analytics Cloud などの SAP 純正ツールや、サードパーティのETLプラットフォームが利用可能です。
- クエリパラメータの設定: 実行前に、提供されたSQLクエリを修正する必要があります。プレースホルダーを見つけ、環境に合わせた正しいパラメータ(
[Start Date]、[End Date]、[Your Source System ID]、[Your Return Order Type]、およびその他の伝票タイプや会社コードのフィルタ)に置き換えてください。 - 抽出クエリの実行: 完成したSQLクエリをコピーしてツールで実行します。このクエリは、複数の SELECT 文の結果を結合(UNION ALL)することで、指定されたすべてのアクティビティを単一のデータセットとして収集するように設計されています。
- クエリロジックの理解:
UNION ALL構造内の各SELECTブロックは、特定のアクティビティの抽出を担当しています。複数のCDSビューを結合して必要な属性を収集し、ActivityNameとして固定文字列を割り当て、EventTimeとして関連するタイムスタンプを選択します。 - 生データの確認: クエリの完了後、出力を簡単に確認してください。行数が適切であるか、
ReturnCaseId、ActivityName、EventTimeなどの主要な列が期待通りに入力されているかを確認します。 - データ変換: クエリはフラットなイベントログ形式を出力するように構成されています。通常、大幅な構造変換は不要ですが、ターゲットシステムの要件に応じてタイムスタンプの形式やデータ型を調整する必要がある場合があります。
- イベントログのエクスポート: クエリ結果をCSVファイルとしてエクスポートします。ユーザー名や製品説明の文字化けを防ぐため、ファイルが UTF-8 エンコーディングを使用していることを確認してください。
- プロセスマイニングツールへのアップロード: 作成されたCSVファイルは、ProcessMind などのプロセスマイニングプラットフォームにアップロードできる状態です。ファイルの各列をツールの対応するフィールドにマッピングしてください(例:
ReturnCaseIdをケースIDに、ActivityNameをアクティビティに、EventTimeをタイムスタンプにマッピング)。
設定
- 事前準備: 実行ユーザーには、販売伝票(VBAK)、出荷伝票(LIKP)、請求伝票(VBRK)、会計伝票(BSEG、BKPF)に関連するオブジェクトの照会権限が必要です。また、基盤となるCDSビューへのアクセス権も必須となります。
- データスコープのフィルタ: 返品プロセスを分離するために、特定の伝票タイプでクエリをフィルタリングすることが不可欠です。返品受注タイプ(例:'RE')、クレジットメモ依頼タイプ(例:'G2')、代替オーダータイプ(例:'SO')のプレースホルダーを設定してください。データ範囲を限定するために、
CompanyCode(会社コード)やSalesOrganization(販売組織)によるフィルタリングも強く推奨されます。 - 日付範囲によるフィルタリング: パフォーマンスとデータ量を適切に管理するため、常に日付範囲フィルタを適用してください。まずは直近3〜6ヶ月のデータから開始することをお勧めします。クエリでは、最初の返品受注の作成日(
I_SalesDocument.CreationDate)を主要なフィルタ条件として使用します。 - パフォーマンスに関する注意事項: このクエリは複数の大規模なCDSビューを結合するため、ソースとなるS/4HANAシステムの負荷が高くなる可能性があります。システムへの影響を最小限に抑えるため、業務のオフピーク時間帯に抽出をスケジュールしてください。データセットが非常に大きい場合は、インクリメンタルロード(増分読み込み)戦略の検討も必要です。
a クエリ例 sql
WITH ReturnOrders AS (
SELECT
SalesDocument AS ReturnCaseId,
CreationDate,
CreationDateTime,
CreatedByUser,
OrderReason,
SoldToParty
FROM I_SalesDocument
WHERE SalesDocumentType = '[Your Return Order Type]' -- e.g., 'RE'
AND CreationDate BETWEEN '[Start Date]' AND '[End Date]'
AND CompanyCode = '[Your Company Code]'
)
-- 1. Return Request Initiated
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Return Request Initiated' AS "ActivityName",
RO.CreationDateTime AS "EventTime",
RO.CreationDateTime AS "EventEndTime",
RO.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM ReturnOrders RO
JOIN I_SalesDocumentItem I ON RO.ReturnCaseId = I.SalesDocument
UNION ALL
-- 2. Return Order Approved
SELECT
SD.SalesDocument AS "ReturnCaseId",
'Return Order Approved' AS "ActivityName",
SD.LastChangeDateTime AS "EventTime",
SD.LastChangeDateTime AS "EventEndTime",
SD.LastChangedByUser AS "UserName",
SD.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
SD.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocument AS SD
JOIN ReturnOrders RO ON SD.SalesDocument = RO.ReturnCaseId
JOIN I_SalesDocumentItem I ON SD.SalesDocument = I.SalesDocument
WHERE SD.OverallSDProcessStatus <> 'A' -- Not Open, implying it has been processed/approved
AND I.SDProcessStatus <> 'A'
UNION ALL
-- 3. Return Delivery Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
LH.CreationDateTime AS "EventTime",
LH.CreationDateTime AS "EventEndTime",
LH.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
LI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_DeliveryDocument AS LH ON DF.SubsequentDocument = LH.DeliveryDocument
JOIN I_DeliveryDocumentItem AS LI ON LH.DeliveryDocument = LI.DeliveryDocument
WHERE DF.PrecedingDocumentCategory = 'C' AND DF.SubsequentDocumentCategory = 'J'
UNION ALL
-- 4. Goods Received at Warehouse
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Goods Received at Warehouse' AS "ActivityName",
MH.CreationDateTime AS "EventTime",
MH.CreationDateTime AS "EventEndTime",
MH.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
MI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_DeliveryDocumentItem AS LI ON DF.SubsequentDocument = LI.DeliveryDocument AND DF.SubsequentDocumentItem = LI.DeliveryDocumentItem
JOIN I_MaterialDocumentItem AS MI ON LI.DeliveryDocument = MI.DeliveryDocument AND LI.DeliveryDocumentItem = MI.DeliveryDocumentItem
JOIN I_MaterialDocumentHeader AS MH ON MI.MaterialDocument = MH.MaterialDocument AND MI.MaterialDocumentYear = MH.MaterialDocumentYear
WHERE DF.SubsequentDocumentCategory = 'J' AND MH.GoodsMovementType = '[Your Return Goods Receipt MVT]' -- e.g., '651', '653'
UNION ALL
-- 5. Item Inspection Completed
SELECT
SDI.SalesDocument AS "ReturnCaseId",
'Item Inspection Completed' AS "ActivityName",
SDI.LastChangeDateTime AS "EventTime",
SDI.LastChangeDateTime AS "EventEndTime",
SDI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
SDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocumentItem AS SDI
JOIN ReturnOrders RO ON SDI.SalesDocument = RO.ReturnCaseId
WHERE SDI.ReturnsInspectionStatus = '4' -- 'Inspection Completed', adjust value based on your config
UNION ALL
-- 6. Return Rejected
SELECT
SDI.SalesDocument AS "ReturnCaseId",
'Return Rejected' AS "ActivityName",
SDI.LastChangeDateTime AS "EventTime",
SDI.LastChangeDateTime AS "EventEndTime",
SDI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
SDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocumentItem AS SDI
JOIN ReturnOrders RO ON SDI.SalesDocument = RO.ReturnCaseId
WHERE SDI.SalesDocumentItemRejectionReason <> ''
UNION ALL
-- 7. Credit Memo Request Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
CM_REQ.CreationDateTime AS "EventTime",
CM_REQ.CreationDateTime AS "EventEndTime",
CM_REQ.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_SalesDocument AS CM_REQ ON DF.SubsequentDocument = CM_REQ.SalesDocument
JOIN I_SalesDocumentItem I ON CM_REQ.SalesDocument = I.SalesDocument
WHERE CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]' -- e.g., 'CR'
UNION ALL
-- 8. Exchange Order Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Exchange Order Created' AS "ActivityName",
EX_ORD.CreationDateTime AS "EventTime",
EX_ORD.CreationDateTime AS "EventEndTime",
EX_ORD.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_SalesDocument AS EX_ORD ON DF.SubsequentDocument = EX_ORD.SalesDocument
JOIN I_SalesDocumentItem I ON EX_ORD.SalesDocument = I.SalesDocument
WHERE EX_ORD.SalesDocumentType = '[Your Exchange Order Type]' -- e.g., 'OR'
UNION ALL
-- 9. Credit Memo Created
SELECT
DF_CM.PrecedingDocument AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
BD.CreationDateTime AS "EventTime",
BD.CreationDateTime AS "EventEndTime",
BD.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
BD.TotalNetAmount AS "RefundAmount",
BDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN I_SalesDocument AS CM_REQ ON DF.SubsequentDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow AS DF_CM ON CM_REQ.SalesDocument = DF_CM.PrecedingDocument
JOIN I_BillingDocument AS BD ON DF_CM.SubsequentDocument = BD.BillingDocument
JOIN I_BillingDocumentItem AS BDI ON BD.BillingDocument = BDI.BillingDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE DF.PrecedingDocumentCategory = 'C'
UNION ALL
-- 10. Accounting Document Created
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Accounting Document Created' AS "ActivityName",
JE.CreationDateTime AS "EventTime",
JE.CreationDateTime AS "EventEndTime",
JE.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
JE.AmountInCompanyCodeCurrency AS "RefundAmount",
JRI.ProductName AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_JournalEntry AS JE
JOIN I_JournalEntryItem JRI ON JE.AccountingDocument = JRI.AccountingDocument
JOIN I_BillingDocument BD ON JE.ReferenceDocument = BD.BillingDocument
JOIN I_SDDocumentFlow DF_CM ON BD.BillingDocument = DF_CM.SubsequentDocument
JOIN I_SalesDocument CM_REQ ON DF_CM.PrecedingDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow DF ON CM_REQ.SalesDocument = DF.SubsequentDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE JE.OriginalReferenceDocumentType = 'VBRK'
UNION ALL
-- 11. Refund Processed
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Refund Processed' AS "ActivityName",
CI.ClearingDate AS "EventTime",
CI.ClearingDate AS "EventEndTime",
CI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CI.AmountInCompanyCodeCurrency AS "RefundAmount",
JRI.ProductName AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_ClearedItem AS CI
JOIN I_JournalEntryItem JRI ON CI.AccountingDocument = JRI.AccountingDocument AND CI.FiscalYear = JRI.FiscalYear AND CI.LedgerGLLineItem = JRI.LedgerGLLineItem
JOIN I_JournalEntry JE ON JRI.AccountingDocument = JE.AccountingDocument
JOIN I_BillingDocument BD ON JE.ReferenceDocument = BD.BillingDocument
JOIN I_SDDocumentFlow DF_CM ON BD.BillingDocument = DF_CM.SubsequentDocument
JOIN I_SalesDocument CM_REQ ON DF_CM.PrecedingDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow DF ON CM_REQ.SalesDocument = DF.SubsequentDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE JE.OriginalReferenceDocumentType = 'VBRK' AND CI.ClearingDate IS NOT NULL
UNION ALL
-- 12. Return Case Closed
SELECT
SD.SalesDocument AS "ReturnCaseId",
'Return Case Closed' AS "ActivityName",
SD.LastChangeDateTime AS "EventTime",
SD.LastChangeDateTime AS "EventEndTime",
SD.LastChangedByUser AS "UserName",
SD.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
SD.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocument AS SD
JOIN ReturnOrders RO ON SD.SalesDocument = RO.ReturnCaseId
JOIN I_SalesDocumentItem I ON SD.SalesDocument = I.SalesDocument
WHERE SD.OverallSDProcessStatus = 'C' -- 'Completed' ステップ
- 事前準備の確認: 抽出を実行するユーザーアカウントに、必要なコアデータサービス(CDS)ビューにアクセスするための SAP S/4HANA 権限があることを確認してください。主要なビューには、I_SalesDocument、I_SalesDocumentItem、I_SDDocumentFlow、I_DeliveryDocument、I_MaterialDocumentHeader、I_BillingDocument、I_JournalEntry、I_ClearedItem が含まれます。
- クエリツールへのアクセス: SAP S/4HANA データベースへの接続が確立されている、SQLクライアントまたはデータ統合ツールにログインします。これには、SAP Analytics Cloud などの SAP 純正ツールや、サードパーティのETLプラットフォームが利用可能です。
- クエリパラメータの設定: 実行前に、提供されたSQLクエリを修正する必要があります。プレースホルダーを見つけ、環境に合わせた正しいパラメータ(
[Start Date]、[End Date]、[Your Source System ID]、[Your Return Order Type]、およびその他の伝票タイプや会社コードのフィルタ)に置き換えてください。 - 抽出クエリの実行: 完成したSQLクエリをコピーしてツールで実行します。このクエリは、複数の SELECT 文の結果を結合(UNION ALL)することで、指定されたすべてのアクティビティを単一のデータセットとして収集するように設計されています。
- クエリロジックの理解:
UNION ALL構造内の各SELECTブロックは、特定のアクティビティの抽出を担当しています。複数のCDSビューを結合して必要な属性を収集し、ActivityNameとして固定文字列を割り当て、EventTimeとして関連するタイムスタンプを選択します。 - 生データの確認: クエリの完了後、出力を簡単に確認してください。行数が適切であるか、
ReturnCaseId、ActivityName、EventTimeなどの主要な列が期待通りに入力されているかを確認します。 - データ変換: クエリはフラットなイベントログ形式を出力するように構成されています。通常、大幅な構造変換は不要ですが、ターゲットシステムの要件に応じてタイムスタンプの形式やデータ型を調整する必要がある場合があります。
- イベントログのエクスポート: クエリ結果をCSVファイルとしてエクスポートします。ユーザー名や製品説明の文字化けを防ぐため、ファイルが UTF-8 エンコーディングを使用していることを確認してください。
- プロセスマイニングツールへのアップロード: 作成されたCSVファイルは、ProcessMind などのプロセスマイニングプラットフォームにアップロードできる状態です。ファイルの各列をツールの対応するフィールドにマッピングしてください(例:
ReturnCaseIdをケースIDに、ActivityNameをアクティビティに、EventTimeをタイムスタンプにマッピング)。
設定
- 事前準備: 実行ユーザーには、販売伝票(VBAK)、出荷伝票(LIKP)、請求伝票(VBRK)、会計伝票(BSEG、BKPF)に関連するオブジェクトの照会権限が必要です。また、基盤となるCDSビューへのアクセス権も必須となります。
- データスコープのフィルタ: 返品プロセスを分離するために、特定の伝票タイプでクエリをフィルタリングすることが不可欠です。返品受注タイプ(例:'RE')、クレジットメモ依頼タイプ(例:'G2')、代替オーダータイプ(例:'SO')のプレースホルダーを設定してください。データ範囲を限定するために、
CompanyCode(会社コード)やSalesOrganization(販売組織)によるフィルタリングも強く推奨されます。 - 日付範囲によるフィルタリング: パフォーマンスとデータ量を適切に管理するため、常に日付範囲フィルタを適用してください。まずは直近3〜6ヶ月のデータから開始することをお勧めします。クエリでは、最初の返品受注の作成日(
I_SalesDocument.CreationDate)を主要なフィルタ条件として使用します。 - パフォーマンスに関する注意事項: このクエリは複数の大規模なCDSビューを結合するため、ソースとなるS/4HANAシステムの負荷が高くなる可能性があります。システムへの影響を最小限に抑えるため、業務のオフピーク時間帯に抽出をスケジュールしてください。データセットが非常に大きい場合は、インクリメンタルロード(増分読み込み)戦略の検討も必要です。
a クエリ例 sql
WITH ReturnOrders AS (
SELECT
SalesDocument AS ReturnCaseId,
CreationDate,
CreationDateTime,
CreatedByUser,
OrderReason,
SoldToParty
FROM I_SalesDocument
WHERE SalesDocumentType = '[Your Return Order Type]' -- e.g., 'RE'
AND CreationDate BETWEEN '[Start Date]' AND '[End Date]'
AND CompanyCode = '[Your Company Code]'
)
-- 1. Return Request Initiated
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Return Request Initiated' AS "ActivityName",
RO.CreationDateTime AS "EventTime",
RO.CreationDateTime AS "EventEndTime",
RO.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM ReturnOrders RO
JOIN I_SalesDocumentItem I ON RO.ReturnCaseId = I.SalesDocument
UNION ALL
-- 2. Return Order Approved
SELECT
SD.SalesDocument AS "ReturnCaseId",
'Return Order Approved' AS "ActivityName",
SD.LastChangeDateTime AS "EventTime",
SD.LastChangeDateTime AS "EventEndTime",
SD.LastChangedByUser AS "UserName",
SD.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
SD.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocument AS SD
JOIN ReturnOrders RO ON SD.SalesDocument = RO.ReturnCaseId
JOIN I_SalesDocumentItem I ON SD.SalesDocument = I.SalesDocument
WHERE SD.OverallSDProcessStatus <> 'A' -- Not Open, implying it has been processed/approved
AND I.SDProcessStatus <> 'A'
UNION ALL
-- 3. Return Delivery Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
LH.CreationDateTime AS "EventTime",
LH.CreationDateTime AS "EventEndTime",
LH.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
LI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_DeliveryDocument AS LH ON DF.SubsequentDocument = LH.DeliveryDocument
JOIN I_DeliveryDocumentItem AS LI ON LH.DeliveryDocument = LI.DeliveryDocument
WHERE DF.PrecedingDocumentCategory = 'C' AND DF.SubsequentDocumentCategory = 'J'
UNION ALL
-- 4. Goods Received at Warehouse
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Goods Received at Warehouse' AS "ActivityName",
MH.CreationDateTime AS "EventTime",
MH.CreationDateTime AS "EventEndTime",
MH.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
MI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_DeliveryDocumentItem AS LI ON DF.SubsequentDocument = LI.DeliveryDocument AND DF.SubsequentDocumentItem = LI.DeliveryDocumentItem
JOIN I_MaterialDocumentItem AS MI ON LI.DeliveryDocument = MI.DeliveryDocument AND LI.DeliveryDocumentItem = MI.DeliveryDocumentItem
JOIN I_MaterialDocumentHeader AS MH ON MI.MaterialDocument = MH.MaterialDocument AND MI.MaterialDocumentYear = MH.MaterialDocumentYear
WHERE DF.SubsequentDocumentCategory = 'J' AND MH.GoodsMovementType = '[Your Return Goods Receipt MVT]' -- e.g., '651', '653'
UNION ALL
-- 5. Item Inspection Completed
SELECT
SDI.SalesDocument AS "ReturnCaseId",
'Item Inspection Completed' AS "ActivityName",
SDI.LastChangeDateTime AS "EventTime",
SDI.LastChangeDateTime AS "EventEndTime",
SDI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
SDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocumentItem AS SDI
JOIN ReturnOrders RO ON SDI.SalesDocument = RO.ReturnCaseId
WHERE SDI.ReturnsInspectionStatus = '4' -- 'Inspection Completed', adjust value based on your config
UNION ALL
-- 6. Return Rejected
SELECT
SDI.SalesDocument AS "ReturnCaseId",
'Return Rejected' AS "ActivityName",
SDI.LastChangeDateTime AS "EventTime",
SDI.LastChangeDateTime AS "EventEndTime",
SDI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
SDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocumentItem AS SDI
JOIN ReturnOrders RO ON SDI.SalesDocument = RO.ReturnCaseId
WHERE SDI.SalesDocumentItemRejectionReason <> ''
UNION ALL
-- 7. Credit Memo Request Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
CM_REQ.CreationDateTime AS "EventTime",
CM_REQ.CreationDateTime AS "EventEndTime",
CM_REQ.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_SalesDocument AS CM_REQ ON DF.SubsequentDocument = CM_REQ.SalesDocument
JOIN I_SalesDocumentItem I ON CM_REQ.SalesDocument = I.SalesDocument
WHERE CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]' -- e.g., 'CR'
UNION ALL
-- 8. Exchange Order Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Exchange Order Created' AS "ActivityName",
EX_ORD.CreationDateTime AS "EventTime",
EX_ORD.CreationDateTime AS "EventEndTime",
EX_ORD.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_SalesDocument AS EX_ORD ON DF.SubsequentDocument = EX_ORD.SalesDocument
JOIN I_SalesDocumentItem I ON EX_ORD.SalesDocument = I.SalesDocument
WHERE EX_ORD.SalesDocumentType = '[Your Exchange Order Type]' -- e.g., 'OR'
UNION ALL
-- 9. Credit Memo Created
SELECT
DF_CM.PrecedingDocument AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
BD.CreationDateTime AS "EventTime",
BD.CreationDateTime AS "EventEndTime",
BD.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
BD.TotalNetAmount AS "RefundAmount",
BDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN I_SalesDocument AS CM_REQ ON DF.SubsequentDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow AS DF_CM ON CM_REQ.SalesDocument = DF_CM.PrecedingDocument
JOIN I_BillingDocument AS BD ON DF_CM.SubsequentDocument = BD.BillingDocument
JOIN I_BillingDocumentItem AS BDI ON BD.BillingDocument = BDI.BillingDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE DF.PrecedingDocumentCategory = 'C'
UNION ALL
-- 10. Accounting Document Created
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Accounting Document Created' AS "ActivityName",
JE.CreationDateTime AS "EventTime",
JE.CreationDateTime AS "EventEndTime",
JE.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
JE.AmountInCompanyCodeCurrency AS "RefundAmount",
JRI.ProductName AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_JournalEntry AS JE
JOIN I_JournalEntryItem JRI ON JE.AccountingDocument = JRI.AccountingDocument
JOIN I_BillingDocument BD ON JE.ReferenceDocument = BD.BillingDocument
JOIN I_SDDocumentFlow DF_CM ON BD.BillingDocument = DF_CM.SubsequentDocument
JOIN I_SalesDocument CM_REQ ON DF_CM.PrecedingDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow DF ON CM_REQ.SalesDocument = DF.SubsequentDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE JE.OriginalReferenceDocumentType = 'VBRK'
UNION ALL
-- 11. Refund Processed
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Refund Processed' AS "ActivityName",
CI.ClearingDate AS "EventTime",
CI.ClearingDate AS "EventEndTime",
CI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CI.AmountInCompanyCodeCurrency AS "RefundAmount",
JRI.ProductName AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_ClearedItem AS CI
JOIN I_JournalEntryItem JRI ON CI.AccountingDocument = JRI.AccountingDocument AND CI.FiscalYear = JRI.FiscalYear AND CI.LedgerGLLineItem = JRI.LedgerGLLineItem
JOIN I_JournalEntry JE ON JRI.AccountingDocument = JE.AccountingDocument
JOIN I_BillingDocument BD ON JE.ReferenceDocument = BD.BillingDocument
JOIN I_SDDocumentFlow DF_CM ON BD.BillingDocument = DF_CM.SubsequentDocument
JOIN I_SalesDocument CM_REQ ON DF_CM.PrecedingDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow DF ON CM_REQ.SalesDocument = DF.SubsequentDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE JE.OriginalReferenceDocumentType = 'VBRK' AND CI.ClearingDate IS NOT NULL
UNION ALL
-- 12. Return Case Closed
SELECT
SD.SalesDocument AS "ReturnCaseId",
'Return Case Closed' AS "ActivityName",
SD.LastChangeDateTime AS "EventTime",
SD.LastChangeDateTime AS "EventEndTime",
SD.LastChangedByUser AS "UserName",
SD.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
SD.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocument AS SD
JOIN ReturnOrders RO ON SD.SalesDocument = RO.ReturnCaseId
JOIN I_SalesDocumentItem I ON SD.SalesDocument = I.SalesDocument
WHERE SD.OverallSDProcessStatus = 'C' -- 'Completed'