輸送管理データテンプレート
輸送管理データテンプレート
- 収集を推奨する属性
- 追跡する主要なアクティビティ
- SAP輸送管理のデータ抽出ガイド
輸送管理の属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 ActivityName | 輸送プロセスで発生した特定の業務イベントまたはステップの名称です。 | ||
| 説明 アクティビティ名は、「貨物の計画完了」「貨物の集荷」「貨物の配達完了」など、貨物のライフサイクルにおける個々の作業やマイルストーンを表します。これらのアクティビティが、検出されたプロセスマップのノードになります。 アクティビティの順序や発生頻度を分析すると、標準的なプロセスの流れ、逸脱、ボトルネック、手戻りを特定できます。輸送管理におけるプロセスの発見と適合性チェックの基盤となる属性です。 重要な理由 この属性は輸送プロセスの各ステップを定義し、貨物輸送のエンドツーエンドの流れを可視化・分析できるようにします。 入手先 通常、SAP TMの実行追跡イベントハンドラーに記録されたイベントコードやステータス変更から取得します。業務オブジェクトのステータス変更を記録するテーブルや、特定のイベントメッセージがデータソースとなる場合があります。 例 貨物の計画完了運送業者の割り当て貨物の集荷貨物の配達完了配達証明の受領 | |||
| イベント時刻 EventTime | 特定のアクティビティまたはイベントが発生した日時を示すタイムスタンプです。 | ||
| 説明 イベント時刻には、輸送プロセスの各アクティビティが発生した正確な日時が記録されます。この時刻データは、サイクルタイムや所要時間、プロセスの各ステップ間の待ち時間を計算するうえで欠かせません。 分析では、この属性を使ってイベントを正しい順序に並べ、時系列のログを作成し、時間に基づくパフォーマンス分析を行います。遅延の特定、プロセス効率の測定、スケジュールやサービスレベル合意に対する実績の評価に重要です。 重要な理由 イベントを時系列に並べ、サイクルタイムや納期遵守などのパフォーマンス指標を計算するうえで、タイムスタンプは欠かせません。 入手先 報告されたイベントのタイムスタンプを保存する、/SAPTRX/EH_EVMSGなどのSAP TMイベントハンドラーテーブルから取得します。 例 2023-04-15T10:00:00Z2023-04-16T14:30:00Z2023-04-20T09:15:00Z | |||
| 貨物 ShipmentId | 1回の貨物輸送を一意に識別するIDであり、分析の中心となるケースです。 | ||
| 説明 Shipment IDは、関連するすべての輸送アクティビティとイベントをまとめる主キーです。最初の依頼から最終的な配達証明と支払いまで、1件の輸送プロセス全体を表します。 プロセスマイニングでは、この属性を使ってケースビューを作成し、分析担当者が各貨物の全行程を追跡できるようにします。個々の貨物に関連するプロセスバリアント、サイクルタイム、成果を分析でき、輸送パフォーマンスの全体像を把握できます。 重要な理由 これは基本となるケース識別子です。すべてのイベントとデータを特定の輸送オーダーに結び付けるため、エンドツーエンドのプロセス分析に欠かせません。 入手先 この識別子は、SAP TMのFreight Order番号またはFreight Booking番号です。/SCMTMS/D_TORROTや/SCMTMS/D_TRQROTなどのテーブルで確認できます。 例 610000432161000056786100009876 | |||
| 希望納品日 RequestedDeliveryDate | 顧客が希望する、または受注に定められた納品日時です。 | ||
| 説明 希望納品日は、「納品済み」アクティビティの目標期限です。納期遵守パフォーマンスを測定する際の主な基準となります。 この日付は、納期遵守率の重要業績評価指標(KPI)を算出するうえで欠かせません。実際の納品日時と希望納品日を比較することで、組織はサービスレベル契約を満たしたかどうかを確認できます。差異を分析すると、運送会社のパフォーマンス、計画の遅れ、通関の停滞など、遅延の構造的な原因を特定できます。 重要な理由 納期遵守パフォーマンスを測定する基準となり、顧客満足度とオペレーショナルエクセレンスに関わる重要業績評価指標(KPI)です。 入手先 通常、この日付はSAP ERPの先行する受注または在庫転送オーダーから引き継がれます。運賃ユニットまたは運賃オーダーの日付・時刻フィールドに保存されます。 例 2023-05-20T17:00:00Z2023-06-01T12:00:00Z2023-06-15T23:59:59Z | |||
| 納期遵守 IsOnTimeDelivery | 希望納品日までに貨物が納品されたかどうかを示す真偽値です。 | ||
| 説明 「納品済み」アクティビティの日時と「希望納品日」を比較して算出する属性です。納品が予定どおり、または予定より早ければtrue、遅れていればfalseになります。 この属性を使うと、出荷ごとの結果を明確な二択で示せるため、パフォーマンス分析が簡単になります。「納期遵守パフォーマンス」ダッシュボードと対応する重要業績評価指標(KPI)の基礎となります。遅延した出荷を簡単に絞り込み、パフォーマンス低下の要因を根本原因分析で調べられます。 重要な理由 納品の約束を守れたかを直接測定し、重要な納期遵守の重要業績評価指標(KPI)の算出と可視化を簡単にします。 入手先 この属性はSAP TMには保存されません。実際の納品イベントの日時と希望納品日を比較し、データ変換時に算出する必要があります。 例 truefalse | |||
| 終了時刻 EndTime | 特定のアクティビティが完了した日時を示すタイムスタンプです。 | ||
| 説明 StartTimeがイベントの開始を示すのに対し、EndTimeは終了を示します。「通関」や「貨物の積み込み」など、所要時間のあるアクティビティで特に役立ちます。EndTimeからStartTimeを引くと、そのアクティビティの処理時間を算出できます。 プロセスマイニングで開始時刻と終了時刻の両方を使うと、アクティビティの所要時間をより詳しく分析し、処理時間と待ち時間を分けて把握できます。作業の実行中と作業間の引き継ぎのどちらに非効率があるかを特定できます。 重要な理由 アクティビティの処理時間を正確に計算し、実作業の時間とイベント間の待ち時間を区別できます。 入手先 StartTimeと同様に、イベントハンドラーテーブルから取得します。特定のアクティビティに対応する別の「完了」イベントの時刻である場合もあります。 例 2023-04-15T11:30:00Z2023-04-16T15:00:00Z2023-04-20T09:45:00Z | |||
| 輸送手段 ModeOfTransport | 出荷に使用する輸送手段です。道路、鉄道、航空、海上などがあります。 | ||
| 説明 この属性は輸送手段を示します。輸送手段によってコスト構造、輸送時間、プロセスの複雑さは異なります。たとえば、国際航空貨物では通関などのアクティビティが発生しますが、国内のトラック輸送では異なるプロセスになります。 輸送手段ごとにプロセスを分析することで、状況に応じた改善策を検討できます。コスト分析にも欠かせず、特に、特急航空便などの割増運賃と、標準的でより経済的な輸送手段の利用状況を把握できます。この分類は、輸送費の実態を理解し、管理するうえで重要です。 重要な理由 輸送手段ごとのコスト、所要時間、プロセスの違いを分析できます。コストの最適化や割増運賃の利用状況の把握に役立ちます。 入手先 運賃オーダーまたは運賃予約の主要フィールドで、「輸送手段」または「MOT」と表示されることがあります。 例 01(道路)02(鉄道)04(航空)05(海上) | |||
| 運賃総額 TotalFreightCost | 出荷について算出された、または請求された合計コストです。 | ||
| 説明 運賃総額は、出荷による財務上の影響を表します。輸送管理システムが算出したコストの場合もあれば、精算後に運送会社から請求された最終金額の場合もあります。 この属性を使うと、プロセス分析に財務面の視点を加えられます。分析担当者は、コストの高いプロセスバリアントを特定し、遅延や経路変更によるコストを算出し、運送会社や輸送手段ごとの費用対効果を比較できます。輸送費やサービス提供コストを分析するダッシュボードの基礎となる属性です。 重要な理由 プロセスに財務面の視点を加え、輸送費、出荷あたりのコスト、プロセスの非効率性による財務的影響を分析できます。 入手先 SAP TMで料金計算を実行した後、運賃精算文書から取得します。/SCMTMS/D_SFIRHDなどのテーブルで確認できます。 例 250.751200.005430.50 | |||
| 運送会社名 CarrierName | 出荷を担当する運送会社または物流サービスプロバイダーの名称です。 | ||
| 説明 運送会社名は、貨物を実際に輸送する会社を示します。運送会社によってサービス水準、コスト、信頼性が異なるため、パフォーマンス分析に欠かせない属性です。 プロセスマイニングでは、この属性を使って運送会社ごとのパフォーマンスを分類し、比較します。運送会社別の評価表を作成したり、納期遵守率を監視したり、コストを比較したりできるほか、遅延や異議申し立てが頻繁に発生する運送会社を特定できます。こうした情報は、運送会社の選定や調達を戦略的に進めるうえで役立ちます。 重要な理由 運送会社ごとのパフォーマンスを比較し、運送会社の選定、コスト、サービス水準の最適化に役立てられます。 入手先 この情報は、運賃オーダーまたは運賃予約の文書に保存されます。運送会社のビジネスパートナー機能を通じて関連付けられます。 例 DHL ExpressFedEx FreightMaersk LineUnion Pacific Railroad | |||
| ソースシステム SourceSystem | イベントデータの発生元となるシステムです。 | ||
| 説明 この属性は、SAP TM、SAP ERP、外部の運送業者ポータルなど、データを生成したソースシステムを識別します。データの発生元を把握でき、データ連携の接点を理解するのに役立ちます。 複雑なシステム環境では、データの検証や連携の問題の調査、各システムがプロセス全体にどう関わるかを理解するうえで、ソースシステムの把握が重要です。たとえば、社内システムから報告されたイベントと、外部の物流事業者から報告されたイベントを区別できます。 重要な理由 データの発生元を特定します。データガバナンスや問題の調査、複数システムにまたがるプロセスの連携状況を理解するうえで重要です。 入手先 この情報はシステムログに保存されていることが多く、データ入力に使われたインターフェースや入力者から特定できる場合もあります。 例 SAP_TM_P01SAP_ERP_E01CARRIER_PORTAL_XYZ | |||
| ユーザー名 UserName | アクティビティを実行した担当者のユーザーIDまたは氏名です。 | ||
| 説明 この属性は、「貨物の計画完了」や「請求書の照合完了」など、手動のアクティビティを担当した従業員またはユーザーを識別します。プロセスの各ステップを、実行した個人やチームに関連付けます。 ユーザー別にアクティビティを分析すると、業務量の分担状況やトレーニングの必要性を把握し、優れた実績を上げている担当者を特定できます。また、コンプライアンスや監査の面でも重要であり、誰がいつ何を行ったかを明確に記録できます。同じ作業でも、担当者によって実行方法に違いがあることが分かる場合もあります。 重要な理由 手動のプロセスステップを担当者に関連付け、業務量や個人のパフォーマンス、トレーニングの機会を分析できるようにします。 入手先 通常、輸送伝票の変更ログまたはヘッダーテーブルにある「作成者」や「変更者」フィールド(例:ERNAM、AENAM)に記録されています。 例 CB998030SMITHJPLANNER_EU | |||
| 仕向国 DestinationCountry | 出荷先の国です。 | ||
| 説明 この属性は、最後の納品先の住所から取得される、出荷の最終仕向国を示します。 出発国と同様に、仕向国ごとの分析は地域ごとの物流課題を把握するうえで重要です。納品遅延が起きやすい仕向地や、ラストマイル配送コストが高い地域などの傾向を明らかにできます。この情報は、ネットワークの最適化、現実的な納品予定の設定、国際貿易に関するコンプライアンスの管理に役立ちます。 重要な理由 仕向地ごとのプロセスパフォーマンスを分析し、特定の配送地域、税関当局、ラストマイル配送業者に関する問題を把握できます。 入手先 運賃オーダーの最後の停車地点にある納品先の住所情報の一部です。 例 FRCAGBJP | |||
| 最終データ更新 LastDataUpdate | プロセスマイニング用データセットの抽出または更新が最後に行われた日時を示すタイムスタンプです。 | ||
| 説明 この属性は、分析対象データの新しさを示します。SAP TMなどのソースシステムからプロセスマイニングツールへデータを最後に取り込んだ日時を表します。 ダッシュボードや分析に欠かせないメタデータであり、インサイトがどの時点の情報に基づいているかを把握できます。リアルタイムの情報を見ているのか、過去の時点のスナップショットを見ているのかを判断できるため、適時に情報に基づいた意思決定を行ううえで役立ちます。 重要な理由 データの鮮度に関する重要な情報を示し、分析対象がどの時点の状況かを把握できるようにします。 入手先 通常、データ取り込み時にETL(抽出、変換、読み込み)ツールまたはデータパイプラインによって生成・保存されます。 例 2023-10-27T08:00:00Z2023-10-26T08:00:00Z | |||
| 出発国 OriginCountry | 出荷元の国です。 | ||
| 説明 この属性は、輸送の出発国を示します。最初の集荷場所の住所から取得されます。 出発国ごとにプロセスを分析すると、パフォーマンス、コスト、複雑さにおける地域差を特定できます。通関に時間がかかる国、運送コストが高い国、遅延が頻発する国などが明らかになります。こうした地域別の分析は、グローバルサプライチェーンの管理や、地域に応じた物流戦略の策定に欠かせません。 重要な理由 出荷パフォーマンスを地域別に分析し、地域ごとのボトルネック、コスト要因、プロセスの違いを特定できます。 入手先 運賃オーダーの最初の停車地点にある出発地の住所情報の一部です。 例 DEUSCNMX | |||
| 出荷ステータス ShipmentStatus | データ抽出時点における出荷全体の現在のステータスです。 | ||
| 説明 出荷ステータスは、計画中、実行中、納品済み、キャンセル済みなど、出荷の進捗状況を示します。ケースについて最後に確認された状態を表します。 この属性を使うと、結果に基づいて出荷を絞り込み、分析できます。たとえば、完了した出荷だけを対象にエンドツーエンドのサイクルタイムを測定したり、キャンセルされた出荷だけを分析して原因を把握したりできます。プロセスフローを解釈する際の重要なコンテキストにもなります。 重要な理由 出荷ごとの大まかな結果を示し、完了、キャンセル、輸送中のいずれかに基づいて絞り込みや分析を行えます。 入手先 SAP TMの運賃オーダーまたは運賃予約のヘッダーにある全体ステータスフィールドです。 例 計画中輸送準備完了実行中実行済みキャンセル済み | |||
| 異議申し立てあり IsDisputed | 出荷の運賃請求に異議申し立てが発生したかどうかを示す真偽値です。 | ||
| 説明 この算出フラグは、運賃精算に関連する異議申し立てがある出荷を特定します。異議申し立てが作成されていればtrue、そうでなければfalseになります。「運賃への異議申し立て作成」アクティビティの有無、または「異議申し立ての理由」が空でないことから算出できます。 この属性を使うと、運賃精算プロセスの分析が簡単になります。運賃請求の不一致率に関する重要業績評価指標(KPI)を簡単に算出でき、異議申し立てのある出荷をすべて絞り込めます。分析担当者は、運送会社、輸送経路、料金種別など、該当する出荷に共通する特徴を調べ、請求エラーの根本原因を特定できます。 重要な理由 問題のある運賃精算を簡単に特定でき、異議申し立て率の迅速な算出や請求エラーの根本原因分析に役立ちます。 入手先 この属性はSAP TMには保存されません。運賃精算文書に関連付けられた異議申し立てケースの有無に基づいて算出する必要があります。 例 truefalse | |||
| 異議申し立ての理由 DisputeReason | 運賃請求に異議を申し立てる際に提示される理由です。 | ||
| 説明 運送会社の請求額がSAP TMで算出された想定コストと一致しない場合、異議申し立てが作成されます。この属性には、「料金の誤り」「請求書の重複」「未承認の付帯料金」など、差異の理由が記録されます。 異議申し立ての理由を分析することは、「運賃請求エラーと異議申し立て率」ダッシュボードに欠かせません。マスターデータの問題、運送会社の誤り、業務上の不備など、請求の不正確さの根本原因を特定できます。組織はこの情報をもとに対策を講じ、異議申し立てを減らせます。その結果、支払いサイクルが短縮され、事務負担も軽減されます。 重要な理由 運賃請求エラーの根本原因を示し、請求への異議申し立てを減らすための対策や精算プロセスの改善に役立ちます。 入手先 この情報は、運賃精算文書に関連付けられた異議申し立て管理ケースに記録されます。 例 料金の不一致重量の誤り未承認の滞船料請求書の重複 | |||
| 遅延理由 DelayReason | 出荷の遅延理由を説明するコードまたはテキストです。 | ||
| 説明 遅延理由属性には、「悪天候」「通関保留」「運送会社の遅延」など、予定からの逸脱の原因が記録されます。この情報は、手作業で報告される場合と、運送会社からのイベントメッセージで通知される場合があります。 この属性は、根本原因の分析に役立ちます。出荷が遅れたという事実だけでなく、その理由まで把握できます。遅延理由を分類して件数を集計すると、繰り返し発生する問題を特定し、運送会社との連絡改善や混雑を避ける経路の最適化など、影響の大きい領域に改善の取り組みを集中できます。 重要な理由 出荷遅延の理由を明らかにし、例外を減らして納期遵守パフォーマンスを高めるための根本原因分析に役立ちます。 入手先 SAP TMのイベント管理フレームワークで、「到着/出発遅延」イベントが報告された際に、イベントコードと理由として記録できます。 例 WEATHER_DELAYCUSTOMS_INSPECTIONPORT_CONGESTIONMECHANICAL_FAILURE | |||
| 集荷予定日 ScheduledPickupDate | 運送会社が出荷地点で貨物を集荷する予定日時です。 | ||
| 説明 集荷予定日は、実際の輸送を開始する合意済みの日時です。出荷の実行段階における重要なマイルストーンです。 この属性は、輸送の最初の区間が予定どおりに進んでいるかを確認するうえで欠かせません。集荷予定時刻と実際の「貨物集荷」イベントの日時を比較すると、集荷の遅れを算出できます。これにより、出荷場所と運送会社のパフォーマンスや信頼性を評価できます。 重要な理由 集荷の適時性を測定する基準となり、出荷の実輸送が始まる段階での遅れを特定できます。 入手先 SAP TMの運賃オーダーにある停車順序に保存される予定日時です。 例 2023-05-18T09:00:00Z2023-05-30T14:00:00Z2023-06-12T10:30:00Z | |||
輸送管理のアクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| 支払い処理完了 | この最終アクティビティは、運送業者への輸送サービスの支払いが完了したことを示します。通常、SAP TMから確認済みの請求書を受け取った後、連携先のERPシステムで発生します。 | ||
| 重要な理由 これにより、輸送ライフサイクルのエンドツーエンドプロセスが実際に完了します。プロセス全体の所要時間や支払いの納期遵守に関する重要業績評価指標(KPI)を測るうえで欠かせません。 入手先 この情報はERPシステム(例:S/4HANA Finance)にあります。請求書番号を使ってFreight Settlement Documentに関連付けられます。ステータス更新がSAP TMに返される場合もありますが、BKPFやBSEGなどのERPテーブルからデータを取得する必要がある場合もあります。 記録 ERPシステムから支払消込日を取得し、請求書の参照情報を使って貨物に関連付けます。 イベントタイプ explicit | |||
| 貨物のキャンセル | このアクティビティは、依頼または計画の後に貨物がキャンセルされたことを示します。輸送の実行に進まないプロセスの終点となります。 | ||
| 重要な理由 キャンセルを追跡すると、顧客需要の変化や計画ミスなど、プロセスが中断する理由を特定できます。キャンセル率が高い場合、受注管理や計画に根本的な問題がある可能性があります。 入手先 Forwarding OrderまたはFreight Orderのライフサイクルステータスが「キャンセル済み」に変更されたことから推定します。このステータス変更のタイムスタンプがイベント時刻になります。 記録 文書のライフサイクルステータスが「キャンセル済み」に設定された時刻を記録します。 イベントタイプ inferred | |||
| 貨物の計画完了 | このアクティビティは、輸送要件が具体的な貨物計画にまとめられたことを示します。陸上・鉄道輸送の場合はFreight Order、海上・航空輸送の場合はFreight Bookingが作成・保存され、計画された経路とリソースが記録された時点で把握できます。 | ||
| 重要な理由 このマイルストーンの完了は、物流業務の実行を始めるうえで欠かせません。依頼からこのアクティビティまでのサイクルタイムは、計画効率を測る重要業績評価指標(KPI)です。 入手先 このイベントは、Freight OrderまたはFreight Booking文書の作成に対応します。また、文書のステータス変更から推定することもできます。たとえば、計画ステータスが「計画済み」に変わった場合です。ヘッダーデータには通常、/SCMTMS/D_TORROTテーブルを使います。 記録 Freight OrderまたはFreight Booking文書の作成タイムスタンプを使用します。 イベントタイプ explicit | |||
| 貨物の配達完了 | このアクティビティは、貨物が最終目的地に到着し、実輸送が完了したことを示します。運送業者から、荷受人の拠点で貨物を荷下ろししたとの報告を受けた時点で記録します。 | ||
| 重要な理由 これは、納期遵守パフォーマンスと顧客満足度を測るうえで最も重要なマイルストーンです。通常、請求と精算の手続きを開始するきっかけにもなります。 入手先 SAP TMで「目的地到着」または「荷下ろし完了」の実行イベントとして記録し、Freight Orderの実行ステータスを更新します。データは運送業者から届くことがよくあります。 記録 Freight Orderの最終停車地について、報告された「目的地到着」実行イベントのタイムスタンプを使用します。 イベントタイプ explicit | |||
| 貨物の集荷 | このアクティビティは、貨物の実輸送が始まったことを示します。運送業者から、貨物を積み込み、荷主の拠点を出発したとの報告を受けた時点で記録します。 | ||
| 重要な理由 これは、輸送中の段階が始まったことを示す重要な実行マイルストーンです。納期遵守パフォーマンスの追跡や、貨物の状況を正確に把握するうえで欠かせません。 入手先 通常、SAP TMと連携するSAP Event Managementで、「出発」または「積み込み完了」のイベントとして記録され、Freight Orderの実行ステータスが更新されます。Freight Orderに直接記録することもできます。 記録 Freight Orderの出発地について、報告された「出発」実行イベントのタイムスタンプを使用します。 イベントタイプ explicit | |||
| 輸送依頼の受領 | このアクティビティは、輸送要件が作成され、輸送プロセスが始まったことを示します。SAP TMでは通常、Forwarding Order(FWO)またはOrder-based Transportation Requirement(OTR)の作成として記録されます。 | ||
| 重要な理由 これは、貨物輸送のエンドツーエンドプロセスにおける主な開始イベントです。このアクティビティから計画完了までの時間を分析することは、計画効率の測定に欠かせません。 入手先 Forwarding Order(文書タイプFWO)またはその他の輸送要件文書が作成された時点で、このイベントを記録します。イベント時刻には、/SCMTMS/D_TORROTなどのヘッダーテーブルにある作成タイムスタンプを使用します。 記録 Forwarding OrderまたはTransportation Requirement文書の作成日時を記録します。 イベントタイプ explicit | |||
| 運賃精算文書の作成 | このアクティビティは、運送業者に支払う輸送費を計算するFreight Settlement Document(FSD)が作成されたことを示します。未払計上と請求書照合に使用する主要な文書です。 | ||
| 重要な理由 この時点から、輸送プロセスの精算段階が始まります。配達から精算文書の作成までにかかる時間を分析すると、財務処理のボトルネックを特定できます。 入手先 Freight Settlement Documentの作成時に明示的に記録されるイベントです。この文書の作成タイムスタンプは、ヘッダーテーブル/SCMTMS/D_SFIRHDで確認できます。 記録 Freight Settlement Documentの作成日時を使用します。 イベントタイプ explicit | |||
| 運送業者の割り当て | このアクティビティは、特定の輸送サービス提供者である運送業者が選定され、貨物に割り当てられたことを示します。手動での割り当て、自動計画、または入札プロセスを通じて行われます。 | ||
| 重要な理由 貨物の確定と輸送の実行には、運送業者の割り当てが欠かせません。この段階を追跡すると、運送業者の選定プロセスを分析し、予約が適時に行われているかを確認できます。 入手先 Freight OrderまたはFreight Bookingの運送業者フィールド(役割が「Carrier」の取引先)が入力された時点で記録します。入札の場合は、Freight Request for Quotationの落札時点が該当します。 記録 Freight Orderで運送業者のパートナー機能が初めて入力または確定された時刻を特定します。 イベントタイプ inferred | |||
| 配達証明の受領 | 運送業者から署名済みの配達証明(POD)文書を受け取り、システムに記録した時点で、このアクティビティが発生します。これにより、受取人が貨物を受領したことを確認できます。 | ||
| 重要な理由 PODの受領は、顧客への請求と運送業者への運賃精算に欠かせません。ここで遅延が発生すると、現金化までのサイクルに直接影響します。 入手先 通常、Freight Orderのステータス変更から推定します。たとえば、PODステータスが「受領済み」に設定された場合です。このステータスフィールドの変更時刻が、アクティビティのタイムスタンプになります。 記録 Freight Orderの配達証明ステータスが「受領済み」に更新された時刻を記録します。 イベントタイプ inferred | |||
| 税関申告の提出 | 国際輸送では、このアクティビティは必要な通関書類を当局に提出したことを示します。貨物の輸出入許可を得るために必要な手続きです。 | ||
| 重要な理由 国境での遅延を避けるには、税関申告を適時に提出することが重要です。このアクティビティを追跡すると、通関業務の効率を確認できます。 入手先 通関業者が報告する特定の実行イベント、またはSAP GTSなどの連携済み通関管理システムでのステータス変更として記録できます。それに応じてFreight Orderが更新されます。 記録 「税関申告の提出」実行イベント、または対応するステータス変更のタイムスタンプを記録します。 イベントタイプ explicit | |||
| 請求書の照合完了 | このアクティビティは、運送業者の請求書とFreight Settlement Documentの照合が完了し、支払いが承認されたことを示します。ERPシステムで支払い手続きを開始する前の最終段階です。 | ||
| 重要な理由 このアクティビティで、運賃の監査と照合が完了します。この段階で遅延が発生すると、運送業者への支払いが遅れ、関係に影響するおそれがあります。 入手先 Freight Settlement Documentのステータスが「未払計上可能」または「転記のため転送済み」などに変更されたことから推定します。これは、支払いのためにERPシステムへ送信されたことを示します。 記録 FSDのライフサイクルステータスが、支払い可能または転記済みを示す状態に変わった時刻を追跡します。 イベントタイプ inferred | |||
| 貨物の経路変更 | このアクティビティは、貨物の確定後に、予定外の経路またはスケジュール変更があったことを示します。輸送の中断、顧客からの依頼、物流上の問題などが原因となる場合があります。 | ||
| 重要な理由 経路変更は、コスト増加や遅延につながることが少なくありません。変更の頻度と理由を特定すると、計画の精度と業務の安定性を高められます。 入手先 輸送の実行開始後にFreight Orderの区間、場所、または日付に大きな変更があったことを検出し、このイベントを推定します。変更文書(テーブルCDHDRおよびCDPOS)を分析して特定できます。 記録 「運送業者による貨物の確認」イベントの後にFreight Order文書の主要な経路フィールドが変更されたことを検出します。 イベントタイプ inferred | |||
| 通関完了 | このアクティビティは、税関当局の承認を受け、貨物が次の輸送段階へ進める状態になったことを示します。国際物流における重要なマイルストーンであり、大きなボトルネックを解消します。 | ||
| 重要な理由 通関は、グローバルサプライチェーンで大幅な遅延が発生する主な原因の1つです。このアクティビティにかかる時間と成功率を追跡することは、国際輸送時間の短縮に欠かせません。 入手先 通常、通関業者または外部の可視化サービス提供者が報告する「通関完了」実行イベントとして記録し、Freight Orderの実行追跡情報を更新します。 記録 Freight Orderに関連付けられた「通関完了」実行イベントの報告タイムスタンプを使用します。 イベントタイプ explicit | |||
| 運賃に関する異議の発生 | このイベントは、運送業者の請求書とFreight Settlement Documentに記載された計算済み費用との間に不一致が見つかったことを示します。これを受けて、異議解決のワークフローが始まります。 | ||
| 重要な理由 異議が発生すると運送業者への支払いが遅れ、解決に事務作業が必要になります。このアクティビティを追跡すると、料金の誤りや付帯料金など、請求額の不一致が生じる根本原因を特定できます。 入手先 Freight Settlement Documentのステータスが「異議あり」に変更されたことから推定できます。別の異議申立ケース文書が作成される場合もあります。 記録 Freight Settlement Documentのステータスが「異議あり」に設定された時刻を記録します。 イベントタイプ inferred | |||
| 運送業者による貨物の確認 | このイベントは、運送業者が計画どおりに輸送を実行することに同意したことを示します。通常、EDIメッセージ、運送業者ポータルの更新、または手動入力で確認が届き、Freight Orderのステータスが更新されます。 | ||
| 重要な理由 運送業者から確認を得ることで、貨物計画の実行が確実になります。確認が遅れると、貨物輸送全体のスケジュールに影響するおそれがあります。 入手先 Freight OrderまたはFreight Bookingの確認ステータスフィールドの変更から推定します。文書のステータス管理で「確認済み」などの値が設定されます。 記録 Freight Order文書の確認ステータスフィールドの変更を追跡します。 イベントタイプ inferred | |||
データ抽出ガイド
ステップ
- CDSビューAPIの確認と有効化:SAP S/4HANAシステムにログインします。トランザクション
/IWFND/MAINT_SERVICEを使い、主要なCDSビューに必要なODataサービスが有効になっていることを確認します。I_TransportationOrder、C_TranspOrdExecutionEvent、I_ForwardingOrder、I_FreightSettlementDocumentに関連するサービスを確認してください。有効でない場合は、SAP管理者に依頼し、バックエンドシステムからサービスを追加して有効化します。 - API接続の確立:SAP管理者からODataサービスのルートURLを入手します。requestsライブラリを使ったPythonスクリプト、市販のETLツール、Postmanなどのクライアントアプリケーションを設定し、APIに接続します。認証の設定が必要です。通常は基本認証(ユーザー名とパスワード)を使いますが、より安全な接続にはOAuth 2.0を利用できます。
- 抽出範囲の定義:データの抽出範囲を決めます。たとえば、直近6か月など、対象期間を指定します。会社コードなどの組織単位や、貨物輸送オーダータイプなどの文書タイプを指定して、分析対象のプロセスに必要なデータに絞り込みます。
- 出荷データの基本クエリ作成:まず、I_TransportationOrder CDSビューを照会します。このビューは、貨物輸送オーダーや貨物予約とも呼ばれる出荷の中心的なデータを提供します。ODataの
$selectパラメーターで必要な列を選択します。CarrierName、ModeOfTransport、RequestedDeliveryDateなど、推奨属性も含めてください。$filterを適用し、日付やその他の条件でデータを絞り込みます。 - 実行イベントと輸送イベントの照会:C_TranspOrdExecutionEvent CDSビューを使って、主要な物流イベントを抽出します。「集荷完了」(DEPARTURE)や「配送先到着」(ARRIVAL_AT_DESTINATION)などのアクティビティに対応する特定の
EventCodeでビューを絞り込みます。TransportationOrder UUIDを使って、このデータを出荷データに結合します。 - 関連する業務オブジェクトの照会:プロセス全体を把握するには、関連するほかのCDSビューも照会する必要があります。「輸送依頼受領」アクティビティにはI_ForwardingOrderを、「運賃精算作成」「運賃異議申立作成」「請求書確認」などの財務アクティビティにはI_FreightSettlementDocumentを照会します。
- ステータスに基づくアクティビティの抽出:アクティビティの中には、独立したイベントではなく、主要文書のステータス変更として記録されるものがあります。「運送業者割当」「運送業者による出荷確認」「出荷キャンセル」などは、I_TransportationOrderビューを照会し、該当するステータス項目に関連付けられた
LastChangeDateTimeをイベント時刻として使います。ステータスコードを業務アクティビティに正確に対応付ける必要があります。 - データの統合と変換:すべてのデータソースから抽出したデータを、1つのイベントログにまとめます。抽出した各アクティビティについて、ShipmentId、ActivityName、EventTimeの各列を含む行を作成します。出荷データの基本クエリで取得した推奨属性が、その出荷のすべての行に含まれていることを確認してください。この処理は、概念的にはSQLの
UNION ALLに相当します。 - 複雑なイベントと外部イベントへの対応:「通関許可」や「支払い処理」などのデータは、特定の項目や外部システムに保存されている場合があります。提示したクエリロジックでは、標準項目を代替として使います。必要に応じて、通関関連のCDSビューを結合するようクエリを調整するか、貨物精算文書番号を使って別途抽出したERPの支払いデータと関連付けてください。
- ProcessMind向けの形式設定:統合したデータセットをCSVファイルとして保存します。アップロード要件に合わせて列名を設定します。たとえば、ツールの設定で
ShipmentId列をCaseId項目に対応付けます。タイムスタンプの形式が統一されていることを確認してください。UTC(YYYY-MM-DDTHH:MM:SSZ)が推奨されます。
設定
- 主要なCDSビュー:抽出には主に、I_TransportationOrder(貨物輸送オーダー)、C_TranspOrdExecutionEvent(実行イベント)、I_ForwardingOrder(輸送依頼)、I_FreightSettlementDocument(精算)を使用します。
- 期間による絞り込み:データ量を抑えるため、日付による絞り込みが欠かせません。I_TransportationOrderの
CreationDateTimeまたはC_TranspOrdExecutionEventのActualBusinessDateTimeを使います。初回の分析では、3~6か月の期間を推奨します。 - 文書タイプによる絞り込み:分析対象を絞るには、
TransportationOrderType項目で特定の文書タイプを指定します。これにより、通常の出荷と在庫移動など、異なる物流シナリオを分けて分析できます。 - 組織による絞り込み:必要に応じて、
PurchasingOrganizationなどの組織レベルの項目で絞り込み、特定の事業部門や地域のデータに限定します。 - APIのページネーション:大規模なデータセットでは、ODataの
$topおよび$skipパラメーターを使い、データを複数の小さなページに分けて取得します。これにより、APIのタイムアウトを防ぎ、クライアント側のメモリ使用量を抑えられます。1ページあたり1,000~5,000行が目安です。 - 前提条件:抽出を実行するユーザーまたはサービスアカウントには、基盤となるODataサービス(権限オブジェクトS_SERVICE)とCDSビュー内の業務データへのアクセス権限が必要です。対応するサービスはSAP Gateway(
/IWFND/MAINT_SERVICE)で有効化されている必要があります。
クエリの例 sql
WITH Shipments AS (
SELECT
TransportationOrder AS ShipmentId,
CarrierName,
TranspOrdExecutionBlockRsnCode,
TransportationMode AS ModeOfTransport,
ShippingType AS ShipmentType,
CreationDateTime AS ShipmentCreationTime,
LastChangeDateTime,
LifeCycleStatus,
ConfirmationStatus,
OverallExecutionStatus,
DeliveryOverallStatus,
PlannedDepDateTimeReqByCust AS RequestedDeliveryDate,
TotalChargesAmountInTransacCrcy AS TotalFreightCost
FROM I_TransportationOrder
WHERE
CreationDateTime >= '[START_DATE]' AND CreationDateTime <= '[END_DATE]'
-- AND TransportationOrderType IN ('[Your_Type_1]', '[Your_Type_2]')
)
SELECT
fwo.PurchasingDocument AS ShipmentId,
'Transportation Request Received' AS ActivityName,
fwo.CreationDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM I_ForwardingOrder AS fwo
LEFT JOIN Shipments s ON fwo.PurchasingDocument = s.ShipmentId
WHERE fwo.CreationDateTime >= '[START_DATE]' AND fwo.CreationDateTime <= '[END_DATE]'
UNION ALL
SELECT
s.ShipmentId,
'Shipment Planned' AS ActivityName,
s.ShipmentCreationTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
UNION ALL
SELECT
s.ShipmentId,
'Carrier Assigned' AS ActivityName,
s.LastChangeDateTime AS EventTime, -- Best approximation using last change time
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.CarrierName IS NOT NULL
UNION ALL
SELECT
s.ShipmentId,
'Shipment Confirmed By Carrier' AS ActivityName,
s.LastChangeDateTime AS EventTime, -- Best approximation using last change time
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.ConfirmationStatus = 'C' -- 'Confirmed'
UNION ALL
SELECT
s.ShipmentId,
'Goods Picked Up' AS ActivityName,
evt.ActualBusinessDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM C_TranspOrdExecutionEvent AS evt
JOIN Shipments s ON evt.TransportationOrder = s.ShipmentId
WHERE evt.EventCode = 'DEPARTURE'
UNION ALL
SELECT
s.ShipmentId,
'Customs Declaration Filed' AS ActivityName,
s.LastChangeDateTime AS EventTime, -- Approximation based on status change
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.CustomsRelevance IS NOT NULL -- This is a proxy, system config dependent
UNION ALL
SELECT
s.ShipmentId,
'Customs Cleared' AS ActivityName,
s.LastChangeDateTime AS EventTime, -- Approximation based on status change
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.CustomsOverallStatus = '4' -- 'Customs Cleared'
UNION ALL
SELECT
s.ShipmentId,
'Shipment Rerouted' AS ActivityName,
s.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.TranspOrdExecutionBlockRsnCode = '[Your Rerouting Reason Code]'
UNION ALL
SELECT
s.ShipmentId,
'Goods Delivered' AS ActivityName,
evt.ActualBusinessDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM C_TranspOrdExecutionEvent AS evt
JOIN Shipments s ON evt.TransportationOrder = s.ShipmentId
WHERE evt.EventCode = 'ARRIVAL_AT_DESTINATION'
UNION ALL
SELECT
s.ShipmentId,
'Proof Of Delivery Received' AS ActivityName,
s.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.DeliveryOverallStatus = 'C' -- 'POD Received'
UNION ALL
SELECT
fsd.SourceDocument AS ShipmentId,
'Freight Settlement Created' AS ActivityName,
fsd.CreationDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
fsd.TotalAmount AS TotalFreightCost
FROM I_FreightSettlementDocument AS fsd
JOIN Shipments s ON fsd.SourceDocument = s.ShipmentId
UNION ALL
SELECT
fsd.SourceDocument AS ShipmentId,
'Freight Dispute Created' AS ActivityName,
fsd.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
fsd.TotalAmount AS TotalFreightCost
FROM I_FreightSettlementDocument AS fsd
JOIN Shipments s ON fsd.SourceDocument = s.ShipmentId
WHERE fsd.DisputeStatus = '1' -- 'In Dispute'
UNION ALL
SELECT
fsd.SourceDocument AS ShipmentId,
'Invoice Verified' AS ActivityName,
fsd.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
fsd.TotalAmount AS TotalFreightCost
FROM I_FreightSettlementDocument AS fsd
JOIN Shipments s ON fsd.SourceDocument = s.ShipmentId
WHERE fsd.OverallLifeCycleStatus = '06' -- 'Posted for Accruals'
UNION ALL
SELECT
s.ShipmentId,
'Shipment Cancelled' AS ActivityName,
s.LastChangeDateTime AS EventTime,
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
s.TotalFreightCost
FROM Shipments AS s
WHERE s.LifeCycleStatus = 'X' -- 'Cancelled'
UNION ALL
SELECT
fsd.SourceDocument AS ShipmentId,
'Payment Processed' AS ActivityName,
fsd.LastChangeDateTime AS EventTime, -- Approximation, actual payment is in ERP
s.CarrierName,
s.ModeOfTransport,
s.RequestedDeliveryDate,
fsd.TotalAmount AS TotalFreightCost
FROM I_FreightSettlementDocument AS fsd
JOIN Shipments s ON fsd.SourceDocument = s.ShipmentId
WHERE fsd.InvoiceProcessingStatus = 'C' -- 'Completely Invoiced' ステップ
- 承認済みのSQLクライアント、データベースビュー、または抽出サービスを通じて、SAP TMスキーマへの直接読み取りアクセスが可能であることを確認します。関連するSAP TMテーブルを読み取るために必要な接続文字列、認証情報、スキーマ名、権限を入手してください。必要なセキュリティ承認と変更承認を得ずに、本番環境へ直接クエリを実行しないでください。
- 使用中のシステムで、実際のテーブル名と列名を確認します。以下のクエリでは、主要テーブルとして/SCMTMS/D_TORROTと/SCMTMS/D_TOSTOPを使用しています。ただし、ステータス、取引先、日付、コスト、通関、文書、支払いのデータは、SAP TMのリリースや導入内容に応じて、追加テーブルや拡張機能に保存されている場合があります。システムカタログとデータモデルで確認したうえで、文書化されたプレースホルダーのみを置き換えてください。
- [開始タイムスタンプ]と[終了タイムスタンプ]を使って抽出期間を定義します。初回の分析には、通常、直近3~6か月が適しています。クエリの性能とイベント履歴の保持期間を確認してから、対象期間を広げてください。
- 出荷のケースキーを特定します。クエリでは、/SCMTMS/D_TORROTのTOR_IDを出荷識別子として使います。導入環境で別の安定した識別子を使っている場合は、すべてのアクティビティ分岐でケースキーを統一して置き換え、可能であれば監査用の属性として元の文書識別子も保持してください。
- 各業務アクティビティを、明示的なデータソース条件に対応付けます。ProcessMindはイベントログをそのまま読み込むため、クエリでは抽出したアクティビティごとに1行を作成します。文書の順序、タイムスタンプの欠落、ステータスの推移からマイルストーンを推測することはありません。
- ステータスとタイムスタンプの対応付けを、輸送計画担当者および業務プロセスの責任者と確認します。特に、依頼作成、計画、運送業者割当、運送業者による確認、集荷、通関申告、通関許可、ルート変更、配送、配達証明(POD)受領、運賃精算、異議申立、請求書確認、キャンセル、支払いを表す値を確認してください。
- 承認済みのSQLクライアントでクエリを実行します。イベントごとに1行あること、ShipmentIdとActivityNameがNULLでないこと、EventTimeが有効であることを確認します。1対多の結合による重複行がないか調べ、必要に応じてデータソースの対応付けや集計ロジックを調整してください。
- 対応するデータソース項目が利用できる場合は、推奨属性を結果に追加します。クエリには、システム固有のメタデータを確認せずに安全に名前を指定できない項目のプレースホルダーが含まれています。確認済みの列または承認済みのビューだけを使って、プレースホルダーを置き換えてください。
- 最終的なデータ品質ルールを適用します。ケース識別子またはイベントタイムスタンプがない行を除外し、タイムスタンプのタイムゾーンを統一し、監査用に元のタイムスタンプを保持します。また、EndTimeがEventTimeより前にならないようにしてください。データソースにないイベントを作成しないでください。
- 結果をUTF-8のCSV、またはProcessMindが対応する別の表形式でエクスポートします。必須の列名ShipmentId、ActivityName、EventTimeを正確に使用してください。値がある場合はEndTimeと推奨属性も含めます。ファイルをアップロードするか、承認済みのクエリ結果をProcessMindに接続し、Shipmentのケース識別子とActivity Nameの項目が正しく対応付けられていることを確認してください。
設定
- 主要なデータソーステーブル:輸送オーダーまたは貨物輸送オーダーのルートデータには/SCMTMS/D_TORROTを、停車地とマイルストーンのデータには/SCMTMS/D_TOSTOPを使用します。導入前に、対象のSAP TMシステムで追加のデータソースオブジェクトをすべて確認してください。
- ケース識別子:安定した出荷または貨物輸送オーダーの識別子を使用します。サンプルクエリでは、TOR_IDをShipmentIdとして使用しています。この識別子が、計画、実行、精算、ERPの支払い記録を通じて変わらないことを確認してください。
- アクティビティの対応付け:必須の15種類のアクティビティすべてに、明示的なデータソース条件を設定します。各アクティビティは、イベントログの行として出力する必要があります。ProcessMindがほかの行からアクティビティを導出することはありません。
- 期間:まずは過去3~6か月分の履歴を対象にします。各データソースの分岐で、可能な限り早い段階でEventTimeによる条件を指定してください。増分読み込みでは、管理されたウォーターマークを使い、遅れて反映される更新を取り込めるよう、短い重複期間を設けます。
- 業務上の絞り込み条件:導入環境に応じて、会社コード、購買組織、販売組織、文書タイプ、輸送モード、運送業者、プラント、場所、ステータスの条件を設定します。該当する項目が確認できていない場合は、[会社コードの絞り込み条件]などのプレースホルダーを使用してください。
- タイムスタンプの処理:データソースのタイムスタンプを統一したタイムゾーンに変換します。データソースで日付と時刻が別々に保存されている場合は、使用中のHANAリリースでサポートされるシステム固有の変換方法で結合します。監査性が必要な場合は、元のタイムスタンプも保持してください。
- 推奨属性:CarrierName、RequestedDeliveryDate、ModeOfTransport、TotalFreightCost、IsOnTimeDeliveryには、確認済みのデータソース項目または承認済みの計算ビューから値を設定します。信頼できる値がデータソースにない場合は、NULLのままにしてください。
- 性能:対象期間を限定し、必要な列だけを取得し、結合前に絞り込みを行います。全テーブルを無条件に走査することは避け、HANAの実行計画を確認してください。大規模なデータセットでは、パーティションを考慮した条件、増分抽出、ステージングテーブル、または承認済みの計算ビューを使用します。
- 重複の制御:1対多の結合により、1つのアクティビティに複数の行が生成される場合があります。確認済みのイベントキー、元文書キー、または決定性のある集計ルールを使用してください。正当な繰り返しイベントを削除する可能性がある、根拠のない重複排除は行わないでください。
- 前提条件:必要なデータベース権限、SAP TMデータへのアクセス、接続先のERPまたは精算データへのアクセス、承認済みの抽出ツール、関連するSAP TMモジュール、連携機能、カスタム拡張機能が有効であることの確認が必要です。
- システム固有の対応付け:ステータスコード、取引先ロール、通関マイルストーン、精算ステータス、請求書ステータス、支払いステータスは、リリースや設定によって異なります。対応付けを管理対象の設定文書に記録し、アップグレード後にテストしてください。
クエリの例 sql
WITH
base_tor AS (
SELECT
r.TOR_ID AS ShipmentId,
r.TOR_ID AS SourceDocumentId,
r.CREATED_AT AS RequestEventTime,
r.CREATED_AT AS PlannedEventTime,
r.CREATED_AT AS CarrierAssignedEventTime,
r.CREATED_AT AS CarrierConfirmedEventTime,
r.CREATED_AT AS PickupEventTime,
r.CREATED_AT AS CustomsFiledEventTime,
r.CREATED_AT AS CustomsClearedEventTime,
r.CREATED_AT AS ReroutedEventTime,
r.CREATED_AT AS DeliveredEventTime,
r.CREATED_AT AS PodReceivedEventTime,
r.CREATED_AT AS SettlementCreatedEventTime,
r.CREATED_AT AS DisputeCreatedEventTime,
r.CREATED_AT AS InvoiceVerifiedEventTime,
r.CREATED_AT AS CancelledEventTime,
r.CREATED_AT AS PaymentProcessedEventTime,
r.CREATED_AT AS EndTime,
CAST(NULL AS NVARCHAR(255)) AS CarrierName,
CAST(NULL AS TIMESTAMP) AS RequestedDeliveryDate,
CAST(NULL AS NVARCHAR(50)) AS ModeOfTransport,
CAST(NULL AS DECIMAL(19, 2)) AS TotalFreightCost,
CAST(NULL AS NVARCHAR(5)) AS IsOnTimeDelivery
FROM "/SCMTMS/D_TORROT" r
WHERE r.CREATED_AT >= TO_TIMESTAMP('[Start timestamp]')
AND r.CREATED_AT < TO_TIMESTAMP('[End timestamp]')
AND ('[Company code filter]' = '[Company code filter]' OR r.TOR_ID IS NOT NULL)
),
stop_data AS (
SELECT
s.TOR_ID AS ShipmentId,
MIN(s.STOP_SEQ) AS FirstStopSequence,
MAX(s.STOP_SEQ) AS LastStopSequence
FROM "/SCMTMS/D_TOSTOP" s
GROUP BY s.TOR_ID
),
source_data AS (
SELECT
b.ShipmentId,
b.SourceDocumentId,
b.RequestEventTime,
b.PlannedEventTime,
b.CarrierAssignedEventTime,
b.CarrierConfirmedEventTime,
b.PickupEventTime,
b.CustomsFiledEventTime,
b.CustomsClearedEventTime,
b.ReroutedEventTime,
b.DeliveredEventTime,
b.PodReceivedEventTime,
b.SettlementCreatedEventTime,
b.DisputeCreatedEventTime,
b.InvoiceVerifiedEventTime,
b.CancelledEventTime,
b.PaymentProcessedEventTime,
b.EndTime,
b.CarrierName,
b.RequestedDeliveryDate,
b.ModeOfTransport,
b.TotalFreightCost,
CASE
WHEN b.DeliveredEventTime IS NOT NULL
AND b.RequestedDeliveryDate IS NOT NULL
AND b.DeliveredEventTime <= b.RequestedDeliveryDate THEN 'true'
WHEN b.DeliveredEventTime IS NOT NULL
AND b.RequestedDeliveryDate IS NOT NULL THEN 'false'
ELSE NULL
END AS IsOnTimeDelivery
FROM base_tor b
LEFT JOIN stop_data s
ON s.ShipmentId = b.ShipmentId
),
event_log AS (
SELECT ShipmentId, 'Transportation Request Received' AS ActivityName, RequestEventTime AS EventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE RequestEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Planned', PlannedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PlannedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Carrier Assigned', CarrierAssignedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CarrierAssignedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Confirmed By Carrier', CarrierConfirmedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CarrierConfirmedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Goods Picked Up', PickupEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PickupEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Customs Declaration Filed', CustomsFiledEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CustomsFiledEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Customs Cleared', CustomsClearedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CustomsClearedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Rerouted', ReroutedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE ReroutedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Goods Delivered', DeliveredEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE DeliveredEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Proof Of Delivery Received', PodReceivedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PodReceivedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Freight Settlement Created', SettlementCreatedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE SettlementCreatedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Freight Dispute Created', DisputeCreatedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE DisputeCreatedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Invoice Verified', InvoiceVerifiedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE InvoiceVerifiedEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Shipment Cancelled', CancelledEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE CancelledEventTime IS NOT NULL
UNION ALL
SELECT ShipmentId, 'Payment Processed', PaymentProcessedEventTime, EndTime, CarrierName, RequestedDeliveryDate, ModeOfTransport, TotalFreightCost, IsOnTimeDelivery, SourceDocumentId FROM source_data WHERE PaymentProcessedEventTime IS NOT NULL
)
SELECT
ShipmentId,
ActivityName,
EventTime,
EndTime,
CarrierName,
RequestedDeliveryDate,
ModeOfTransport,
TotalFreightCost,
IsOnTimeDelivery,
SourceDocumentId
FROM event_log
WHERE ShipmentId IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY ShipmentId, EventTime, ActivityName; ステップ
- データ要件の定義:必須の15種類のアクティビティとすべての属性について、正確なロジックを確認します。各アクティビティを、使用中のSAP TMシステムにおける特定のステータス変更、作成イベント、または文書間の関連付けに対応付けます。たとえば、「集荷完了」を示す実行ステータスを特定します。
- ABAP開発環境へのアクセス:SAP GUIにログインし、トランザクションコード
SE38でABAPエディターを開きます。新しいプログラム名(例:ZTM_PROCESS_EXTRACT)を入力し、「作成」をクリックします。タイトルを入力し、プログラムタイプに「実行可能プログラム」を指定します。 - 選択画面の作成:プログラム内で、ユーザーに表示する選択画面を定義します。貨物輸送オーダーの作成日(
SO_CREDT)などの期間指定パラメーターや、文書タイプ(SO_TYPE)、運送業者(SO_CARR)などの選択オプションを含めます。 - 出力構造の定義:必要なイベントログ形式に合わせて、内部テーブルの構造を定義します。ShipmentId、ActivityName、EventTime、EndTime、CarrierName、RequestedDeliveryDate、ModeOfTransport、TotalFreightCost、IsOnTimeDeliveryの各項目を含めます。
- データ選択ロジックの実装:15種類のアクティビティそれぞれのデータを選択するABAPの主要ロジックを記述します。通常は複数のSAP TMテーブルを照会します。まず、指定期間内の貨物輸送オーダーなど、主要な出荷文書を選択します。
- 計画イベントと実行イベントの抽出:選択した出荷文書(例:貨物輸送オーダー)ごとに、関連テーブルと業務オブジェクトを照会し、各イベントのタイムスタンプを取得します。/SCMTMS/D_TORROTテーブルから、貨物輸送オーダーの作成(「出荷計画」)、運送業者の割当(「運送業者割当」)、および「集荷完了」「配送完了」に対応する実行ステータスの変更を取得します。先行する輸送依頼(
/SCMTMS/D_TRQROT)の作成は、「輸送依頼受領」を示す場合があります。 - 運送業者による確認とルート変更の抽出:貨物輸送オーダーに関連付けられたステータステーブルまたは変更文書(CDHDR/CDPOS)を照会し、
CONFIRMATIONステータスが設定された時刻を特定します。これにより、「運送業者による出荷確認」を記録できます。同様に、ルート情報の重要な変更を調べ、「出荷ルート変更」を記録します。 - 通関イベントの抽出:SAP Global Trade Services(GTS)などのモジュールを使用している場合、「通関申告」や「通関許可」は、関連文書で追跡されることがよくあります。ロジックでは、貨物輸送オーダーの文書フロー(
/SCMTMS/D_TORDOC)を読み取り、関連文書とその作成時刻またはステータス変更時刻を取得する必要があります。 - 精算イベントと異議申立イベントの抽出:貨物精算文書のヘッダーテーブル(
/SCMTMS/D_SFIRHD)と関連する明細およびステータスを照会し、「運賃精算作成」「運賃異議申立作成」「請求書確認」のイベントを取得します。これらを元のShipmentIdに関連付けます。 - データの統合:見つかったイベントごとに、最終的な内部テーブルにレコードを追加します。対応するアクティビティを
ActivityNameに、イベントのタイムスタンプをEventTimeに、貨物輸送オーダーまたは貨物予約のIDをShipmentIdに設定します。ほかの属性には、元文書の値を入力します。 - ファイルの形式設定とエクスポート:最終的な内部テーブルのデータをフラットファイルに整形します。
OPEN DATASET、LOOP AT... TRANSFER...、CLOSE DATASETコマンドを使い、内部テーブルの内容をSAPアプリケーションサーバー上のCSVまたはTXTファイルに書き込みます。ファイルはトランザクションAL11からアクセスできます。 - 実行予約とファイル取得:ABAPプログラムは、バックグラウンドジョブ(トランザクションSM36)として実行予約し、データを自動抽出できます。生成されたファイルは、トランザクション
CG3Yを使ってアプリケーションサーバーからローカルマシンにダウンロードし、ProcessMindにアップロードできます。
設定
- 期間:選択画面には、主要な輸送文書(例:貨物輸送オーダー)の作成日を対象とする必須の期間指定を含めます。初回の分析では、過度に実行時間を長くせず、代表性のあるデータセットを確保するため、3~6か月の期間を推奨します。
- 文書タイプの絞り込み:輸送文書タイプ(例:貨物輸送オーダー、貨物予約)を絞り込む項目を用意します。道路輸送と海上輸送など、特定のプロセスに分析対象を限定するうえで重要です。
- 運送業者の絞り込み:特定の運送業者で絞り込めるようにします。個々の物流パートナーのパフォーマンス分析に役立ちます。
- 組織による絞り込み:購買組織や会社コードなど、関連する組織単位の絞り込み項目を含め、特定の業務領域に抽出対象を限定します。
- 性能の最適化:大規模なデータセットでは、ABAPコードの
WHERE句でインデックス付きのデータベース項目を使い、可能な限りネストしたループを避け、必要な項目だけをデータベースから選択してメモリ使用量を抑えます。 - 前提条件:レポートの実行者にはABAPプログラムの実行権限が必要です。開発者には
S_DEVELOP権限が必要です。プログラムには、アプリケーションサーバーのファイルシステムへのアクセス(権限オブジェクトS_DATASET)と、関連するTMデータベーステーブルおよびBOPFオブジェクトへのアクセス権限が必要です。
クエリの例 abap
REPORT ztm_process_extract.
*&---------------------------------------------------------------------*
*& Data Structures
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_s_event_log,
shipmentid TYPE /scmtms/tor_id,
activityname TYPE string,
eventtime TYPE timestamp,
endtime TYPE timestamp,
carriername TYPE string,
requesteddeliverydate TYPE timestamp,
modeoftransport TYPE /scmtms/mot,
totalfreightcost TYPE /scmtms/chargeable_weight,
isontimedelivery TYPE abap_bool,
END OF ty_s_event_log.
DATA: lt_event_log TYPE TABLE OF ty_s_event_log.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: so_credt FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: so_torid FOR /scmtms/d_torrot-tor_id.
SELECT-OPTIONS: so_carr FOR /scmtms/d_torrot-lsp_id.
*&---------------------------------------------------------------------*
*& Main Logic
*&---------------------------------------------------------------------*
START-OF-SELECTION.
DATA: ls_event_log TYPE ty_s_event_log.
" Select base data: Freight Orders (Shipments)
SELECT tor_id, tor_cat, lsp_id, mot_code, cretd_tst, btd_tstmp_end
FROM /scmtms/d_torrot
INTO TABLE @DATA(lt_tor_root)
WHERE CAST( cretd_tst AS DATS ) IN @so_credt
AND tor_id IN @so_torid
AND lsp_id IN @so_carr.
IF lt_tor_root IS INITIAL.
MESSAGE 'No data found for the given selection.' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
" Loop through each shipment to build the event log
LOOP AT lt_tor_root INTO DATA(ls_tor_root).
" 1. Transportation Request Received (Approximation from FWO creation)
SELECT SINGLE created_at_utc FROM /scmtms/d_trqrot
WHERE db_key IN ( SELECT trq_root_key FROM /scmtms/d_tordoc
WHERE parent_key = @ls_tor_root-db_key AND bo_node_cat = 'TRQ_ROOT' )
INTO @DATA(lv_trq_created_ts).
IF sy-subrc = 0.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Transportation Request Received'.
ls_event_log-eventtime = lv_trq_created_ts.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 2. Shipment Planned
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Shipment Planned'.
ls_event_log-eventtime = ls_tor_root-cretd_tst.
APPEND ls_event_log TO lt_event_log.
" 3. Carrier Assigned
IF ls_tor_root-lsp_id IS NOT INITIAL.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Carrier Assigned'.
ls_event_log-eventtime = ls_tor_root-cretd_tst. " Approximated with creation time
APPEND ls_event_log TO lt_event_log.
ENDIF.
" Get statuses from /SCMTMS/D_TORSTA
SELECT status, tstmp FROM /scmtms/d_torsta
INTO TABLE @DATA(lt_statuses)
WHERE parent_key = @ls_tor_root-db_key.
" 4. Shipment Confirmed By Carrier
READ TABLE lt_statuses WITH KEY status = 'CONFIRMED' INTO DATA(ls_conf_status).
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Shipment Confirmed By Carrier'.
ls_event_log-eventtime = ls_conf_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 5. Goods Picked Up
READ TABLE lt_statuses WITH KEY status = 'LOADING_END' INTO DATA(ls_pickup_status). " Example status
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Goods Picked Up'.
ls_event_log-eventtime = ls_pickup_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 6. Customs Declaration Filed (Placeholder logic)
" 7. Customs Cleared (Placeholder logic)
" 8. Shipment Rerouted (Placeholder logic, needs change documents)
" 9. Goods Delivered
READ TABLE lt_statuses WITH KEY status = 'UNLOADING_END' INTO DATA(ls_delivery_status). " Example status
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Goods Delivered'.
ls_event_log-eventtime = ls_delivery_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 10. Proof Of Delivery Received
READ TABLE lt_statuses WITH KEY status = 'POD_RECEIVED' INTO DATA(ls_pod_status). " Example status
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Proof Of Delivery Received'.
ls_event_log-eventtime = ls_pod_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 11. Freight Settlement Created
SELECT SINGLE created_at_utc FROM /scmtms/d_sfirhd
WHERE db_key IN ( SELECT sfir_root_key FROM /scmtms/d_tordoc
WHERE parent_key = @ls_tor_root-db_key AND bo_node_cat = 'SFIR_ROOT' )
INTO @DATA(lv_fsd_created_ts).
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Freight Settlement Created'.
ls_event_log-eventtime = lv_fsd_created_ts.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 12. Freight Dispute Created (Needs logic based on dispute status in SFIR)
" 13. Invoice Verified (Needs logic based on invoice status in SFIR)
" 14. Shipment Cancelled
READ TABLE lt_statuses WITH KEY status = 'CANCELLED' INTO DATA(ls_cancel_status).
IF sy-subrc = 0.
CLEAR ls_event_log.
ls_event_log-shipmentid = ls_tor_root-tor_id.
ls_event_log-activityname = 'Shipment Cancelled'.
ls_event_log-eventtime = ls_cancel_status-tstmp.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 15. Payment Processed (Data is typically in the ERP system, not TM)
ENDLOOP.
" Final step: Write lt_event_log to a file on the application server
DATA(lv_filepath) = '/usr/sap/trans/[YourInstance]/[YourFileName].csv'.
OPEN DATASET lv_filepath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc = 0.
" Write header
DATA(lv_header) = 'ShipmentId,ActivityName,EventTime'.
TRANSFER lv_header TO lv_filepath.
" Write data
LOOP AT lt_event_log INTO ls_event_log.
DATA(lv_line) = |{ ls_event_log-shipmentid },{ ls_event_log-activityname },{ ls_event_log-eventtime }|.
TRANSFER lv_line TO lv_filepath.
ENDLOOP.
CLOSE DATASET lv_filepath.
ELSE.
MESSAGE 'Error opening file on application server.' TYPE 'E'.
ENDIF.
ENDFOR. 始める準備はできましたか?
このテンプレートを使って、輸送プロセスの最適化に向けた取り組みを始め、納品の迅速化とコスト削減を目指しましょう。今すぐインサイトを見つけてください。
輸送管理のボトルネックを今すぐ解消
非効率な箇所を特定し、ルートを最適化して、サイクルタイムを30%短縮します。
クレジットカードは不要です。数分で設定できます。