Transportation Managementのデータテンプレート
Transportation Managementのデータテンプレート
- 収集を推奨する属性
- 追跡すべき主要なアクティビティ
- SAP Transportation Managementからの抽出手順
輸送管理の属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 ActivityName | 輸送プロセス内で発生した特定の業務イベントまたはステップの名称です。 | ||
| 説明 アクティビティ名は、出荷ライフサイクルにおける1つのタスクまたはマイルストーンを表します。たとえば、「Shipment Planned」、「Goods Picked Up」、「Goods Delivered」などです。これらのアクティビティが、検出されたプロセスマップのノードになります。 アクティビティの順序と頻度を分析することで、標準的なプロセスフロー、逸脱、ボトルネック、手戻りループを特定できます。輸送管理におけるプロセスディスカバリーと適合性チェックの基盤となる項目です。 重要な理由 この属性は輸送プロセスの各ステップを定義し、出荷フロー全体の可視化と分析を可能にします。 入手先 通常、SAP TMの実行追跡イベントハンドラーに記録されたイベントコードまたはステータス変更から取得します。業務オブジェクトのステータス変更や特定のイベントメッセージを記録するテーブルがデータソースになる場合があります。 例 出荷を計画済みに設定運送会社を割り当て貨物を集荷貨物を配送Proof Of Deliveryを受領 | |||
| イベント時刻 EventTime | 特定のアクティビティまたはイベントが発生した日時を示すタイムスタンプです。 | ||
| 説明 イベント時刻は、輸送プロセスの各アクティビティについて正確な日時を提供します。この時系列データは、サイクルタイム、所要時間、異なるプロセスステップ間の待ち時間を計算するための基盤です。 分析では、この属性を使ってイベントを正しい順序に並べ、時系列ログを作成し、時間に基づくパフォーマンス分析を行います。遅延の特定、プロセス効率の測定、スケジュールやサービスレベル合意に対するパフォーマンス評価に欠かせません。 重要な理由 イベントを時系列に並べ、サイクルタイムや納期遵守率など、すべてのパフォーマンス指標を計算するために必要です。 入手先 報告されたイベントのタイムスタンプを保存する、/SAPTRX/EH_EVMSGなどのSAP TMのイベントハンドラーテーブルから取得します。 例 2023-04-15T10:00:00Z2023-04-16T14:30:00Z2023-04-20T09:15:00Z | |||
| 出荷 ShipmentId | 貨物の1回の輸送を一意に識別する値であり、分析の中心となるケースです。 | ||
| 説明 Shipment IDは、関連するすべての輸送アクティビティとイベントをまとめる主キーです。初回の依頼から最終的なProof of Deliveryと支払いまで、1件のエンドツーエンドの輸送プロセスを表します。 プロセスマイニングでは、この属性がケースビューの構築に欠かせません。分析担当者は、各出荷の全行程を追跡できます。また、個々の出荷に関連するプロセスバリアント、サイクルタイム、成果を分析し、輸送パフォーマンスを詳細に把握できます。 重要な理由 すべてのイベントとデータポイントを特定の輸送オーダーに関連付ける基本的なケース識別子です。エンドツーエンドのプロセス分析に欠かせません。 入手先 SAP TMにおけるFreight Order番号またはFreight Booking番号です。/SCMTMS/D_TORROTや/SCMTMS/D_TRQROTなどのテーブルで確認できます。 例 610000432161000056786100009876 | |||
| 希望納品日時 RequestedDeliveryDate | 顧客が希望した、または販売注文で指定された納品日時です。 | ||
| 説明 希望納品日時は、「商品配送済み」アクティビティの目標期限です。納期遵守パフォーマンスを測定する際の主な基準になります。 「納期遵守率」KPIの計算に欠かせません。実際の配送タイムスタンプと希望納品日時を比較することで、組織がサービスレベル合意を満たしたかどうかを判断できます。差異を分析すると、運送会社のパフォーマンス問題、計画の遅れ、通関の滞留など、遅延の構造的な原因を特定できます。 重要な理由 納期遵守パフォーマンスを測定する基準であり、顧客満足度と業務品質を左右する重要なKPIです。 入手先 通常、SAP ERPの先行販売注文または在庫転送注文から引き継がれます。Freight UnitまたはFreight Orderの日付・時刻フィールドに保存されます。 例 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 | 出荷に使用する輸送手段です。道路、鉄道、航空、海上などがあります。 | ||
| 説明 この属性は輸送モードを指定します。輸送モードによって、コスト構造、輸送時間、プロセスの複雑さが異なります。たとえば、国際航空貨物には通関などのアクティビティが含まれますが、国内のトラック輸送とは異なります。 輸送モード別にプロセスを分析すると、状況に応じた改善施策を進められます。特に、特急航空輸送などの割高な輸送と、標準的でより経済的な輸送の利用状況を把握するうえで、コスト分析にも欠かせません。この切り分けは、輸送費を理解し、管理するための基盤です。 重要な理由 輸送モードに基づくコスト、時間、プロセスの違いを分析でき、コスト最適化や割高な輸送の利用状況の把握に役立ちます。 入手先 Freight OrderまたはFreight Bookingにある主要フィールドで、Transportation ModeまたはMOTと表示されることがよくあります。 例 01(道路)02(鉄道)04(航空)05(海上) | |||
| 輸送費合計 TotalFreightCost | 出荷について計算または請求された費用の合計です。 | ||
| 説明 輸送費合計は、出荷が財務面に与える影響を表します。輸送管理システムが計算した費用の場合もあれば、精算後に運送会社から請求された最終金額の場合もあります。 この属性により、財務面をプロセス分析に組み込めます。最も費用の高いプロセスバリアント、遅延や経路変更によるコスト、運送会社や輸送モードごとの費用対効果を分析できます。輸送費やサービス提供コストを分析するダッシュボードの基盤となる属性です。 重要な理由 プロセスに財務面を加え、輸送費、出荷1件あたりのコスト、プロセスの非効率が財務に与える影響を分析できます。 入手先 料金計算の完了後、SAP TMのFreight Settlement Documentから取得します。/SCMTMS/D_SFIRHDなどのテーブルにあります。 例 250.751200.005430.50 | |||
| 運送会社名 CarrierName | 出荷を担当する運送会社または物流サービスプロバイダーの名前です。 | ||
| 説明 運送会社名は、商品を実際に輸送する会社を識別します。運送会社によってサービス水準、コスト、信頼性が異なるため、パフォーマンス分析における重要な分析軸です。 プロセスマイニングでは、この属性を使って運送会社ごとのパフォーマンスを分けて比較できます。運送会社別のスコアカードを作成し、納期遵守率を監視し、コストを比較し、遅延や紛争と関連することが多い運送会社を特定できます。運送会社の戦略的な管理や調達に役立つ情報です。 重要な理由 運送会社間のパフォーマンスを比較でき、運送会社の選定、コスト、サービス水準の最適化に役立ちます。 入手先 Freight OrderまたはFreight Bookingの伝票に保存されます。運送会社のビジネスパートナーロールを介して関連付けられます。 例 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 | 出荷先の国です。 | ||
| 説明 この属性は、出荷の最終仕向国を識別します。最後の配送場所の住所から取得されます。 出発国と同様に、仕向国別の分析は地域ごとの物流課題を理解するうえで欠かせません。配送遅延が発生しやすい仕向地や、ラストワンマイル配送費が高い地域の傾向を明らかにできます。ネットワーク最適化、現実的な納期設定、国際貿易に関するコンプライアンス管理に役立つ情報です。 重要な理由 仕向地別にプロセスパフォーマンスを分析し、特定地域、税関当局、ラストワンマイル運送会社に関する問題を明らかにできます。 入手先 Freight Orderの最終停車地点にある仕向地住所情報の一部です。 例 FRCAGBJP | |||
| 最終データ更新日時 LastDataUpdate | プロセスマイニング用データセットを最後に抽出または更新した日時のタイムスタンプです。 | ||
| 説明 この属性は、分析対象データの新しさを示します。SAP TMなどのソースシステムからプロセスマイニングツールへデータを最後に取得した日時を表します。 ダッシュボードや分析における重要なメタデータであり、インサイトがどの時点の情報に基づくものかを把握できます。リアルタイム情報を見ているのか、過去の期間のスナップショットを見ているのかを理解できるため、適切なタイミングで判断するうえで役立ちます。 重要な理由 データの適時性を把握するための重要な情報を提供し、分析がどの程度最新の状態に基づいているかを確認できます。 入手先 通常、データ取り込みの過程でETL(Extract、Transform、Load)ツールまたはデータパイプラインによって生成・保存されます。 例 2023-10-27T08:00:00Z2023-10-26T08:00:00Z | |||
| 出発国 OriginCountry | 出荷元の国です。 | ||
| 説明 この属性は、輸送の出発国を識別します。最初の集荷場所の住所から取得されます。 出発国別にプロセスを分析すると、パフォーマンス、コスト、複雑さにおける地域差を特定できます。通関に時間がかかる国、運送会社のコストが高い国、遅延が頻発する国を明らかにできます。この地理的な切り分けは、グローバルサプライチェーンを管理し、地域ごとに物流戦略を調整するために欠かせません。 重要な理由 出荷パフォーマンスを地理的に分析し、地域ごとのボトルネック、コスト要因、プロセスの違いを特定できます。 入手先 Freight Orderの最初の停車地点にある出発地住所情報の一部です。 例 DEUSCNMX | |||
| 出荷ステータス ShipmentStatus | データ抽出時点における出荷全体の現在のステータスです。 | ||
| 説明 出荷ステータスは、「計画中」「実行中」「配送済み」「キャンセル済み」など、出荷ライフサイクル上の現在位置を示すスナップショットです。ケースについて最後に確認された状態を表します。 この属性を使うと、結果に基づいて出荷を絞り込み、分析できます。たとえば、完了した出荷だけに絞ってプロセス全体のサイクルタイムを測定したり、キャンセルされた出荷だけを分析してキャンセルの根本原因を調べたりできます。プロセスフローを解釈するための重要な情報です。 重要な理由 各出荷の大まかな結果を示し、完了、キャンセル、輸送中のいずれであるかに基づいて絞り込みと分析を行えます。 入手先 SAP TMのFreight OrderまたはFreight Booking伝票のヘッダーにある全体ステータスフィールドです。 例 計画中輸送準備完了実行中実行済みキャンセル済み | |||
| 紛争有無 IsDisputed | 出荷の輸送請求書について紛争が発生したかを示すブール値のフラグです。 | ||
| 説明 輸送精算に関する紛争が関連付けられた出荷を識別する計算フラグです。紛争が作成されている場合はtrue、それ以外はfalseになります。「輸送紛争作成」アクティビティの存在、または「紛争理由」が空でないことから導出できます。 この属性により、輸送精算プロセスの分析が簡単になります。輸送請求差異率KPIを容易に計算し、紛争のある出荷をすべて絞り込めます。そのうえで、運送会社、輸送経路、料金種別など、該当する出荷に共通する特徴を調べ、請求エラーの根本原因を特定できます。 重要な理由 問題のある輸送精算を簡単に特定でき、紛争率の迅速な計算と請求エラーの根本原因分析につながります。 入手先 SAP TMには保存されません。Freight Settlement Documentに紐づく紛争ケースの有無に基づいて計算する必要があります。 例 truefalse | |||
| 紛争理由 DisputeReason | 輸送請求書に対して紛争が申し立てられた際に提示された理由です。 | ||
| 説明 運送会社の請求書がSAP TMで計算された想定費用と一致しない場合、紛争が作成されます。この属性には、「料金誤り」「請求書の重複」「付帯料金の未承認」など、差異の理由が記録されます。 紛争理由の分析は、輸送請求書エラー・紛争率ダッシュボードに欠かせません。マスターデータの問題、運送会社の誤り、業務上の不備など、請求の不正確さの根本原因を特定できます。組織はこの情報に基づいて紛争を減らす対策を講じ、支払いサイクルを短縮し、管理業務の負担を軽減できます。 重要な理由 輸送請求エラーの根本原因を示し、請求書に関する紛争を減らし、精算プロセスを改善するための対策につなげられます。 入手先 Freight Settlement Documentに関連付けられた紛争管理ケースに記録されます。 例 運賃不一致重量誤り未承認の滞船料請求書の重複 | |||
| 遅延理由 DelayReason | 出荷が遅延した理由を説明するコードまたはテキストです。 | ||
| 説明 遅延理由属性は、「悪天候」「通関保留」「運送会社による遅延」など、計画からのずれの原因を記録します。通常、手動で報告するか、運送会社からのイベントメッセージで通知されます。 根本原因分析に役立つ重要な属性です。出荷が遅れたという事実だけでなく、その理由まで把握できます。遅延理由を分類して件数を分析すると、繰り返し発生する問題を特定し、運送会社との連絡改善や混雑を避ける経路の最適化など、影響の大きい領域に改善活動を集中できます。 重要な理由 出荷遅延の「なぜ」を明らかにし、例外を減らし、納期遵守パフォーマンスを改善するための根本原因分析を可能にします。 入手先 「到着/出発遅延」イベントが報告された際、SAP TMのイベント管理フレームワークでイベントコードと理由として記録できます。 例 WEATHER_DELAYCUSTOMS_INSPECTIONPORT_CONGESTIONMECHANICAL_FAILURE | |||
| 集荷予定日時 ScheduledPickupDate | 運送会社が出荷地点から商品を集荷する予定日時です。 | ||
| 説明 集荷予定日時は、実際の輸送開始について合意された時刻です。出荷実行フェーズにおける重要なマイルストーンになります。 輸送の最初の区間が予定どおり進んでいるかを監視するために欠かせません。集荷予定時刻と実際の「商品集荷済み」イベントのタイムスタンプを比較すると、集荷遅延を計算できます。出荷地点と運送会社のパフォーマンスおよび信頼性を評価するのに役立ちます。 重要な理由 集荷の適時性を測定する基準となり、出荷の実輸送が始まる段階での遅延を特定できます。 入手先 SAP TMのFreight Orderにある停車順序へ保存された計画日時です。 例 2023-05-18T09:00:00Z2023-05-30T14:00:00Z2023-06-12T10:30:00Z | |||
輸送管理のアクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| Proof Of Deliveryを受領 | 署名済みのProof of Delivery(POD)文書を運送会社から受領し、システムに記録した時点で発生するアクティビティです。荷受人が貨物を受け入れたことを確認します。 | ||
| 重要な理由 PODの受領は、顧客への請求と運送会社との輸送費精算に欠かせない前提条件です。ここでの遅延は、キャッシュ・ツー・キャッシュサイクルに直接影響します。 入手先 通常は、Freight Orderのステータス変更から推定します。たとえば、PODステータスが「Received」に設定された時点です。このステータスフィールドの変更時刻がアクティビティのタイムスタンプになります。 取得 Freight OrderのProof of Deliveryステータスが「Received」に更新された時点のタイムスタンプを取得します。 イベントタイプ inferred | |||
| 出荷をキャンセル | このアクティビティは、依頼または計画後に出荷がキャンセルされたことを示します。実行に進まないプロセスの終端となります。 | ||
| 重要な理由 キャンセルを追跡することで、顧客需要の変化や計画ミスなど、プロセスが失敗した理由を特定できます。キャンセル率が高い場合、受注管理や計画に根本的な問題がある可能性があります。 入手先 Forwarding OrderまたはFreight Orderのライフサイクルステータスが「Cancelled」に変更されたことから推定します。このステータス変更のタイムスタンプがイベント時刻になります。 取得 文書のライフサイクルステータスが「Cancelled」に設定された時点のタイムスタンプを取得します。 イベントタイプ inferred | |||
| 出荷を計画済みに設定 | このアクティビティは、輸送要件が具体的な出荷計画にまとめられたことを示します。道路・鉄道輸送のFreight Order、または海上・航空輸送のFreight Bookingが、計画経路とリソースを含む形で作成・保存された時点で記録されます。 | ||
| 重要な理由 このマイルストーンを完了することは、物流の実行を開始するために欠かせません。依頼からこのアクティビティまでのサイクルタイムは、計画効率を測定する主要なKPIです。 入手先 このイベントは、Freight OrderまたはFreight Booking文書の作成に対応します。文書のステータスが「Planned」に変わるなど、ステータス変更から推定することもできます。関連するテーブルは通常、ヘッダーデータを格納する/SCMTMS/D_TORROTです。 取得 Freight OrderまたはFreight Booking文書の作成タイムスタンプを使用します。 イベントタイプ explicit | |||
| 支払いを処理 | この最終アクティビティは、運送会社への輸送サービス料金の支払いが完了したことを確認します。通常は、SAP TMから検証済みの請求書を受領した後、接続されたERPシステムで発生します。 | ||
| 重要な理由 エンドツーエンドの輸送ライフサイクルが実際に終了したことを示します。プロセス全体の所要時間と支払い期限遵守KPIを測定するうえで欠かせません。 入手先 この情報はERPシステム(例:S/4HANA Finance)に保存されています。請求書番号を介してFreight Settlement Documentに関連付けられます。ステータス更新がSAP TMへ返される場合もありますが、BKPFやBSEGなどのERPテーブルからデータを取得する必要がある場合もあります。 取得 ERPシステムから支払消込日を取得し、請求書参照情報を介して出荷に関連付けます。 イベントタイプ explicit | |||
| 貨物を配送 | このアクティビティは、出荷が最終目的地に到着し、物理的な輸送が完了したことを示します。運送会社から、荷受人の拠点で貨物の荷下ろしが完了したとの報告を受けた時点で記録されます。 | ||
| 重要な理由 納期遵守率と顧客満足度を測定するうえで、最も重要なマイルストーンです。通常、請求と精算プロセスを開始するトリガーにもなります。 入手先 SAP TMで「Arrival at Destination」または「Unloading End」実行イベントとして記録され、Freight Orderの実行ステータスが更新されます。データは運送会社から受信することが多くあります。 取得 Freight Orderの最終停止地点における「Arrival at Destination」実行イベントの報告タイムスタンプを使用します。 イベントタイプ explicit | |||
| 貨物を集荷 | このアクティビティは、貨物の物理的な輸送が始まったことを示します。運送会社から、貨物の積み込みが完了し、荷送人の拠点を出発したとの報告を受けた時点で記録されます。 | ||
| 重要な理由 これは、輸送実行における重要なマイルストーンであり、輸送中の段階の開始を示します。納期遵守率を追跡し、正確な出荷状況を提供するうえで欠かせません。 入手先 通常は、SAP TMと統合されたSAP Event Managementで、「Departure」または「Loading End」イベントとして記録されます。Freight Orderの実行ステータスが更新されます。Freight Orderに直接記録することもできます。 取得 Freight Orderの出発地における「Departure」実行イベントの報告タイムスタンプを使用します。 イベントタイプ explicit | |||
| 輸送依頼を受領 | このアクティビティは輸送プロセスの開始を示し、輸送要件の作成にあたります。SAP TMでは通常、Forwarding Order(FWO)またはOrder-based Transportation Requirement(OTR)の作成として記録されます。 | ||
| 重要な理由 これはエンドツーエンドの出荷プロセスにおける主要な開始イベントです。このアクティビティから計画完了までの時間を分析することは、計画効率を測定するうえで重要です。 入手先 このイベントは、Forwarding Order(文書タイプFWO)またはその他の輸送要件文書が作成された時点で記録されます。/SCMTMS/D_TORROTなどのヘッダーテーブルにある作成タイムスタンプがイベント時刻になります。 取得 Forwarding Orderまたは輸送要件文書の作成日時を取得します。 イベントタイプ 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 | |||
| 出荷経路を変更 | このアクティビティは、出荷が確定した後に、経路またはスケジュールが予定外に変更されたことを示します。混乱、顧客からの依頼、物流上の問題などが原因となる場合があります。 | ||
| 重要な理由 経路変更は、コストと遅延の増加につながることが多くあります。経路変更の頻度と理由を特定することで、計画の精度と業務の安定性を改善できます。 入手先 実行開始後のFreight Orderについて、区間、場所、日付に大きな変更があったことを検出して推定します。この目的には、変更文書(CDHDRおよびCDPOSテーブル)を分析できます。 取得 「Shipment Confirmed by Carrier」イベント後に、Freight Order文書の主要な経路フィールドに変更があったことを検出します。 イベントタイプ inferred | |||
| 請求書を検証 | このアクティビティは、運送会社の請求書とFreight Settlement Documentの照合が正常に完了し、支払いが承認されたことを示します。ERPシステムで支払いプロセスを開始する前の最終ステップです。 | ||
| 重要な理由 輸送費に関する監査と検証のプロセスが完了します。この段階で遅延が発生すると、運送会社への支払いが遅れ、関係に悪影響を及ぼす可能性があります。 入手先 Freight Settlement Documentのステータス変更から推定します。「Ready for Accrual」または「Transferred for Posting」などのステータスは、支払いのためにERPシステムへ送信されたことを示します。 取得 FSDのライフサイクルステータスが、支払い準備完了または転記済みを示す状態に変わった時点のタイムスタンプを追跡します。 イベントタイプ inferred | |||
| 輸送費に関する異議申立てを作成 | このイベントは、運送会社の請求書とFreight Settlement Documentで計算された費用の間に不一致が見つかったことを示します。これにより、異議解決ワークフローが開始されます。 | ||
| 重要な理由 異議申立ては運送会社への支払いを遅らせ、解決のための事務作業を必要とします。このアクティビティを追跡することで、誤った運賃や付帯料金など、請求の不正確さの根本原因を特定できます。 入手先 Freight Settlement Documentのステータスが「Dispute」に設定された変更から推定できます。別の異議申立てケース文書が作成される場合もあります。 取得 Freight Settlement Documentに異議申立てステータスが設定された時点のタイムスタンプを取得します。 イベントタイプ inferred | |||
| 通関完了 | このアクティビティは、出荷が税関当局に承認され、輸送を続行できる状態になったことを示します。国際物流における大きなマイルストーンであり、重大なボトルネックとなり得る要因を取り除きます。 | ||
| 重要な理由 通関は、グローバルサプライチェーンで大幅な遅延が発生する主な要因の一つです。このアクティビティの所要時間と成功率を追跡することは、国際輸送時間の改善に欠かせません。 入手先 通常は、通関業者または外部の可視化プロバイダーから報告された「Customs Clearance」実行イベントとして取得され、Freight Orderの実行追跡情報に更新されます。 取得 Freight Orderに関連付けられた「Customs Clearance」実行イベントの報告タイムスタンプを使用します。 イベントタイプ explicit | |||
| 通関申告を提出 | 国際出荷の場合、このアクティビティは必要な通関書類を当局へ提出することを示します。貨物の輸出または輸入許可を取得するための前提条件です。 | ||
| 重要な理由 通関申告を適時に提出することは、国境での遅延を避けるうえで重要です。このアクティビティを追跡することで、通関業務の効率を監視できます。 入手先 通関業者から報告された特定の実行イベント、またはSAP GTSなどの統合通関管理システムにおけるステータス変更として取得できます。Freight Orderもそれに応じて更新されます。 取得 「Customs Declaration Filed」実行イベントまたは対応するステータス変更のタイムスタンプを取得します。 イベントタイプ explicit | |||
| 運送会社による出荷確認 | このイベントは、運送会社が計画どおりに輸送を実行することに同意したことを示します。通常は、EDIメッセージ、運送会社ポータルの更新、または手動入力によって確認が届き、Freight Orderのステータスが更新されます。 | ||
| 重要な理由 運送会社の確認により、出荷計画へのコミットメントが明確になり、不確実性が減ります。この確認の受領が遅れると、出荷スケジュール全体が危険にさらされる可能性があります。 入手先 Freight OrderまたはFreight Bookingの確認ステータスフィールドの変更から推定します。文書のステータス管理で「Confirmed」などの値が設定されます。 取得 Freight Order文書内の確認ステータスフィールドの変更を追跡します。 イベントタイプ inferred | |||
抽出ガイド
ステップ
- CDS View APIを特定して有効化:SAP S/4HANAシステムにログインします。トランザクション
/IWFND/MAINT_SERVICEを使用し、主要なCDS Viewに必要なODataサービスが有効になっていることを確認します。I_TransportationOrder、C_TranspOrdExecutionEvent、I_ForwardingOrder、I_FreightSettlementDocumentに関連するサービスを確認してください。有効になっていない場合は、SAP管理者と連携し、バックエンドシステムから追加して有効化します。 - API接続を確立:SAP管理者からODataサービスのルートURLを取得します。requestsライブラリを使用するPythonスクリプト、商用ETLツール、Postmanなどのクライアントアプリケーションを設定し、APIに接続します。通常はBasic Authentication(ユーザー名とパスワード)または、より安全な接続のためのOAuth 2.0を設定します。
- 抽出範囲を定義:データ抽出の範囲を決めます。たとえば、直近6か月など、具体的な期間を設定します。Company Codeなどの関連する組織単位や、Freight Order Typeなどの文書タイプを特定し、分析対象のプロセスに必要なデータだけを抽出します。
- 基本輸送クエリを作成:I_TransportationOrder CDS Viewへのクエリから始めます。このViewは、Freight OrderまたはFreight Bookingとも呼ばれる輸送の中心オブジェクトです。ODataの
$selectパラメーターで必要な列を選択し、CarrierName、ModeOfTransport、RequestedDeliveryDateなどの推奨属性を含めます。$filterを適用し、日付やその他の範囲条件でデータを絞り込みます。 - クエリの実行と輸送イベントの取得:C_TranspOrdExecutionEvent CDS Viewを使用して、主要な物流イベントを抽出します。このViewを
EventCodeの値で絞り込み、「Goods Picked Up」(DEPARTURE)や「Goods Delivered」(ARRIVAL_AT_DESTINATION)などのアクティビティに対応するイベントを取得します。TransportationOrder UUIDを使って、このデータを基本輸送データに結合します。 - 関連する業務オブジェクトを照会:プロセス全体を把握するには、関連する他のCDS Viewも照会する必要があります。I_ForwardingOrderから「Transportation Request Received」アクティビティを、I_FreightSettlementDocumentから「Freight Settlement Created」、「Freight Dispute Created」、「Invoice Verified」などの財務アクティビティを取得します。
- ステータスに基づくアクティビティを抽出:多くのアクティビティは独立したイベントではなく、主要文書のステータス変更として記録されます。「Carrier Assigned」、「Shipment Confirmed By Carrier」、「Shipment Cancelled」などのアクティビティでは、I_TransportationOrder Viewを照会し、該当するステータス項目に関連付けられた
LastChangeDateTimeをイベント時刻として使用します。ステータスコードと業務アクティビティを慎重に対応付ける必要があります。 - データを統合して変換:すべてのソースから抽出したデータを、単一のイベントログ構造に統合します。抽出した各アクティビティについて、ShipmentId、ActivityName、EventTimeの必須列を含む行を作成します。基本輸送クエリで取得した推奨属性は、その輸送に属するすべての行に含めます。この処理は、概念的にはSQLの
UNION ALL操作に相当します。 - 複雑なイベントと外部イベントを処理:「Customs Cleared」や「Payment Processed」などのアクティビティのデータは、特定の項目や外部システムに保存されている場合があります。提示したクエリロジックでは、標準項目を代替情報として使用しています。税関専用のCDS Viewとの結合や、Freight Settlement Document番号に基づく別のERP抽出との関連付けが必要になる場合があります。
- ProcessMind用に整形:最終的に統合したデータセットをCSVファイルとして保存します。アップロード要件に合わせて列見出しを設定し、たとえばツールの設定で
ShipmentId列をCaseIdフィールドに対応付けます。タイムスタンプは、できればUTC(YYYY-MM-DDTHH:MM:SSZ)で統一されていることを確認します。
設定
- 主要なCDS View:抽出では主に、I_TransportationOrder(Freight Order用)、C_TranspOrdExecutionEvent(実行イベント用)、I_ForwardingOrder(輸送依頼用)、I_FreightSettlementDocument(精算用)を使用します。
- 期間による絞り込み:データ量を管理するため、日付フィルターを必ず適用します。I_TransportationOrderの
CreationDateTimeまたはC_TranspOrdExecutionEventのActualBusinessDateTimeを使用します。初回分析では、3~6か月の範囲を推奨します。 - 文書タイプによる絞り込み:分析対象を明確にするため、
TransportationOrderTypeフィールドで特定の文書タイプに絞り込みます。これにより、通常の出荷と在庫移送など、異なる物流シナリオを分けて分析できます。 - 組織フィルター:必要に応じて、
PurchasingOrganizationなどの組織レベルのフィールドで絞り込み、特定の事業部門や地域にデータを限定します。 - APIのページング:大規模なデータセットでは、ODataの
$topと$skipパラメーターを使用して、データを小さなページに分けて取得します。APIのタイムアウトを防ぎ、クライアント側のメモリ消費を抑えられます。1,000~5,000行程度のページサイズが適しています。 - 前提条件:抽出を実行するユーザーまたはサービスアカウントには、基盤となるODataサービス(権限オブジェクトS_SERVICE)とCDS View内の業務データへの権限が必要です。対応するサービスは、SAP Gateway(
/IWFND/MAINT_SERVICE)で有効化されている必要があります。
a サンプルクエリ 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クライアント、データベースView、または抽出サービスを通じて、SAP TMのHANAスキーマに直接読み取りアクセスできることを確認します。関連するSAP TMテーブルを読み取るために必要な接続文字列、認証情報、スキーマ名、権限を取得します。必要なセキュリティ承認と変更承認なしに、本番環境へ直接クエリを実行しないでください。
- システム内の物理テーブル名と列名を確認します。以下のクエリでは、/SCMTMS/D_TORROTと/SCMTMS/D_TOSTOPを主要テーブルとして使用しています。ただし、ステータス、パートナー、日付、コスト、税関、文書、支払いのデータは、SAP TMのリリースや実装によって追加テーブルや拡張に保存されている場合があります。システムカタログとデータモデルで検証した後、文書化されたプレースホルダーだけを置き換えてください。
- [Start timestamp]と[End timestamp]を使用して抽出期間を定義します。初回分析には、通常3~6か月のローリング期間が適しています。クエリの性能とイベント履歴の保持期間を確認してから、より広い期間を指定してください。
- 輸送ケースのキーを特定します。クエリでは、/SCMTMS/D_TORROTのTOR_IDを輸送識別子として使用しています。実装で別の安定した識別子を使用している場合は、すべてのアクティビティ分岐で一貫してケースキーを置き換え、利用可能であれば元の文書識別子を監査用の追加属性として保持します。
- 各業務アクティビティを明示的なソース条件に対応付けます。ProcessMindはイベントログをそのまま読み取るため、クエリは抽出したアクティビティごとに1行を作成します。文書の順序、欠落したタイムスタンプ、ステータスの推移からマイルストーンを推測することはありません。
- ステータスとタイムスタンプの対応付けを、輸送計画担当者および業務プロセス責任者と検証します。特に、依頼作成、計画、運送会社の割り当て、運送会社による確認、集荷、税関申告、通関、ルート変更、配送、POD受領、運賃精算、異議申立て、請求書確認、キャンセル、支払いを表す値を確認してください。
- 承認済みのSQLクライアントでクエリを実行します。イベントごとに1行であること、ShipmentIdがNULLでないこと、ActivityNameがNULLでないこと、EventTimeが有効であることを確認します。1対多の結合による重複行を確認し、必要に応じてソースの対応付けまたは集計ロジックを調整します。
- 対応するソースフィールドが利用できる場合は、推奨属性を結果に追加します。クエリには、システム固有のメタデータなしでは安全に命名できないフィールド用のプレースホルダーが含まれています。検証済みの列または承認済みのViewだけでプレースホルダーを置き換えてください。
- 最終的なデータ品質ルールを適用します。ケース識別子またはイベントタイムスタンプがない行を削除し、タイムスタンプを1つのタイムゾーンに統一し、監査用にソースのタイムスタンプを保持します。また、EndTimeがEventTimeより前にならないようにします。ソースレコードが欠落している場合に、合成イベントを作成しないでください。
- 結果をUTF-8のCSV、またはProcessMindが対応する別の表形式でエクスポートします。列名には必ずShipmentId、ActivityName、EventTimeを使用します。値が入力されている場合は、EndTimeと推奨属性も含めます。ファイルをアップロードするか、承認済みのクエリ結果をProcessMindに接続し、Shipmentのケース識別子とActivity Nameフィールドが正しく対応付けられていることを確認します。
設定
- 主要なソーステーブル:輸送オーダーまたはFreight Orderのルートデータには/SCMTMS/D_TORROTを、停止地点とマイルストーンのデータには/SCMTMS/D_TOSTOPを使用します。追加のソースオブジェクトは、導入前に対象のSAP TMシステムで検証してください。
- ケース識別子:安定した輸送またはFreight Orderの識別子を使用します。サンプルクエリでは、TOR_IDをShipmentIdとして使用しています。この識別子が、計画、実行、精算、ERPの支払いレコードを通じて変わらないことを確認してください。
- アクティビティの対応付け:必須の15アクティビティすべてに、明示的なソース条件を設定します。各アクティビティは、物理的なイベントログの行として出力する必要があります。ProcessMindが他の行からアクティビティを導出することはありません。
- 期間:まず3~6か月分の履歴から始めます。各ソース分岐で、できるだけ早い段階にEventTimeの条件を適用します。増分ロードでは、管理されたウォーターマークを使用し、遅れて更新されたデータを取得できるよう短い重複期間を設けます。
- 業務フィルター:実装に応じて、会社コード、購買組織、販売組織、文書タイプ、輸送モード、運送会社、プラント、ロケーション、ステータスのフィルターを設定します。該当するフィールドを検証できていない場合は、[Company code filter]などのプレースホルダーを使用します。
- タイムスタンプの処理:ソースのタイムスタンプを一貫したタイムゾーンに変換します。ソースに日付と時刻が別々に保存されている場合は、HANAリリースでサポートされるシステム固有の変換方法で結合します。監査性が必要な場合は、元のソースタイムスタンプを保持します。
- 推奨属性:CarrierName、RequestedDeliveryDate、ModeOfTransport、TotalFreightCost、IsOnTimeDeliveryには、検証済みのソースフィールドまたは承認済みの計算Viewの値を設定します。信頼できる値がソースにない場合は、NULLのままにします。
- 性能:期間を限定し、必要な列だけを取得し、結合前にフィルターを適用します。無制限の全テーブルスキャンを避け、HANAの実行計画を確認してください。大規模なデータセットでは、パーティションを考慮した条件、増分抽出、ステージングテーブル、または承認済みの計算Viewを使用します。
- 重複制御:1対多の結合により、1つのアクティビティに複数の行が生成される場合があります。検証済みのイベントキー、ソース文書キー、または決定的な集計ルールを使用します。正当な繰り返しイベントを削除する可能性がある、任意の重複排除は行わないでください。
- 前提条件:必要なデータベース権限、SAP TMデータへのアクセス、接続されたERPまたは精算データへのアクセス、承認済みの抽出ツール、関連するSAP TMモジュール、連携、カスタム拡張が有効であることの確認が必要です。
- システム固有の対応付け:ステータスコード、パートナーロール、税関マイルストーン、精算ステータス、請求書ステータス、支払いステータスは、リリースや設定によって異なります。対応付けを管理された設定文書で維持し、アップグレード後にテストしてください。
a サンプルクエリ 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システム内の特定のステータス変更、作成イベント、文書リンクに各アクティビティを対応付けます。たとえば、「Goods Picked Up」を示す正確な実行ステータスを特定します。
- ABAP開発環境にアクセス:SAP GUIにログインし、トランザクションコード
SE38でABAP Editorを開きます。新しいプログラム名を入力します。たとえば、ZTM_PROCESS_EXTRACTと入力して「Create」をクリックします。タイトルを入力し、プログラムタイプを「Executable Program」に設定します。 - 選択画面を作成:プログラム内で、ユーザーが操作する選択画面を定義します。Freight Orderの作成日(
SO_CREDT)の期間や、文書タイプ(SO_TYPE)または運送会社(SO_CARR)のselect-optionsなど、データを絞り込むパラメーターを含めます。 - 出力構造を定義:必要なイベントログ形式に一致する内部テーブル構造を定義します。ShipmentId、ActivityName、EventTime、EndTime、CarrierName、RequestedDeliveryDate、ModeOfTransport、TotalFreightCost、IsOnTimeDeliveryのフィールドを含めます。
- データ選択ロジックを実装:15アクティビティそれぞれのデータを選択するABAPロジックを記述します。通常は複数のSAP TMテーブルを照会します。まず、指定した期間内のFreight Orderなど、主要な輸送文書を選択します。
- 計画イベントと実行イベントを抽出:選択した輸送文書(Freight Orderなど)ごとに、関連テーブルと業務オブジェクトを照会し、各イベントのタイムスタンプを取得します。Freight Orderの作成(「Shipment Planned」)、運送会社の割り当て(「Carrier Assigned」)、および「Goods Picked Up」と「Goods Delivered」に対応する実行ステータスの変更には、テーブル
/SCMTMS/D_TORROTを使用します。前段のForwarding Order(/SCMTMS/D_TRQROT)の作成は、「Transportation Request Received」を示す情報として使用できます。 - 運送会社による確認とルート変更を抽出:Freight Orderに関連するステータステーブルまたは変更文書(CDHDR/CDPOS)を照会し、
CONFIRMATIONステータスが設定された時刻を特定します。これにより「Shipment Confirmed By Carrier」を取得できます。同様に、ルート情報の重要な変更を確認し、「Shipment Rerouted」を取得します。 - 税関イベントを抽出:SAP Global Trade Services(GTS)または同様のモジュールを使用している場合、「Customs Declaration Filed」と「Customs Cleared」は、リンクされた文書で管理されることが多くあります。ロジックでは、Freight Orderの文書フロー(
/SCMTMS/D_TORDOC)を読み取り、関連文書とその作成時刻またはステータス変更時刻を特定します。 - 精算イベントと異議申立てイベントを抽出:Freight Settlement Documentのヘッダーテーブル(
/SCMTMS/D_SFIRHD)と関連する明細およびステータスを照会し、「Freight Settlement Created」、「Freight Dispute Created」、「Invoice Verified」イベントを取得します。これらを元のShipmentIdに関連付けます。 - データを統合:見つかった各イベントについて、最終的な内部テーブルに新しいレコードを作成します。ActivityNameには対応するアクティビティ、EventTimeにはイベントのタイムスタンプ、ShipmentIdにはFreight OrderまたはFreight BookingのIDを設定します。その他の属性には、ソース文書の値を入力します。
- ファイルを整形してエクスポート:最終的な内部テーブルの作成が完了したら、データをフラットファイルに整形します。
OPEN DATASET、LOOP AT... TRANSFER...、CLOSE DATASETコマンドを使用し、内部テーブルの内容をSAPアプリケーションサーバー上のCSVまたはTXTファイルに書き込みます。ファイルはトランザクションAL11からアクセスできます。 - スケジュールと取得:ABAPプログラムは、バックグラウンドジョブ(トランザクションSM36)としてスケジュールし、データを自動抽出できます。生成されたファイルは、トランザクション
CG3Yを使用してアプリケーションサーバーからローカルマシンにダウンロードし、ProcessMindにアップロードできます。
設定
- 期間:選択画面には、主要な輸送文書(Freight Orderなど)の作成日に対する必須の期間を含めます。初回分析では、代表性のあるデータセットを確保しながら実行時間が過度に長くならないよう、3~6か月の範囲を推奨します。
- 文書タイプフィルター:Transportation Document Type(Freight Order、Freight Bookingなど)のフィルターを用意します。道路輸送と海上輸送など、特定のプロセスに分析対象を絞り込むために欠かせません。
- 運送会社フィルター:特定の運送会社で絞り込めるようにします。個々の物流パートナーのパフォーマンスを分析しやすくなります。
- 組織フィルター:Purchasing OrganizationやCompany Codeなど、関連する組織単位のフィルターを含め、特定の事業領域に抽出範囲を限定します。
- 性能の最適化:大規模なデータセットでは、ABAPコードの
WHERE句でインデックス付きのデータベースフィールドを使用し、可能な限りネストしたループを避け、必要なフィールドだけをデータベースから選択してメモリ消費を抑えます。 - 前提条件:レポートを実行するユーザーには、ABAPプログラムを実行する権限が必要です。開発者には
S_DEVELOP権限が必要です。プログラム自体には、アプリケーションサーバー上のファイルシステムへのアクセス(オブジェクトS_DATASET)と、関連するTMデータベーステーブルおよびBOPFオブジェクトへのアクセス権限が必要です。
a サンプルクエリ 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%短縮します。
クレジットカードは不要です。数分で設定できます。