返品・返金処理のデータテンプレート
返品・返金処理のデータテンプレート
- 収集を推奨する属性
- 追跡する主なアクティビティ
- データ抽出の手順
返品・返金処理の属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 ActivityName | 返品・返金プロセスで発生した特定の業務アクティビティまたはイベントの名前です。 | ||
| 説明 この属性は、返品プロセスにおける個々のステップや節目を表します。「返品受注の承認」や「商品の検品完了」など、実行された作業を示します。SAP S/4HANAに記録されたステータス変更、伝票作成、特定のユーザー操作から導出されます。 アクティビティの順序や発生頻度の分析は、プロセスマイニングの中核です。プロセスマップを可視化し、よくある経路とまれな経路を特定できます。また、頻繁に繰り返されるアクティビティを見つけ、手戻りや非効率の把握にも役立ちます。 重要な理由 アクティビティはプロセスマップの基盤となり、プロセスの流れ、ボトルネック、ばらつきの可視化と分析を可能にします。 入手先 アクティビティ名は通常、VBUK/VBUPなどのテーブルにある伝票ステータスの変更、VBAK(販売伝票)やBKPF(会計伝票)などのヘッダーテーブルに記録された作成イベント、MSEGの在庫移動ステータスなど、複数のデータから導出されます。 例 返品申請の開始倉庫での返品商品の受領クレジットメモの作成返金処理の完了 | |||
| イベント時刻 EventTime | 特定のアクティビティが発生した日時を示す正確なタイムスタンプです。 | ||
| 説明 イベント時刻は、業務イベントがシステムに記録された日時を示します。アクティビティを時系列に並べるために必要であり、時間に基づくあらゆる分析の基礎となります。 プロセスマイニングでは、この属性を使ってアクティビティ間のサイクルタイムや各ステップの所要時間を算出し、時間の経過に伴うプロセスのパフォーマンスを分析します。ボトルネックの特定、SLAの遵守状況の監視、返品プロセスの時間的な推移の把握にも役立ちます。 重要な理由 イベントの順序付け、所要時間やサイクルタイムの算出、プロセスの遅延特定に欠かせないタイムスタンプです。 入手先 通常は、伝票の作成日時やステータス変更に関連する日付・時刻項目から取得します。たとえば、VBAK、LIKP、BKPFなどのテーブルにあるERDAT(作成日)とERZET(作成時刻)、または会計伝票の転記日付(BUDAT)です。 例 2023-10-26T10:05:00Z2023-10-27T14:30:15Z2023-10-28T09:00:00Z | |||
| 返品ケースID ReturnCaseId | 顧客の返品プロセス1件を識別する一意のIDです。申請から完了まで、関連するすべてのアクティビティを結び付けます。 | ||
| 説明 返品ケースIDは、1件の返品に属するすべてのイベントとアクティビティをまとめる主要な識別子です。顧客からの返品申請ごとに一意のIDが割り当てられ、プロセス全体を追跡できます。 プロセスマイニングでは、この属性を使ってプロセスの流れを再構成します。返品ごとのイベントを結び付け、「返品申請の開始」「商品の受領」「返金処理の完了」などを一連の時系列として把握できるため、ケースの所要時間、プロセスのバリアント、ボトルネックを分析できます。 重要な理由 返品を開始から完了まで追跡するための基本となるキーです。サイクルタイムやプロセスのバリアントの特定など、ケース単位の分析に使います。 入手先 通常は返品受注ヘッダーテーブルVBAKの販売伝票番号(VBELN)です。伝票カテゴリ(VBTYP)で返品を示します。 例 600001896000019060000191 | |||
| ソースシステムID SourceSystemId | データの抽出元となるソースシステムを識別するIDです。 | ||
| 説明 この属性は、イベントデータの発生元となる記録システムを示します。このプロセスでは通常、SAP S/4HANAのインスタンスIDが該当します。 複数のシステムを使う環境では、データの来歴の追跡、問題の調査、データの整合性確保に欠かせない項目です。返品処理が複数のERPインスタンスにまたがる場合や、倉庫管理システムなどの外部システムと連携する場合に、データを区別するのに役立ちます。 重要な理由 特に複数のシステムがある環境で、データの発生元や来歴を把握するための重要なコンテキストを提供し、追跡可能性と信頼性を確保します。 入手先 通常は固定値で、データ抽出時に設定します。システムID(SID)など、SAPシステムの管理情報から取得できます。 例 S4H_PROD_100S4Q_DEV_200 | |||
| 最終データ更新日時 LastDataUpdateTimestamp | このイベントのデータが最後に更新または抽出された日時を示すタイムスタンプです。 | ||
| 説明 この属性には、データを最後に抽出または更新した日時が記録されます。分析対象のデータセットがどの程度新しいかを示すメタデータです。 プロセスマイニング分析の鮮度を把握するうえで重要です。データがいつ時点のものかを確認できるため、進行中のケースを追跡する業務モニタリングやダッシュボードで特に役立ちます。 重要な理由 データの鮮度を示します。分析やダッシュボードが最新の情報に基づいていることを確認するうえで重要です。 入手先 通常、ETLツールまたはデータパイプラインツールがデータを抽出する際に生成し、データセットに記録します。 例 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| イベント終了時刻 EventEndTime | アクティビティの完了時刻を示すタイムスタンプです。所要時間の算出に使います。 | ||
| 説明 StartTime(EventTime)がアクティビティの開始時刻を示すのに対し、EventEndTimeは終了時刻を示します。システムが生成するイベントの多くは、瞬時に発生したものとして開始時刻と終了時刻が同じです。一方、「商品の検品」のように所要時間を測定できるアクティビティでは、この属性が重要です。 この属性を使うと、アクティビティの処理時間を直接算出できます。ステップ間の待ち時間だけでなく、どのステップ自体に時間がかかっているかを特定するパフォーマンス分析の基礎となります。 重要な理由 個々のアクティビティの所要時間を正確に算出でき、特定のプロセスステップにおける非効率の特定に役立ちます。 入手先 多くの場合、導出されます。アクティビティによっては専用の項目がある場合もありますが、一般的には同じケース内の次のアクティビティのStartTimeを使います。 例 2023-10-26T11:25:30Z2023-10-27T15:00:00Z2023-10-28T09:10:45Z | |||
| ユーザー名 UserName | アクティビティを実行した従業員のユーザーIDです。 | ||
| 説明 この属性は、返品の承認やクレジットメモの作成などのタスクを完了したユーザーまたはシステムエージェントを特定します。SAPでは、伝票を作成または変更したユーザーを記録する項目から取得することがよくあります。 ユーザー別に分析すると、成果の高い個人やチーム、研修の必要性、業務負荷の分布を把握できます。また、プロセス上の逸脱を調査する際にも重要です。操作と個人を結び付けることで、コンプライアンスの確認や監査を支援します。 重要な理由 アクティビティを特定のユーザーに関連付け、チームのパフォーマンス、業務負荷、コンプライアンスを分析できます。 入手先 通常は伝票ヘッダーテーブルにあります。たとえば、VBAK(販売受注)、LIKP(納品)、BKPF(会計伝票)のERNAM(作成者)です。ユーザー情報は、ユーザーマスターテーブルUSR21から補完できます。 例 CBROWNASMITHWF_BATCH | |||
| 製品ID ProductId | 返品対象の商品を識別する一意のIDです。 | ||
| 説明 この属性は、返品対象となる品目または製品を示します。返品プロセスを製品カタログ内の特定の商品に関連付けます。 製品別の返品分析は、返品率の高い商品を特定するうえで欠かせません。返品率の高さは、品質不良、商品説明の不備、製造上の問題を示している場合があります。このデータは、製品設計、サプライヤー管理、在庫戦略に関する判断に役立ちます。 重要な理由 返品プロセスを特定の製品に関連付け、商品ごとの返品率を分析し、品質や説明に関する問題を特定できます。 入手先 返品受注明細テーブル(VBAP)または返品納品明細テーブル(LIPS)の品目番号項目(MATNR)にあります。 例 FG-10023HW-45981SW-LICENSE-PREM | |||
| 返品理由 ReturnReason | 顧客が返品する理由として申告した内容です。 | ||
| 説明 この属性には、「商品不良」「サイズ違い」「不要になった」など、顧客が申告した返品理由が記録されます。通常、返品申請時にあらかじめ定められた理由コードから選択します。 返品理由の分析は、製品の品質問題の特定、商品説明の改善、販売プロセスの見直しに欠かせません。顧客の不満を直接把握し、返品率を下げるために優先して取り組むべき改善領域を見極めるのに役立ちます。 重要な理由 返品が発生する理由を把握し、根本原因を分析できます。製品の品質、出荷ミス、顧客の期待とのずれに対処するうえで役立ちます。 入手先 通常は返品販売受注明細テーブル(VBAP)のABGRU項目(販売伝票の却下理由)に保存されます。 例 001 - 品質不良002 - 輸送中の破損005 - 誤った商品の出荷 | |||
| 返金額 RefundAmount | 顧客に返金された最終的な金額です。 | ||
| 説明 この属性は、返品プロセスの完了時に顧客へ実際に返金またはクレジットされた金額を表します。クレジットメモなどの財務伝票に記録されます。 さまざまな分析に使う重要な財務指標です。「返金額の差異分析」ダッシュボードでは、申請額との比較に欠かせません。また、金額別に返品を分類し、高額な返品で異なるプロセスが発生していないか、解決に時間がかかっていないかを確認できます。 重要な理由 返品による財務上の影響を把握できます。返金額の正確性、高額ケースの特定、全体的なコストの把握に欠かせません。 入手先 クレジットメモ伝票の正味額項目(NETWR)から取得します。VBRK(請求伝票ヘッダー)やBSEG(会計伝票明細)などのテーブルにあります。 例 125.50999.0049.99 | |||
| 顧客ID CustomerId | 返品を申請した顧客を識別する一意のIDです。 | ||
| 説明 この属性は、返品を申請した顧客を特定します。プロセスの各ケースを、顧客マスターデータ内の特定の顧客に関連付けます。 顧客別に返品を分析すると、返品率が異常に高い顧客などの傾向を把握できます。不正行為や顧客の不満を示している場合があります。また、顧客の種類、取引額、利用履歴に基づいて返品プロセスを分類し、サービスレベルを調整できます。 重要な理由 返品を特定の顧客に関連付け、顧客の行動や顧客層を分析し、返品頻度の高い顧客を特定できます。 入手先 返品受注ヘッダーテーブル(VBAK)の顧客番号項目(KUNNR)にあります。 例 CUST-001234CUST-005678CUST-009012 | |||
| クレジットメモ番号 CreditMemoNumber | 返金を承認するクレジットメモ伝票を識別する一意の番号です。 | ||
| 説明 クレジットメモは、返品商品の代金を顧客口座に正式に返金する請求伝票です。この属性は、その財務伝票に割り当てられた一意の番号です。 クレジットメモ番号を追跡することは、返品プロセスの金銭精算を分析するうえで欠かせません。実際の返金を開始する重要な節目となることが多く、財務照合や監査にも必要です。 重要な理由 返金に関する正式な財務取引を示します。プロセスの最終段階の追跡や財務監査に欠かせません。 入手先 請求伝票ヘッダーテーブル(VBRK)の請求伝票番号(VBELN)です。伝票カテゴリでクレジットメモを示します。 例 900003459000034690000347 | |||
| 処理担当者 ProcessingAgent | 手動のアクティビティを担当する特定の担当者またはリソースグループです。 | ||
| 説明 この属性は、特定のタスクを実行した担当者またはチームを示します。共有サービス環境などでは、ユーザー名より具体的に、役割やチームを表す場合があります。 「返金承認の効率性」ダッシュボードでは、担当者やチームごとの実績分析に役立ちます。業務量の配分を把握し、トレーニングの必要性を特定するとともに、優れた実績を上げている担当者や、ベストプラクティスを共有できるチームを見つけられます。 重要な理由 担当者またはチーム単位で実績を分析できます。業務量の管理、トレーニング機会の特定、効率の向上に役立ちます。 入手先 担当者が割り当てられている場合は、SAP Business Partnerの機能から取得できる可能性があります。また、人事組織構造におけるユーザーの部門や役割から導出することもできます。 例 第1階層サポート倉庫検品チーム財務部門-買掛金 | |||
| 商品の検品結果 ItemInspectionOutcome | 返品された商品の現物検査の結果です。 | ||
| 説明 この属性には、商品が倉庫に到着した後に行う検品の結果を記録します。一般的な結果には、「受け入れ-再販売可能」「不合格-破損」「受け入れ-修理後に販売可能」などがあります。 このデータは、その後のプロセスに欠かせないコンテキストを提供します。全額返金、一部返金、返金なしのいずれにするかを判断できます。検品結果を分析すると、不合格の理由を特定できます。また、輸送中の破損が頻発している場合は、商品の梱包や配送業者の見直しにも役立ちます。 重要な理由 返金の承認または却下に至った判断の背景を明らかにし、商品の状態や返金額の調整理由に関するデータを提供します。 入手先 品質管理モジュール(QM)の検査ロット、または返品納品明細(LIPS)のステータスや理由コードに記録されている場合があります。カスタム項目に保存されていることもあります。 例 受け入れ-再販売可能受け入れ-修理後に販売可能不合格-顧客による破損不合格-返品商品が異なる | |||
| 手戻りかどうか IsRework | 案件内のアクティビティが、以前のアクティビティの繰り返しかどうかを示すフラグです。 | ||
| 説明 この計算済みの真偽値属性は、同じ案件内でアクティビティが複数回実行された手戻りを特定します。たとえば、商品の検品をやり直す場合や、クレジットメモを作成後に取り消し、再作成する場合が該当します。 「返金処理の手戻り分析」ダッシュボードと「返金手戻り率」重要業績評価指標(KPI)に欠かせません。エラーが起きやすいアクティビティや、複数回の対応が必要なアクティビティを明らかにし、プロセスの非効率を数値で把握できます。管理の強化やトレーニングが必要な領域の特定にも役立ちます。 重要な理由 作業の繰り返しを検出して、プロセスの非効率やエラーを明らかにします。無駄や遅延を減らすため、対象を絞った改善につなげられます。 入手先 通常はプロセスマイニングツールで算出するか、データ変換時に事前計算します。同じ案件内で、同じアクティビティ名が以前に出現しているかを確認します。 例 truefalse | |||
| 申請時の返金額 RequestedRefundAmount | プロセスの開始時に申請または見込まれた返金額です。 | ||
| 説明 この属性は、最初の返品申請に記載された返品商品の金額を記録します。最終的な返金額と比較するためのベースラインとなります。 この項目は、「返金額の差異分析」ダッシュボードで必要です。申請額と実際の返金額を比較すると、商品の破損による一部返金、再入庫手数料、その他の調整などを特定でき、財務処理の正確性と透明性を確保できます。 重要な理由 返金額の正確性を測るベースラインとなり、想定額と実際の返金額の差異を特定・分析するのに役立ちます。 入手先 通常は、返品の最初の受注伝票に記載された商品の正味額を参照します。これは、VBAPテーブルの該当明細にある正味額(NETWR)です。 例 125.501050.0049.99 | |||
| 自動処理かどうか IsAutomated | アクティビティがシステムと人のどちらによって実行されたかを示すフラグです。 | ||
| 説明 この真偽値属性は、ワークフローやバックグラウンドジョブなど、システムが自動で実行したアクティビティと、ユーザーが手動で実行したアクティビティを区別します。 「返金承認の自動化率」重要業績評価指標(KPI)の算出や、自動化の機会の特定に欠かせません。手動タスクに絞り込むことで、自動化による速度、コスト、正確性の向上が特に見込める領域に、プロセス改善の取り組みを集中できます。 重要な理由 手動タスクと自動タスクを区別できます。自動化の機会を見つけ、デジタルトランスフォーメーションの効果を測るうえで重要です。 入手先 通常はユーザー名に基づいて判定します。たとえば、ユーザーが「WF_BATCH」などのシステムIDの場合、アクティビティを自動処理として記録します。 例 truefalse | |||
| 販売組織 SalesOrganization | 元の販売と返品を担当する組織単位です。 | ||
| 説明 販売組織は、製品やサービスの販売・流通を担う単位を表す、SAPの主要な組織構造要素です。返品取引にも割り当てられます。 この属性を使うと、事業部門、地域、部門ごとに返品プロセスを絞り込み、比較できます。販売組織によって返品率や返品処理の効率に差があるかを特定し、組織のパフォーマンス分析に役立てられます。 重要な理由 事業部門、地域、販売チャネルごとに、返品プロセスのパフォーマンスや返品率を比較できます。 入手先 返品受注ヘッダーテーブル(VBAK)の販売組織項目(VKORG)にあります。 例 10002100US01 | |||
| 返品ポリシーID ReturnPolicyId | この返品案件に適用される返品ポリシーを識別するIDです。 | ||
| 説明 この属性は、取引に適用される返品ポリシーまたはルールセットを示します。ポリシーは、商品種別、顧客セグメント、購入からの経過期間などによって異なる場合があります。 このデータは「返品ポリシー適合性の概要」に欠かせません。各案件にポリシーを関連付けることで、返品期限や商品の状態に関する要件など、ルールへの適合状況をシステムで自動確認し、逸脱を分析対象として検出できます。 重要な理由 業務ルールに照らしたコンプライアンスチェックを自動化し、返品が一貫した方法でポリシーに沿って処理されるよう支援します。 入手先 SAPの標準項目ではないことが多く、商品種別、顧客、販売日などのデータを使い、業務ロジックに基づいて導出する必要があります。実装されている場合は、カスタム項目に保存されている可能性があります。 例 STD-30DAYELEC-90DAY-WARRANTYFINAL-SALE-DEFECT | |||
| 返品ポリシーの遵守 ReturnPolicyAdherence | 返品案件が定められた返品ポリシーに適合しているかを示すフラグです。 | ||
| 説明 この計算済みの真偽値属性は、返品が適用される返品ポリシーの基準を満たしているかを示します。たとえば、返品が許可期間内に開始されたか、返品理由がその商品に対して有効かを確認できます。 この属性は、「返品ポリシー適合性の概要」ダッシュボードを直接支えます。適合率を数値で把握し、適合しない案件をドリルダウンして逸脱の理由を確認できます。これにより、ポリシーをより効果的に徹底できます。 重要な理由 業務ルールへの適合状況を数値で把握できます。収益性に影響したり、プロセス上の例外を招いたりするポリシー違反の特定と削減に役立ちます。 入手先 業務ルールに基づいて算出します。たとえば、「返品開始日-当初の購入日」≦[返品可能日数]で判定します。算出には、当初の購入日とポリシールールが必要です。 例 truefalse | |||
| 返品受注ステータス ReturnOrderStatus | 返品案件の現在の全体ステータスです。 | ||
| 説明 この属性は、「未処理」「処理中」「完了」など、任意の時点における返品案件の概要ステータスを示します。多くの場合、最後に完了した主要なマイルストーンから導出される集約ステータスです。 現在の業務量と案件の分布を把握する「返品案件の現在のステータス」ダッシュボードに欠かせません。プロセスの各段階にある案件数を管理者が把握できるため、リソースの配分や業務量の管理を改善できます。 重要な理由 各案件がプロセスのどの段階にあるかを把握できます。現在の業務量とステータスを追跡する業務ダッシュボードに欠かせない情報です。 入手先 関連文書のステータス項目から導出します。たとえば、関連する受注伝票(VBUK/VBUP)または納品伝票のヘッダーステータス(GBSTK)や明細ステータス(LFSTK)を参照します。 例 商品の入庫待ち検品待ち返金待ち完了 | |||
| 返品納品番号 ReturnDeliveryNumber | 返品納品伝票を識別する一意の番号です。 | ||
| 説明 顧客が商品を物理的に返品する際、入荷物流を管理するためにSAPで返品納品伝票が作成されます。この属性は、その伝票に割り当てられた一意の番号です。 このIDは、返品商品の物理的な移動を追跡するうえで重要です。返品の財務面と物流面を結び付け、プロセスの入庫や検品の段階を詳しく分析できます。 重要な理由 返品受注と商品の物理的な受領を結び付ける重要な情報です。物流や倉庫での処理時間を分析するうえで役立ちます。 入手先 納品ヘッダーテーブル(LIKP)の納品伝票番号(VBELN)です。伝票カテゴリで返品納品を示します。 例 840000128400001384000014 | |||
| 返金SLAの遵守状況 RefundSlaAdherence | 返金がサービスレベル契約(SLA)の目標期限内に処理されたかを示すフラグです。 | ||
| 説明 この計算済み属性は、「返金処理」アクティビティが「返金SLA目標日」までに発生したかを確認します。各案件のSLA適合状況を、真または偽で示します。 「返金SLA遵守状況のモニタリング」ダッシュボードと「返金SLA遵守率」重要業績評価指標(KPI)の中核となる指標です。顧客との約束に対する実績を測り、期待に応えられなかった案件を特定して、遅延の根本原因を分析できます。 重要な理由 顧客に対する約束の達成状況を直接測定できるため、サービス品質と顧客満足度を示す重要な指標です。 入手先 各案件について、「返金処理」アクティビティのEventTimeと「RefundSlaTargetDate」を比較して算出します。 例 truefalse | |||
| 返金SLA目標日 RefundSlaTargetDate | 返品案件の返金処理を完了する目標日です。 | ||
| 説明 この属性は、返金処理に関するサービスレベル契約(SLA)の期限を定義します。通常、返品の承認日や商品の受領日から所定の日数を加算するなど、業務ルールに基づいて日付を算出します。 この項目は、「返金SLA遵守状況のモニタリング」ダッシュボードと関連する重要業績評価指標(KPI)の基礎となります。SLA未達のリスクがある案件を早期に把握し、遅延の根本原因を分析することで、顧客満足度の向上につなげられます。 重要な理由 SLAのコンプライアンスを測るベースラインとなり、実績のモニタリング、長期化した案件の優先対応、顧客満足度の向上に役立ちます。 入手先 ほとんどの場合、導出項目です。返品依頼の作成日などの基準日と、業務ルールで定めた期間をもとに算出します。期間は顧客種別や返品理由などによって異なる場合があります。 例 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)がイベント時刻を示します。 記録 返品納品に対する入庫が転記された際に記録されるイベントです。 イベントタイプ explicit | |||
| 商品の検品完了 | 返品商品の品質と状態の評価が完了したことを示します。Advanced Returns Managementでは、検品結果を記録し、返金や廃棄など次の処理を決める明示的なステップとして扱われることがよくあります。 | ||
| 重要な理由 検品にかかる時間と結果は、返金処理の所要時間や在庫管理に直接影響します。検品の効率や手戻りを分析するうえで、このアクティビティは欠かせません。 入手先 SAP Advanced Returns Management(ARM)では、検品トランザクションから明示的なイベントとして取得できます。また、検品結果を示す返品受注明細のステータス変更から判断する場合もあります。 記録 ARMでの物流上の後続処理に関するトランザクションログまたはステータス変更から取得します。 イベントタイプ explicit | |||
| 返品ケースの完了 | 返品プロセスが完了し、ケースに対する追加の対応が不要になったことを示す最終アクティビティです。通常、返品受注伝票のステータスがシステム上で最終の完了状態になったことから判断します。 | ||
| 重要な理由 このイベントがプロセスの終了点となり、エンドツーエンドのサイクルタイム全体を算出できます。ケースが完全に解決したことを確認できます。 入手先 テーブルVBAKの返品受注全体、またはVBAPの明細のステータスが「完了」または「クローズ」になったことから判断します。システムのステータス管理設定に基づいて判定されます。 記録 返品受注伝票のステータスが「完了」に変わったことから判断します。 イベントタイプ inferred | |||
| 返品申請の開始 | 返品プロセスの開始点です。システムで返品受注が正式に作成されます。SAP S/4HANAで返品受注タイプの新しい販売伝票を保存すると、このイベントが明示的に記録されます。 | ||
| 重要な理由 このアクティビティは、返品ケースのライフサイクルが正式に始まったことを示します。このイベントから完了までの時間を分析することは、返品サイクルタイム全体と顧客体験を測定するうえで重要です。 入手先 テーブルVBAKで販売伝票が作成された際に記録される明示的なイベントです。伝票カテゴリ(VBAK-VBTYP)が返品受注を示します。作成日時はVBAK-ERDATです。 記録 新しい返品受注を保存するとイベントが記録されます(例:トランザクションVA01を使用)。 イベントタイプ explicit | |||
| 返金処理の完了 | 返金プロセスの最終ステップです。財務上のクレジットが消し込まれ、顧客への支払いが行われたことを示します。財務モジュールで消込伝票が作成され、顧客口座の未消込クレジットが決済されたことから判断します。 | ||
| 重要な理由 顧客への支払いが実際に行われた時点です。返品申請からこのステップまでの所要時間は、顧客満足度を大きく左右し、SLAの遵守状況を測るうえでも重要です。 入手先 財務会計の明細テーブルBSEGにある消込伝票情報から判断します。クレジットメモに関連する顧客明細の消込日付(BSEG-AUGDT)が、返金処理の実施日を示します。 記録 クレジットメモに関連する会計伝票の消込日付項目に値が設定されたことから判断します。 イベントタイプ inferred | |||
| 交換受注の作成 | 返金ではなく、交換品を顧客に発送するための新しい販売受注を作成する代替処理を示します。元の返品を参照する新しい販売受注が作成された際に記録されます。 | ||
| 重要な理由 返金を伴う返品と交換を伴う返品を区別できます。それぞれプロセスの流れと顧客への結果が異なるため、バリアント分析に役立ちます。 入手先 VBAKで新しい販売伝票が作成され、伝票フローテーブル(VBFA)で返品受注と関連付けられた際に取得します。 記録 交換品として指定された新しい販売受注伝票を保存するとイベントが記録されます。 イベントタイプ explicit | |||
| 会計伝票の作成 | クレジットメモが財務会計モジュールに正常に転記された際に発生するイベントです。総勘定元帳に対応する仕訳が作成され、会計上の正式な処理となります。 | ||
| 重要な理由 クレジットが財務システムに反映されたことを確認するアクティビティです。クレジットメモの作成から会計転記までの時間を見ると、請求と財務の連携に関する問題を特定できます。 入手先 会計テーブルBKPFで伝票ヘッダーが作成された際に取得します。VBRKのクレジットメモと関連付けられます(VBRK-BELNR)。 記録 請求伝票が財務会計に正常に転記されるとイベントが記録されます。 イベントタイプ explicit | |||
| 返品の却下 | 返品商品が返品ポリシーの条件を満たさず、返金またはクレジットの申請が却下されたことを示します。通常、検品後に返品受注明細へ特定のステータスまたは理由コードが設定されると記録されます。 | ||
| 重要な理由 却下を追跡すると、返品ポリシーへの適合状況を分析し、却下の主な理由を特定できます。プロセスにおける重要な例外経路です。 入手先 返品受注明細に却下理由(VBAP-ABGRU)が設定された場合、またはAdvanced Returns Managementの検品中に特定のステータスが割り当てられた場合に判断します。 記録 返品伝票の明細に却下理由または特定の「却下」ステータスが設定された場合に判断します。 イベントタイプ inferred | |||
| 返品受注の承認 | 返品受注が正式に承認またはリリースされ、次の段階に進める状態になったことを示します。通常は、販売伝票のヘッダーまたは明細のステータス変更から判断します。ブロックが解除されたことが示されます。 | ||
| 重要な理由 承認の手順が遅延の大きな原因になることがあります。このアクティビティを追跡すると、返品プロセスの初期承認段階にあるボトルネックを特定できます。 入手先 ステータス管理テーブル、またはVBAKやVBAPテーブル内のステータス項目から判断します。リリースステータスの変更や出荷ブロック(VBAP-LIFSP)の解除が、承認を示す場合があります。 記録 返品受注のヘッダーまたは明細のステータス項目が変更され、リリースまたは承認を示したことから判断します。 イベントタイプ inferred | |||
| 返品納品の作成 | 返品商品の物理的な受領を管理するため、入荷納品伝票が作成されたことを示すアクティビティです。返品受注を参照する納品伝票の作成イベントとして、システムに明示的に記録されます。 | ||
| 重要な理由 物流上の重要な節目です。返品の承認から納品伝票の作成までの時間を見ると、返品情報を倉庫や受入部門に伝える業務の効率を把握できます。 入手先 テーブルLIKPで納品ヘッダーが作成された際に記録されます。伝票フローテーブルVBFAを通じて、先行する返品受注と関連付けられます。 記録 新しい返品納品伝票を保存するとイベントが記録されます(例:トランザクションVL01Nを使用)。 イベントタイプ explicit | |||
データ抽出ガイド
ステップ
- 前提条件の確認:抽出を実行するユーザーアカウントに、必要なCore Data Services(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文の結果を結合し、指定したすべてのアクティビティを1つのデータセットにまとめます。
- クエリの仕組みを確認:
UNION ALL構造の各SELECTブロックが、特定のアクティビティを1つ抽出します。複数の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システムのリソースを多く消費する場合があります。影響を抑えるため、業務の繁忙時間帯を避けて抽出をスケジュールしてください。データセットが非常に大きい場合は、増分読み込みも検討してください。
クエリの例 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' ステップ
- 関連する販売、納品、請求、品目伝票、検査、ステータス、会計データを含むSAP HANAスキーマへの直接読み取りアクセスが可能であることを確認します。スキーマ、ビュー、フィールド名はSAP S/4HANAの導入環境によって異なるため、角括弧で囲まれた各プレースホルダーを、システムで設定されているオブジェクトとフィールドに置き換えてください。
- [Start date]、[End date]、[Company Code filter]、[Return document type filter]を使って抽出範囲を定義します。初回の抽出は直近3~6か月分を対象とし、処理性能とデータの網羅性を確認してから期間を延長してください。
- [Your sales document header table]と[Your sales document item table]から返品受注の対象データを特定します。[Your return order document type configuration]で設定されている返品受注の伝票タイプに絞り込みます。後続伝票との主な紐付けに使うため、返品受注番号と明細番号を保持してください。
- [Your document flow table or view]を使って、返品受注から返品入庫納品、クレジットメモ依頼、交換受注、クレジットメモまでの伝票フローを特定します。伝票フローがVBAKまたはVBAPに保存されているとは限りません。システムで使用されている伝票フローモデルに合わせて、関連フィールドを設定してください。
- 該当する伝票ヘッダーと明細レコードから、明示的な作成イベントを抽出します。承認、却下、検査、完了、入庫、会計、消込の各イベントは、設定済みのステータス、検査、品目伝票、会計、消込のデータソースから抽出します。ProcessMindはイベントを推測しないため、各アクティビティを個別のイベント行として出力してください。
- タイムスタンプを一貫したデータベースのタイムスタンプ型とタイムゾーンに統一します。各アクティビティに設定されたイベント時刻の優先順位に従ってください。日付と時刻しかない場合は、[Your system time zone]で設定されたシステムのタイムゾーンを使って結合します。
- すべてのイベントに
ReturnCaseIdを設定します。元の返品受注番号を使用するか、Advanced Returns Managementで別のケースキーが保存されている場合は、設定済みの返品ケース識別子を使用します。返品ケースに紐付けられないイベントは除外するか、修正用の例外出力に分けてください。 - 必須列の
ReturnCaseId、ActivityName、EventTime、SourceSystemId、LastDataUpdateTimestampを設定します。利用可能な場合は、EventEndTime、UserName、ReturnReason、RefundAmount、ProductId、CustomerIdなどの推奨列も設定します。アクティビティの発生ごとに1行を保持し、複数のアクティビティを1つのケース行に集約しないでください。 - validationStepsに記載されたチェックを使って結果を検証します。12種類すべてのアクティビティ名が含まれていること、各ケース内のタイムスタンプが妥当な順序になっていること、伝票参照がソーステーブルと一致することを確認してください。
- 結果をUTF-8のCSV、またはProcessMindが対応する別の表形式でエクスポートします。列名を正確に保持し、ヘッダー行は1行にします。タイムスタンプには曖昧さのないISO形式を使用し、
ReturnCaseIdをケース識別子、ActivityNameをアクティビティ列として設定してイベントログをアップロードしてください。
設定
- 期間:まずは3~6か月分を対象にします。[Start date]と[End date]のパラメーターを使い、選択期間より前に開始し、期間内に完了したケースも含められるだけの履歴を取得してください。
- 返品対象データ:[Your return order document type configuration]で設定されている返品受注の伝票タイプで絞り込みます。対象システムで確認しないまま、伝票タイプを固定値にしないでください。
- 組織フィルター:必要な場合に限り、[Company Code filter]、販売組織、流通チャネル、部門、プラント、顧客のフィルターを適用します。会社間取引や企業間の後続伝票が除外されないことを確認してください。
- ソースオブジェクト:[Your table name]と[Your view name]のプレースホルダーを、承認済みのSAP S/4HANAテーブルまたはCDSビューに置き換えます。導入環境によってはVBAK、VBAP、VBRK、VBRPを利用できますが、実行前に使用可否と拡張内容を確認してください。
- タイムスタンプの処理:各アクティビティのソースタイムスタンプフィールドとタイムゾーンを設定します。
EventTimeとEventEndTimeは、UTCまたは合意済みのProcessMindタイムゾーンを使って一貫した形式で保存してください。 - ステータスの解釈:承認、却下、検査完了、ケース完了を表すステータス値、理由コード、検査結果、完了インジケーターをシステムに合わせて正確に設定します。
- ソースシステム識別子:[Source system identifier]を、抽出プラットフォームで使用するSAPシステム識別子など、変わらない値に置き換えます。
- 更新時刻:[Extraction timestamp]を、クエリの実行開始時刻またはソースのスナップショット作成時刻に置き換えます。行ごとに異なる更新時刻が必要な場合を除き、1回の抽出ではすべての行に同じ値を使用してください。
- 処理性能:大規模な伝票フロー、会計、品目伝票、ステータスのデータソースを結合する前に、初回の返品対象データを絞り込みます。インデックスまたはパーティションの絞り込みに使えるフィールドを使用し、無制限の全件スキャンは避けてください。中間結果の実体化は、データベース管理者の承認を得た場合に限ります。
- 増分抽出:定期実行では、[Last successful extraction timestamp]と管理された重複期間を使い、遅れて反映された更新も取得します。
ReturnCaseId、ActivityName、ソース伝票キー、EventTimeを使って重複を排除してください。 - 権限と前提条件:設定済みのすべてのソースオブジェクトとフィールドへの読み取り権限、データベースへの直接アクセスの承認、該当する場合は必要なSAPコンポーネントとAdvanced Returns Management機能が有効であることの確認を得てください。
- データ保護:顧客情報と財務情報の項目は必要最小限に絞り、組織のプライバシー管理に従って、エクスポートしたファイルを安全に保管してください。
クエリの例 sql
WITH
parameters AS (
SELECT
CAST('[Start date]' AS TIMESTAMP) AS start_ts,
CAST('[End date]' AS TIMESTAMP) AS end_ts,
CAST('[Extraction timestamp]' AS TIMESTAMP) AS extraction_ts,
CAST('[Source system identifier]' AS NVARCHAR(100)) AS source_system_id
FROM DUMMY
),
return_orders AS (
SELECT
h.[Return order number] AS return_case_id,
i.[Return order item number] AS return_item_id,
h.[Return order creation timestamp] AS return_created_ts,
h.[Return order creator] AS return_creator,
h.[Customer number] AS customer_id,
i.[Product number] AS product_id,
i.[Return reason] AS return_reason,
i.[Return order quantity] AS return_quantity,
h.[Company code] AS company_code,
h.[Return order document type] AS return_document_type
FROM [Your sales document header table] h
INNER JOIN [Your sales document item table] i
ON h.[Sales document number] = i.[Sales document number]
CROSS JOIN parameters p
WHERE h.[Return order creation timestamp] >= p.start_ts
AND h.[Return order creation timestamp] < p.end_ts
AND h.[Return order document type] IN ([Your return order document type filter])
AND h.[Company code] IN ([Company Code filter])
),
document_flow AS (
SELECT
ro.return_case_id,
ro.return_item_id,
f.[Preceding document number] AS preceding_document_id,
f.[Preceding item number] AS preceding_item_id,
f.[Subsequent document number] AS subsequent_document_id,
f.[Subsequent item number] AS subsequent_item_id,
f.[Subsequent document category] AS subsequent_document_category,
f.[Document flow creation timestamp] AS flow_created_ts
FROM return_orders ro
LEFT JOIN [Your document flow table or view] f
ON f.[Preceding document number] = ro.return_case_id
AND f.[Preceding item number] = ro.return_item_id
),
return_delivery AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS delivery_id,
df.subsequent_item_id AS delivery_item_id,
d.[Delivery creation timestamp] AS delivery_created_ts,
d.[Delivery creator] AS delivery_creator,
d.[Delivery completion timestamp] AS delivery_completed_ts
FROM document_flow df
INNER JOIN [Your delivery header table] d
ON d.[Delivery number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Inbound delivery document category]'
),
credit_memo_requests AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS credit_memo_request_id,
df.subsequent_item_id AS credit_memo_request_item_id,
c.[Credit memo request creation timestamp] AS request_created_ts,
c.[Credit memo request creator] AS request_creator
FROM document_flow df
INNER JOIN [Your credit memo request header table] c
ON c.[Credit memo request number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Credit memo request document category]'
),
exchange_orders AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS exchange_order_id,
df.subsequent_item_id AS exchange_order_item_id,
e.[Exchange order creation timestamp] AS exchange_created_ts,
e.[Exchange order creator] AS exchange_creator
FROM document_flow df
INNER JOIN [Your exchange order header table] e
ON e.[Exchange order number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Exchange order document category]'
),
credit_memos AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS credit_memo_id,
df.subsequent_item_id AS credit_memo_item_id,
b.[Credit memo creation timestamp] AS credit_memo_created_ts,
b.[Credit memo creator] AS credit_memo_creator,
b.[Credit memo amount] AS refund_amount,
b.[Accounting document number] AS accounting_document_id,
b.[Company code] AS billing_company_code
FROM document_flow df
INNER JOIN [Your billing document header table] b
ON b.[Billing document number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Credit memo document category]'
),
approval_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
s.[Approval timestamp] AS event_ts,
s.[Approval user] AS user_name
FROM return_orders ro
INNER JOIN [Your return status table or view] s
ON s.[Return order number] = ro.return_case_id
AND s.[Return order item number] = ro.return_item_id
WHERE s.[Status code] IN ([Your approved or released status values])
),
inspection_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
q.[Inspection completion timestamp] AS event_ts,
q.[Inspection user] AS user_name
FROM return_orders ro
INNER JOIN [Your return inspection table or view] q
ON q.[Return order number] = ro.return_case_id
AND q.[Return order item number] = ro.return_item_id
WHERE q.[Inspection status] IN ([Your completed inspection status values])
),
rejection_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
q.[Rejection timestamp] AS event_ts,
q.[Rejection user] AS user_name
FROM return_orders ro
INNER JOIN [Your return inspection table or view] q
ON q.[Return order number] = ro.return_case_id
AND q.[Return order item number] = ro.return_item_id
WHERE q.[Inspection outcome or rejection code] IN ([Your rejection reason values])
),
goods_receipt_events AS (
SELECT
rd.return_case_id,
rd.return_item_id,
m.[Goods receipt posting timestamp] AS event_ts,
m.[Goods receipt posting user] AS user_name
FROM return_delivery rd
INNER JOIN [Your material document header table] m
ON m.[Reference delivery number] = rd.delivery_id
INNER JOIN [Your material document item table] mi
ON mi.[Material document number] = m.[Material document number]
AND mi.[Material document item number] = [Your material document item linkage]
WHERE m.[Goods movement type] IN ([Your goods receipt movement type values])
),
accounting_events AS (
SELECT
cm.return_case_id,
cm.return_item_id,
a.[Accounting posting timestamp] AS event_ts,
a.[Accounting user] AS user_name
FROM credit_memos cm
INNER JOIN [Your accounting document header table] a
ON a.[Accounting document number] = cm.accounting_document_id
AND a.[Company code] = cm.billing_company_code
WHERE a.[Accounting document status] IN ([Your posted accounting status values])
),
refund_events AS (
SELECT
cm.return_case_id,
cm.return_item_id,
cl.[Clearing timestamp] AS event_ts,
cl.[Clearing user] AS user_name
FROM credit_memos cm
INNER JOIN [Your customer clearing table or view] cl
ON cl.[Cleared accounting document number] = cm.accounting_document_id
WHERE cl.[Clearing status] IN ([Your completed clearing status values])
),
closure_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
s.[Closure timestamp] AS event_ts,
s.[Closure user] AS user_name
FROM return_orders ro
INNER JOIN [Your return status table or view] s
ON s.[Return order number] = ro.return_case_id
AND s.[Return order item number] = ro.return_item_id
WHERE s.[Status code] IN ([Your final closed status values])
),
events AS (
SELECT ro.return_case_id, ro.return_item_id, 'Return Request Initiated' AS activity_name, ro.return_created_ts AS event_time, CAST(NULL AS TIMESTAMP) AS event_end_time, ro.return_creator AS user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)) AS refund_amount, ro.product_id, ro.customer_id FROM return_orders ro
UNION ALL
SELECT ae.return_case_id, ae.return_item_id, 'Return Order Approved', ae.event_ts, CAST(NULL AS TIMESTAMP), ae.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM approval_events ae INNER JOIN return_orders ro ON ro.return_case_id = ae.return_case_id AND ro.return_item_id = ae.return_item_id
UNION ALL
SELECT rd.return_case_id, rd.return_item_id, 'Return Delivery Created', rd.delivery_created_ts, rd.delivery_completed_ts, rd.delivery_creator, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM return_delivery rd INNER JOIN return_orders ro ON ro.return_case_id = rd.return_case_id AND ro.return_item_id = rd.return_item_id
UNION ALL
SELECT gr.return_case_id, gr.return_item_id, 'Goods Received at Warehouse', gr.event_ts, CAST(NULL AS TIMESTAMP), gr.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM goods_receipt_events gr INNER JOIN return_orders ro ON ro.return_case_id = gr.return_case_id AND ro.return_item_id = gr.return_item_id
UNION ALL
SELECT ie.return_case_id, ie.return_item_id, 'Item Inspection Completed', ie.event_ts, CAST(NULL AS TIMESTAMP), ie.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM inspection_events ie INNER JOIN return_orders ro ON ro.return_case_id = ie.return_case_id AND ro.return_item_id = ie.return_item_id
UNION ALL
SELECT re.return_case_id, re.return_item_id, 'Return Rejected', re.event_ts, CAST(NULL AS TIMESTAMP), re.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM rejection_events re INNER JOIN return_orders ro ON ro.return_case_id = re.return_case_id AND ro.return_item_id = re.return_item_id
UNION ALL
SELECT cr.return_case_id, cr.return_item_id, 'Credit Memo Request Created', cr.request_created_ts, CAST(NULL AS TIMESTAMP), cr.request_creator, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM credit_memo_requests cr INNER JOIN return_orders ro ON ro.return_case_id = cr.return_case_id AND ro.return_item_id = cr.return_item_id
UNION ALL
SELECT eo.return_case_id, eo.return_item_id, 'Exchange Order Created', eo.exchange_created_ts, CAST(NULL AS TIMESTAMP), eo.exchange_creator, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM exchange_orders eo INNER JOIN return_orders ro ON ro.return_case_id = eo.return_case_id AND ro.return_item_id = eo.return_item_id
UNION ALL
SELECT cm.return_case_id, cm.return_item_id, 'Credit Memo Created', cm.credit_memo_created_ts, CAST(NULL AS TIMESTAMP), cm.credit_memo_creator, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM credit_memos cm INNER JOIN return_orders ro ON ro.return_case_id = cm.return_case_id AND ro.return_item_id = cm.return_item_id
UNION ALL
SELECT ac.return_case_id, ac.return_item_id, 'Accounting Document Created', ac.event_ts, CAST(NULL AS TIMESTAMP), ac.user_name, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM accounting_events ac INNER JOIN return_orders ro ON ro.return_case_id = ac.return_case_id AND ro.return_item_id = ac.return_item_id LEFT JOIN credit_memos cm ON cm.return_case_id = ac.return_case_id AND cm.return_item_id = ac.return_item_id
UNION ALL
SELECT rf.return_case_id, rf.return_item_id, 'Refund Processed', rf.event_ts, CAST(NULL AS TIMESTAMP), rf.user_name, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM refund_events rf INNER JOIN return_orders ro ON ro.return_case_id = rf.return_case_id AND ro.return_item_id = rf.return_item_id LEFT JOIN credit_memos cm ON cm.return_case_id = rf.return_case_id AND cm.return_item_id = rf.return_item_id
UNION ALL
SELECT ce.return_case_id, ce.return_item_id, 'Return Case Closed', ce.event_ts, CAST(NULL AS TIMESTAMP), ce.user_name, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM closure_events ce INNER JOIN return_orders ro ON ro.return_case_id = ce.return_case_id AND ro.return_item_id = ce.return_item_id LEFT JOIN credit_memos cm ON cm.return_case_id = ce.return_case_id AND cm.return_item_id = ce.return_item_id
)
SELECT
e.return_case_id AS "ReturnCaseId",
e.activity_name AS "ActivityName",
e.event_time AS "EventTime",
e.event_end_time AS "EventEndTime",
e.user_name AS "UserName",
e.return_reason AS "ReturnReason",
e.refund_amount AS "RefundAmount",
e.product_id AS "ProductId",
e.customer_id AS "CustomerId",
p.source_system_id AS "SourceSystemId",
p.extraction_ts AS "LastDataUpdateTimestamp"
FROM events e
CROSS JOIN parameters p
WHERE e.event_time IS NOT NULL
ORDER BY e.return_case_id, e.event_time, e.activity_name; 準備はできましたか?
このテンプレートを使うと、返品・返金処理のデータを抽出して分析するための基本を確認できます。今日からプロセスエクセレンスへの取り組みを始めましょう。
SAP S/4HANAの返品・返金処理を今すぐ改善
非効率な箇所を特定し、サイクルタイムを30%短縮して、顧客満足度を高めます。
クレジットカードは不要です。今日から改善に取り組めます。