返品・返金処理データテンプレート
返品・返金処理データテンプレート
- 収集を推奨する項目
- 追跡すべき主要アクティビティ
- 抽出の手引き
返品・返金処理属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 ActivityName | 返品プロセス内で発生した特定のビジネスイベントまたはステップの名前です。 | ||
| 説明 この属性は、返品ライフサイクルにおける「返品オーダー作成済み」、「商品受領転記済み」、「クレジットメモ作成済み」といった単一の明確なアクションまたはステータス変更を記述します。これらのアクティビティは、プロセスマップの構成要素となります。 これらのアクティビティの順序と頻度を分析することは、最も一般的なプロセスパス、逸脱、および手戻りループを特定するのに役立ちます。ケース内で何がどのような順序で発生するかを理解するために不可欠であり、すべてのプロセスマイニング分析の基礎を形成します。 その重要性 アクティビティはプロセスのステップを定義します。その順序、期間、頻度を分析することは、プロセスマイニングの核であり、作業が実際にどのように行われているかを明らかにします。 取得元 VBUK/VBUPのようなテーブルのステータス変更、伝票作成イベント(VBAK、LIKP、VBRKなど)、またはCDHDR/CDPOSテーブルの変更ログから派生します。 例 返品オーダー作成済み入庫記帳済みクレジットメモ作成返品オーダーアイテム完了 | |||
| イベント日時 EventTime | アクティビティが発生した正確な日時。 | ||
| 説明 このタイムスタンプは、ビジネスイベントが発生した正確な瞬間を示します。プロセス内のすべてのアクティビティについて記録され、ケース内のイベントの時系列順序を提供します。 イベント時刻は、アクティビティ間のサイクルタイムの計算、待機時間のボトルネックの特定、ケース全体の期間の測定など、すべての時間ベースの分析にとって重要です。これにより、パフォーマンス分析およびサービスレベル契約(SLA)に対するコンプライアンスチェックが可能になります。 その重要性 このタイムスタンプは、すべての期間の計算、プロセスパフォーマンスの分析、ボトルネックの特定、および各返品ケースのタイムラインの理解に不可欠です。 取得元 SAPテーブル全体の様々な日付および時刻フィールドから取得されます。作成イベントの場合は、VBAKなどのERDATおよびERZETフィールドであることが多く、変更イベントの場合は、CDHDRテーブルのUDATEおよびUTIMEです。 例 2023-04-15T10:22:05Z2023-04-16T14:01:30Z2023-04-18T09:15:00Z | |||
| 返品ケースID ReturnCaseId | 顧客の返品リクエストに対する一意の識別子であり、すべての関連アクティビティとドキュメントをリンクします。 | ||
| 説明 返品ケースIDは、返品プロセスの開始から完了までのライフサイクル全体を追跡するための主キーとして機能します。各IDは、オーダー作成、配送、検査、クレジットメモ処理など、関連するすべてのイベントを含む特定の顧客返品に対応します。 プロセス分析において、この属性はプロセスマップを構築するための基本的な要素です。これにより、システムは個々のイベントをエンドツーエンドのケースジャーニーにグループ化でき、各返品インスタンスのプロセスバリアント、サイクルタイム、ボトルネックの分析を可能にします。 その重要性 これは、返品ジャーニーのすべてのステップを接続する不可欠なケース識別子であり、エンドツーエンドのプロセスフローとパフォーマンスの分析を可能にします。 取得元 これは通常、販売および流通(SD)モジュールからの返品オーダー番号です。VBAKテーブル(販売伝票ヘッダデータ)のVBELNフィールドで見つかり、伝票カテゴリ(VBAK-VBTYP)は返品を表す「H」です。 例 600001236000045660000789 | |||
| ソースシステム SourceSystem | データを抽出した元システム。 | ||
| 説明 この属性はデータの出所を識別し、複数のシステムが存在する環境において不可欠です。データのコンテキストを提供し、リネージと整合性を確保するのに役立ちます。 分析では、異なるソースシステムからのプロセスを結合する際にデータをセグメント化またはフィルタリングするために使用されます。これにより、イベントが予期されるアプリケーション(この場合はSAP ECC)から来ていることを確認できます。 その重要性 データの発生源を特定します。これはデータガバナンスや複数のエンタープライズシステムにまたがる分析にとって重要です。 取得元 これは、データ抽出時に定義される静的な値で、特定のSAP ECCインスタンス(例:「ECC_PROD_100」)を識別するために使用されます。 例 SAP_ECC_PRODSAPECC_FINANCE_200 | |||
| 最終データ更新 LastDataUpdate | このプロセスのデータが最後に更新された日時を示すタイムスタンプ。 | ||
| 説明 この属性は、最新のデータ抽出または更新の日時を記録します。これにより、分析対象データの鮮度に対する透明性を提供します。 分析では、これは洞察のタイムリーさを理解するために重要です。ユーザーはデータがどの程度最新であるかを確認でき、これはあらゆる発見の関連性に影響を与え、特に継続的な運用を監視する上で重要となります。 その重要性 データの鮮度を示し、ユーザーがプロセス分析の現在の状況と次回の更新時期を理解できるようにします。 取得元 これは、データ抽出ジョブの実行タイムスタンプが入力されるメタデータ属性です。 例 2023-05-20T02:00:00Z2023-05-21T02:00:00Z | |||
| `品目コード` MaterialNumber | 返品されている製品の一意の識別子です。 | ||
| 説明 品目番号またはSKUは、返品に関わる正確なアイテムを特定します。これにより、製品レベルでの詳細な分析が可能になります。 品目番号別に返品を分析することで、企業は返品率の高い製品を特定でき、これは品質問題、不正確な説明、または製造上の欠陥を示している可能性があります。「返品の在庫への影響」のようなダッシュボードや、異なる製品が返品プロセスをどのように経るかを理解するために不可欠です。 その重要性 どの製品が返品されているかを特定し、潜在的な品質管理上の問題や不正確な製品説明を強調表示します。 取得元 販売伝票明細テーブルVBAPのフィールドMATNRにあります。 例 RM-1025FG-2050-BACC-5591 | |||
| 処理担当者 ProcessingAgent | アクティビティを実行した従業員のユーザーIDです。 | ||
| 説明 この属性は、返品オーダーの作成や商品受領の転記など、特定のプロセスステップを実行した担当者のユーザー名を捕捉します。これは、「変更者」または「作成者」ユーザーとして参照されることがよくあります。 処理担当者別に分析することは、パフォーマンス管理とリソース分析にとって重要です。これにより、優秀な担当者、追加トレーニングが必要な担当者、およびチーム全体でのワークロード分散を特定するのに役立ちます。「担当者返品処理パフォーマンス」のようなダッシュボードで使用され、サイクルタイムとスループットを比較するために利用されます。 その重要性 ユーザーの関与を追跡し、チームのパフォーマンス、ワークロード分散、トレーニングニーズまたはベストプラクティスの特定を可能にします。 取得元 通常、VBAK、LIKP、VBRKなどのヘッダテーブルのERNAM(作成者)やAENAM(変更者)のようなフィールドで見つかります。変更イベントの場合、CDHDRのUSERNAMEです。 例 CBURNSDSCRANTON`JHALPERT` | |||
| 実際の返金額 ActualRefundAmount | 財務伝票に転記された、顧客に最終的に入金された金額です。 | ||
| 説明 この属性は、会計システムで処理され転記された最終的な確定返金額です。この金額は、返品手数料、アイテムの状態に基づく調整、またはその他のポリシー適用により、要求された金額と異なる場合があります。 これは「返金額不一致追跡」ダッシュボードにとって重要な属性です。これを要求された金額と比較することで、返金計算および承認プロセスにおけるシステム的な問題を特定し、財務の正確性を確保するのに役立ちます。 その重要性 返品の最終的な財務結果を表します。要求された金額と比較することで、正確性を確保し、財務上の漏れを特定するのに役立ちます。 取得元 クレジットメモに関連付けられた財務伝票から取得されます。通常、該当するG/L勘定の転記について、BSEG(会計伝票セグメント)テーブルのWRBTR(伝票通貨での金額)フィールドで確認できます。 例 150.0045.001200.75 | |||
| 要求された返金額 RequestedRefundAmount | 返金の期待値であり、通常、返品されたアイテムの正味額に基づいて計算されます。 | ||
| 説明 この属性は、返品オーダーで捕捉された返品の初期金額を表します。これは財務分析と照合のベースラインとして機能します。 この金額は「実際の返金額」と比較され、不一致を追跡します。これは「返金額不一致追跡」ダッシュボードの主要な指標です。この値を分析することは、返品の財務的影響を監視し、価格設定またはクレジット計算における潜在的な問題を特定するのに役立ちます。 その重要性 返品の初期財務価値を確立します。これは、財務上の不一致を追跡し、返品された商品の総価値を理解するために重要です。 取得元 この値は通常、返品オーダー明細レベルの正味額です。VBAPテーブルのフィールドNETWRで確認できます。 例 150.0049.991250.75 | |||
| 返品チャネル ReturnChannel | 返品が開始されたチャネル(オンライン、店舗、コールセンターなど)です。 | ||
| 説明 この属性は、返品リクエストの発生源または受付方法を指定します。これにより、ウェブポータル、実店舗、またはカスタマーサービス担当者を介して開始された返品を区別するのに役立ちます。 返品チャネル別にプロセスをセグメント化することは、運用上の違いとリソース配分を理解するために不可欠です。例えば、店舗での返品は検査時間が速いかもしれませんが、オンライン返品と比較して文書化の手順が異なる場合があります。これは「返品プロセススループットトレンド」ダッシュボードの重要なディメンションです。 その重要性 返品がどのように開始されるかを区別し、異なるチャネルでのプロセスフロー、リソースの必要性、サイクルタイムにしばしば影響を与えます。 取得元 これはSAP ECCの標準フィールドではないことが多く、カスタムフィールド(例:VBAK内)から取得するか、販売組織(VKORG)や流通チャネル(VTWEG)などの他のデータから推測する必要がある場合があります。特定の実装についてはSAP ECCのドキュメントを参照してください。 例 オンラインポータル店舗コールセンター | |||
| 返品理由 ReturnReason | 顧客がアイテムを返品するために提供した理由コードです。 | ||
| 説明 この属性は、SAPで定義された理由コードを使用して、製品が返品された理由を示します。例としては、「輸送中の破損」、「誤った商品が発送された」、「合わない」などがあります。 これは根本原因分析にとって重要な側面です。返品理由によってプロセスマップやKPIをフィルタリングすることで、特定の理由が処理時間の延長、検査不合格率の高さ、または特定のプロセス逸脱に関連しているかを分析者が特定できます。この洞察は、製品品質、ロジスティクス、または販売プロセスの改善を促進することができます。 その重要性 返品が発生する理由を説明し、製品の品質、配送、説明に関する問題に対処することで返品率を削減するための根本原因分析を可能にします。 取得元 販売伝票明細テーブルVBAPのフィールドABGRU(販売伝票却下理由)にあります。 例 001 - 破損品002 - 誤品005 - 到着遅延 | |||
| SLA準拠 IsSLACompliant | 返金が合意されたサービスレベル契約(SLA)内で処理されたかどうかを示すフラグです。 | ||
| 説明 これは、「返金処理済み」アクティビティの実際の日付と「返金SLA目標期日」を比較する計算されたブール属性です。返金が期限内に完了した場合にTrue、そうでない場合にFalseとなります。 この属性は、各ケースのSLAパフォーマンスについて明確な二値の結果を提供することで、分析とレポート作成を簡素化します。全体的な「返金処理SLAコンプライアンス」率を計算するために使用され、コンプライアンス違反のケースを分離し分析するための簡単なフィルタリングを可能にします。 その重要性 各ケースのSLAパフォーマンスを明確な二値指標で提供し、コンプライアンスのモニタリングとレポート作成を簡素化します。 取得元 これは計算属性です。ロジックは「返金処理済み」のイベント時刻 <= RefundSLATargetDateです。 例 truefalse | |||
| エンドツーエンドサイクルタイム EndToEndCycleTime | 返品ケースの最初のアクティビティから最後のアクティビティまでの合計経過時間です。 | ||
| 説明 これは、最初のイベント(例:「返品オーダー作成済み」)と最終イベント(例:「返品オーダー完了」または「クレジットメモ消込済み」)間の期間として計算されるケースレベルのメトリックです。返品がプロセス内で費やす合計時間を表します。 これは、全体的なプロセス効率の主要な重要業績評価指標です。傾向分析やベンチマーキングで時間の経過に伴う改善を追跡するために使用されます。このメトリックの分布を分析することで、製品タイプや返品理由など、解決時間の長短と相関する要因を特定するのに役立ちます。 その重要性 返品プロセスの合計期間を測定し、プロセス全体の効率と顧客体験の主要な指標を提供します。 取得元 これは計算メトリックです。ケース内の最後のアクティビティのタイムスタンプから最初のアクティビティのタイムスタンプを引いたものです。 例 5日4時間12日8時間3日2時間 | |||
| クレジットメモ番号 CreditMemoNumber | 返金のために発行されたクレジットメモ伝票の一意の識別子です。 | ||
| 説明 クレジットメモは、顧客へ支払う返金を正式化するSAPの公式請求伝票です。この番号は、その財務伝票を一意に識別します。 この属性は、財務照合、および運用上の返品から財務決済までのプロセスを追跡するために不可欠です。プロセスの重要なマイルストーンとして機能し、「実際の返金額」などの属性に関連する会計伝票を見つけるために使用されます。 その重要性 顧客への返金を承認する財務文書への直接リンクを提供します。これは財務監査および照合に不可欠です。 取得元 クレジットメモは請求伝票です。その番号はVBRKテーブル(請求伝票:ヘッダデータ)のVBELNフィールドにあります。リンクは返品オーダーの伝票フローを介して見つかります。 例 900011229000334490005566 | |||
| 会社コード CompanyCode | 取引に責任を持つ法人または会社です。 | ||
| 説明 会社コードは、SAPにおける独立した会計単位を表します。返品や返金を含むすべての財務取引は、特定の会社コードに転記されます。 この属性は、多国籍企業や複数事業体組織における財務報告、およびプロセスをセグメント化する上で不可欠です。会社コード別に分析することで、企業内の異なる法人間の返品プロセスパフォーマンスを比較できます。 その重要性 組織内の異なる法人間で返品プロセスをフィルタリングおよび比較することを可能にし、これは財務分析にとって重要です。 取得元 販売伝票ヘッダーテーブルVBAKのフィールドBUKRS_VF(請求のための会社コード)にあります。 例 10002000US01 | |||
| 元の販売伝票 OriginalSalesDocument | 返品の対象となる元の販売オーダーの番号です。 | ||
| 説明 この属性は、最初の顧客購入への直接リンクを提供します。これは、返品を元の取引詳細に接続する参照伝票です。 このリンクを持つことは、より深い分析にとって非常に価値があります。分析者は、特定のオーダーからの売上が返品される理由を調査し、元の価格設定と条件を確認し、完全な顧客のオーダーから返品までのライフサイクルを理解することができます。また、特定のキャンペーンやチャネルを通じて販売された製品がより高い返品率を持つかどうかについての質問に答えるのにも役立ちます。 その重要性 返品を元の販売にリンクさせ、顧客取引の全サイクルビューとより深い根本原因分析を可能にします。 取得元 この参照は返品オーダーの明細レベルに保存されます。VBAPテーブルのフィールドVGBEL(参照伝票番号)で確認できます。 例 100034561000987110012345 | |||
| 工場 Plant | 返品されたアイテムが受け取られ、処理される物理的な場所または施設です。 | ||
| 説明 SAPにおけるプラントは、倉庫や流通センターなど、商品が取り扱われる物理的な場所を表します。返品の場合、これは通常、アイテムが受け取られ、検査される場所となります。 プラント別にプロセスを分析することで、異なる施設間のパフォーマンスのばらつきを特定できます。これにより、どの倉庫がアイテム検査においてより効率的か、またはより高いスループットを達成しているかを明確にし、「アイテム検査のスループットと効率」ダッシュボードをサポートします。 その重要性 返品を処理している物理的な場所を特定し、異なる倉庫や流通センター間でのパフォーマンス比較を可能にします。 取得元 返品オーダーの明細レベル、テーブルVBAP、フィールドWERKSにあります。 例 PL01WH02DC05 | |||
| 返品オーダー状況 ReturnOrderStatus | 返品オーダーケースの全体的な処理ステータスです。 | ||
| 説明 この属性は、「オープン」、「処理中」、「完了」など、返品ケースの現在の状態のスナップショットを提供します。これは、販売伝票のヘッダまたは明細レベルのステータスの組み合わせから導出されます。 分析では、この属性はアクティブまたは完了した返品に焦点を当てるためにケースをフィルタリングするのに役立ちます。オープンケースの全体的なワークロードと進捗状況を監視するのに役立ち、各返品ジャーニーの大まかな結果を提供します。 その重要性 ケースがライフサイクルのどの段階にあるかを大まかに把握でき、オープン、進行中、完了済みの返品ケースのフィルタリングと分析を可能にします。 取得元 テーブルVBUK(ヘッダー・ステータス)およびVBUP(明細ステータス)のステータスフィールドから派生します。例えば、VBUK-GBSTKは伝票の全体処理ステータスです。 例 オープン処理中完了済み | |||
| 返品ポリシー順守 ReturnPolicyAdherence | 返品が定義されたすべてのビジネスルールおよびポリシーに準拠しているかを示すフラグです。 | ||
| 説明 この計算されたブール属性は、返品ケースが標準の規定された会社ポリシーに従ったかどうかを示します。ロジックには、返品が許容期間内に開始されたか、理由コードが製品に対して有効か、または例外に対するマネージャー承認が得られたかなど、複数の条件のチェックが含まれる場合があります。 この属性は「返品承認ポリシーコンプライアンス」ダッシュボードの基盤となります。これにより、コンプライアンス率の直接的な測定が可能になり、最も頻繁に迂回されるポリシーを特定するのに役立ち、ターゲットを絞ったプロセス改善やトレーニングを可能にします。 その重要性 ビジネスルールに対するコンプライアンスを測定し、ポリシーの一貫した適用を支援し、特別なレビューまたは承認が必要なケースを特定します。 取得元 これは一連のビジネスルールに基づいて導出された属性です。例えば、「(返品開始日 - 元の購入日)<= 30日 AND ReturnReason IS NOT NULL」などです。 例 truefalse | |||
| 返金SLA目標期日 RefundSLATargetDate | サービスレベル契約に従って、返金が処理されるべき期日です。 | ||
| 説明 この属性は、特定の返品ケースにおける返金プロセスの完了期限を定義します。通常、「商品受領から5営業日以内」のようなビジネスルールに基づいて計算されます。 この目標期日は、実際のパフォーマンスを測定するためのベンチマークとなります。「返金処理SLAコンプライアンス」ダッシュボードの主要な構成要素であり、企業が顧客への約束の順守状況を監視し、SLA違反のリスクがあるケースを特定することを可能にします。 その重要性 返金処理のパフォーマンス目標を設定することで、企業はSLA遵守状況を測定・報告し、期限超過ケースに優先順位を付けることが可能になります。 取得元 これは通常、標準のSAPフィールドではなく、ビジネスルールに基づいて導出する必要があります。キー日付フィールド(例:MKPFからの商品受領日)に設定された期間を加算して計算することも可能です。SAP ECCのドキュメントまたはビジネス要件を参照してください。 例 2023-04-25T23:59:59Z2023-04-28T23:59:59Z2023-05-02T23:59:59Z | |||
| 返金額の不一致 RefundAmountDiscrepancy | 実際の返金額と要求された返金額との間に計算された差額です。 | ||
| 説明 この計算されたメトリックは、返品オーダーで最初に要求された金額と、クレジットメモで最終的に発行された金額との金銭的な差を定量化します。正の値は一部返金を示唆する可能性があり、負の値は通常ではありませんが、過払いを示唆する可能性があります。 この属性は「返金額不一致追跡」ダッシュボードの主要な指標です。これは、アイテムの状態評価、返品手数料、またはエラーに起因する可能性のある財務上の逸脱があるケースを迅速に特定し分析するのに役立ちます。これを監視することで、財務管理とポリシー順守を確保するのに役立ちます。 その重要性 返金プロセスにおける財務的逸脱を直接測定し、ポリシー不遵守、処理エラー、または財務的漏洩を特定するのに役立ちます。 取得元 計算フィールド: ActualRefundAmount - RequestedRefundAmount. 例 0.00-4.99-50.00 | |||
| 顧客ID CustomerId | 返品を開始した顧客の一意の識別子です。 | ||
| 説明 この属性は、製品を返品する特定の顧客(SAP用語では「得意先」)を識別し、返品トランザクションを顧客マスターデータにリンクします。 顧客ID別に分析することで、返品頻度の高い顧客を特定するのに役立ち、これは顧客の不満や返品ポリシーの悪用を示唆する可能性があります。また、顧客セグメンテーションデータと組み合わせて、特定の顧客グループが異なる返品行動やプロセス経験を持っているかを理解するためにも使用できます。 その重要性 返品を特定の顧客にリンクさせ、顧客行動の分析、リピート返品者の特定、および顧客関係への影響を可能にします。 取得元 販売伝票ヘッダーテーブルVBAKのフィールドKUNNR(得意先コード)にあります。 例 CUST-100432CUST-203991CUST-831102 | |||
返品・返金処理アクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| クレジットメモがFIに転記済み | クレジットメモが財務会計にリリースされ、正式な売掛金転記となります。このステップにより、顧客への実際の返金支払いプロセスがトリガーされます。 | ||
| その重要性 このアクティビティは、企業によって返金が財務的に認識される時点を示します。クレジットメモの作成と転記の間の遅延は、顧客への実際の返金を遅らせる可能性があります。 取得元 これは、請求伝票ヘッダの転記ステータス(VBRK-RFBSK)が「C」(転記伝票が作成された)に更新されたときに識別される推測イベントです。実際の会計伝票作成日はBKPFテーブルにあります。 取得 VBRK-RFBSK が 'C' に設定されたときのタイムスタンプを特定するか、リンクされたBKPF会計伝票の作成日付 (CPUDT) を使用します。 イベントタイプ inferred | |||
| クレジットメモ作成 | 顧客への金融クレジットを承認するために請求伝票(クレジットメモ)が生成されます。これは、返金額を正式化する公式の財務伝票です。 | ||
| その重要性 これはプロセスにおける主要な財務上のマイルストーンです。クレジットメモ作成までの時間を分析することで、商品受領および検査後の財務伝票処理における遅延を特定するのに役立ちます。 取得元 これはVBRKテーブル(請求伝票ヘッダ)に記録された明示的なイベントです。作成日はVBRK-ERDATです。クレジットメモは、伝票フローにおいて返品オーダーまたはクレジットメモ依頼にリンクされています。 取得 関連する請求伝票には、VBRKテーブルから作成タイムスタンプ(ERDAT)を使用します。 イベントタイプ explicit | |||
| 使用決定済み | 検査後、品質エンジニアまたは検査官が返品された商品の状態について正式な決定を下します。この決定が、在庫への返品、廃棄、修理などの後続プロセスを決定します。 | ||
| その重要性 このアクティビティは、検査効率とその結果を理解するために非常に重要です。この決定は、返金額と在庫管理に直接影響を与えます。 取得元 SAP QMが使用されている場合、これはQAVEテーブル(検査処理使用決定)に捕捉される明示的なイベントです。決定時刻はQAVE-VDATUMに保存されます。出荷へのリンクはQALSテーブルにあります。 取得 QAVEテーブルから利用決定日(VDATUM)を使用し、検査ロット(QALS-PRUEFLOS)を介してリンクされます。 イベントタイプ explicit | |||
| 入庫記帳済み | このアクティビティは、返品された現品が倉庫または処理センターで受領されたときに発生します。これは、返品配送に対する在庫移動伝票の転記によって捕捉されます。 | ||
| その重要性 企業が返品された商品を所有したことを示す重要なマイルストーンです。これは物理的な検査の出発点であり、在庫精度に影響を与えます。 取得元 このイベントは、VBUPテーブルにおける返品配送アイテムの在庫移動ステータス(例:WBSTA = 'C')から推測できます。正確なタイムスタンプは、該当する商品受領の品目伝票ヘッダ(MKPF-BUDAT)にあります。 取得 返品出荷にリンクされた品目伝票の転記日付 (BUDAT) をMKPFテーブルから取得します。 イベントタイプ inferred | |||
| 返品オーダー作成済み | このアクティビティは、顧客が製品の返品を要求したときに返品プロセスが開始されることを示します。これは、SAP ECCで「返品」タイプ(例:RE)の新しい販売伝票が作成されたときに捕捉されます。 | ||
| その重要性 これは返品プロセスの主要な開始イベントです。このアクティビティから他のアクティビティまでの時間を分析することで、総サイクルタイムを測定し、初期処理の遅延を特定するのに役立ちます。 取得元 これはVBAKテーブル(販売伝票ヘッダ)に記録された明示的なイベントです。作成タイムスタンプは、オーダータイプVBAK-AUART = 'RE'の該当する販売伝票番号(VBAK-VBELN)に対し、VBAK-ERDATおよびVBAK-ERZETに保存されます。 取得 販売伝票タイプ「RE」には、VBAKテーブルから作成タイムスタンプ(ERDAT, ERZET)を使用します。 イベントタイプ explicit | |||
| 返品オーダー完了 | このアクティビティは、販売および流通の観点からの返品プロセスの終了を示します。これは、返品オーダーのすべての明細アイテムが完全に処理され、完了したときに発生します。 | ||
| その重要性 これはプロセスにとって主要な終了イベントです。「返品オーダー作成済み」からこのアクティビティまでの時間を測定することで、返品ケースのエンドツーエンドのサイクルタイムが得られます。 取得元 これはステータステーブルから推測されるイベントです。販売伝票ヘッダの全体ステータス(VBUK-GBSTK)が「C」(完全処理済み)に更新されたときに捕捉されます。 取得 ヘッダー・ステータス・フィールド VBUK-GBSTK が 'C' に変更されたときのタイムスタンプを、変更伝票 (CDHDR/CDPOS) から特定します。 イベントタイプ inferred | |||
| クレジットメモの消込 | 売掛金における未消込のクレジット明細が消し込まれます(通常、顧客への支払いによって)。このイベントは、返金の最終的な財務決済を示します。 | ||
| その重要性 このアクティビティは、キャッシュアウトイベントを確認し、プロセスの財務面を完了させます。これは、顧客の視点から見た返金ジャーニーの真の終わりです。 取得元 これはFIモジュールからの明示的なイベントです。会計伝票の消込日は、対応する顧客明細のBSEGテーブル(BSEG-AUGDT)に保存されます。 取得 クレジットメモにリンクされた会計伝票には、BSEGまたはBSADテーブルから消込日(AUGDT)を使用します。 イベントタイプ explicit | |||
| クレジットメモ依頼作成済み | 返金の必要性を正式に文書化するためにクレジットメモ依頼が作成されます。多くの設定では、返品オーダー自体がクレジットメモ依頼として機能します。 | ||
| その重要性 これは、返品プロセスの財務決済部分の正式な開始です。その後の財務承認および伝票作成のトリガーを提供します。 取得元 これは、VBAKにおける「クレジットメモ依頼」タイプ(例:CR)の販売伝票の明示的なイベントであるか、オーダータイプがオーダー関連請求として設定されている場合は「返品オーダー作成済み」と同じイベントである可能性があります。 取得 ドキュメントタイプ「CR」にはVBAKから作成タイムスタンプ(ERDAT)を使用するか、返品オーダー作成イベントを再利用します。 イベントタイプ explicit | |||
| 返品オーダーアイテム却下 | 返品オーダー上の特定の明細品目が、初期レビュー中または検査後に却下されます。これは、その品目に対して返金などのさらなる処理が行われないことを意味します。 | ||
| その重要性 却下を分析することで、無効な返品依頼を特定し、顧客ポリシーのコミュニケーションに役立てることができます。これは、返金にはつながらないプロセス内の主要な経路です。 取得元 これは推測イベントです。通常、VBAPテーブル(VBAP-ABGRU)のアイテムに一意の「却下理由」コードが設定されることによって捕捉されます。タイムスタンプは変更ログから取得する必要があります。 取得 返品明細のVBAP-ABGRUフィールドが入力されたときのタイムスタンプを、変更伝票 (CDHDR/CDPOS) から特定します。 イベントタイプ inferred | |||
| 返品オーダーアイテム完了 | 返品オーダー内の個々の明細品目が完全に処理済みとしてマークされます。これは通常、その品目に関するすべての物流および財務の後続伝票が完了した後に発生します。 | ||
| その重要性 明細レベルでの追跡は、どの製品または返品理由が最も長い遅延を引き起こすかを特定するのに役立ちます。これにより、プロセス完了のより詳細なビューが提供されます。 取得元 これはステータステーブルから推測されるイベントです。販売伝票明細の全体ステータス(VBUP-GBSTK)が「C」(完全処理済み)に更新されたときに捕捉されます。 取得 明細ステータス・フィールド VBUP-GBSTK が 'C' に変更されたときのタイムスタンプを、変更伝票 (CDHDR/CDPOS) から特定します。 イベントタイプ inferred | |||
| 返品オーダーブロック解除 | 返品リクエストの承認を表し、次の段階への進行を可能にします。これは通常、伝票ステータスの変更、または出荷や請求のブロック解除によって捕捉されます。 | ||
| その重要性 このアクティビティは重要な承認マイルストーンです。このステップに到達するまでにかかった時間を測定することで、返品承認および承認プロセスにおけるボトルネックを特定するのに役立ちます。 取得元 これは、販売伝票の変更ログから導出される推測イベントです。VBAKまたはVBAPのブロックフィールド、あるいはVBUK/VBUPのステータスフィールドの変更については、CDHDRおよびCDPOSテーブルを確認してください。 取得 関連するブロックステータスが解除されたときのタイムスタンプを、変更伝票テーブル(CDHDR/CDPOS)から特定します。 イベントタイプ inferred | |||
| 返品伝票登録済み | 返品された商品の物理的な受領を管理するために出荷伝票が生成されます。このイベントは、返品の物流プロセスが開始されたことを示します。 | ||
| その重要性 管理処理から物理的なロジスティクスへの移行を追跡します。ここでの遅延は、倉庫計画と全体的な返品サイクルタイムに影響を与える可能性があります。 取得元 これはLIKPテーブル(出荷ヘッダ)に記録された明示的なイベントです。作成タイムスタンプはLIKP-ERDATにあります。元の返品オーダーへのリンクはLIPSテーブル(LIPS-VGBEL)にあります。 取得 返品オーダーに関連付けられた配送には、LIKPテーブルから作成タイムスタンプ(ERDAT)を使用します。 イベントタイプ explicit | |||
抽出ガイド
ステップ
- ABAPプログラムの作成: トランザクションコード
SE38を使用して、新しい実行可能ABAPプログラム(例:Z_PM_RETURN_EXTRACTION)を作成します。記述的なタイトルを付け、ローカルオブジェクトとして、または開発パッケージ内に保存します。 - 選択画面の定義: プログラム内で、ユーザーがデータをフィルタリングできるように選択画面を定義します。主要なフィルターには、返品オーダーの作成日付範囲 (
S_ERDAT)、返品の販売伝票タイプ (S_AUART、例: 'RE')、および会社コード (P_BUKRS) が含まれます。 - データ構造の定義: 必要なイベントログ形式に一致するローカル構造タイプを作成します。この構造には、
ReturnCaseId、ActivityName、EventTime、SourceSystem、LastDataUpdate、ProcessingAgent、ReturnReason、およびその他の必要な属性のフィールドを含める必要があります。 - データ選択ロジックの実装: 12の必須アクティビティそれぞれについてデータを抽出するコアABAPロジックを記述します。これには、VBAK、VBAP、LIKP、VBRK、BKPF、CDHDR、CDPOSなどの様々なSAPテーブルへのクエリが含まれます。伝票フローテーブル (VBFA) を使用して、出荷やクレジットメモなどの関連伝票を元の返品オーダーにリンクします。
- 「返品オーダー作成」の抽出: 選択画面の条件に基づいて、
VBAKおよびVBAPテーブルからレコードを選択します。販売伝票番号 (VBAK-VBELN) がReturnCaseIdとして使用されます。 - ステータス変更と主要イベントの抽出: 「返品オーダーブロック解除」や「返品オーダー明細拒否」などのアクティビティについては、変更伝票テーブル (
CDHDR、CDPOS) やVBAP(ABGRU) などのテーブルのステータスフィールドにクエリを実行します。物流および財務の後続アクティビティについては、LIKP、MKPF、VBRK、BKPFなどのテーブルから選択し、VBFAを使用してそれらが初期の返品オーダーセットにリンクされていることを確認します。 - イベントログテーブルへのデータ投入: 取得された各アクティビティについて、イベントログ構造で定義された内部テーブルに新しいレコードを作成します。ソースSAPテーブルのデータを対応するフィールドにマッピングします。例えば、
VBAK-ERNAMをProcessingAgentに、VBAK-ERDATとVBAK-ERZETをEventTimeにマッピングします。 - アクティビティデータの結合: 各アクティビティのSELECT文が、その結果を単一の主要な内部テーブルに追記することを確認します。これにより、各行が1つのイベントを表す最終的なフラットファイル構造が作成されます。
- タイムスタンプとシステム情報の処理: システムフィールド
SY-DATUMおよびSY-UZEITを使用して、すべての行のLastDataUpdateタイムスタンプを投入します。SY-SYSIDを使用してSourceSystemを投入します。 - 出力機能の実装:
REUSE_ALV_GRID_DISPLAYなどの汎用モジュールを使用して、結果をALVグリッド(SAPリストビューア)に表示し、オンライン分析を行う機能を追加します。最終内部テーブルをCSVまたはフラットテキストファイルとしてユーザーのローカルマシンにダウンロードするオプションを提供します。 - 実行とエクスポート:
SE38を介してプログラムを実行します。目的の選択基準を入力して実行します。データが表示または処理されたら、プログラムのエクスポート機能を使用してイベントログファイルを保存します。ファイルがProcessMindと互換性のある形式(通常はヘッダー行付きのCSV)で保存されていることを確認してください。
設定
- 日付範囲: 選択画面で、返品オーダー作成日の日付範囲を指定します。初期分析では、データ量とプロセスの洞察のバランスを取るために3〜6ヶ月の範囲が推奨されます。
- 返品伝票タイプ: システムで返品に使用される特定の販売伝票タイプ、例えば「返品」には'RE'、「クレジットメモ依頼」には'CR'でフィルタリングします。これは、正しいプロセスを分離するための重要なフィルターです。これらの値を
S_AUART選択オプションに入力してください。 - 会社コード: 関連する会社コード (
P_BUKRS) を指定して、データを特定の法人に限定します。これは複数会社環境では不可欠です。 - 前提条件: プログラムを実行するユーザーは、
SE38(プログラム実行)の権限、および基盤となるSD、MM、FIテーブル(例:VBAK、LIKP、VBRK、BKPF、CDHDR)へのアクセスが必要です。開発にはABAP開発者ロールが必要です。 - パフォーマンス: 数年間にわたる非常に大規模なデータセットの場合、プログラムの実行に時間がかかることがあります。バックグラウンドジョブ (
SM36) として実行し、出力をオンラインで表示するのではなく、アプリケーションサーバーのファイルシステムに書き出すことを検討してください。
a クエリ例 abap
REPORT Z_PM_RETURN_EXTRACTION.
" =======================================================================
" DATA DECLARATIONS
" =======================================================================
TYPES: BEGIN OF ty_event_log,
returncaseid TYPE vbeln_va,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE sysysid,
lastdataupdate TYPE timestamp,
processingagent TYPE ernam,
returnreason TYPE augru,
materialnumber TYPE matnr,
returnchannel TYPE string, " Placeholder, needs custom logic
requestedrefundamount TYPE netwr,
actualrefundamount TYPE netwr,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log.
DATA: lv_timestamp TYPE timestamp,
lv_last_update TYPE timestamp.
" =======================================================================
" SELECTION SCREEN
" =======================================================================
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_auart FOR vbak-auart.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
" =======================================================================
" MAIN LOGIC
" =======================================================================
START-OF-SELECTION.
" Set static values for the extraction run
GET TIME STAMP FIELD lv_last_update.
" 1. Return Order Created & 6. Credit Memo Request Created
" Note: In many SAP standard processes, the Return Order itself acts as the Credit Memo Request.
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~augru, i~matnr, i~netwr
INTO TABLE @DATA(lt_return_orders)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~auart IN @s_auart
AND h~bukrs_vf = @p_bukrs.
LOOP AT lt_return_orders INTO DATA(ls_return_order).
" Activity: Return Order Created
ls_event_log-returncaseid = ls_return_order-vbeln.
ls_event_log-activityname = 'Return Order Created'.
CONVERT DATE ls_return_order-erdat TIME ls_return_order-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_return_order-ernam.
ls_event_log-returnreason = ls_return_order-augru.
ls_event_log-materialnumber = ls_return_order-matnr.
ls_event_log-requestedrefundamount = ls_return_order-netwr.
APPEND ls_event_log TO lt_event_log.
" Activity: Credit Memo Request Created
ls_event_log-activityname = 'Credit Memo Request Created'.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
IF lt_return_orders IS NOT INITIAL.
" 2. Return Order Block Removed (Example for Delivery Block)
SELECT objectid, udate, utime, username
FROM cdhdr
INTO TABLE @DATA(lt_block_changes)
FOR ALL ENTRIES IN @lt_return_orders
WHERE objectclas = 'VERKBELEG'
AND objectid = @lt_return_orders-vbeln
AND tcode = 'VA02'.
IF sy-subrc = 0.
SELECT objectid, fname, value_new
INTO TABLE @DATA(lt_cdpos_block)
FROM cdpos
FOR ALL ENTRIES IN @lt_block_changes
WHERE objectclas = @lt_block_changes-objectclas
AND objectid = @lt_block_changes-objectid
AND changenr = @lt_block_changes-changenr
AND tabname = 'VBAK'
AND fname = 'LIFSK' " Delivery Block field
AND value_new = ''.
LOOP AT lt_cdpos_block INTO DATA(ls_cdpos_block).
READ TABLE lt_block_changes INTO DATA(ls_block_change) WITH KEY objectid = ls_cdpos_block-objectid.
IF sy-subrc = 0.
ls_event_log-returncaseid = ls_cdpos_block-objectid.
ls_event_log-activityname = 'Return Order Block Removed'.
CONVERT DATE ls_block_change-udate TIME ls_block_change-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_block_change-username.
CLEAR: ls_event_log-returnreason, ls_event_log-materialnumber, ls_event_log-requestedrefundamount, ls_event_log-actualrefundamount.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDIF.
" Get subsequent documents from flow
SELECT vbelv, vbtyp_n, vbeln, rfbsk
INTO TABLE @DATA(lt_doc_flow)
FROM vbfa
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbelv = @lt_return_orders-vbeln
AND vbtyp_n IN ('J', 'R', 'M'). " J=Delivery, R=Goods Mvmt, M=Invoice
" 3. Return Delivery Created
SELECT vbeln, erdat, erzet, ernam FROM likp
INTO TABLE @DATA(lt_deliveries)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'J'.
LOOP AT lt_deliveries INTO DATA(ls_delivery).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_del) WITH KEY vbeln = ls_delivery-vbeln.
ls_event_log-returncaseid = ls_doc_flow_del-vbelv.
ls_event_log-activityname = 'Return Delivery Created'.
CONVERT DATE ls_delivery-erdat TIME ls_delivery-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_delivery-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 4. Goods Receipt Posted
SELECT mblnr, mjahr, budat, cputm, usnam FROM mkpf
INTO TABLE @DATA(lt_goods_receipt)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE xblnr = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'R'.
LOOP AT lt_goods_receipt INTO DATA(ls_goods_receipt).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_gr) WITH KEY vbeln = ls_goods_receipt-mblnr.
ls_event_log-returncaseid = ls_doc_flow_gr-vbelv.
ls_event_log-activityname = 'Goods Receipt Posted'.
CONVERT DATE ls_goods_receipt-budat TIME ls_goods_receipt-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_goods_receipt-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 5. Usage Decision Made (Requires QM Module implementation)
SELECT q~prueflos, q~vdatu, q~vzeit, q~vname
FROM qals AS q
INNER JOIN qave AS v ON q~prueflos = v~prueflos
INTO TABLE @DATA(lt_usage_decisions)
FOR ALL ENTRIES IN @lt_deliveries
WHERE q~kdauf = @lt_deliveries-vbeln.
LOOP AT lt_usage_decisions INTO DATA(ls_ud).
SELECT SINGLE vbelv FROM vbfa INTO @DATA(lv_vbelv_ud) WHERE vbeln = @ls_ud-prueflos.
ls_event_log-returncaseid = lv_vbelv_ud.
ls_event_log-activityname = 'Usage Decision Made'.
CONVERT DATE ls_ud-vdatu TIME ls_ud-vzeit INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_ud-vname.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 7. Credit Memo Created
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, i~netwr, i~vgbel
INTO TABLE @DATA(lt_cred_memos)
FROM vbrk AS h
INNER JOIN vbrp AS i ON h~vbeln = i~vbeln
FOR ALL ENTRIES IN @lt_doc_flow
WHERE h~vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'M'.
LOOP AT lt_cred_memos INTO DATA(ls_cred_memo).
ls_event_log-returncaseid = ls_cred_memo-vgbel.
ls_event_log-activityname = 'Credit Memo Created'.
CONVERT DATE ls_cred_memo-erdat TIME ls_cred_memo-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_cred_memo-ernam.
ls_event_log-actualrefundamount = ls_cred_memo-netwr.
APPEND ls_event_log TO lt_event_log.
" 8. Credit Memo Posted To FI
SELECT SINGLE budat, cputime, usnam FROM bkpf
INTO @DATA(ls_bkpf_post)
WHERE awkey = @ls_cred_memo-vbeln AND awtyp = 'VBRK'.
IF sy-subrc = 0.
ls_event_log-activityname = 'Credit Memo Posted To FI'.
CONVERT DATE ls_bkpf_post-budat TIME ls_bkpf_post-cputime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-processingagent = ls_bkpf_post-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 12. Credit Memo Cleared
SELECT SINGLE augdt FROM bseg
INTO @DATA(lv_augdt)
WHERE bukrs = @p_bukrs
AND belnr = @ls_cred_memo-vbeln
AND augdt IS NOT NULL.
IF sy-subrc = 0 AND lv_augdt IS NOT INITIAL.
ls_event_log-activityname = 'Credit Memo Cleared'.
CONVERT DATE lv_augdt INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
CLEAR: ls_event_log-processingagent.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 9. Return Order Item Completed
SELECT vbeln, erdat, erzet, ernam, abgru FROM vbap
INTO TABLE @DATA(lt_items_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_items_completed INTO DATA(ls_item_completed).
ls_event_log-returncaseid = ls_item_completed-vbeln.
ls_event_log-activityname = 'Return Order Item Completed'.
CONVERT DATE ls_item_completed-erdat TIME ls_item_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 10. Return Order Completed
SELECT vbeln, erdat, erzet, ernam FROM vbak
INTO TABLE @DATA(lt_orders_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_orders_completed INTO DATA(ls_order_completed).
ls_event_log-returncaseid = ls_order_completed-vbeln.
ls_event_log-activityname = 'Return Order Completed'.
CONVERT DATE ls_order_completed-erdat TIME ls_order_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_order_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 11. Return Order Item Rejected
SELECT vbeln, erdat, erzet, ernam FROM vbap
INTO TABLE @DATA(lt_items_rejected)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND abgru IS NOT NULL AND abgru <> ''.
LOOP AT lt_items_rejected INTO DATA(ls_item_rejected).
ls_event_log-returncaseid = ls_item_rejected-vbeln.
ls_event_log-activityname = 'Return Order Item Rejected'.
CONVERT DATE ls_item_rejected-erdat TIME ls_item_rejected-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_rejected-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
ENDIF.
" =======================================================================
" OUTPUT
" =======================================================================
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_alv)
CHANGING
t_table = lt_event_log ).
lo_alv->display( ). ステップ
- 前提条件: 必要なSAP ECCテーブルへの読み取りアクセス権を持つデータベースユーザーがいることを確認してください。これには、販売管理 (SD)、在庫/購買管理 (MM)、および財務会計 (FI) モジュールのテーブルが含まれます。データベースに接続するには、DBeaver、SAP HANA Studio、Oracle SQL Developerなどの適切なSQLクライアントツールが必要です。
- システム固有の情報の特定: クエリを実行する前に、組織で返品に使用されている特定の伝票タイプを特定する必要があります。クエリはプレースホルダー
[YOUR_RETURN_ORDER_TYPES]を使用します。これを、標準返品の「RE」などの実際の値に置き換える必要があります。 - クエリの準備: 「クエリ」セクションで提供されている完全なSQLクエリをSQLクライアントにコピーします。
- パラメータの設定: クエリの冒頭にある
BaseReturnOrdersという名前の共通テーブル式 (CTE) を見つけます。WHERE句を修正し、[START_DATE]と[END_DATE]を置き換えることで、希望する日付範囲を指定します。返品オーダータイプのリストを更新し、必要に応じて特定の会社コード (BUKRS_VF) でフィルタリングします。 - クエリの実行: 変更したクエリをSAP ECCデータベースに対して実行します。実行時間は、選択した日付範囲とデータベースのサイズによって異なります。
- 生データの確認: クエリが完了したら、出力の簡単なレビューを実行します。
ReturnCaseId、ActivityName、EventTimeの列が入力され、複数のアクティビティのデータが表示されていることを確認します。 - CSVへのエクスポート: SQLクライアントから結果セット全体をCSVファイルにエクスポートします。すべての文字が正しく保持されるように、UTF-8エンコーディングを使用します。
- アップロードの準備: CSVファイルを開き、列ヘッダーが必須属性(
ReturnCaseId、ActivityName、EventTime、SourceSystemなど)と完全に一致することを確認します。SQLクライアントがエクスポート中にヘッダーを変更した場合は調整します。 - 最終アップロード: 整形されたCSVファイルをProcessMindプラットフォームにアップロードして分析します。
設定
- 返品伝票タイプ: クエリは、SAPシステムで返品オーダーを表す特定の販売伝票タイプで設定されている必要があります。これは、
[YOUR_RETURN_ORDER_TYPES]プレースホルダーを置き換えることで行われます。一般的な例としては、「RE」やカスタムの「Z」タイプがあります。 - 日付範囲: 抽出に適した日付範囲を定義することが重要です。通常、初期分析には3〜6ヶ月分のデータが推奨されます。これを「YYYYMMDD」形式で
[START_DATE]および[END_DATE]プレースホルダーを使用して設定します。 - 会社コード: 複数の会社コードを持つ組織の場合、集中的な分析のためにデータをフィルタリングすることが不可欠です。初期のCTEで
VBAK.BUKRS_VF = '[YOUR_COMPANY_CODE]'のようなフィルターを追加して、スコープを限定することができます。 - データベース方言: 提供されるクエリは一般的なSQL関数を使用します。ただし、
TO_TIMESTAMPや文字列連結 (CONCAT) などの日付と時刻の変換は、基盤となるデータベースシステム(例:Oracle、HANA、DB2)に応じて、構文のわずかな調整が必要になる場合があります。 - 必要な権限: データベースユーザーは、以下の主要テーブルへの読み取りアクセスが必要です:VBAK、VBAP、VBFA、LIKP、LIPS、VBRK、VBRP、MKPF、MSEG、BKPF、BSAD、QALS、QAVE、CDHDR、およびCDPOS。
a クエリ例 sql
WITH BaseReturnOrders AS (
SELECT
VBAK.VBELN AS ReturnOrderNumber,
VBAP.POSNR AS ReturnOrderItemNumber
FROM VBAK
JOIN VBAP ON VBAK.VBELN = VBAP.VBELN
WHERE VBAK.AUART IN ('[YOUR_RETURN_ORDER_TYPES]') -- e.g., 'RE'
AND VBAK.ERDAT BETWEEN '[START_DATE]' AND '[END_DATE]' -- e.g., '20230101' and '20231231'
)
-- 1. Return Order Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBAK.ERDAT, VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
UNION ALL
-- 2. Return Order Block Removed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Block Removed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAK'
AND CDPOS.FNAME IN ('LIFSK', 'FAKSK')
AND CDPOS.VALUE_NEW = ''
AND CDPOS.VALUE_OLD <> ''
UNION ALL
-- 3. Return Delivery Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(LIKP.ERDAT, LIKP.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
LIKP.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIKP ON VBFA.VBELN = LIKP.VBELN
UNION ALL
-- 4. Goods Receipt Posted
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Goods Receipt Posted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(MKPF.CPUDT, MKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
MKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIPS ON VBFA.VBELN = LIPS.VBELN AND VBFA.POSNN = LIPS.POSNR
JOIN MSEG ON LIPS.VBELN = MSEG.LFBNR AND LIPS.POSNR = MSEG.LFPOS
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART IN ('651', '653', '655') -- Standard returns movement types
UNION ALL
-- 5. Usage Decision Made
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Usage Decision Made' AS "ActivityName",
TO_TIMESTAMP(CONCAT(QAVE.ADAT, QAVE.ATIM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
QAVE.AENAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN QALS ON VBFA.VBELN = QALS.VBELN AND VBFA.POSNN = QALS.POSNR -- Linking inspection lot to delivery item
JOIN QAVE ON QALS.PRUEFLOS = QAVE.PRUEFLOS
UNION ALL
-- 6. Credit Memo Request Created (assumes a separate doc, or can be the return order itself)
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CMR_VBAK.ERDAT, CMR_VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CMR_VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'K' -- 'K' is Credit Memo Request
JOIN VBAK AS CMR_VBAK ON VBFA.VBELN = CMR_VBAK.VBELN
UNION ALL
-- 7. Credit Memo Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBRK.ERDAT, VBRK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBRK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
WHERE VBRK.FKART IN ('[YOUR_CREDIT_MEMO_TYPES]') -- e.g., 'G2'
UNION ALL
-- 8. Credit Memo Posted To FI
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Posted To FI' AS "ActivityName",
TO_TIMESTAMP(CONCAT(BKPF.CPUDT, BKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
BKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BKPF ON VBRK.VBELN = BKPF.AWKEY AND BKPF.AWTYP = 'VBRK'
UNION ALL
-- 9. Return Order Item Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUP'
AND CDPOS.FNAME = 'GBSTA'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 10. Return Order Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUK'
AND CDPOS.FNAME = 'GBSTK'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 11. Return Order Item Rejected
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Rejected' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
CDPOS.VALUE_NEW AS "ReturnReason", -- Using rejection reason for this specific event
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAP'
AND CDPOS.FNAME = 'ABGRU'
AND CDPOS.VALUE_NEW <> ''
UNION ALL
-- 12. Credit Memo Cleared
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Cleared' AS "ActivityName",
TO_TIMESTAMP(BSAD.AUGDT, 'YYYYMMDD') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CLEAR_DOC.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BSAD ON VBRK.VBELN = BSAD.VBELN
JOIN BKPF AS CLEAR_DOC ON BSAD.AUGBL = CLEAR_DOC.BELNR AND BSAD.BUKRS = CLEAR_DOC.BUKRS AND BSAD.GJAHR_AUGL = CLEAR_DOC.GJAHR;