お客様の生産計画データテンプレート
お客様の生産計画データテンプレート
- 生産計画分析のための推奨アトリビュート
- 追跡すべき主要な生産計画活動
- SAP S/4HANA向け詳細データ抽出ガイド
生産計画アトリビュート
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ Activity | 生産計画プロセス内の特定の時点で発生したイベントまたはタスクの名前です。 | ||
| 説明 このアトリビュートは、生産オーダーライフサイクルにおける個別のステップとマイルストーンを記録します。例として、「生産オーダー登録済み」、「資材利用可能性チェック済み」、「生産開始済み」、「オーダー財務完了」などがあります。各活動は、システムに記録された特定の行動またはステータス変更を表します。 これらの活動のシーケンスと頻度を分析することがプロセスマイニングの核心です。これにより、プロセスフローを可視化し、標準手順からの逸脱を特定し、「生産計画調整済み」のような遅延や頻繁な手戻りを引き起こす活動を正確に特定するのに役立ちます。 その重要性 プロセスのステップを定義し、実際の生産ワークフローとそのバリエーションの発見と可視化を可能にします。 取得元 JESTやJCDSのようなテーブルのステータス変更、使用されたトランザクションコード(例: 作成のためのCO01)、またはAFRUの特定の確認記録から導出されます。 例 生産オーダー登録済み生産オーダーリリース済み生産開始済み最終確認入力済み入庫記帳済み | |||
| 生産オーダー ProductionOrder | 生産計画プロセスの主要なケース識別子として機能する、生産オーダーの一意の識別子です。 | ||
| 説明 生産オーダー番号は、SAP S/4HANAによって生成される一意のキーであり、特定の製品数量の製造に関連するすべての活動を管理および追跡します。計画とリリースから実行、最終決済まで、すべての関連イベントを結びつけます。 プロセスマイニングにおいて、このアトリビュートは、すべての関連イベントを単一のエンドツーエンドのプロセスインスタンスにグループ化するために不可欠です。生産オーダー別にプロセスを分析することで、サイクルタイム、スケジュール順守、特定の生産実行に影響を与えるボトルネックの特定などの主要なパフォーマンス指標を測定できます。 その重要性 すべてのプロセスステップを接続する基本的な属性であり、開始から完了までの生産ライフサイクルの完全なケースレベル分析を可能にします。 取得元 これは生産オーダー番号であり、通常、AFKO(フィールドAUFNR)やAFPOのようなSAPテーブルで見つけることができます。 例 100056710008341001299 | |||
| 開始時刻 StartTime | 特定のアクティビティまたはイベントが開始されたことを示すタイムスタンプです。 | ||
| 説明 このアトリビュートは、生産プロセスにおける記録されたすべてのイベントの日時を提供します。これは、すべての時間ベースのプロセス分析の時間的な基盤となります。 開始時間は、活動間の期間を計算し、生産オーダーの総サイクルタイムを測定し、イベントのタイミングを理解するために不可欠です。実際のタイムスタンプと計画日を比較することで、ボトルネック、待機時間、スケジュール順守の分析を可能にします。 その重要性 すべてのイベントに時系列のコンテキストを提供し、プロセスパフォーマンス、期間、およびボトルネックの分析を可能にします。 取得元 この情報は通常、ステータス変更用の変更伝票テーブル(CDHDR/CDPOS)、実行ステップ用の確認テーブル(AFRU)、および登録日付用のヘッダーテーブル(AFKO)にあります。 例 2023-10-26T09:00:00Z2023-10-26T14:30:00Z2023-10-27T08:15:00Z | |||
| ソースシステム SourceSystem | 生産計画データが抽出されたシステムです。 | ||
| 説明 このアトリビュートはデータの発生元を特定するもので、複数の統合システムがある環境では不可欠です。このプロセスの場合、通常は特定のSAP S/4HANAインスタンスになります。 より広範なデータ分析の文脈では、ソースシステムを知ることでデータの整合性を確保し、異なるソースからのデータを結合する際に適切なコンテキストを提供できます。これは、データガバナンスとトレーサビリティのための基本的なメタデータの一部です。 その重要性 データガバナンスのための重要なメタデータを提供し、プロセスデータの発生源とコンテキストが明確であることを保証します。 取得元 これは通常、データ抽出プロセス中にSAP S/4HANAクライアントおよびシステムID(SID)を識別するために追加される静的な値です。 例 S4P_100S4H_PRD_200S4Q_300 | |||
| 最終データ更新 LastDataUpdate | ソースシステムからの最終更新または抽出日時を示す timestamp。 | ||
| 説明 このアトリビュートは、最新のデータ抽出の日時を記録します。これは、ユーザーが分析しているデータの鮮度を知らせる重要なメタデータです。 最終更新時刻を知ることは、分析を正しく解釈するために不可欠です。ユーザーがリアルタイム情報を見ているのか、特定の時点のスナップショットを見ているのかを理解するのに役立ち、データに基づいて行われる発見や決定の関連性に影響を与えます。 その重要性 ユーザーがデータの適時性を認識していることを保証し、これは正確で関連性の高いビジネス意思決定を行う上で重要です。 取得元 この 例 2024-05-21T02:00:00Z2024-05-22T02:00:00Z2024-05-23T02:00:00Z | |||
| `品目コード` MaterialNumber | 生産オーダーで製造される製品の一意の識別子です。 | ||
| 説明 品目番号は、生産オーダーが生産を目指す品目を指定します。これにより、生産プロセスと、部品表(BOM)や製造ルーティング情報を含む品目のマスタデータが関連付けられます。 品目番号別にプロセスを分析することで、特定の製品が遅延、手戻り、資材不足に陥りやすいかどうかを特定できます。これにより、計画パラメータの調整や特定の構成品目のサプライチェーン改善など、製品固有のプロセス最適化が可能になります。 その重要性 製造されている製品に基づいたフィルタリングと分析を可能にし、製品固有の非効率性やボトルネックを明らかにします。 取得元 生産オーダー明細テーブルAFPO(フィールドMATNR)で見つかります。 例 RM-1001FG-2050SA-3100-B | |||
| 作業センター WorkCenter | 作業を担当する特定の機械、機械群、または組み立てエリアです。 | ||
| 説明 作業区とは、工場内で生産ステップが実行される特定の運用単位を指します。単一の機械、生産ライン、または従業員のグループである場合があります。 作業区別にプロセスデータを分析することは、能力ボトルネックを特定し、リソース割り当てを最適化する上で重要です。これにより、どの作業区が過負荷であるか、どの作業区が十分に活用されていないか、そして生産実行フェーズ中に遅延が最も頻繁に発生している場所はどこかといった疑問に答えるのに役立ちます。これは、能力ボトルネック特定ダッシュボードにとって不可欠です。 その重要性 ボトルネックとなっている特定の機械や生産ラインを正確に特定するのに役立ち、能力とリソース活用におけるターゲットを絞った改善を可能にします。 取得元 生産オーダーの作業データ、テーブルAFVC(フィールドARBPL)で見つかります。 例 WC-ASSEMBLY-01WC-MILLING-05WC-PACKING | |||
| 受注`ステータス` OrderStatus | 生産オーダーの現在の処理ステータス(登録済み、リリース済み、技術的完了など)です。 | ||
| 説明 オーダーのステータスは、生産オーダーのライフサイクルにおける全体的な段階を示します。これは、オーダーに適用される様々なシステムステータスとユーザー定義ステータスの要約です。一般的なステータスには、CRTD(登録済み)、REL(リリース済み)、CNF(確認済み)、TECO(技術的完了)、CLSD(クローズ済み)があります。 オーダーの現在のステータスを分析することは、仕掛中の状況を理解するのに役立ちます。プロセスマイニングでは、これらのステータス間の時間の経過に伴う遷移を追跡することで、活動ログが生成され、プロセスフローと各段階で費やされた期間の詳細なビューが可能になります。 その重要性 オーダーのライフサイクル段階のハイレベルなビューを提供し、プロセスマイニングのための活動シーケンスを導出する上で基本的です。 取得元 AFKOのオブジェクト番号(フィールドOBJNR)を介してリンクされた、テーブルJESTに保存されているシステムステータスから導出されます。 例 CRTDREL(リリース済み)TECOCLSD | |||
| 工場 Plant | 生産オーダーが実行されている製造施設または場所です。 | ||
| 説明 プラントは、SAPにおける生産拠点または施設を表す組織単位です。各生産オーダーは、製造活動が行われる特定のプラントに割り当てられます。 このアトリビュートは、異なる製造拠点間での比較分析に不可欠です。プラント別にプロセスデータをセグメント化することで、組織はパフォーマンスをベンチマークし、サイト固有の問題やベストプラクティスを特定し、効率、能力、または標準への順守における地域差を理解することができます。 その重要性 異なる生産拠点間のパフォーマンス比較を可能にし、ベストプラクティスの特定と共有、または場所固有の問題への対処に役立ちます。 取得元 生産オーダーヘッダーテーブルAFKO(フィールドDWERK)で見つかります。 例 100017102000 | |||
| 計画終了日 PlannedEndDate | 初期計画に基づく生産オーダーのスケジュール完了日です。 | ||
| 説明 計画終了日は、オーダーのすべての生産活動が完了する予定の目標日付です。この日付は、生産計画のスケジューリング段階で決定されます。 このアトリビュートは、スケジュール順守を測定するために不可欠です。計画終了日を実際の完了タイムスタンプと比較することで、組織は生産スケジュール順守率KPIを計算し、遅延しているオーダーを特定できます。この分析は、計画精度と顧客満足度の向上にとって重要です。 その重要性 スケジュール遵守を測定するためのベースラインとして機能し、計画の正確性と実行の効率性を評価するのに役立ちます。 取得元 生産オーダーヘッダーテーブルAFKO(フィールドGLTRP)で見つかります。 例 2023-11-152023-12-012024-01-20 | |||
| ユーザー User | 生産オーダーイベントを登録、変更、または確認したユーザーのシステムIDです。 | ||
| 説明 このアトリビュートは、オーダーのリリースや確認入力など、特定のトランザクションまたはステータス変更に関連付けられたSAPユーザーIDをキャプチャします。これにより、システム内で実行されたアクションの追跡可能性が提供されます。 ユーザー別に活動を分析することは、ワークロードの分散を理解し、トレーニングニーズを特定し、手順への準拠を保証するのに役立ちます。たとえば、特定のユーザーが頻繁に計画調整に関与しているか、遅延が特定のチームに関連しているかなどを明らかにできます。 その重要性 説明責任を提供し、ワークロード、ユーザー固有の行動、および潜在的なトレーニング機会の分析を可能にします。 取得元 通常、変更伝票ヘッダー(CDHDR、フィールドUNAME)または確認記録(AFRU、人事番号のフィールドPERNR)に記載されています。 例 CB9980000021JSMITHPLANNER01 | |||
| 手戻り IsRework | 生産開始後に手直しや大幅な計画調整があったかどうかを示すフラグ。 | ||
| 説明 このブールアトリビュートは、生産開始後に是正措置や計画変更が行われた生産オーダーを特定するために導出されます。これは、明示的な手直し活動または「生産開始済み」イベントの後に発生する「生産計画調整済み」イベントによってトリガーされる可能性があります。 このフラグは、生産手直し率KPIの計算と、「生産手直しと改訂ダッシュボード」にとって極めて重要です。これにより、問題のあるケースを簡単にフィルタリングおよび分析でき、コストのかかる手直しにつながる品質問題やプロセス逸脱の根本原因を明らかにすることができます。 その重要性 手直しを伴うケースを隔離し、品質問題、プロセス逸脱、および関連コストを理解し削減するためのターゲットを絞った分析を可能にします。 取得元 計算フィールド。同一ケース内で「生産開始」活動の後に「生産計画調整済み」活動が発生した場合、または特定の手直しオーダータイプが使用された場合にtrueに設定されます。 例 truefalse | |||
| 期限内である IsOnTime | 生産オーダーが計画終了日以前に完了したかどうかを示すフラグ。 | ||
| 説明 この計算されたブールアトリビュートは、実際の完了日と計画終了日を比較することで、スケジュール順守を直接測定します。各生産オーダーの納期遵守に関して、明確な二者択一の結果を提供します。 このアトリビュートは、「生産スケジュール順守率KPI」の基礎となります。これにより、オンタイムのオーダーと遅延したオーダーを簡単にセグメント化して分析を簡素化し、遅延に関連する共通の特性やプロセスパスを特定するのに役立ちます。 その重要性 各オーダーのスケジュール遵守を明確かつシンプルに測定する手段を提供し、遅延の根本原因分析を容易にします。 取得元 計算フィールド。「オーダー技術的完了」活動のタイムスタンプが「計画終了日」属性以下である場合にtrueに設定されます。 例 truefalse | |||
| 注文タイプ OrderType | 生産オーダーの目的を定義し、その処理を制御する分類。 | ||
| 説明 オーダータイプは、SAP PPにおける主要な設定要素であり、システムが生産オーダーをどのように処理するかを決定します。番号範囲、マスタデータ選択、原価計算パラメータ、および決済ルールを制御します。例としては、標準生産オーダー、手直しオーダー、試作オーダーなどがあります。 オーダータイプ別にプロセスを分析することで、異なる種類の生産プロセスのパフォーマンスとフローを比較できます。これにより、手直しオーダーが著しく時間がかかるか、特定のオーダータイプが計画調整に頻繁に陥るかどうかが明らかになり、的を絞ったプロセス改善のための貴重なインサイトを提供します。 その重要性 オーダーのビジネス目的に応じた分析のセグメンテーションを可能にし、標準生産、手直し、その他のプロセス間の比較を可能にします。 取得元 生産オーダーヘッダーテーブルAFKO(フィールドAUART)で見つかります。 例 PP01PP03ZP01 | |||
| 生産サイクルタイム ProductionCycleTime | 生産オーダーのリリースから技術的完了までの総経過時間です。 | ||
| 説明 この計算された指標は、生産オーダーの実行におけるライフサイクルのエンドツーエンドの期間を測定します。これは、生産プロセス全体の効率を反映する主要なパフォーマンス指標です。 このアトリビュートは、「生産オーダーリードタイム概要ダッシュボード」および「平均生産オーダーサイクルタイムKPI」の主要な測定値です。待機時間と処理時間などの構成要素を分析することで、プロセス加速とリードタイム短縮の最大の機会を特定するのに役立ちます。 その重要性 これは、全体的な生産効率を測定し、オーダー履行を加速する機会を特定するための重要なKPIです。 取得元 各生産オーダーについて、「生産オーダーリリース」活動と「オーダー技術的完了」活動間の期間を求めることで計算されます。 例 P5DT12H30MP10DT2HP3D | |||
| 生産優先度 ProductionPriority | 生産オーダーの緊急性または重要性を示すために割り当てられるコードまたは値。 | ||
| 説明 生産優先度は、特にリソースが制約されている場合に、計画担当者やスケジューラーがオーダーの順序付けと優先順位付けを行うために使用します。理想的には、優先度の高いオーダーは優先度の低いオーダーよりも先に処理されるべきです。 このアトリビュートを分析することで、割り当てられた優先順位が現場で遵守されているかどうかを評価できます。「生産優先度の一貫性ダッシュボード」は、処理順序と割り当てられた優先順位を比較して不整合を特定します。これにより、スケジューリングの規律を改善し、計画と実行の整合性を高めることができます。 その重要性 生産スケジューリングがビジネス優先順位に従っているかを判断するのに役立ち、重要なオーダーが意図通りに迅速化されることを保証します。 取得元 これは多くの場合、カスタムフィールドまたは他のオーダーパラメータに基づいています。特定の場所は構成に依存します。 例 高中低15 | |||
| 確認済み数量 TotalConfirmedQuantity | オーダーに対して生産が確認された資材の総数量です。 | ||
| 説明 このアトリビュートは、生産確認を通じて報告された完成品または半製品の累積数量を表します。これは、完了目標に向けたオーダーの進捗を追跡します。 確認数量を計画数量と比較することは、生産進捗を監視し、歩留まりの問題や不一致を特定するのに役立ちます。これは出力の基本的な尺度であり、スクラップ率や効率など、さまざまなパフォーマンス計算で使用されます。 その重要性 生産オーダーの実際の生産量を追跡し、これは進捗の監視、生産量の計算、および不一致の特定に不可欠です。 取得元 AFRUの確認記録(生産量を示すLMNGAフィールド)から集計。 例 9801000501200 | |||
| 終了日時 EndTime | 特定のアクティビティ/イベントが完了したタイムスタンプ。 | ||
| 説明 このアトリビュートは、記録されたすべてのイベントの完了日時を提供します。これは、活動の期間を定義するために開始時間を補完します。 終了時間は、個々の活動の正確な処理時間を計算するために不可欠であり、これは能力およびリソース利用分析の主要なインプットとなります。アクティブな作業時間とアイドル時間または待機時間を区別するのに役立ち、より正確なボトルネック特定につながります。 その重要性 正確な活動期間の計算を可能にし、これはリソース効率の分析とプロセスボトルネックの特定に不可欠です。 取得元 実行ステップの場合、確認テーブル(AFRU)で見つかります。他のイベントの場合、イベントが瞬間的であれば開始時間と同じである可能性があります。 例 2023-10-26T09:45:00Z2023-10-26T15:00:00Z2023-10-27T10:30:00Z | |||
| 計画開始日 PlannedStartDate | 初期計画に基づく生産オーダーのスケジュール開始日です。 | ||
| 説明 計画開始日は、オーダーの生産活動が開始される予定の目標日付です。これはスケジューリングプロセスの主要な出力です。 このアトリビュートは、スケジュール順守分析の開始基準を提供します。計画開始日を実際の開始時間と比較することで、資材準備やオーダーリリースなどの初期段階の遅延を理解するのに役立ち、これは生産タイムライン全体に連鎖的な影響を与える可能性があります。 その重要性 開始時間遵守を測定するためのベースラインを提供し、オーダーリリースや資材利用可能性などの生産前段階での遅延を特定するために不可欠です。 取得元 生産オーダーヘッダーテーブルAFKO(フィールドGSTRP)で見つかります。 例 2023-11-102023-11-252024-01-15 | |||
| 資材利用可能ステータス MaterialAvailabilityStatus | 生産オーダーに必要なすべての資材が利用可能であるかどうかを示します。 | ||
| 説明 このステータスは、生産オーダーに対して実行された資材利用可能性チェックの結果を反映しています。すべての資材が利用可能であるか、一部が不足しているか、またはチェックが実行されていないかを示すことができます。「不足」ステータスは潜在的な遅延の主要なトリガーとなります。 このアトリビュートは、資材不足影響分析ダッシュボードにとって極めて重要です。不足ステータスをオーダーリリースから生産開始までの時間と関連付けることで、資材不足によって引き起こされる遅延を定量化するのに役立ちます。この指標を改善することは、よりスムーズな生産フローの鍵となります。 その重要性 オーダーリリースと生産開始間の遅延を直接説明し、サプライチェーンの問題が製造に与える影響を定量化するのに役立ちます。 取得元 これはステータスであり、多くの場合、構成品目の集合ステータスから導出されます。「MSPT」(資材不足)のようなステータスとしてシステムステータス(JEST)で見つけることができます。 例 利用可能不足未チェック | |||
生産計画活動
| アクティビティ | 説明 | ||
|---|---|---|---|
| オーダー技術的完了 | これは、品目移動や確認など、オーダーに対するさらなるロジスティクス変更を防止する管理上のクローズステップです。オーダーはロジスティクス観点から完了したと見なされます。 | ||
| その重要性 TECOは生産プロセスの明確な終了点であり、総生産オーダーサイクルタイムの計算に不可欠です。すべてのロジスティクス活動が完了し、オーダーが財務決済の準備ができたことを示します。 取得元 これは、ユーザーがステータスをTECO(技術的完了)に設定することによってトリガーされます。このイベントは、JCDSテーブルにステータス変更として対応するタイムスタンプとともに捕捉されます。 取得 JCDSテーブルにおける「TECO」へのステータス変更のタイムスタンプ。 イベントタイプ inferred | |||
| 入庫記帳済み | このイベントは、生産ラインから完成品が在庫に受入されたことを記録します。生産された資材の在庫レベルを正式に増加させます。 | ||
| その重要性 これは、生産完了を示す重要なマイルストーンです。納期遵守と全体的なリードタイムを測定するための生産サイクルの終了としてしばしば見なされます。 取得元 これは、資材伝票テーブルMSEG(明細レベル)とMKPF(ヘッダーレベル)に記録される明示的な財務記帳であり、通常、移動タイプ101を使用します。これらの伝票は生産オーダーにリンクされています。 取得 移動タイプ101でオーダーにリンクされたMSEGの品目伝票を検索します。 イベントタイプ explicit | |||
| 最終確認入力済み | この活動は、生産オーダーのルーティングにおける最後の作業の確認を示します。これにより、計画されたすべての製造ステップが現場で完了したことを意味します。 | ||
| その重要性 最終確認は、物理的な生産作業の終了を示す重要なマイルストーンです。最終的な入庫の前に、現場のサイクルタイムを測定するためのより正確な終了点としてよく使用されます。 取得元 AFRUテーブルの確認データから推測されます。「最終確認」インジケーター(AFRUD-AUERU)が設定されている最後の作業順序(AFVC-VPLNR)の確認記録として識別されます。 取得 AFRUで最終確認フラグが設定されている最後の作業確認を見つけます。 イベントタイプ inferred | |||
| 生産オーダーリリース済み | これは、生産オーダーが承認され、現場での実行が可能になる重要なマイルストーンです。リリースにより、出庫、確認、およびその他の実行ステップを開始できます。 | ||
| その重要性 このイベントは、実行可能な生産プロセスの公式な開始を示し、リードタイムを測定するための重要なポイントです。登録からリリースまでの時間は、生産前効率の主要なKPIです。 取得元 リリースはユーザーまたはシステムジョブによって明示的にトリガーされ、ステータスがRELになります。このステータス変更はJCDSテーブルにタイムスタンプとともに記録されます。リリース日はAFKO-FTRMIにもよく保存されます。 取得 JCDSテーブルにおける「REL」へのステータス変更のタイムスタンプ。 イベントタイプ inferred | |||
| 生産オーダー登録済み | これは、システムにおける生産オーダーの初期登録であり、特定の製品数量を生産するための正式な要求として機能します。このイベントは、ユーザーが新しいオーダーを保存し、その初期ステータスをCRTD(登録済み)に設定する際に明示的に捕捉されます。 | ||
| その重要性 生産オーダーライフサイクルの開始を示します。作成からリリースまでの時間を分析することで、生産が正式にスケジュールされる前の管理上または計画上の遅延を特定するのに役立ちます。 取得元 このイベントは、AUFKテーブル(オーダーマスタデータ)に登録日(ERDAT)とともに記録されます。登録ステータス(CRTD)は、オーダーのオブジェクト番号(OBJNR)を介してリンクされたJESTおよびJCDSテーブルにログ記録されます。 取得 AUFK-ERDATまたはJCDSの「CRTD」へのステータス変更ログからのタイムスタンプ。 イベントタイプ explicit | |||
| 生産計画調整済み | 生産オーダーがリリースされた後に、数量、日付、部品表などの重要な変更が行われたことを示します。これは変更伝票を分析することで把握されます。 | ||
| その重要性 頻繁な調整は、計画の不安定性や需要の変動性を示している可能性があります。この活動は生産計画改訂率KPIの基礎となり、プロセス変動性の原因を特定するのに役立ちます。 取得元 生産オーダーオブジェクト(AUFKまたはAFPO)のCDHDR(変更伝票ヘッダー)およびCDPOS(変更伝票明細)テーブルに記録された変更ログから推測されます。リリース日以降に行われた変更は調整と見なされます。 取得 リリースイベント後の主要フィールド(例: 数量、日付)におけるCDHDR/CDPOSの変更を特定します。 イベントタイプ inferred | |||
| 生産開始済み | オーダーの物理的な生産活動の開始を示します。これは通常、最初の現場確認またはオーダーに対する部品の最初の出庫から推測されます。 | ||
| その重要性 この活動は、計画から実行への移行を示します。実際の開始日を計画開始日と比較することで、スケジュール順守を追跡するために不可欠です。 取得元 これは推測されるイベントです。通常、品目移動記帳(MSEGテーブル、移動タイプ261)またはオーダーに関連する時間確認記帳(AFRUテーブル)の最も早いタイムスタンプから導出されます。 取得 オーダーのAFRU(確認)またはMSEG(品目移動)からの最も早いタイムスタンプ。 イベントタイプ inferred | |||
| オーダー財務的に完了 | オーダーが決済され、それ以上の財務記帳が不可能となる最終的なクローズステップです。これは、管理会計の観点からオーダーのライフサイクルの終了を意味します。 | ||
| その重要性 純粋な生産分析の範囲外となることが多いですが、この活動は完全なエンドツーエンドのビューを提供します。ロジスティクス完了(TECO)と財務決済の間の時間を分析するのに役立ちます。 取得元 これは、ユーザーがステータスをCLSD(クローズ済み)に設定することによってトリガーされます。このイベントは、JCDSテーブルにステータス変更として対応するタイムスタンプとともに捕捉されます。 取得 JCDSテーブルにおける「CLSD」へのステータス変更のタイムスタンプ。 イベントタイプ inferred | |||
| 生産オーダーキャンセル済み | 生産オーダーが完了する前にキャンセルされたことを示します。これは、プロセスの代替的で失敗した最終状態です。 | ||
| その重要性 キャンセルされたオーダーを分析することで、需要計画、マスタデータ、または販売プロセスにおける問題が明らかになります。高いキャンセル率は、対処すべきシステム上の問題を示している可能性があります。 取得元 これは、JCDSテーブルでシステムステータスCACL(キャンセル)が設定されたことから推測されます。あるいは、削除フラグ(AUFK-LOEKZ)もキャンセルを示すことがあります。 取得 JCDSの「CACL」へのステータス変更、またはAUFKの削除フラグ設定のタイムスタンプ。 イベントタイプ inferred | |||
| 生産確認入力済み | 生産オーダー内の特定の作業の進捗状況が記録されたことを示します。これには、生産数量、スクラップ、ワークセンターでの滞留時間の記録が含まれます。 | ||
| その重要性 確認は、現場の進捗状況をリアルタイムで可視化し、生産ステータスを追跡する上で不可欠です。確認の頻度とタイミングを分析することで、フローを監視し、作業間の遅延を特定するのに役立ちます。 取得元 各確認は、AFRU(オーダー完了確認)テーブルにタイムスタンプ(BUDAT, UZEIT)と作業の詳細とともに明示的にエントリとして記録されます。 取得 AFRUテーブルにドキュメントとして記録されます。 イベントタイプ explicit | |||
| 能力所要量計画済み | この活動には、生産オーダーの作業をスケジューリングし、必要なワークセンターでの能力利用可能性を確認することが含まれます。システムはワークセンターの能力負荷を評価し、設定されていれば平準化を行い、生産日付を決定します。 | ||
| その重要性 このステップは、実行可能な生産スケジュールを確保するために不可欠です。その期間と結果を分析することで、能力ボトルネックを特定し、リソース計画の精度を向上させるのに役立ちます。 取得元 これは一般的に、オーダーがスケジュールされたことを示すシステムステータス、たとえばSETC(スケジューリング実行済み)から推測されます。スケジュールされた開始日と終了日(AUFK-GSTRP、AUFK-GLTRP)が入力されていることも、この活動の完了を示します。 取得 AUFK/AFKOの計画日またはJESTのスケジューリング関連ステータスの設定から推測されます。 イベントタイプ inferred | |||
| 計画外の停止が発生 | この計算イベントは、生産実行フェーズにおける重要なアイドル期間を表します。明示的なシステムイベントではなく、連続する生産確認間の長い時間差を特定することによって導出されます。 | ||
| その重要性 機械故障や品質問題などの計画外の混乱を監視するのに役立ちます。頻繁または長期の停止を特定することは、現場の安定性とスループットを向上させる上で重要です。 取得元 これは、AFRUテーブルから連続する「生産確認入力済み」活動のタイムスタンプを分析することによって計算されます。事前定義された閾値を超えるギャップは、計画外の停止としてフラグ付けされます。 取得 連続する確認タイムスタンプ間の時間差を計算します (AFRU-BUDAT/UZEIT)。 イベントタイプ calculated | |||
| 資材不足が発生 | このイベントは、1つ以上の必要な構成品目が利用できないために生産プロセスが影響を受けたり停止したりしたことを示します。システムは、これを反映するためにオーダーに特定のステータスを設定します。 | ||
| その重要性 資材不足の追跡は、資材不足影響分析にとって極めて重要です。サプライチェーンの問題によって引き起こされる遅延を定量化し、資材計画を改善するのに役立ちます。 取得元 これは、生産オーダーに対する「MSPT」(資材不足)ステータスの有効化から推測されます。このステータス変更のタイムスタンプはJCDSテーブルで見つけることができます。 取得 JCDSテーブルにおける「MSPT」へのステータス変更のタイムスタンプ。 イベントタイプ inferred | |||
| 資材利用可能性確認済み | 生産オーダーに必要なすべての構成品目が、必要な数量で、期日通りに利用可能であるかを確認するシステムまたはユーザーアクションを示します。これは通常、オーダー登録時またはリリース時の自動チェック、あるいは手動チェックであり、オーダーのステータスを更新します。 | ||
| その重要性 資材不足の早期特定は、事前計画にとって不可欠です。この活動を追跡することで、資材の利用可能性がオーダーリリースと生産開始の適時性にどのように影響するかを理解するのに役立ちます。 取得元 オーダーのステータスから推測されます。MACM(資材引当済み)のようなステータス、または資材利用可能日(AFKO-MSERF)の変更は、チェックが実行されたことを示します。資材不足ステータス(MSPT)の欠如も利用可能性を示唆する可能性があります。 取得 資材引当に関連するステータス変更またはトランザクションCOMACの実行から推測されます。 イベントタイプ inferred | |||
抽出ガイド
ステップ
- 前提条件の確認: 必要なCore Data Services (CDS) ビューにアクセスするための適切な権限を持つSAP S/4HANAユーザーがいることを確認します。必要なビューには、
I_ProductionOrder、I_ProdOrdConfirmation、I_MaterialDocumentItem、I_ObjectStatus、およびI_ChangeDocumentが含まれます。また、SAP HANA Studio、DBeaver、または外部ETLツールなど、SAP HANAデータベースに接続されたSQL実行環境へのアクセスも必要です。 - システム詳細の特定:
SourceSystem属性に使用するソースシステム識別子を控えておきます。これは、データの発生源を識別するために定義する論理名であり、例えばS4H_PRODなどです。 - 抽出パラメータの設定: クエリを実行する前に、主要なパラメータを定義します。これには、抽出期間の開始日と終了日、およびデータの範囲を制限するための
PlantやProductionOrderTypeなどの特定のフィルターが含まれます。 - SQLクエリの準備: 提供されている
queryセクションの完全なSQLクエリを、選択したSQLクライアントまたはデータ抽出ツールにコピーします。 - プレースホルダーの設定: クエリ内のプレースホルダー値を、具体的なパラメータに置き換えます。これには
_StartDate、_EndDate、およびソースシステム識別子が含まれます。ビジネスコンテキストに合わせて、Unplanned Halt Occurredイベントの閾値(例:'24:00:00')を調整します。 - 抽出クエリの実行: 設定済みのSQLスクリプトをSAP S/4HANAシステムのデータベースに対して実行します。長期間にわたる大規模なデータセットの場合、パフォーマンスの問題を避けるために、例えば月ごとに、より小さなチャンクで抽出を実行することを検討してください。
- 初期データのレビュー: クエリの実行が完了したら、出力の簡単なレビューを行います。行数を確認し、すべての列が存在すること、および
Activity列に期待される様々なイベントが含まれていることを確認します。 - データ検証:
validationStepsセクションに記載されている手順に従って、より詳細な検証を実行します。抽出されたイベントログの正確性を確認するために、トランザクションCO03を使用して、いくつかの製造オーダーとSAPシステム内の詳細を相互参照します。 - CSVへのエクスポート: 最終結果セットをCSVファイルにエクスポートします。文字化けの問題を防ぐため、ファイルエンコーディングがUTF-8であることを確認します。
- アップロードの準備: CSV列ヘッダーが必須の属性名 (
ProductionOrder、Activity、StartTime、SourceSystem、およびLastDataUpdate) と一致していることを確認します。プロセスマイニングツールにアップロードする前に、StartTime列がISO 8601 (YYYY-MM-DDTHH:MM:SS) のような標準タイムスタンプ形式であることを確認します。
設定
- Core CDS Views: 抽出は主に、基盤となるSAPテーブルの構造化されたビジネス指向ビューを提供する一連の標準CDSビューに依存しています。主要なビューは以下のとおりです。
I_ProductionOrder: ヘッダーレベルのデータおよび作成イベント用。I_ProdOrdConfirmation: すべての作業確認用。I_MaterialDocumentItem: 品目移動(出庫、入庫など)用。I_ObjectStatus: 製造オーダーのステータス変更を読み取るため。I_ChangeDocumentおよび関連ビュー: 主要なオーダーフィールドの変更をキャプチャするため。
- Date Range Filtering: データ量を管理するために日付範囲フィルターを適用することが重要です。提供されているクエリは、製造オーダーの
CreationDateを使用します。初回分析の一般的な範囲は、3〜6ヶ月のデータです。 - Key Business Filters: データセットをさらに絞り込むには、主要な組織またはマスタデータの属性に基づいてフィルターを適用します。一般的なフィルターは以下のとおりです。
Plant: 特定の製造施設を分析するため。ProductionOrderType: 標準生産、手直し、その他のオーダータイプに焦点を当てるため。CompanyCode: データを特定の法人に制限するため。
- Unplanned Halt Threshold: このクエリには、
Unplanned Halt Occurredイベントを導出するロジックが含まれています。このロジックには、作業間の重要なギャップを定義するための時間閾値が必要です。この値は、一般的な生産サイクルタイムとビジネスルールに基づいて設定する必要があります。 - Authorization Prerequisites: クエリを実行するSAPユーザーは、すべてのCDSビューおよびその基盤となるテーブルに対する表示権限を持っている必要があります。権限が不足している場合、結果セットは空になるか、不完全になります。
a クエリ例 sql
WITH BaseOrders AS (
SELECT
ProductionOrder,
Material AS MaterialNumber,
ProductionPlant AS Plant,
CreationDate,
CreationTime,
BasicEndDate AS PlannedEndDate,
TechnicalCompletionDate,
LastChangeDateTime
FROM I_ProductionOrder
-- P_CreationDateFrom and P_CreationDateTo are placeholders for your date range
WHERE CreationDate BETWEEN '[_StartDate]' AND '[_EndDate]'
-- Add other filters as needed, for example:
-- AND ProductionPlant IN ('[Your_Plant_1]', '[Your_Plant_2]')
-- AND ProductionOrderType = '[Your_Order_Type]'
)
SELECT
bo.ProductionOrder,
'Production Order Created' AS Activity,
TO_TIMESTAMP(bo.CreationDate || ' ' || LPAD(bo.CreationTime, 6, '0'), 'YYYYMMDD HH24MISS') AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
'CRTD' AS OrderStatus
FROM BaseOrders bo
UNION ALL
-- System status changes like Released, Technically Completed, Closed, Cancelled, Material Shortage
SELECT
os.ObjectInternalID AS ProductionOrder,
CASE os.SystemStatus
WHEN 'I0002' THEN 'Production Order Released'
WHEN 'I0043' THEN 'Material Availability Checked' -- Status: MACM (Material committed)
WHEN 'I0045' THEN 'Order Technically Completed'
WHEN 'I0046' THEN 'Order Financially Closed'
WHEN 'I0047' THEN 'Production Order Cancelled'
WHEN 'I0010' THEN 'Material Shortage Occurred' -- Status: MSPT (Material shortage)
END AS Activity,
os.StatusChangeDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
os.SystemStatus AS OrderStatus
FROM I_ObjectStatus AS os
JOIN BaseOrders AS bo ON os.ObjectInternalID = bo.ProductionOrder
WHERE os.SystemStatus IN ('I0002', 'I0043', 'I0045', 'I0046', 'I0047', 'I0010') AND os.StatusIsInactive = ''
UNION ALL
-- Production Started, inferred from the first goods issue or first confirmation
SELECT
s.ProductionOrder,
'Production Started' AS Activity,
s.StartEventTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
s.MaterialNumber,
s.Plant,
NULL AS WorkCenter,
s.PlannedEndDate,
NULL AS OrderStatus
FROM (
SELECT
bo.ProductionOrder,
bo.MaterialNumber,
bo.Plant,
bo.PlannedEndDate,
MIN(COALESCE(gm.PostingTime, cf.ConfirmationDateTime)) AS StartEventTime,
ROW_NUMBER() OVER(PARTITION BY bo.ProductionOrder ORDER BY MIN(COALESCE(gm.PostingTime, cf.ConfirmationDateTime))) as rn
FROM BaseOrders bo
LEFT JOIN I_MaterialDocumentItem gm ON bo.ProductionOrder = gm.ProductionOrder AND gm.GoodsMovementType IN ('261', '262') -- Goods Issue
LEFT JOIN I_ProdOrdConfirmation cf ON bo.ProductionOrder = cf.ProductionOrder
WHERE gm.ProductionOrder IS NOT NULL OR cf.ProductionOrder IS NOT NULL
GROUP BY bo.ProductionOrder, bo.MaterialNumber, bo.Plant, bo.PlannedEndDate
) s
WHERE s.rn = 1
UNION ALL
-- Production Confirmation Entered (for each confirmation)
SELECT
cf.ProductionOrder,
'Production Confirmation Entered' AS Activity,
cf.ConfirmationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
cf.WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
UNION ALL
-- Final Confirmation Entered
SELECT
cf.ProductionOrder,
'Final Confirmation Entered' AS Activity,
cf.ConfirmationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
cf.WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
WHERE cf.IsFinalConfirmation = 'X'
UNION ALL
-- Unplanned Halt Occurred (derived from gaps between confirmations)
SELECT
ProductionOrder,
'Unplanned Halt Occurred' AS Activity,
PreviousConfirmationTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
MaterialNumber,
Plant,
WorkCenter,
PlannedEndDate,
NULL AS OrderStatus
FROM (
SELECT
cf.ProductionOrder,
bo.MaterialNumber,
bo.Plant,
bo.PlannedEndDate,
cf.WorkCenter,
cf.ConfirmationDateTime,
LAG(cf.ConfirmationDateTime, 1) OVER (PARTITION BY cf.ProductionOrder ORDER BY cf.ConfirmationDateTime) AS PreviousConfirmationTime,
(SECONDS_BETWEEN(LAG(cf.ConfirmationDateTime, 1) OVER (PARTITION BY cf.ProductionOrder ORDER BY cf.ConfirmationDateTime), cf.ConfirmationDateTime) / 3600.0) as HoursDiff
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
) AS gaps
WHERE gaps.HoursDiff > 24 -- Configurable threshold in hours, e.g. 24 hours
UNION ALL
-- Goods Receipt Posted
SELECT
gm.ProductionOrder,
'Goods Receipt Posted' AS Activity,
gm.PostingTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_MaterialDocumentItem gm
JOIN BaseOrders bo ON gm.ProductionOrder = bo.ProductionOrder
WHERE gm.GoodsMovementType = '101'
UNION ALL
-- Capacity Requirements Planned (using Release event as a proxy)
SELECT
os.ObjectInternalID AS ProductionOrder,
'Capacity Requirements Planned' AS Activity,
os.StatusChangeDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
os.SystemStatus AS OrderStatus
FROM I_ObjectStatus AS os
JOIN BaseOrders AS bo ON os.ObjectInternalID = bo.ProductionOrder
WHERE os.SystemStatus = 'I0002' AND os.StatusIsInactive = '' -- Status 'REL' (Released)
UNION ALL
-- Production Plan Adjusted
SELECT
ch.ObjectValue AS ProductionOrder,
'Production Plan Adjusted' AS Activity,
ch.CreationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL as WorkCenter,
bo.PlannedEndDate,
NULL as OrderStatus
FROM I_ChangeDocument AS ch
JOIN BaseOrders bo ON ch.ObjectValue = bo.ProductionOrder
WHERE ch.ChangeDocumentObject = 'PRODORDER'
-- Monitoring changes in key fields like Total Quantity (GAMNG) or Basic Finish Date (GLTRP)
AND ch.FieldName IN ('GAMNG', 'GLTRP')
GROUP BY ch.ObjectValue, ch.CreationDateTime, bo.MaterialNumber, bo.Plant, bo.PlannedEndDate ステップ
- 前提条件の確認: 必要なCore Data Services (CDS) ビューにアクセスするための適切な権限を持つSAP S/4HANAユーザーがいることを確認します。必要なビューには、
I_ProductionOrder、I_ProdOrdConfirmation、I_MaterialDocumentItem、I_ObjectStatus、およびI_ChangeDocumentが含まれます。また、SAP HANA Studio、DBeaver、または外部ETLツールなど、SAP HANAデータベースに接続されたSQL実行環境へのアクセスも必要です。 - システム詳細の特定:
SourceSystem属性に使用するソースシステム識別子を控えておきます。これは、データの発生源を識別するために定義する論理名であり、例えばS4H_PRODなどです。 - 抽出パラメータの設定: クエリを実行する前に、主要なパラメータを定義します。これには、抽出期間の開始日と終了日、およびデータの範囲を制限するための
PlantやProductionOrderTypeなどの特定のフィルターが含まれます。 - SQLクエリの準備: 提供されている
queryセクションの完全なSQLクエリを、選択したSQLクライアントまたはデータ抽出ツールにコピーします。 - プレースホルダーの設定: クエリ内のプレースホルダー値を、具体的なパラメータに置き換えます。これには
_StartDate、_EndDate、およびソースシステム識別子が含まれます。ビジネスコンテキストに合わせて、Unplanned Halt Occurredイベントの閾値(例:'24:00:00')を調整します。 - 抽出クエリの実行: 設定済みのSQLスクリプトをSAP S/4HANAシステムのデータベースに対して実行します。長期間にわたる大規模なデータセットの場合、パフォーマンスの問題を避けるために、例えば月ごとに、より小さなチャンクで抽出を実行することを検討してください。
- 初期データのレビュー: クエリの実行が完了したら、出力の簡単なレビューを行います。行数を確認し、すべての列が存在すること、および
Activity列に期待される様々なイベントが含まれていることを確認します。 - データ検証:
validationStepsセクションに記載されている手順に従って、より詳細な検証を実行します。抽出されたイベントログの正確性を確認するために、トランザクションCO03を使用して、いくつかの製造オーダーとSAPシステム内の詳細を相互参照します。 - CSVへのエクスポート: 最終結果セットをCSVファイルにエクスポートします。文字化けの問題を防ぐため、ファイルエンコーディングがUTF-8であることを確認します。
- アップロードの準備: CSV列ヘッダーが必須の属性名 (
ProductionOrder、Activity、StartTime、SourceSystem、およびLastDataUpdate) と一致していることを確認します。プロセスマイニングツールにアップロードする前に、StartTime列がISO 8601 (YYYY-MM-DDTHH:MM:SS) のような標準タイムスタンプ形式であることを確認します。
設定
- Core CDS Views: 抽出は主に、基盤となるSAPテーブルの構造化されたビジネス指向ビューを提供する一連の標準CDSビューに依存しています。主要なビューは以下のとおりです。
I_ProductionOrder: ヘッダーレベルのデータおよび作成イベント用。I_ProdOrdConfirmation: すべての作業確認用。I_MaterialDocumentItem: 品目移動(出庫、入庫など)用。I_ObjectStatus: 製造オーダーのステータス変更を読み取るため。I_ChangeDocumentおよび関連ビュー: 主要なオーダーフィールドの変更をキャプチャするため。
- Date Range Filtering: データ量を管理するために日付範囲フィルターを適用することが重要です。提供されているクエリは、製造オーダーの
CreationDateを使用します。初回分析の一般的な範囲は、3〜6ヶ月のデータです。 - Key Business Filters: データセットをさらに絞り込むには、主要な組織またはマスタデータの属性に基づいてフィルターを適用します。一般的なフィルターは以下のとおりです。
Plant: 特定の製造施設を分析するため。ProductionOrderType: 標準生産、手直し、その他のオーダータイプに焦点を当てるため。CompanyCode: データを特定の法人に制限するため。
- Unplanned Halt Threshold: このクエリには、
Unplanned Halt Occurredイベントを導出するロジックが含まれています。このロジックには、作業間の重要なギャップを定義するための時間閾値が必要です。この値は、一般的な生産サイクルタイムとビジネスルールに基づいて設定する必要があります。 - Authorization Prerequisites: クエリを実行するSAPユーザーは、すべてのCDSビューおよびその基盤となるテーブルに対する表示権限を持っている必要があります。権限が不足している場合、結果セットは空になるか、不完全になります。
a クエリ例 sql
WITH BaseOrders AS (
SELECT
ProductionOrder,
Material AS MaterialNumber,
ProductionPlant AS Plant,
CreationDate,
CreationTime,
BasicEndDate AS PlannedEndDate,
TechnicalCompletionDate,
LastChangeDateTime
FROM I_ProductionOrder
-- P_CreationDateFrom and P_CreationDateTo are placeholders for your date range
WHERE CreationDate BETWEEN '[_StartDate]' AND '[_EndDate]'
-- Add other filters as needed, for example:
-- AND ProductionPlant IN ('[Your_Plant_1]', '[Your_Plant_2]')
-- AND ProductionOrderType = '[Your_Order_Type]'
)
SELECT
bo.ProductionOrder,
'Production Order Created' AS Activity,
TO_TIMESTAMP(bo.CreationDate || ' ' || LPAD(bo.CreationTime, 6, '0'), 'YYYYMMDD HH24MISS') AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
'CRTD' AS OrderStatus
FROM BaseOrders bo
UNION ALL
-- System status changes like Released, Technically Completed, Closed, Cancelled, Material Shortage
SELECT
os.ObjectInternalID AS ProductionOrder,
CASE os.SystemStatus
WHEN 'I0002' THEN 'Production Order Released'
WHEN 'I0043' THEN 'Material Availability Checked' -- Status: MACM (Material committed)
WHEN 'I0045' THEN 'Order Technically Completed'
WHEN 'I0046' THEN 'Order Financially Closed'
WHEN 'I0047' THEN 'Production Order Cancelled'
WHEN 'I0010' THEN 'Material Shortage Occurred' -- Status: MSPT (Material shortage)
END AS Activity,
os.StatusChangeDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
os.SystemStatus AS OrderStatus
FROM I_ObjectStatus AS os
JOIN BaseOrders AS bo ON os.ObjectInternalID = bo.ProductionOrder
WHERE os.SystemStatus IN ('I0002', 'I0043', 'I0045', 'I0046', 'I0047', 'I0010') AND os.StatusIsInactive = ''
UNION ALL
-- Production Started, inferred from the first goods issue or first confirmation
SELECT
s.ProductionOrder,
'Production Started' AS Activity,
s.StartEventTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
s.MaterialNumber,
s.Plant,
NULL AS WorkCenter,
s.PlannedEndDate,
NULL AS OrderStatus
FROM (
SELECT
bo.ProductionOrder,
bo.MaterialNumber,
bo.Plant,
bo.PlannedEndDate,
MIN(COALESCE(gm.PostingTime, cf.ConfirmationDateTime)) AS StartEventTime,
ROW_NUMBER() OVER(PARTITION BY bo.ProductionOrder ORDER BY MIN(COALESCE(gm.PostingTime, cf.ConfirmationDateTime))) as rn
FROM BaseOrders bo
LEFT JOIN I_MaterialDocumentItem gm ON bo.ProductionOrder = gm.ProductionOrder AND gm.GoodsMovementType IN ('261', '262') -- Goods Issue
LEFT JOIN I_ProdOrdConfirmation cf ON bo.ProductionOrder = cf.ProductionOrder
WHERE gm.ProductionOrder IS NOT NULL OR cf.ProductionOrder IS NOT NULL
GROUP BY bo.ProductionOrder, bo.MaterialNumber, bo.Plant, bo.PlannedEndDate
) s
WHERE s.rn = 1
UNION ALL
-- Production Confirmation Entered (for each confirmation)
SELECT
cf.ProductionOrder,
'Production Confirmation Entered' AS Activity,
cf.ConfirmationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
cf.WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
UNION ALL
-- Final Confirmation Entered
SELECT
cf.ProductionOrder,
'Final Confirmation Entered' AS Activity,
cf.ConfirmationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
cf.WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
WHERE cf.IsFinalConfirmation = 'X'
UNION ALL
-- Unplanned Halt Occurred (derived from gaps between confirmations)
SELECT
ProductionOrder,
'Unplanned Halt Occurred' AS Activity,
PreviousConfirmationTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
MaterialNumber,
Plant,
WorkCenter,
PlannedEndDate,
NULL AS OrderStatus
FROM (
SELECT
cf.ProductionOrder,
bo.MaterialNumber,
bo.Plant,
bo.PlannedEndDate,
cf.WorkCenter,
cf.ConfirmationDateTime,
LAG(cf.ConfirmationDateTime, 1) OVER (PARTITION BY cf.ProductionOrder ORDER BY cf.ConfirmationDateTime) AS PreviousConfirmationTime,
(SECONDS_BETWEEN(LAG(cf.ConfirmationDateTime, 1) OVER (PARTITION BY cf.ProductionOrder ORDER BY cf.ConfirmationDateTime), cf.ConfirmationDateTime) / 3600.0) as HoursDiff
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
) AS gaps
WHERE gaps.HoursDiff > 24 -- Configurable threshold in hours, e.g. 24 hours
UNION ALL
-- Goods Receipt Posted
SELECT
gm.ProductionOrder,
'Goods Receipt Posted' AS Activity,
gm.PostingTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_MaterialDocumentItem gm
JOIN BaseOrders bo ON gm.ProductionOrder = bo.ProductionOrder
WHERE gm.GoodsMovementType = '101'
UNION ALL
-- Capacity Requirements Planned (using Release event as a proxy)
SELECT
os.ObjectInternalID AS ProductionOrder,
'Capacity Requirements Planned' AS Activity,
os.StatusChangeDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
os.SystemStatus AS OrderStatus
FROM I_ObjectStatus AS os
JOIN BaseOrders AS bo ON os.ObjectInternalID = bo.ProductionOrder
WHERE os.SystemStatus = 'I0002' AND os.StatusIsInactive = '' -- Status 'REL' (Released)
UNION ALL
-- Production Plan Adjusted
SELECT
ch.ObjectValue AS ProductionOrder,
'Production Plan Adjusted' AS Activity,
ch.CreationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL as WorkCenter,
bo.PlannedEndDate,
NULL as OrderStatus
FROM I_ChangeDocument AS ch
JOIN BaseOrders bo ON ch.ObjectValue = bo.ProductionOrder
WHERE ch.ChangeDocumentObject = 'PRODORDER'
-- Monitoring changes in key fields like Total Quantity (GAMNG) or Basic Finish Date (GLTRP)
AND ch.FieldName IN ('GAMNG', 'GLTRP')
GROUP BY ch.ObjectValue, ch.CreationDateTime, bo.MaterialNumber, bo.Plant, bo.PlannedEndDate