お客様の生産計画データテンプレート
お客様の生産計画データテンプレート
- 収集を推奨する項目
- 追跡すべき主要アクティビティ
- 実践的なデータ抽出ガイド
生産計画属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 ActivityName | 生産オーダーの特定の時点で発生したビジネスまたはシステムイベントの名前。 | ||
| 説明 アクティビティ名(Activity Name)は、生産計画プロセス内の特定のステップまたはステータス変更を記述します。これらのイベントは、SAP ECC PP内の変更ログ、ステータス更新、トランザクション記録から抽出され、「Production Order Created(生産オーダー作成)」、「Material Availability Checked(材料利用可能性チェック)」、「Goods Receipt Posted(入庫記帳)」などの重要なマイルストンを表します。 この属性はプロセスマップの根幹を形成し、アナリストがイベントのシーケンスを可視化し、プロセスバリアントを発見し、ボトルネックや手戻りループを特定することを可能にします。アクティビティ名の明確さと粒度は、運用の現実を反映した正確で洞察に満ちたプロセスモデルを構築するために不可欠です。 その重要性 プロセスマップのステップを定義し、生産ワークフローを可視化、分析、理解することを可能にします。 取得元 JEST/JSTOテーブルのステータス変更、トランザクションログ、CDHDR/CDPOSの変更伝票など、様々なソースから生成されます。 例 生産オーダーリリース`商品出荷`登録済み最終確認記録済みオーダー技術的完了 | |||
| イベント日時 EventTime | `アクティビティ`がいつ発生したかを示す正確な`タイムスタンプ`です。 | ||
| 説明 イベントタイムは、特定の活動が実行された、またはステータスがシステムに記録された日付と時刻を記録します。このタイムスタンプは、サイクルタイム、待機時間、プロセス全体の期間の計算を含む、全ての時間ベースのプロセス分析において不可欠です。 正確なタイムスタンプは、イベントを正しく順序付けし、パフォーマンス分析を行う上で非常に重要です。これらにより、アナリストはアクティビティ間の期間を測定し、遅延を特定し、スケジュールやサービスレベル契約に対するパフォーマンスを評価できます。生産計画のコンテキストでは、これにより計画および実行の各段階がどれくらいかかるかを理解するのに役立ちます。 その重要性 この属性は、期間の計算、パフォーマンスの分析、ボトルネックの特定に不可欠なイベントの時系列順序を提供します。 取得元 トランザクションおよびステータス変更に関連する様々な日付および時刻フィールド、例えば品目伝票からのBUDAT(転記日付)やCDHDRからの変更タイムスタンプから導出されます。 例 2023-04-15T10:05:30Z2023-04-15T14:22:00Z2023-04-18T08:59:11Z2023-04-20T16:45:00Z | |||
| 生産オーダー ProductionOrder | 生産オーダーの一意の識別子であり、生産計画および実行プロセスの主要なケース識別子として機能します。 | ||
| 説明 生産オーダー番号は、SAP ECC PPの各製造オーダーに割り当てられる一意の英数字キーです。作成と計画から実行、最終決済までのすべての関連活動をリンクする中心的なオブジェクトとして機能します。 プロセスマイニングにおいて、この属性は単一の生産実行に属するすべてのイベントをグループ化するために不可欠です。これにより、生産オーダーの全ライフサイクルのエンドツーエンド分析が可能になり、進捗の追跡、サイクルタイムの測定、標準プロセスからの逸脱の特定が含まれます。生産オーダーごとにプロセスを分析することで、個々の製造要求がどのように実現されているかを明確に把握できます。 その重要性 これは、すべての関連プロセスイベントを接続するコア識別子であり、各生産ジャーニーの最初から最後までの再構築と分析を可能にします。 取得元 この属性はSAPテーブルAUFKのフィールドAUFNRにあります。 例 1000345100034610003471000348 | |||
| ソースシステム SourceSystem | データが抽出された特定のシステムを識別します。 | ||
| 説明 この属性は、特定のSAP ECCインスタンス名またはIDなど、レコードの元となるシステムを指定します。複数のERPシステムまたはレガシーとモダンなプラットフォームの組み合わせを持つ組織では、このフィールドはデータリネージとコンテキストにとって不可欠です。 分析においては、発生元システムに基づいてプロセスをフィルタリングできます。これは、異なるシステム間のプロセスパフォーマンスを比較したり、複数システムデータ統合プロジェクト中にデータを分離したりするのに役立ちます。 その重要性 特に複数のSAPインスタンスや統合されたシステムを持つ環境において、データの出所に関する重要なコンテキストを提供します。 取得元 通常、データ抽出プロセス中に追加され、多くの場合、SAPシステムID(SY-SYSID)から導出されます。 例 ECC_PROD_100S4H_FIN_200ECC_DE | |||
| 最終データ更新 LastDataUpdate | このイベントのデータが最後に更新または抽出された日時を示すタイムスタンプ。 | ||
| 説明 この属性は、データがソースシステムからプロセスマイニングツールに取得された日付と時刻を記録します。ビジネスイベントではなく、データ管理目的の技術的なタイムスタンプです。 その主な用途は、データの鮮度を確保し、管理者やアナリストが分析しているデータの最新性を理解するのに役立つことです。特に進行中の運用を監視する場合、プロセス分析が最新の情報に基づいていることを検証するために不可欠です。 その重要性 データの新鮮さを確認し、分析が利用可能な最新情報に基づいていることを保証します。 取得元 この値は通常、データインジェストプロセス中にデータ抽出、変換、ロード(ETL)ツールまたはスクリプトによって生成され、タイムスタンプが付与されます。 例 2023-10-27T02:00:00Z2023-10-28T02:00:00Z2023-10-29T02:00:00Z | |||
| 実際終了日 ActualEndDate | 最終生産活動のタイムスタンプであり、オーダーの実際の完了を示すものです。 | ||
| 説明 実績終了日(Actual End Date)は、オーダーのすべての生産活動の完了を示すイベントのタイムスタンプです。これは通常、「Final Confirmation Recorded(最終確認記録)」または最後の「Goods Receipt Posted(入庫記帳)」イベントのタイムスタンプから導き出されます。 この属性は、総生産サイクルタイムとスケジュール遵守分析を測定するために不可欠です。「実績終了日」を「計画終了日」と比較することで、オーダーが予定通りに完了したかどうかを判断します。「実績開始日」と「実績終了日」の間の期間を分析することで、実際の生産スループット時間が得られます。 その重要性 生産の完了を示し、納期遵守パフォーマンスと総実行時間を正確に測定できるようにします。 取得元 イベントログから、「最終確認記録済み」や「入庫転記済み」といった主要な完了アクティビティの最大タイムスタンプを検索して導出されます。 例 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| 実際開始日 ActualStartDate | 最初に記録された生産活動のタイムスタンプであり、実行の実際の開始を示すものです。 | ||
| 説明 実績開始日(Actual Start Date)は、物理的な生産作業の開始を示す最初のイベントのタイムスタンプです。これは通常、最初の生産確認イベントまたはオーダーへの原材料の最初の出庫から導き出されます。 この派生属性は、スケジュール遵守分析にとって非常に重要です。これは「計画開始日」と比較するための実際開始点を提供し、開始時間の差異を正確に計算することを可能にします。計画された開始日と実際の開始日の間のギャップを理解することは、材料の手配、機械のセットアップ、またはリソースの可用性に関連する生産前遅延を特定するのに役立ちます。 その重要性 生産実行の真の開始点を提供し、開始遅延と全体的な生産リードタイムの正確な計算を可能にします。 取得元 各製造オーダーについて、イベントログから「初回確認記録済み」や「出庫転記済み」といった特定の実行アクティビティの最小タイムスタンプを検索して導出されます。 例 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| 生産工場 ProductionPlant | 生産オーダーが実行される製造施設または場所。 | ||
| 説明 生産工場(Production Plant)は、SAPにおける主要な組織単位であり、製造施設を表します。各生産オーダーに割り当てられ、生産活動が物理的にどこで行われるかを決定します。 生産工場ごとにプロセスを分析することで、異なる場所間でのパフォーマンス比較が可能になります。これにより、どの工場がより効率的か、どの工場がより多くの遅延や材料不足に直面しているか、そしてどこでベストプラクティスを共有できるかを特定するのに役立ちます。これは、スループットとリソース利用率に関するダッシュボードでの根本原因分析のための基本的な側面です。 その重要性 異なる製造拠点間でのパフォーマンス比較を可能にし、拠点固有の問題やベストプラクティスを特定するのに役立ちます。 取得元 この属性はSAPテーブルAUFKのフィールドWERKSに保存されます。 例 100017102000DE01 | |||
| 納入数量 DeliveredQuantity | 生産され、在庫として受け入れられた製品の実際の数量。 | ||
| 説明 納入数量は、入庫数量としても知られ、特定の製造オーダーに対して生産が確認された完成品の総量です。この値は「入庫転記済み」イベントが発生したときに更新されます。 このアトリビュートは「計画数量」に対応し、「計画対実績数量差異」KPIを計算するために不可欠です。生産出力の明確な尺度を提供し、アナリストがスクラップ、歩留まり損失、またはその他の生産問題によって引き起こされる可能性のある不一致を特定できるようにします。プラント、製品、または期間を越えて納入数量を比較することで、効率性の問題がある領域が浮き彫りになります。 その重要性 生産プロセスの実際の出力量を測定し、計画目標との直接比較を可能にしてパフォーマンスを評価します。 取得元 SAPテーブルAFPOの項目WEMNG(入庫数量)で確認できます。 例 984950751255 | |||
| 製品コード ProductCode | 製造される材料または製品の一意の識別子。 | ||
| 説明 製品コード、または品目コードは、生産オーダーが生産する対象の品目を特定します。これは、生産計画を在庫管理、販売、および原価計算にリンクする中心的なマスタデータ要素です。 プロセスマイニングにおいて、製品コードによるフィルタリングやセグメンテーションは、製品固有の製造プロセスを理解するために不可欠です。「どの製品が最も長いサイクルタイムを持っていますか?」や「特定の製品は品質問題や材料遅延により脆弱ですか?」といった質問に答えるのに役立ちます。この分析は、製品ポートフォリオ管理および特定の材料タイプに対するプロセス標準化や最適化の機会を特定するために不可欠です。 その重要性 製品固有のプロセス分析が可能になり、どの資材がプロセス非効率、遅延、または高コストに関連しているかを明らかにします。 取得元 これはSAPテーブルAFPOのフィールドMATNRにあります。 例 FG-123RM-45AHALB-7890CHEM-22 | |||
| 計画数量 PlannedQuantity | オーダーで生産される予定の製品の総数量。 | ||
| 説明 計画数量は、計画フェーズで定義された生産オーダーの目標生産量を表します。この値は、実際の生産量を測定するための基準となります。 この属性は、「計画対実績数量差異」など、生産実績と納期遵守に関するKPIの基本となります。これは、生産計画の正確性を評価し、過剰生産または過少生産に関連するシステム的な問題を特定するのに役立ちます。この値を分析することは、生産実行が初期計画とどの程度一致しているかを理解する上で重要です。 その重要性 この属性は、生産量差異を測定し、計画の正確性を評価するための基準です。 取得元 この値は、SAPテーブルAFKOのフィールドGAMNG(総オーダー数量)で確認できます。 例 1005000751250 | |||
| サイクルタイム CycleTime | 生産オーダーのリリースから最終完了までの経過総時間。 | ||
| 説明 サイクルタイムは、生産実行フェーズの期間を測定する主要なパフォーマンス指標です。「製造オーダーリリース済み」イベントと、「最終確認記録済み」や「入庫転記済み」のような完了イベントとの時間差として計算されます。 この計算されたメトリックは、製造効率を評価するための基本です。サイクルタイムの傾向を分析し、製品、プラント、または期間を越えて比較することで、リードタイムの短縮、スループットの向上、および全体的な生産能力の増加の機会を特定するのに役立ちます。これは、多くの必須のダッシュボードやKPIの中心的なメトリックです。 その重要性 生産実行プロセスの効率と速度を直接測定し、リードタイム短縮の機会を強調します。 取得元 計算フィールド:「製造オーダー完了」のタイムスタンプから「製造オーダーリリース済み」のタイムスタンプを引いたもの。 例 3日4時間10時間15分7日0時間1日12時間 | |||
| スケジュール遵守状況 ScheduleAdherenceStatus | 製造オーダーが計画終了日までに完了したかどうかを示すフラグです。 | ||
| 説明 スケジュール遵守状況は、オンタイムパフォーマンスをシンプルかつ一目で把握できる計算されたブール型またはカテゴリ型の属性です。「実績終了日」を「計画終了日」と比較することで導き出されます。実績終了が計画終了と同日またはそれ以前であれば「オンタイム」、そうでなければ「遅延」となります。 この属性は、ダッシュボードでの分析と可視化を簡素化します。「スケジュール遵守率」KPIの計算や、特定の製品、工場、材料不足など、遅延オーダーの主な要因を特定するために、簡単なフィルタリングと集計を可能にします。 その重要性 オーダーを「オンタイム」または「遅延」に分類することでパフォーマンス分析を簡素化し、スケジュールの信頼性を簡単に測定および報告できるようにします。 取得元 計算フィールド:IF(「ActualEndDate」<=「PlannedEndDate」、「On-Time」、「Late」)。 例 期限内遅延 | |||
| 担当ユーザー ResponsibleUser | 生産オーダーを作成または最後に変更したユーザーのID。 | ||
| 説明 責任ユーザー(Responsible User)は、生産オーダーのライフサイクルにおける作成やリリースなどの主要イベントに関連付けられたSAPユーザーアカウントを特定します。これにより、システム内で行われたアクションの説明責任と追跡可能性が提供されます。 プロセスマイニングにおいて、この属性はユーザーの行動に基づいたプロセスバリエーションを分析するために使用されます。追加のトレーニングが必要なユーザーや、非標準的な手順に従うユーザーを特定するのに役立ちます。また、異なるユーザー間で作業がどのように分散されているかを示すことで、リソース分析をサポートします。 その重要性 プロセスアクティビティを特定の個人にリンクさせ、ユーザーレベルのパフォーマンス分析を可能にし、説明責任を促進します。 取得元 オーダーを作成したユーザーはAUFK-ERNAMに、最後に変更したユーザーはAUFK-AENAMにあります。変更文書 (CDHDR-USERNAME) は、特定の変更に関するユーザー履歴を提供します。 例 JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
| 数量差異 QuantityVariance | 計画生産数量と実際納品数量の差。 | ||
| 説明 数量差異は、初期計画からの生産量のずれを測定する計算メトリックです。「納品数量」から「計画数量」を差し引いて計算されます。プラスの差異は過剰生産を、マイナスの差異は過少生産または歩留まり損失を示します。 この属性は、「計画対実績生産量」ダッシュボードおよび対応するKPIにとって不可欠です。差異を分析することで、生産歩留まり、スクラップ率、またはデータ入力エラーに関連する問題を特定するのに役立ちます。これは、生産プロセスがその目標生産量を達成する上での信頼性を直接測定するものです。 その重要性 計画に対する生産実績の精度を定量化し、歩留まりや廃棄、工程管理における潜在的な課題を浮き彫りにします。 取得元 計算フィールド:「DeliveredQuantity」-「PlannedQuantity」。 例 -2-5005 | |||
| 生産オーダーステータス ProductionOrderStatus | 作成済み、リリース済み、技術的完了などの生産オーダーの現在の処理ステータス。 | ||
| 説明 生産オーダーステータスは、オーダーのライフサイクルにおける現在の段階を示します。SAPは、CRTD(作成済み)、REL(リリース済み)、CNF(確認済み)、DLV(納品済み)、TECO(技術的完了)などのステータスコードシステムを使用して、オーダーの進行を管理します。 異なるステータスで費やされた時間を分析することは、生産プロセスマイニングの中核をなす部分です。これにより、オーダーが作成後にリリースを待つ期間や、部分的に納品された状態でどれくらいの期間留まるかを特定するのに役立ちます。活動としてのステータス変更を追跡することは、プロセスフローの全体像を提供します。 その重要性 オーダーの進捗状況のスナップショットを提供し、オーダーが長期間停滞するボトルネックを特定するのに役立ちます。 取得元 ステータス情報は、オーダーのオブジェクト番号 (AUFK-OBJNR) にリンクされたテーブルJESTとJSTOに保存されます。ステータステキストはTJ02Tにあります。ステータスの読み取りは、STATUS_TEXT_EDITのようなファンクションモジュールを介して行われることがよくあります。 例 CRTD(登録済み)REL (リリース済み)DLV(納入済み)TECO (技術的完了) | |||
| 生産優先度 ProductionPriority | 製造オーダーの緊急性または優先度を示す分類です。 | ||
| 説明 生産優先度は、生産オーダーの相対的な重要性を示すために使用されるフィールドです。これにより、生産スケジューラーや現場の担当者は作業に優先順位をつけ、重要なオーダーがプロセスを通じて迅速に進められるようにします。 この属性を分析することは、優先度システムの有効性を評価するのに役立ちます。高優先度オーダーのサイクルタイムを低優先度オーダーと比較することで、緊急オーダーが実際に速く処理されているかどうかを判断できます。もしそうでなければ、コミュニケーション、リソース割り当て、または全体的な実行プロセスに問題がある可能性を示しています。 その重要性 優先度管理システムが効果的であるかを評価するのに役立ち、緊急度の高いオーダーが標準のオーダーよりも迅速に完了することを保証します。 取得元 これは生産オーダーヘッダーの標準フィールドではないことがよくあります。カスタムフィールドであったり、販売オーダーの優先度から派生したものであったり、分類システムの一部であったりする可能性があります。SAP ECC PPのドキュメントまたはシステム設定を参照してください。 例 高中低緊急 | |||
| 計画担当グループ PlannerGroup | オーダーを担当するMRP管理者または生産計画担当者のグループ。 | ||
| 説明 計画グループ(Planner Group)は、特定の材料セットまたは生産オーダーの計画と管理を担当する個人のグループを表す組織要素です。オーダーを計画グループに割り当てることで、ワークロードの分散と明確な所有権の確立に役立ちます。 プロセスマイニングにおいて、この属性は担当する計画チームに基づいたパフォーマンス分析を可能にします。「どの計画グループが最も多くのスケジュール逸脱を経験していますか?」や「異なるグループによって管理されるオーダーのサイクルタイムに違いはありますか?」といった質問に答えるのに役立ちます。これは、ワークロードバランシングとトレーニングニーズの特定のための洞察を提供します。 その重要性 担当チームごとにパフォーマンス分析をセグメント化できるため、計画の有効性とワークロードの違いを特定するのに役立ちます。 取得元 これはMRP管理者で、SAPテーブルAFKOのフィールドDISPOにあります。 例 001002P01P02 | |||
| 計画終了日 PlannedEndDate | オーダーの生産が完了する予定のスケジュールされた日付。 | ||
| 説明 計画終了日(Planned End Date)は、スケジューリングプロセス中に設定される生産オーダーの目標完了日です。最終確認と入庫を含むすべての生産活動を完了するための予想期間を定義します。 この日付は、「スケジュール遵守率」KPIを計算するために不可欠です。「計画終了日」を実際の完了時間(例:入庫記帳または最終確認記録活動のタイムスタンプ)と比較することで、オーダーが予定通りに完了しているかどうかを明らかにします。この分析は、生産スケジュールの信頼性を評価し、納期遅延の根本原因を特定するのに役立ちます。 その重要性 製造オーダーが期日通りに完了したかを判断するためのベンチマークであり、顧客満足度と計画の信頼性に直接影響します。 取得元 これは基本終了日で、SAPテーブルAFKOのフィールドGLTRPにあります。 例 2023-05-152023-06-282023-07-05 | |||
| 計画開始日 PlannedStartDate | オーダーの生産が開始される予定のスケジュールされた日付。 | ||
| 説明 計画開始日(Planned Start Date)は、生産計画およびスケジューリングフェーズで決定される主要なスケジューリングパラメータです。これは、オーダーの生産活動が開始される目標開始日を表します。 この属性は、スケジュール遵守を測定するために非常に重要です。「計画開始日」と実際の生産開始時刻(例:「First Confirmation Recorded(最初の確認記録)」活動のタイムスタンプ)を比較することで、組織は生産開始の遅延を特定できます。これらの遅延の理由を分析することは、この分野におけるプロセスマイニングの主要なユースケースです。 その重要性 スケジュール遵守率を測定し、生産実行開始時の遅延を特定するための基準となります。 取得元 これは基本開始日で、SAPテーブルAFKOのフィールドGSTRPにあります。 例 2023-05-102023-06-222023-07-01 | |||
| 資材利用可能性 MaterialAvailabilityStatus | 製造オーダーに必要な全ての構成品目が利用可能であるかどうかを示します。 | ||
| 説明 資材利用可能性ステータスは、生産準備状況を示す重要な指標です。これは、オーダーに必要な全ての構成資材の利用可能性をシステムが確認することによって決定されます。「利用可能」ステータスは資材関連の遅延なく生産が進行できることを意味し、「不足」は問題があることを示します。 このアトリビュートは「資材不足影響分析」ダッシュボードにとって不可欠です。資材不足でオーダーが待機している時間を分析することで、企業はサプライチェーンの問題が生産スケジュールに与える影響を定量化できます。これにより、信頼できないサプライヤーや頻繁に遅延を引き起こす問題のある構成品目を特定するのに役立ちます。 その重要性 資材不足による遅延を直接浮き彫りにします。これは、生産スケジュール逸脱の一般的かつ重要な根本原因です。 取得元 これは単一の保存フィールドではありません。利用可能在庫確認(ATPチェック)の結果です。結果はトランザクションCO02または一括利用可能在庫確認COHVでよく確認できます。ステータス自体(例:MACM - 材料コミット済み)がログ記録される場合があります。SAP ECC PPのドキュメントを参照してください。 例 利用可能不足部分的に利用可能未確認 | |||
生産計画活動
| アクティビティ | 説明 | ||
|---|---|---|---|
| オーダー技術的完了 | これは、ロジスティクスの観点から生産オーダーを最終化する管理上の終了ステップです。これ以上の材料移動や確認を防ぎ、財務決済を可能にします。 | ||
| その重要性 これは、ロジスティクスにおけるオーダーのライフサイクルの最終的な終了点です。このイベントを分析することで、生産後の管理タスクを含む総プロセス期間を理解するのに役立ちます。 取得元 システムステータス「TECO」(I0045、技術的完了)がオーダーに割り当てられたときに明示的に取得されます。変更はJCDSテーブルにタイムスタンプとともに記録されます。 取得 JCDSでオーダーの「TECO」ステータスがアクティブになったときのタイムスタンプを特定します。 イベントタイプ explicit | |||
| 入庫記帳済み | このイベントは、生産オーダーからの完成品が在庫に受領されたことをログ記録します。これは、製造された商品が出荷またはさらなる処理のために利用可能になったことを示します。 | ||
| その重要性 これは、生産プロセスの最終出力を表す重要な完了マイルストンです。リリースから入庫までの時間は、総生産リードタイムとなります。 取得元 生産オーダーを参照する移動タイプ(通常 '101')を持つ材料伝票として、テーブルMKPF/MSEGに記録されます。システムステータス 'DLV' (I0012, 納入済み) もオーダーに設定されます。 取得 「101」移動タイプの品目伝票からの転記日付、または「DLV」ステータス変更のタイムスタンプを取得します。 イベントタイプ explicit | |||
| 最終確認記録済み | この活動は、生産オーダーのすべての作業が現場の視点から完了したことを示します。最終作業の最終確認エントリによってマークされます。 | ||
| その重要性 このマイルストンは、物理的な生産活動の終了を示します。最初から最終確認までの期間が、実際の生産実行時間を表します。 取得元 これは、システムステータス「CNF」(I0009、確認済み)が設定されたときに捕捉されます。これは通常、テーブルAFRUの最終確認エントリ(AFRU-AUERU = 'X')によってトリガーされます。ステータス変更はJCDSにログ記録されます。 取得 「CNF」ステータスが設定されたときのタイムスタンプを特定するか、AFRUで最終確認レコードを見つけます。 イベントタイプ explicit | |||
| 初回確認記録済み | このイベントは、オーダーに対する実際の生産作業の開始を示します。生産オーダー内の任意の作業に対する最初の時間確認がシステムに入力されたときに捕捉されます。 | ||
| その重要性 この活動は、生産の実際開始時間を提供し、スケジュール遵守を測定し、リソース割り当てと作業開始の間の遅延を特定するために不可欠です。 取得元 これは、AFRUテーブルに記録されたオーダーのすべての確認の中で最も早い転記日 (AFRU-BUDAT) を見つけることで推測されます。最初の入力が物理的生産の開始を示します。 取得 AFRUテーブルの転記日付に基づいて、オーダーの初回確認レコードを特定します。 イベントタイプ inferred | |||
| 生産オーダーリリース | この活動は、生産オーダーの実行に対する正式な承認とリリースを示します。リリースされると、材料予約が有効になり、出庫や確認などの生産活動を開始できます。 | ||
| その重要性 これは計画から実行への引き渡しを表す重要なマイルストンです。作成からリリースまでの時間は、計画効率の主要な指標となります。 取得元 システムステータス「REL」(I0002)が製造オーダーに割り当てられたときに明示的に取得されます。変更はJCDSテーブルにタイムスタンプとともに記録され、オーダーのオブジェクト番号(AUFK-OBJNR)にリンクされます。 取得 オーダーの「REL」ステータスがアクティブになったときのタイムスタンプを特定します。 イベントタイプ explicit | |||
| 生産オーダー作成 | このイベントは、新しい生産オーダーの作成を示し、通常は計画実行または手動入力から開始されます。新しいオーダーレコードがシステムに保存され、「CRTD」(作成済み)ステータスを受け取ったときに明示的に捕捉されます。 | ||
| その重要性 これは、すべての生産オーダーケースの開始点です。このイベントからリリースまでの時間を分析することで、生産前計画および管理設定における遅延を特定するのに役立ちます。 取得元 このイベントは、生産オーダーの作成日 (AUFK-ERDAT) と作成時刻 (AUFK-ERZET) から取得されます。システムステータス 'CRTD' (I0001) が割り当てられ、オーダーオブジェクト番号 (AUFK-OBJNR) にリンクされたテーブルJESTおよびJCDSにログ記録されます。 取得 作成タイムスタンプと「CRTD」ステータスの割り当てを追跡します。 イベントタイプ explicit | |||
| `商品出荷`登録済み | この活動は、生産オーダーで使用されるコンポーネント材料の在庫からの出庫を表します。必要な原材料または半製品が生産のために手配されたことを確認します。 | ||
| その重要性 このイベントは、材料消費の開始を示します。オーダーリリースと出庫の間の遅延は、倉庫ロジスティクス、材料手配、または在庫精度における問題を浮き彫りにする可能性があります。 取得元 生産オーダー番号 (MSEG-AUFNR) を参照する移動タイプ(通常 '261')を持つ材料伝票として、テーブルMKPF(ヘッダー)とMSEG(明細)に記録されます。 取得 オーダーに関連付けられた移動タイプ「261」の品目伝票の転記日付(MKPF-BUDAT)を取得します。 イベントタイプ explicit | |||
| オーダーキャンセル設定 | このイベントは、生産オーダーが完了前にキャンセルされたことを示します。これは通常、特定のステータスまたは削除フラグを設定することで行われ、それ以上の処理を防ぎます。 | ||
| その重要性 これは追跡すべき重要な負の結果です。キャンセルされたオーダーを分析することで、需要予測、計画精度、またはマスタデータ管理に関する問題が明らかになる可能性があります。 取得元 これは、「DLFL」(I0076、削除フラグ)ステータスの割り当て、または設定されている場合は特定の「キャンセル済み」ステータスから推測できます。変更はJCDSテーブルにタイムスタンプとともにログ記録されます。 取得 オーダーに対して削除フラグ(「DLFL」)またはキャンセルステータスが設定されたときのタイムスタンプを特定します。 イベントタイプ inferred | |||
| オーダーデータ変更 | このイベントは、生産オーダーの初期作成後に行われた、計画数量、日付、BOMなどの重要な変更を捕捉します。これらの変更は監査目的でシステムによってログ記録されます。 | ||
| その重要性 これらの変更を追跡することで、プロセスの不安定性や頻繁な再計画を特定できます。変更の頻度が高い場合、初期計画の不備、需要の変動、またはデータの不正確さを示唆している可能性があります。 取得元 AFKO(オーダーヘッダー)やAFPO(オーダー明細)のようなテーブルの主要項目への変更は、変更伝票テーブルCDHDR(ヘッダー)およびCDPOS(明細)に記録されます。関連する各変更はアクティビティとして抽出できます。 取得 製造オーダーオブジェクトクラスについて、テーブルCDHDRとCDPOSから変更ログエントリを抽出します。 イベントタイプ explicit | |||
| オーダー決済実行 | 生産オーダーの財務決済を表し、収集されたコストが適切な原価要素に割り当てられます。これは、管理会計の観点からオーダーのライフサイクルにおける最終ステップです。 | ||
| その重要性 財務活動ではありますが、決済の遅延はコスト報告やオーダーデータの正確性に関する問題を示唆する可能性があります。これは、生産プロセスの真の財務上の完了を示します。 取得元 これは、オーダー残高がゼロになった場合、またはシステムステータス「SETC」(I0076、決済ルール作成済み)に決済実行ログが続く場合に推測できます。実際の決済はCOSPやCOSSのような管理会計テーブルに記録されます。 取得 COテーブルのオーダーにリンクされた決済伝票、または「SETC」ステータスの有効化から推測されます。 イベントタイプ inferred | |||
| 中間確認記録済み | 作業の部分確認を通じて、生産オーダーの進捗更新を表します。これは、最終完了前に進捗を追跡する必要がある長期実行オーダーで一般的です。 | ||
| その重要性 中間確認を分析することで、長期的な生産サイクルの進捗状況を監視し、プロセスの開始や終了時だけでなく、生産プロセス自体のボトルネックを特定するのに役立ちます。 取得元 最終確認としてマークされていないAFRUテーブルの確認レコードから取得されます。各エントリには転記日付(AFRU-BUDAT)と時刻があります。 取得 操作の最終確認としてフラグ付けされていないAFRUの全ての確認レコードを抽出します。 イベントタイプ explicit | |||
| 資材利用可能性確認済み | 生産オーダーに必要なすべてのコンポーネントが利用可能かどうかを判断するためのチェックの実行を表します。これは、オーダー作成時またはリリース時の自動チェック、または手動でトリガーされるアクションである場合があります。 | ||
| その重要性 この活動は、材料不足による遅延を理解するために不可欠です。頻繁なチェックや材料が利用可能になるまでの長期間は、サプライチェーンまたは在庫管理の問題を示している可能性があります。 取得元 システムは「MACM」(材料コミット済み)または「MSPT」(材料不足)のようなステータスを設定します。実行は、テーブルJEST/JCDSにおけるこのステータス変更のタイムスタンプから推測できます。結果はオーダーヘッダーに表示されます。 取得 資材利用可能性に関連するステータス変更、例えば「MACM」や「MSPT」のタイムスタンプから推測されます。 イベントタイプ inferred | |||
抽出ガイド
ステップ
- SAPクエリでInfoSetを作成: トランザクションコード
SQ02を使用します。例えばZPP_EVENTLOGという新しいInfoSetを作成します。「基準テーブルを使用したテーブル結合」のデータソースオプションを選択します。初期の基準テーブルとしてAUFK(オーダーマスタデータ)を使用します。 - 必要なテーブルを結合: 以下のテーブルをInfoSet結合に追加します。システムが結合を提案する場合がありますが、それが正しいことを確認してください。
AUFKとAFKO(オーダーヘッダーデータ PPオーダー):AUFK-AUFNR = AFKO-AUFNRAUFKとJEST(個別オブジェクトステータス):AUFK-OBJNR = JEST-OBJNRJESTとJCDS(システム/ユーザー/ステータス変更伝票):JEST-OBJNR = JCDS-OBJNRANDJEST-STAT = JCDS-STAT。注:この結合はステータス変更履歴を読み取るためのものです。AUFKとAFRU(オーダー完了確認):AUFK-AUFNR = AFRU-AUFNRAUFKとMSEG(伝票セグメント:品目):AUFK-AUFNR = MSEG-AUFNRMSEGとMKPF(ヘッダー:品目伝票):MSEG-MBLNR = MKPF-MBLNRANDMSEG-MJAHR = MKPF-MJAHR
- 項目グループを定義: ソーステーブルから必要な項目を項目グループにドラッグします。
AUFK-AUFNR、AUFK-WERKS、AFKO-GAMNG、AFKO-GASMG、JCDS-UDATE、MKPF-BUDATなど、最終クエリに必要な全ての項目が含まれていることを確認してください。 - カスタム項目とコードを追加: InfoSet内で、「追加」タブに移動します。
ActivityName、EventTime、SourceSystem、LastDataUpdateのカスタム項目を定義し、クエリセクションで定義されたロジックに基づいてそれらを投入するABAPコードを記述する必要があります。このロジックには、ステータス変更、確認、および品目伝票を繰り返し処理して、各ビジネスイベントに対して個別レコードを生成する作業が含まれます。InfoSetのコードセクション内で表形式データをイベントログ形式に変換するため、これは最も複雑なステップです。 - InfoSetを生成して保存: 全ての結合、項目、カスタムコードが設定されたら、InfoSetを保存して生成します。
- SAPクエリを作成: トランザクションコード
SQ01を使用します。以前のステップで作成されたInfoSetに基づいて、例えばZPP_EVENTSという新しいクエリを作成します。 - クエリレイアウトを設計: クエリデザイナーで、選択画面の項目を定義します。適切な選択項目には、製造オーダー
AUFNR、プラントWERKS、オーダータイプAUART、およびオーダー登録日AUFK-ERDATの日付範囲が含まれます。 - 出力リストを定義: レポート出力に表示される項目を選択します。このリストは、
ActivityNameやEventTimeなどのカスタム項目を含め、イベントログに必要な列と完全に一致する必要があります。 - クエリを実行: 希望する選択基準でクエリを実行します。例えば、過去3〜6ヶ月間の製造オーダーについて実行します。
- データをエクスポート: クエリが結果を表示したら、リストをエクスポートします。これに最も一般的で信頼性の高い形式は、タブ区切りまたはCSV形式の「スプレッドシート」または「ローカルファイル」です。
- ProcessMind用の形式: エクスポートされたファイルをスプレッドシートプログラムで開きます。列ヘッダーが必須のアトリビュート(
ProductionOrder、ActivityName、EventTimeなど)と一致することを確認し、EventTimeの日付と時刻の形式が一貫しており、要求される標準(例:YYYY-MM-DD HH:MI:SS)を満たしていることを確認します。アップロード用にファイルをCSV形式で保存します。
設定
- InfoSet結合: このメソッドの中核は、ヘッダー、ステータス、確認、在庫移動の各テーブルを結合する複雑なInfoSetに依存しています。主要な結合は
AUFK->AFKO、AUFK->JEST->JCDS、AUFK->AFRU、AUFK->MSEG->MKPFです。不正確または非効率な結合は、パフォーマンスの低下や不正確なデータにつながる可能性があります。 - 選択条件: システムのパフォーマンス問題を回避するために、管理可能な選択範囲を定義することが重要です。クエリの起動画面の主要な選択項目には以下を含める必要があります。
- 生産プラント(
AUFK-WERKS) - 製造オーダータイプ(
AUFK-AUART) - オーダー登録日(
AUFK-ERDAT):データセットのサイズを管理可能に保つため、過去3~6ヶ月間のデータを抽出することをお勧めします。
- 生産プラント(
- システムステータス: 「登録済み」、「リリース済み」、「技術的完了」、「キャンセル済み」などのイベントを特定するためのロジックは、特定のシステムステータスコード(例:I0001、I0002、I0045、I0047)に依存します。これらは通常、SAPシステム全体で標準ですが、確認される必要があります。
- 移動タイプ: 「出庫」や「入庫」などのイベントは、それぞれの特定の移動タイプ(
MSEG-BWART)によって特定されます。通常、それぞれ「261」と「101」です。これらの値が組織の設定と一致するか確認してください。 - 権限: クエリを実行するユーザーは、トランザクション
SQ01、SQ02、SQ03へのアクセス権、および全ての基になるテーブル(AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF)への表示アクセス権が必要です。
a クエリ例 abap
/*
The following ABAP-style SQL script represents the complete logic required to build the event log.
This logic must be implemented within the code sections of the SQ02 InfoSet, as a direct SQL query of this nature is not run.
Each SELECT block corresponds to a specific business activity.
*/
-- 1. Production Order Created
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Created' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0001' AND JCDS.INACT = ''
UNION ALL
-- 2. Material Availability Checked (using 'Material shortage' status as an indicator)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Material Availability Checked' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0033' AND JCDS.INACT = '' -- I0033 is MSPT (Material Shortage)
UNION ALL
-- 3. Production Order Released
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Released' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0002' AND JCDS.INACT = ''
UNION ALL
-- 4. Order Data Changed (using last change date as a proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Data Changed' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime, -- Time is not available in AUFK
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.AEDAT IS NOT NULL AND AUFK.AEDAT > AUFK.ERDAT
UNION ALL
-- 5. Goods Issue Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Issue Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
CONF.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
CONF.EventTime,
CONF.ProductionPlant,
CONF.ProductCode,
CONF.PlannedQuantity,
CONF.DeliveredQuantity,
CONF.ActualStartDate,
CONF.ActualEndDate,
CONF.SourceSystem,
CONF.LastDataUpdate
FROM (
SELECT
AUFK.AUFNR AS ProductionOrder,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
ROW_NUMBER() OVER(PARTITION BY AUFK.AUFNR ORDER BY AFRU.BUDAT, AFRU.ERFZEIT) as rn
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
) AS CONF
WHERE CONF.rn = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'T' -- T = Partial Confirmation
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'E' -- E = Final Confirmation
UNION ALL
-- 9. Goods Receipt Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Technically Completed' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0045' AND JCDS.INACT = ''
UNION ALL
-- 11. Order Settlement Ran (using 'Closed' status as proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Settlement Ran' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0046' AND JCDS.INACT = '' -- I0046 is CLSD (Closed)
UNION ALL
-- 12. Order Cancellation Set
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0047' AND JCDS.INACT = '' -- I0047 is CNF (Confirmed), use I0076 for Canceled. Recorrecting. Use Deletion Flag instead.
-- Corrected Logic for Cancellation:
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.LOEKZ = 'X'; ステップ
- データベースアクセスの確立: 基盤となるSAP ECCデータベースへの読み取り専用認証情報を取得します。サーバーアドレス、ポート、データベース名、ユーザー名、パスワードが必要です。このアクセスは不可欠であり、SAP Basisおよびデータベース管理チームとの連携が必要です。
- SAPスキーマの特定: SAPテーブルが格納されている正しいデータベーススキーマを特定します。これは多くの場合
SAPSR3または同様のシステム固有の名前です。クエリ内のプレースホルダー[Your SAP Schema]をこの値に置き換える必要があります。 - SQLクエリの準備:
queryセクションで提供されている完全なSQLクエリをコピーします。このクエリは、指定された全てのアクティビティを単一のイベントログ形式で抽出するように設計されています。 - クエリパラメータの設定: 実行する前に、クエリ内のプレースホルダーを修正する必要があります。抽出の時間枠を定義するために、
[Start Date]と[End Date]を設定します。また、データ量を制限するために、生産プラント(WERKS)またはオーダータイプ(AUART)でフィルタリングすることを強くお勧めします。 - 接続と実行: DBeaver、SAP HANA Studio、またはカスタムスクリプト(Python、Java)などの標準SQLクライアントを使用して、ステップ1の認証情報を用いてSAPデータベースに接続します。
- クエリの実行: 設定済みのSQLクエリをクライアントに貼り付けて実行します。日付範囲とシステムサイズによっては、完了までに数分かかる場合があります。
- 事前結果の確認: クエリが完了したら、最初の数百行を簡単に検査し、
ProductionOrder、ActivityName、EventTimeなどの列が正しく入力され、意味があることを確認します。 - CSVへのエクスポート: SQLクライアントから結果セット全体をCSVファイルにエクスポートします。文字化けを防ぐために、ファイルがUTF-8エンコーディングを使用していることを確認してください。
- アップロード用CSVの最終化: CSVファイルを開き、列ヘッダーが必須のアトリビュート(
ProductionOrder、ActivityName、EventTime、SourceSystem、LastDataUpdateなど)と一致することを確認します。EventTime列が例えばYYYY-MM-DD HH:MI:SSのように一貫した形式であることを確認してください。 - ProcessMindへのアップロード: 準備されたCSVファイルは、ProcessMindプラットフォームにアップロードして分析する準備が整いました。
設定
- データベーススキーマ: 生産計画テーブルが存在するSAPスキーマを指定する必要があります。クエリ内のプレースホルダー
[Your SAP Schema]を、お客様の環境に適した正しい名前(例:SAPSR3)に置き換えてください。 - 日付範囲: 特定の日付範囲でフィルタリングすることは、パフォーマンスにとって非常に重要です。クエリはオーダー登録日(
AUFK.ERDAT)でフィルタリングします。管理可能なデータ量を確保するために、直近3〜6ヶ月の期間から始めることをお勧めします。 - 製造オーダータイプ: 分析を絞り込むために、クエリを製造オーダータイプフィールド(
AUFK.AUART)でフィルタリングしてください。これにより、標準製造オーダー、プロセスオーダー、再加工オーダーなどの特定のタイプを含めたり除外したりできます。 - 生産プラント: 1つ以上の生産プラント(
AFKO.WERKS)でフィルタリングすることを強くお勧めします。全てのプラントのデータを一度に抽出すると、非常にリソースを消費する可能性があります。 - データベースアクセス: このメソッドには、少なくとも以下のテーブルへの読み取り権限を持つデータベースユーザーが必要です:
AUFK、AFKO、JCDS、JEST、AFRU、MSEG、MKPF。直接データベースアクセスは全てのSAPユーザーにとって標準ではなく、特別な権限が必要です。
a クエリ例 sql
WITH Orders AS (
SELECT
aufk.AUFNR AS ProductionOrder,
afko.WERKS AS ProductionPlant,
afko.PLNBEZ AS ProductCode,
afko.GAMNG AS PlannedQuantity,
afko.GMEIN AS PlannedUnit,
afko.GEMNG AS DeliveredQuantity,
CASE
WHEN afko.GSTRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GSTRI || afko.GSUZI, 'YYYYMMDDHH24MISS')
END AS ActualStartDate,
CASE
WHEN afko.GETRI = '00000000' THEN NULL
ELSE TO_TIMESTAMP(afko.GETRI || afko.GEUZI, 'YYYYMMDDHH24MISS')
END AS ActualEndDate,
aufk.OBJNR,
aufk.ERDAT AS CreationDate,
aufk.ERFAS AS CreationTime
FROM
"[Your SAP Schema]".AUFK aufk
JOIN
"[Your SAP Schema]".AFKO afko ON aufk.AUFNR = afko.AUFNR
WHERE
aufk.AUTYP = '10' -- Filter for Production Orders
AND aufk.ERDAT BETWEEN '[Start Date]' AND '[End Date]'
-- AND afko.WERKS IN ('[Your Plant]', '[Another Plant]') -- Optional: Filter by Plant
-- AND aufk.AUART IN ('[Your Order Type]') -- Optional: Filter by Order Type
),
Confirmations AS (
SELECT
o.ProductionOrder,
a.RUECK AS ConfirmationNumber,
a.RMZHL AS ConfirmationCounter,
TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
a.AUERU AS IsFinalConfirmation,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') ASC) as rn_asc,
ROW_NUMBER() OVER(PARTITION BY o.ProductionOrder ORDER BY TO_TIMESTAMP(a.BUDAT || a.UZEIT, 'YYYYMMDDHH24MISS') DESC) as rn_desc
FROM
Orders o
JOIN
"[Your SAP Schema]".AFRU a ON o.ProductionOrder = a.AUFNR
)
-- 1. Production Order Created
SELECT
o.ProductionOrder,
'Production Order Created' AS ActivityName,
TO_TIMESTAMP(o.CreationDate || o.CreationTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
UNION ALL
-- 2. Material Availability Checked (using 'Material Committed' status as proxy)
SELECT
o.ProductionOrder,
'Material Availability Checked' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0006' AND jcds.INACT != 'X'
UNION ALL
-- 3. Production Order Released
SELECT
o.ProductionOrder,
'Production Order Released' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0002' AND jcds.INACT != 'X'
UNION ALL
-- 4. Order Data Changed
SELECT
o.ProductionOrder,
'Order Data Changed' AS ActivityName,
TO_TIMESTAMP(aufk.AEDAT || aufk.AEZEIT, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".AUFK aufk ON o.ProductionOrder = aufk.AUFNR
WHERE aufk.AEDAT > o.CreationDate
UNION ALL
-- 5. Goods Issue Posted
SELECT
o.ProductionOrder,
'Goods Issue Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
c.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
c.ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.rn_asc > 1 AND c.IsFinalConfirmation IS NULL
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
c.ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
c.EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Confirmations c
JOIN Orders o ON c.ProductionOrder = o.ProductionOrder
WHERE c.IsFinalConfirmation = 'X'
UNION ALL
-- 9. Goods Receipt Posted
SELECT
o.ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
TO_TIMESTAMP(mkpf.CPUDT || mkpf.CPUTM, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".MSEG mseg ON o.ProductionOrder = mseg.AUFNR
JOIN "[Your SAP Schema]".MKPF mkpf ON mseg.MBLNR = mkpf.MBLNR AND mseg.MJAHR = mkpf.MJAHR
WHERE mseg.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
o.ProductionOrder,
'Order Technically Completed' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0045' AND jcds.INACT != 'X'
UNION ALL
-- 11. Order Settlement Ran
SELECT
o.ProductionOrder,
'Order Settlement Ran' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTIME, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0046' AND jcds.INACT != 'X'
UNION ALL
-- 12. Order Cancellation Set
SELECT
o.ProductionOrder,
'Order Cancellation Set' AS ActivityName,
TO_TIMESTAMP(jcds.UDATE || jcds.UTime, 'YYYYMMDDHH24MISS') AS EventTime,
'[Your Source System]' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
o.ProductionPlant,
o.ProductCode,
o.PlannedQuantity,
o.DeliveredQuantity,
o.ActualStartDate,
o.ActualEndDate
FROM Orders o
JOIN "[Your SAP Schema]".JCDS jcds ON o.OBJNR = jcds.OBJNR
WHERE jcds.STAT = 'I0076' AND jcds.INACT != 'X'; ステップ
- SAPクエリでInfoSetを作成: トランザクションコード
SQ02を使用します。例えばZPP_EVENTLOGという新しいInfoSetを作成します。「基準テーブルを使用したテーブル結合」のデータソースオプションを選択します。初期の基準テーブルとしてAUFK(オーダーマスタデータ)を使用します。 - 必要なテーブルを結合: 以下のテーブルをInfoSet結合に追加します。システムが結合を提案する場合がありますが、それが正しいことを確認してください。
AUFKとAFKO(オーダーヘッダーデータ PPオーダー):AUFK-AUFNR = AFKO-AUFNRAUFKとJEST(個別オブジェクトステータス):AUFK-OBJNR = JEST-OBJNRJESTとJCDS(システム/ユーザー/ステータス変更伝票):JEST-OBJNR = JCDS-OBJNRANDJEST-STAT = JCDS-STAT。注:この結合はステータス変更履歴を読み取るためのものです。AUFKとAFRU(オーダー完了確認):AUFK-AUFNR = AFRU-AUFNRAUFKとMSEG(伝票セグメント:品目):AUFK-AUFNR = MSEG-AUFNRMSEGとMKPF(ヘッダー:品目伝票):MSEG-MBLNR = MKPF-MBLNRANDMSEG-MJAHR = MKPF-MJAHR
- 項目グループを定義: ソーステーブルから必要な項目を項目グループにドラッグします。
AUFK-AUFNR、AUFK-WERKS、AFKO-GAMNG、AFKO-GASMG、JCDS-UDATE、MKPF-BUDATなど、最終クエリに必要な全ての項目が含まれていることを確認してください。 - カスタム項目とコードを追加: InfoSet内で、「追加」タブに移動します。
ActivityName、EventTime、SourceSystem、LastDataUpdateのカスタム項目を定義し、クエリセクションで定義されたロジックに基づいてそれらを投入するABAPコードを記述する必要があります。このロジックには、ステータス変更、確認、および品目伝票を繰り返し処理して、各ビジネスイベントに対して個別レコードを生成する作業が含まれます。InfoSetのコードセクション内で表形式データをイベントログ形式に変換するため、これは最も複雑なステップです。 - InfoSetを生成して保存: 全ての結合、項目、カスタムコードが設定されたら、InfoSetを保存して生成します。
- SAPクエリを作成: トランザクションコード
SQ01を使用します。以前のステップで作成されたInfoSetに基づいて、例えばZPP_EVENTSという新しいクエリを作成します。 - クエリレイアウトを設計: クエリデザイナーで、選択画面の項目を定義します。適切な選択項目には、製造オーダー
AUFNR、プラントWERKS、オーダータイプAUART、およびオーダー登録日AUFK-ERDATの日付範囲が含まれます。 - 出力リストを定義: レポート出力に表示される項目を選択します。このリストは、
ActivityNameやEventTimeなどのカスタム項目を含め、イベントログに必要な列と完全に一致する必要があります。 - クエリを実行: 希望する選択基準でクエリを実行します。例えば、過去3〜6ヶ月間の製造オーダーについて実行します。
- データをエクスポート: クエリが結果を表示したら、リストをエクスポートします。これに最も一般的で信頼性の高い形式は、タブ区切りまたはCSV形式の「スプレッドシート」または「ローカルファイル」です。
- ProcessMind用の形式: エクスポートされたファイルをスプレッドシートプログラムで開きます。列ヘッダーが必須のアトリビュート(
ProductionOrder、ActivityName、EventTimeなど)と一致することを確認し、EventTimeの日付と時刻の形式が一貫しており、要求される標準(例:YYYY-MM-DD HH:MI:SS)を満たしていることを確認します。アップロード用にファイルをCSV形式で保存します。
設定
- InfoSet結合: このメソッドの中核は、ヘッダー、ステータス、確認、在庫移動の各テーブルを結合する複雑なInfoSetに依存しています。主要な結合は
AUFK->AFKO、AUFK->JEST->JCDS、AUFK->AFRU、AUFK->MSEG->MKPFです。不正確または非効率な結合は、パフォーマンスの低下や不正確なデータにつながる可能性があります。 - 選択条件: システムのパフォーマンス問題を回避するために、管理可能な選択範囲を定義することが重要です。クエリの起動画面の主要な選択項目には以下を含める必要があります。
- 生産プラント(
AUFK-WERKS) - 製造オーダータイプ(
AUFK-AUART) - オーダー登録日(
AUFK-ERDAT):データセットのサイズを管理可能に保つため、過去3~6ヶ月間のデータを抽出することをお勧めします。
- 生産プラント(
- システムステータス: 「登録済み」、「リリース済み」、「技術的完了」、「キャンセル済み」などのイベントを特定するためのロジックは、特定のシステムステータスコード(例:I0001、I0002、I0045、I0047)に依存します。これらは通常、SAPシステム全体で標準ですが、確認される必要があります。
- 移動タイプ: 「出庫」や「入庫」などのイベントは、それぞれの特定の移動タイプ(
MSEG-BWART)によって特定されます。通常、それぞれ「261」と「101」です。これらの値が組織の設定と一致するか確認してください。 - 権限: クエリを実行するユーザーは、トランザクション
SQ01、SQ02、SQ03へのアクセス権、および全ての基になるテーブル(AUFK, AFKO, JEST, JCDS, AFRU, MSEG, MKPF)への表示アクセス権が必要です。
a クエリ例 abap
/*
The following ABAP-style SQL script represents the complete logic required to build the event log.
This logic must be implemented within the code sections of the SQ02 InfoSet, as a direct SQL query of this nature is not run.
Each SELECT block corresponds to a specific business activity.
*/
-- 1. Production Order Created
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Created' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0001' AND JCDS.INACT = ''
UNION ALL
-- 2. Material Availability Checked (using 'Material shortage' status as an indicator)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Material Availability Checked' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0033' AND JCDS.INACT = '' -- I0033 is MSPT (Material Shortage)
UNION ALL
-- 3. Production Order Released
SELECT
AUFK.AUFNR AS ProductionOrder,
'Production Order Released' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0002' AND JCDS.INACT = ''
UNION ALL
-- 4. Order Data Changed (using last change date as a proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Data Changed' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime, -- Time is not available in AUFK
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.AEDAT IS NOT NULL AND AUFK.AEDAT > AUFK.ERDAT
UNION ALL
-- 5. Goods Issue Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Issue Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '261'
UNION ALL
-- 6. First Confirmation Recorded
SELECT
CONF.ProductionOrder,
'First Confirmation Recorded' AS ActivityName,
CONF.EventTime,
CONF.ProductionPlant,
CONF.ProductCode,
CONF.PlannedQuantity,
CONF.DeliveredQuantity,
CONF.ActualStartDate,
CONF.ActualEndDate,
CONF.SourceSystem,
CONF.LastDataUpdate
FROM (
SELECT
AUFK.AUFNR AS ProductionOrder,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
ROW_NUMBER() OVER(PARTITION BY AUFK.AUFNR ORDER BY AFRU.BUDAT, AFRU.ERFZEIT) as rn
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
) AS CONF
WHERE CONF.rn = 1
UNION ALL
-- 7. Intermediate Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Intermediate Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'T' -- T = Partial Confirmation
UNION ALL
-- 8. Final Confirmation Recorded
SELECT
AUFK.AUFNR AS ProductionOrder,
'Final Confirmation Recorded' AS ActivityName,
CAST(AFRU.BUDAT AS VARCHAR(8)) || ' ' || CAST(AFRU.ERFZEIT AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN AFRU ON AUFK.AUFNR = AFRU.AUFNR
WHERE AFRU.AUERU = 'E' -- E = Final Confirmation
UNION ALL
-- 9. Goods Receipt Posted
SELECT
AUFK.AUFNR AS ProductionOrder,
'Goods Receipt Posted' AS ActivityName,
CAST(MKPF.BUDAT AS VARCHAR(8)) || ' ' || CAST(MKPF.CPUTM AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN MSEG ON AUFK.AUFNR = MSEG.AUFNR
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART = '101'
UNION ALL
-- 10. Order Technically Completed
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Technically Completed' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0045' AND JCDS.INACT = ''
UNION ALL
-- 11. Order Settlement Ran (using 'Closed' status as proxy)
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Settlement Ran' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0046' AND JCDS.INACT = '' -- I0046 is CLSD (Closed)
UNION ALL
-- 12. Order Cancellation Set
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(JCDS.UDATE AS VARCHAR(8)) || ' ' || CAST(JCDS.UTIME AS VARCHAR(6)) AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
JOIN JCDS ON AUFK.OBJNR = JCDS.OBJNR
WHERE JCDS.STAT = 'I0047' AND JCDS.INACT = '' -- I0047 is CNF (Confirmed), use I0076 for Canceled. Recorrecting. Use Deletion Flag instead.
-- Corrected Logic for Cancellation:
SELECT
AUFK.AUFNR AS ProductionOrder,
'Order Cancellation Set' AS ActivityName,
CAST(AUFK.AEDAT AS VARCHAR(8)) || ' 000000' AS EventTime,
AUFK.WERKS AS ProductionPlant,
AUFK.MATNR AS ProductCode,
AFKO.GAMNG AS PlannedQuantity,
AFKO.GASMG AS DeliveredQuantity,
AUFK.GSTRP AS ActualStartDate,
AUFK.GETRI AS ActualEndDate,
SY-SYSID AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM AUFK
WHERE AUFK.LOEKZ = 'X';