生産計画データテンプレート
生産計画データテンプレート
- 収集を推奨する属性
- 追跡すべき主要なアクティビティ
- データ抽出の手順
生産計画の属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 ActivityName | 製造指図について、特定の時点で発生した業務イベントまたはシステムイベントの名前です。 | ||
| 説明 アクティビティ名は、生産計画プロセスにおける特定のステップやステータス変更を表します。SAP ECC PPの変更ログ、ステータス更新、トランザクションレコードから抽出され、「製造指図を作成」「資材の在庫を確認」「入庫を転記」などの重要な節目を示します。 この属性はプロセスマップの基盤となり、イベントの順序の可視化、プロセスバリアントの発見、ボトルネックや手戻りの特定に役立ちます。実際の業務を反映した正確で有用なプロセスモデルを作成するには、アクティビティ名を明確にし、適切な粒度で設定することが重要です。 重要な理由 プロセスマップ上のステップを定義し、生産ワークフローの可視化、分析、把握を可能にします。 入手先 テーブル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で各製造指図に割り当てられる一意の英数字キーです。作成や計画から実行、最終決済まで、関連するすべてのアクティビティを結び付ける中心的なオブジェクトです。 プロセスマイニングでは、この属性を使って1回の生産に属するすべてのイベントをグループ化します。これにより、製造指図のライフサイクル全体を分析し、進捗の追跡、サイクルタイムの測定、標準プロセスからの逸脱の特定ができます。製造指図ごとに分析すると、個々の製造依頼がどのように処理されるかを明確に把握できます。 重要な理由 関連するすべてのプロセスイベントを結び付ける中心的な識別子です。これにより、各生産の開始から完了までを再構成して分析できます。 入手先 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 | 最後の生産アクティビティの日時で、指図の実際の完了を示します。 | ||
| 説明 実際終了日は、製造指図のすべての生産活動が完了したことを示すイベントのタイムスタンプです。通常、「最終確認記録」または最後の「入庫転記」イベントのタイムスタンプから取得します。 この属性は、生産サイクル時間の合計を測定し、スケジュールの遵守状況を分析するうえで欠かせません。「実際終了日」と「計画終了日」を比較すると、製造指図が予定どおりに完了したかどうかを判定できます。「実際開始日」から「実際終了日」までの期間を分析することで、実際の生産リードタイムを把握できます。 重要な理由 生産の完了時点を示すため、納期遵守パフォーマンスと実行時間の合計を正確に測定できます。 入手先 イベントログから、「最終確認記録」や「入庫転記」など、主要な完了アクティビティのタイムスタンプの最大値を取得します。 例 2023-05-14T16:00:00Z2023-06-29T11:30:00Z2023-07-05T17:00:00Z | |||
| 実際の開始日 ActualStartDate | 最初に記録された生産アクティビティの日時で、実行の実際の開始を示します。 | ||
| 説明 実際の開始日は、実際の生産作業の開始を示す最初のイベントの日時です。通常は、最初の生産確認イベント、または指図に対する原材料の最初の出庫から取得します。 この派生属性は、スケジュール遵守の分析に欠かせません。実際の開始点を示すため、「計画開始日」と比較して開始時刻の差を正確に算出できます。計画日と実際の開始日の差を把握すると、資材の準備、機械の段取り、リソースの確保に関する生産前の遅延を特定できます。 重要な理由 生産実行の実際の開始点を示し、開始遅延や生産全体のリードタイムを正確に算出できます。 入手先 イベントログから、各製造指図について「最初の確認を記録」や「出庫を転記」など、特定の実行アクティビティの最も早い日時を特定して取得します。 例 2023-05-11T08:30:00Z2023-06-22T14:00:00Z2023-07-02T09:15:00Z | |||
| 生産プラント ProductionPlant | 製造指図を実行する製造施設または拠点です。 | ||
| 説明 生産プラントは、製造施設を表す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 | |||
| スケジュール遵守状況 ScheduleAdherenceStatus | 製造指図が計画終了日までに完了したかどうかを示すフラグです。 | ||
| 説明 スケジュール遵守状況は、予定どおりに完了したかをひと目で把握できる、計算値の真偽値またはカテゴリ属性です。「実際終了日」と「計画終了日」を比較して算出します。実際終了日が計画終了日以前であれば「予定どおり」、それ以降であれば「遅延」となります。 この属性を使うと、ダッシュボードでの分析や可視化が簡単になります。フィルターや集計を使って「スケジュール遵守率」の重要業績評価指標(KPI)を算出し、特定の製品、プラント、資材不足など、指図の遅延を引き起こす主な要因を特定できます。 重要な理由 指図を「予定どおり」または「遅延」に分類することで、パフォーマンス分析を簡素化し、スケジュールの信頼性を簡単に測定・報告できます。 入手先 計算フィールド:IF('ActualEndDate' <= 'PlannedEndDate', '予定どおり', '遅延')。 例 予定どおり遅延 | |||
| 担当ユーザー ResponsibleUser | 製造指図を作成したユーザー、または最後に変更したユーザーのユーザーIDです。 | ||
| 説明 担当ユーザーは、製造指図のライフサイクルにおける作成やリリースなどの主要なイベントに関連付けられたSAPユーザーアカウントを示します。これにより、システム内で行われた操作の責任の所在と追跡可能性を確保できます。 プロセスマイニングでは、この属性を使ってユーザーの行動によるプロセスの違いを分析します。追加のトレーニングが必要なユーザーや、標準とは異なる手順に従っているユーザーを特定できます。また、ユーザー間の作業分担を把握するリソース分析にも役立ちます。 重要な理由 プロセスのアクティビティを個人に関連付けることで、ユーザー単位のパフォーマンス分析と責任の明確化が可能になります。 入手先 指図を作成したユーザーはAUFK-ERNAM、最後に変更したユーザーはAUFK-AENAMに格納されています。変更文書(CDHDR-USERNAME)には、変更ごとのユーザー履歴が記録されています。 例 JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
| 生産優先度 ProductionPriority | 製造指図の緊急度や優先度を示す分類です。 | ||
| 説明 生産優先度は、製造指図の相対的な重要度を示すフィールドです。生産スケジューラーや現場担当者は、この情報をもとに作業の優先順位を決め、重要な指図を優先して処理できます。 この属性を分析すると、優先度の設定が有効に機能しているかを評価できます。優先度の高い指図と低い指図のサイクルタイムを比較すれば、緊急の指図が実際に早く処理されているかを確認できます。そうでない場合は、コミュニケーション、リソース配分、またはプロセスの実行に課題がある可能性があります。 重要な理由 優先度管理が有効に機能し、緊急度の高い指図が通常の指図より早く完了しているかを評価できます。 入手先 製造指図ヘッダーの標準フィールドではない場合があります。カスタムフィールド、販売指図の優先度から取得した値、または分類システムの一部である可能性があります。SAP ECC PPの文書またはシステム設定をご確認ください。 例 高中低至急 | |||
| 生産数量差異 QuantityVariance | 計画生産数量と実際の納品数量との差です。 | ||
| 説明 生産数量差異は、生産実績が当初計画からどれだけ乖離したかを測定する計算指標です。「納品数量」から「計画数量」を差し引いて算出します。差異が正の場合は過剰生産、負の場合は生産不足または歩留まり損失を示します。 この属性は「計画生産量と実績生産量の比較」ダッシュボードと、対応する重要業績評価指標(KPI)に欠かせません。差異を分析すると、歩留まり、スクラップ率、データ入力ミスに関する問題を特定できます。生産プロセスが目標生産量をどの程度安定して達成できているかを直接測定できます。 重要な理由 計画に対する生産実績の精度を数値化し、歩留まり、スクラップ、プロセス管理に関する問題の可能性を明らかにします。 入手先 計算フィールド:「DeliveredQuantity」-「PlannedQuantity」。 例 -2-5005 | |||
| 製造指図ステータス ProductionOrderStatus | 製造指図の現在の処理状況です。作成済み、リリース済み、技術的完了などがあります。 | ||
| 説明 製造指図ステータスは、指図のライフサイクルにおける現在の段階を示します。SAPでは、ステータスコードを使って指図の進行状況を管理します。たとえば、CRTD(作成済み)、REL(リリース済み)、CNF(確認済み)、DLV(納品済み)、TECO(技術的完了)などがあります。 各ステータスでの滞留時間の分析は、生産プロセスマイニングの中心的な要素です。指図の作成後、リリースまでにどれくらい待機しているか、または一部納品済みの状態にどれくらいとどまっているかを特定できます。ステータスの変化をアクティビティとして追跡すると、プロセスフローの全体像を把握できます。 重要な理由 指図の進捗状況を把握し、長時間停滞している指図のボトルネックを特定できます。 入手先 ステータス情報はテーブルJESTおよびJSTOに保存され、指図のオブジェクト番号(AUFK-OBJNR)に関連付けられています。ステータスのテキストはTJ02Tに格納されています。ステータスの読み取りには、STATUS_TEXT_EDITなどの汎用モジュールがよく使われます。 例 CRTD(作成済み)REL(リリース済み)DLV(納品済み)TECO(技術的完了) | |||
| 計画グループ PlannerGroup | 指図を担当するMRP管理者または生産計画担当者のグループです。 | ||
| 説明 計画グループは、特定の資材や製造指図の計画・管理を担当するメンバーのグループを表す組織要素です。指図を計画グループに割り当てることで、作業負荷を分散し、担当範囲を明確にできます。 プロセスマイニングでは、この属性を使って計画チームごとのパフォーマンスを分析できます。「スケジュールの遅れが最も多い計画グループはどこか」「グループによって指図のサイクルタイムに違いがあるか」といった疑問の解明に役立ちます。作業負荷の調整や、トレーニングが必要な領域の特定にもつながります。 重要な理由 担当チームごとにパフォーマンスを分析できるため、計画の有効性や作業負荷の違いを特定できます。 入手先 これはMRP管理者を示す項目で、SAPテーブルAFKOのフィールドDISPOに格納されています。 例 001002P01P02 | |||
| 計画終了日 PlannedEndDate | 指図の生産完了予定日です。 | ||
| 説明 計画終了日は、スケジューリングの段階で設定される製造指図の目標完了日です。最終確認や入庫を含むすべての生産活動を完了する予定の期間を定めます。 「スケジュール遵守率」の重要業績評価指標(KPI)を算出するうえで欠かせない日付です。「計画終了日」と実際の完了時刻(「入庫を転記」や「最終確認を記録」アクティビティの日時など)を比較すると、指図が予定どおりに完了しているかを確認できます。この分析は、生産スケジュールの信頼性を評価し、納品遅延の根本原因を特定するのに役立ちます。 重要な理由 製造指図が予定どおりに完了したかを判断する基準です。顧客満足度や計画の信頼性に直接影響します。 入手先 基本終了日です。SAPテーブルAFKOのフィールドGLTRPにあります。 例 2023-05-152023-06-282023-07-05 | |||
| 計画開始日 PlannedStartDate | 指図の生産開始予定日です。 | ||
| 説明 計画開始日は、生産計画とスケジューリングの段階で決定される主要なスケジュール項目です。指図に基づく生産活動の開始目標日を示します。 スケジュールの遵守状況を測定するうえで重要な属性です。「計画開始日」と生産の実際の開始時刻(「最初の確認を記録」アクティビティの日時など)を比較すると、生産開始の遅延を特定できます。遅延の原因分析は、この領域におけるプロセスマイニングの主な用途の1つです。 重要な理由 スケジュールの遵守状況を測定し、生産実行の開始遅延を特定するためのベースラインです。 入手先 基本開始日です。SAPテーブルAFKOのフィールドGSTRPにあります。 例 2023-05-102023-06-222023-07-01 | |||
| 資材の利用可能状況 MaterialAvailabilityStatus | 製造指図に必要なすべての構成品が利用可能かどうかを示します。 | ||
| 説明 資材の利用可能状況は、生産準備の重要な指標です。システムが指図に必要なすべての構成品の在庫状況を確認して判定します。「利用可能」であれば資材不足による遅延なく生産を進められますが、「不足」の場合は問題があることを示します。 この属性は「資材不足の影響分析」ダッシュボードに欠かせません。資材不足による待機時間を分析すると、サプライチェーンの問題が生産スケジュールに与える影響を定量化できます。遅延の原因となる、信頼性に課題のあるサプライヤーや問題の多い構成品の特定にも役立ちます。 重要な理由 資材不足による遅延を直接把握できます。資材不足は、生産スケジュールの遅れを招く一般的かつ大きな要因です。 入手先 単一の保存フィールドではなく、利用可能状況チェック(ATPチェック)の結果です。結果は通常、トランザクションCO02または一括利用可能状況チェックCOHVで確認できます。MACM(資材引当済み)などのステータスが記録される場合もあります。SAP ECC PPの文書をご確認ください。 例 利用可能不足一部利用可能未確認 | |||
生産計画のアクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| 入庫を転記 | このイベントは、製造指図で完成した製品が在庫に入庫されたことを記録します。製品が出荷または次の工程で使用できる状態になったことを示します。 | ||
| 重要な理由 これは生産プロセスの最終成果を示す重要な完了の節目です。リリースから入庫までの時間が、生産の総リードタイムです。 入手先 通常は移動タイプ「101」を指定した入出庫伝票として、テーブルMKPF/MSEGに記録され、製造指図が参照されます。指図にはシステムステータス「DLV」(I0012、納品済み)も設定されます。 記録 移動タイプ「101」の入出庫伝票の転記日付、または「DLV」ステータスに変更された日時を取得します。 イベントタイプ explicit | |||
| 最初の確認を記録 | このイベントは、指図に基づく実際の生産作業の開始を示します。製造指図のいずれかの作業について、最初の時間確認がシステムに入力された時点で記録されます。 | ||
| 重要な理由 このアクティビティから生産の実際の開始時刻を把握できます。スケジュールの遵守状況を測定し、リソースの割り当てから作業開始までの遅延を特定するうえで欠かせません。 入手先 テーブルAFRUに記録された指図のすべての確認から、最も早い転記日付(AFRU-BUDAT)を特定して推定します。最初のレコードが実際の生産開始を示します。 記録 テーブルAFRUの転記日付に基づいて、指図の最初の確認レコードを特定します。 イベントタイプ inferred | |||
| 最終確認を記録 | このアクティビティは、現場で製造指図のすべての作業が完了したことを示します。最後の作業について最終確認を入力すると記録されます。 | ||
| 重要な理由 この節目は、実際の生産活動の終了を示します。最初の確認から最終確認までの時間が、実際の生産実行時間です。 入手先 システムステータス「CNF」(I0009、確認済み)が設定された時点で取得されます。通常は、テーブルAFRUに最終確認(AFRU-AUERU = 'X')が入力されると設定されます。ステータス変更はJCDSに記録されます。 記録 「CNF」ステータスが設定された日時を特定するか、AFRUの最後の確認レコードを特定します。 イベントタイプ explicit | |||
| 指図を技術的に完了 | これは、物流の観点から製造指図を完了させる事務処理上のステップです。以降の資材移動や確認を停止し、財務決済を行えるようにします。 | ||
| 重要な理由 物流における指図のライフサイクルの最終段階です。このイベントを分析すると、生産後の事務処理も含めたプロセス全体の所要時間を把握できます。 入手先 システムステータス「TECO」(I0045、技術的完了)が指図に付与された時点で明示的に取得されます。変更はJCDSに日時とともに記録されます。 記録 JCDSで指図の「TECO」ステータスが有効になった日時を特定します。 イベントタイプ explicit | |||
| 製造指図をリリース | このアクティビティは、製造指図が正式に承認され、実行可能になったことを示します。リリース後は資材引当が有効になり、出庫や確認などの生産活動を開始できます。 | ||
| 重要な理由 計画から実行への引き継ぎを示す重要な節目です。作成からリリースまでの時間は、計画の効率を測る重要な指標です。 入手先 システムステータス「REL」(I0002)が製造指図に付与された時点で明示的に取得されます。変更は、指図のオブジェクト番号(AUFK-OBJNR)に関連付けられたテーブルJCDSに日時とともに記録されます。 記録 指図で「REL」ステータスが有効になった日時を特定します。 イベントタイプ explicit | |||
| 製造指図を作成 | このイベントは、新しい製造指図が作成されたことを示します。通常は計画実行または手入力によって作成されます。システムに新しい指図レコードが保存され、「CRTD」(作成済み)ステータスが付与された時点で明示的に記録されます。 | ||
| 重要な理由 すべての製造指図ケースは、このイベントから始まります。このイベントからリリースまでの時間を分析すると、生産前の計画や事務処理における遅延を特定できます。 入手先 製造指図の作成日(AUFK-ERDAT)と作成時刻(AUFK-ERZET)から、このイベントを取得します。システムステータス「CRTD」(I0001)が付与され、指図のオブジェクト番号(AUFK-OBJNR)に関連付けられたテーブルJESTおよびJCDSに記録されます。 記録 作成日時と「CRTD」ステータスの付与を追跡します。 イベントタイプ explicit | |||
| 中間確認を記録 | 作業の一部確認を通じて、製造指図の進捗を記録します。完了までに時間がかかる指図で、最終完了前の進捗を追跡する際によく使われます。 | ||
| 重要な理由 中間確認を分析すると、生産サイクルが長い指図の進捗を監視し、生産プロセスの開始時や終了時だけでなく、途中にあるボトルネックも特定できます。 入手先 最終確認としてマークされていない、テーブルAFRUの確認レコードから取得します。各レコードには転記日付(AFRU-BUDAT)と時刻が含まれます。 記録 作業の最終確認としてフラグが設定されていない確認レコードを、AFRUからすべて抽出します。 イベントタイプ explicit | |||
| 出庫を転記 | このアクティビティは、製造指図で使用する構成品目を在庫から払い出す処理を示します。必要な原材料や半製品が生産用に準備されたことを確認できます。 | ||
| 重要な理由 このイベントは、資材の消費開始を示します。指図のリリースから出庫までの遅延は、倉庫物流、資材の準備、在庫精度に関する問題を示している可能性があります。 入手先 通常は移動タイプ「261」を指定した入出庫伝票として、テーブルMKPF(ヘッダー)およびMSEG(明細)に記録されます。製造指図番号(MSEG-AUFNR)が参照されます。 記録 指図に関連付けられた移動タイプ「261」の入出庫伝票から、転記日付(MKPF-BUDAT)を取得します。 イベントタイプ explicit | |||
| 指図データを変更 | このイベントは、製造指図の作成後に行われた重要な変更を記録します。たとえば、計画数量、日付、部品表(BOM)の変更が該当します。こうした変更は監査のためにシステムに記録されます。 | ||
| 重要な理由 変更を追跡すると、プロセスの不安定さや頻繁な再計画を把握できます。変更頻度が高い場合は、初期計画の不備、需要の変動、データの不正確さが原因である可能性があります。 入手先 AFKO(指図ヘッダー)やAFPO(指図明細)などのテーブルにある主要フィールドの変更は、変更文書テーブルCDHDR(ヘッダー)およびCDPOS(明細)に記録されます。関連する変更は、それぞれアクティビティとして抽出できます。 記録 製造指図のオブジェクトクラスについて、テーブルCDHDRおよびCDPOSから変更ログのエントリーを抽出します。 イベントタイプ explicit | |||
| 指図の取消を設定 | このイベントは、製造指図が完了前に取り消されたことを示します。通常は特定のステータスや削除フラグを設定し、それ以降の処理を停止します。 | ||
| 重要な理由 これは追跡が必要な望ましくない結果です。取り消された指図を分析すると、需要予測、計画の精度、マスターデータ管理に関する問題が明らかになる場合があります。 入手先 「DLFL」(I0076、削除フラグ)ステータス、または設定されている場合は特定の「Canceled」ステータスの付与から推定できます。変更はJCDSに日時とともに記録されます。 記録 削除フラグ(「DLFL」)または取消ステータスが指図に設定された日時を特定します。 イベントタイプ inferred | |||
| 指図の決済を実行 | 製造指図の財務決済を示します。集計されたコストを適切な原価対象に配賦します。管理会計の観点では、指図のライフサイクルにおける最終ステップです。 | ||
| 重要な理由 財務処理ではありますが、決済の遅延は原価報告や指図データの精度に問題があることを示す場合があります。生産プロセスの財務上の最終処理を示します。 入手先 指図残高がゼロになった時点、またはシステムステータス「SETC」(I0076、決済規則作成済み)の後に決済実行ログが記録された時点から推定できます。実際の決済は、COSPやCOSSなどの管理会計テーブルに記録されます。 記録 COテーブルにある指図関連の決済伝票、または「SETC」ステータスが有効になった時点から推定します。 イベントタイプ inferred | |||
| 資材の在庫を確認 | 製造指図に必要なすべての構成品目が使用可能かどうかを確認する処理です。指図の作成時やリリース時に自動で実行される場合と、手動で開始される場合があります。 | ||
| 重要な理由 このアクティビティは、資材不足による遅延を把握するうえで重要です。在庫確認が頻繁に行われている場合や、資材が使用可能になるまで時間がかかる場合は、サプライチェーンや在庫管理に問題がある可能性があります。 入手先 システムでは、「MACM」(資材引当済み)や「MSPT」(資材不足)などのステータスが設定されます。テーブルJEST/JCDSに記録されたステータス変更の日時から、処理の実行を推定できます。結果は指図ヘッダーに表示されます。 記録 「MACM」や「MSPT」など、資材の在庫状況に関連するステータス変更の日時から推定します。 イベントタイプ inferred | |||
データ抽出ガイド
ステップ
- SAP QueryでInfoSetを作成:トランザクションコード
SQ02を使います。新しいInfoSet(例:ZPP_EVENTLOG)を作成します。データソースとして「基準テーブルを使用したテーブル結合」を選択し、最初の基準テーブルに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で「Extras」タブを開きます。
ActivityName、EventTime、SourceSystem、LastDataUpdateのカスタムフィールドを定義し、クエリのセクションで定義したロジックに基づいて値を設定するABAPコードを記述します。ステータス変更、確認、資材伝票を順に処理し、各業務イベントに対応する個別レコードを作成します。InfoSetのコードセクションで表形式のデータをイベントログ形式に変換するため、最も複雑な手順です。 - InfoSetを生成して保存:すべての結合、フィールド、カスタムコードを設定したら、InfoSetを保存して生成します。
- SAP Queryを作成:トランザクションコード
SQ01を使います。新しいクエリ(例:ZPP_EVENTS)を作成し、前の手順で作成したInfoSetを指定します。 - クエリのレイアウトを設計:クエリデザイナーで選択画面のフィールドを定義します。製造指図
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)の表示権限が必要です。
クエリの例 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クエリ全体をコピーします。このクエリは、指定されたすべてのアクティビティを1つのイベントログ形式に抽出するよう設計されています。 - クエリのパラメーターを設定:実行前に、クエリ内のプレースホルダーを変更します。抽出期間を指定するため、
[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ユーザー全員にデータベースへの直接アクセスが認められているわけではなく、特別な権限が必要です。
クエリの例 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 ECC PPの生産指図処理、確認、在庫管理、管理会計のデータが利用可能であることを確認し、抽出ユーザーに必要なアプリケーションテーブルの読み取りとカスタムABAPレポートの実行権限があることを確認します。
- ABAP Workbenchで、トランザクションSE38またはSE80などを使い、[カスタムレポート名]のような専用の実行可能レポートを作成します。[開始日]や[終了日]などの必須日付パラメーターと、[会社コード]、[製造プラント]、[指図タイプ]、[品目]、[製造指図]の任意のフィルターを備えた選択画面を使用します。
- AUFKおよびSAP ECCシステムで設定されている生産指図テーブルから、生産指図のヘッダーデータとマスターデータを読み取ります。JCDSと対応するステータス設定を使用して、CRTD、リリース済み、技術的完了、取消関連などの明示的なステータス変更を特定します。ステータス履歴にタイムスタンプ付きの変更が記録されていない限り、ステータスコードをイベントとして扱わないでください。
- システムで設定されている生産指図の利用可能性確認データから、品目利用可能性確認の結果を読み取ります。確認結果が、指図とタイムスタンプに確実に関連付けられるテーブルに保存されていない場合は、SAPチームが承認した設定済みのSAP拡張機能、アプリケーションログ、または監査データソースを実装します。指図の作成やリリースだけを根拠に、確認が行われたと推定しないでください。
- 設定済みの生産指図変更文書オブジェクトと関連する変更文書テーブルから、指図の変更履歴を読み取ります。計画数量、日付、BOM、作業手順、その他プロセスオーナーが承認した項目など、重要な変更のみを抽出します。EventTimeには変更文書のタイムスタンプを使用します。
- システムで設定されている在庫品目伝票データから、出庫と入庫の転記を読み取ります。品目伝票データにある指図参照を使って、転記を生産指図に関連付けます。構成品の払出しはGoods Issue Posted、完成品の入庫はGoods Receipt Postedとして分類します。利用可能な場合は、転記日付と転記時刻を使用します。
- システムで設定されている生産確認データソースから、確認データを読み取ります。生産指図と確認タイムスタンプで並べ替えます。最初の確認にはFirst Confirmation Recorded、条件を満たす最終確認以外の確認にはIntermediate Confirmation Recorded、最終として明示的に指定された確認、または設定済みの確認完了ロジックで最終と判定された確認にはFinal Confirmation Recordedを出力します。任意のクエリで最後に返された行を根拠に、最終確認と推定しないでください。
- システムで設定されている管理会計の決済データソースから、決済実行データを読み取ります。決済実行レコード、決済伝票、または承認済みの決済ステータス履歴に、生産指図と関連付けられた明示的なタイムスタンプがある場合に限り、Order Settlement Ranを出力します。
- 抽出したアクティビティごとに、内部イベント行を1行作成します。ProductionOrder、ActivityName、EventTime、SourceSystem、LastDataUpdate、ProductionPlant、ProductCode、PlannedQuantity、DeliveredQuantity、ActualStartDate、ActualEndDateを設定します。タイムスタンプの変換方法を統一し、ソースシステムのタイムゾーンを保持します。該当するイベントがある場合、ActualStartDateには最初の確認のタイムスタンプを、ActualEndDateには最終確認のタイムスタンプを設定します。
- イベント行をProductionOrder、EventTimeの順に並べ、タイムスタンプが同じ場合は決定的な副次ソートを適用します。完全に重複するソースレコードのみを削除し、正当な繰り返しイベントは削除しないでください。必須の12種類のアクティビティ名がすべて出力スキーマに含まれていること、および出力する各行にケース識別子、アクティビティ名、イベントタイムスタンプがあることを検証します。
- 承認済みのABAPファイルインターフェースと設定済みの論理ファイルパスを使って、結果をアプリケーションサーバー上のファイルに書き込みます。ProcessMindの取り込み設定に合わせて区切り文字とテキストエンコーディングを指定し、ヘッダー行を含めます。区切り文字を含む値は引用符で囲み、タイムスタンプの形式を統一します。YYYY-MM-DDThh:mm:ss形式を推奨します。
- 承認済みのSAPファイル転送手順でファイルをダウンロードし、内容を個別に確認してから、ProductionOrderをケース識別子、ActivityNameをアクティビティ、EventTimeをイベントタイムスタンプとしてProcessMindにイベントログをアップロードします。ProcessMindが行をそのまま読み取る設定になっており、不足しているアクティビティを推定する想定ではないことを確認します。
設定
- 日付範囲:初期分析では、直近3~6か月を対象とするローリング抽出期間を使用します。パフォーマンスとデータ量を評価してから、期間を延長してください。選択した開始日より前に作成され、分析期間中も有効な指図を含めるため、遡及期間を設けます。
- 選択フィルター:[会社コード]、[製造プラント]、[指図タイプ]、[品目]、[製造指図]、指図ステータス、作成日または変更日のフィルターに対応します。生産指図で利用できる項目はリリースやカスタマイズによって異なるため、SAP ECCの実装に合わせて具体的な項目を設定します。
- イベント範囲:必須の12種類のアクティビティを、明示的なイベント行としてすべて抽出します。Production Order Created、Material Availability Checked、Production Order Released、Order Data Changed、Goods Issue Posted、First Confirmation Recorded、Intermediate Confirmation Recorded、Final Confirmation Recorded、Goods Receipt Posted、Order Technically Completed、Order Settlement Ran、Order Cancellation Set。
- タイムスタンプの方針:ソースのイベント日付と時刻を優先します。日付しかない場合は、精度が限られることを文書化し、正確な時刻を作り出すのではなく、設定済みの一貫した時刻を使用します。すべてのタイムスタンプをProcessMindが想定するタイムゾーンに変換します。
- ステータスの処理:ステータス関連アクティビティには、タイムスタンプ付きのステータス履歴を使用します。内部ステータス値と業務アクティビティの対応付けは、システムステータスの設定とプロセスオーナーの承認に基づいて設定します。
- 利用可能性確認:利用可能性確認の実行を記録する、承認済みのデータソースを設定します。業務上承認されたデータソースに確認の記録が明示されていない限り、指図の作成、リリース、予約、または出庫の成功を根拠にMaterial Availability Checkedの行を作成しないでください。
- 確認の処理:最初、中間、最終の確認を区別するルールを設定します。ソースで最終と明示されている場合、または設定済みのSAP確認ロジックで完了が確定する場合に限り、確認を最終として扱えます。
- 数量:可能な限り、ソースの数量単位を保持します。数量を集計する場合は、指図、品目、移動、確認、イベントのどの単位で集計するかを文書化します。プロセスオーナーが別の解釈を承認していない限り、DeliveredQuantityには確認済みの歩留まりではなく、転記済みの完成品入庫を反映します。
- LastDataUpdate:抽出実行時刻またはソースの更新時刻を設定し、1回の実行で出力するすべての行に、文書化した同じルールを適用します。
- パフォーマンス:選択範囲を限定し、必要な項目だけを選択して、データをパッケージ単位で処理します。データベース側でフィルターを適用し、大規模なループ内での入れ子になったデータベース読み取りを避けます。承認済みのインデックスの作成や使用は、SAPデータベース管理の手順に従ってください。メモリ使用量が懸念される場合は、出力を逐次書き込みます。
- ファイル出力:ProcessMindのアップロード仕様に合わせて、アプリケーションサーバーのディレクトリ、論理ファイル名、区切り文字、エンコーディング、小数点形式、タイムスタンプ形式、ヘッダーの扱いを設定します。レポートや出力ファイルに認証情報を含めないでください。
- 前提条件:該当するSAP ECC PP、在庫管理、確認、生産指図ステータス管理、管理会計の決済データが有効であることを確認します。実行前に、必要な権限、カスタム開発のガバナンス、移送の承認、アプリケーションサーバーのファイルアクセス権、ProcessMindの取り込みアクセス権を付与する必要があります。
- システム固有の設定:テーブル名、項目、ステータスコード、変更文書オブジェクト、確認データソース、利用可能性確認データソース、決済データソースは、対象のSAP ECCシステムで確認する必要があります。標準の信頼できるデータソースが実装されていない場合は、[システムに合わせて設定]を使用します。
クエリの例 abap
REPORT [Your custom report name].
* This executable ABAP report is a complete extraction framework for the twelve required activities.
* Replace only the marked system-specific source sections, selection parameters, and file configuration.
* Confirm every table and field against the target SAP ECC system before activation.
PARAMETERS p_from TYPE sydatum OBLIGATORY.
PARAMETERS p_to TYPE sydatum OBLIGATORY.
PARAMETERS p_file TYPE string OBLIGATORY DEFAULT '[Application server file path]'.
PARAMETERS p_src TYPE string OBLIGATORY DEFAULT '[SAP ECC system identifier]'.
SELECT-OPTIONS s_werks FOR [Production plant field].
SELECT-OPTIONS s_aufnr FOR [Production order field].
SELECT-OPTIONS s_auart FOR [Production order type field].
SELECT-OPTIONS s_bukrs FOR [Company code field].
TYPES: BEGIN OF ty_event,
productionorder TYPE string,
activityname TYPE string,
eventtime TYPE string,
sourcesystem TYPE string,
lastdataupdate TYPE string,
productionplant TYPE string,
productcode TYPE string,
plannedquantity TYPE string,
deliveredquantity TYPE string,
actualstartdate TYPE string,
actualenddate TYPE string,
END OF ty_event.
DATA gt_events TYPE STANDARD TABLE OF ty_event WITH EMPTY KEY.
DATA gs_event TYPE ty_event.
DATA gv_update_timestamp TYPE string.
DATA gv_line TYPE string.
GET TIME STAMP FIELD DATA(gv_update_ts).
gv_update_timestamp = |{ gv_update_ts TIMESTAMP = ISO }|.
* Production Order Created
SELECT [Production order field], [Production plant field], [Product field], [Planned quantity field], [Creation date field], [Creation time field]
FROM [Production order header table]
INTO TABLE @DATA(lt_created)
WHERE [Creation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks
AND [Production order type field] IN @s_auart
AND [Company code field] IN @s_bukrs.
LOOP AT lt_created ASSIGNING FIELD-SYMBOL(<created>).
CLEAR gs_event.
gs_event-productionorder = |{ <created>-[Production order field] }|.
gs_event-activityname = 'Production Order Created'.
gs_event-eventtime = |{ <created>-[Creation date field] } { <created>-[Creation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <created>-[Production plant field] }|.
gs_event-productcode = |{ <created>-[Product field] }|.
gs_event-plannedquantity = |{ <created>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Material Availability Checked
SELECT [Production order field], [Production plant field], [Product field], [Availability check date field], [Availability check time field]
FROM [Availability check source table]
INTO TABLE @DATA(lt_availability)
WHERE [Availability check date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_availability ASSIGNING FIELD-SYMBOL(<availability>).
CLEAR gs_event.
gs_event-productionorder = |{ <availability>-[Production order field] }|.
gs_event-activityname = 'Material Availability Checked'.
gs_event-eventtime = |{ <availability>-[Availability check date field] } { <availability>-[Availability check time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <availability>-[Production plant field] }|.
gs_event-productcode = |{ <availability>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Production Order Released
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field], [Planned quantity field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_released)
WHERE [Status field] = '[Released status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_released ASSIGNING FIELD-SYMBOL(<released>).
CLEAR gs_event.
gs_event-productionorder = |{ <released>-[Production order field] }|.
gs_event-activityname = 'Production Order Released'.
gs_event-eventtime = |{ <released>-[Status change date field] } { <released>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <released>-[Production plant field] }|.
gs_event-productcode = |{ <released>-[Product field] }|.
gs_event-plannedquantity = |{ <released>-[Planned quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Data Changed
SELECT [Production order field], [Change date field], [Change time field], [Production plant field], [Product field], [Changed field name]
FROM [Production order change document source table]
INTO TABLE @DATA(lt_changed)
WHERE [Change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Changed field name] IN ('[Planned quantity field]', '[Basic start date field]', '[Basic finish date field]', '[BOM field]', '[Routing field]').
LOOP AT lt_changed ASSIGNING FIELD-SYMBOL(<changed>).
CLEAR gs_event.
gs_event-productionorder = |{ <changed>-[Production order field] }|.
gs_event-activityname = 'Order Data Changed'.
gs_event-eventtime = |{ <changed>-[Change date field] } { <changed>-[Change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <changed>-[Production plant field] }|.
gs_event-productcode = |{ <changed>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Issue Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gi)
WHERE [Movement type field] IN ('[Goods issue movement type 1]', '[Goods issue movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gi ASSIGNING FIELD-SYMBOL(<gi>).
CLEAR gs_event.
gs_event-productionorder = |{ <gi>-[Production order field] }|.
gs_event-activityname = 'Goods Issue Posted'.
gs_event-eventtime = |{ <gi>-[Posting date field] } { <gi>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gi>-[Production plant field] }|.
gs_event-productcode = |{ <gi>-[Product field] }|.
gs_event-deliveredquantity = |{ <gi>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* First Confirmation Recorded
SELECT [Production order field], [Confirmation date field], [Confirmation time field], [Production plant field], [Product field], [Confirmed quantity field]
FROM [Production confirmation source table]
INTO TABLE @DATA(lt_confirmations)
WHERE [Confirmation date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
SORT lt_confirmations BY [Production order field] [Confirmation date field] [Confirmation time field].
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<confirmation>) GROUP BY <confirmation>-[Production order field] ASSIGNING FIELD-SYMBOL(<confirmation_group>).
LOOP AT GROUP <confirmation_group> ASSIGNING FIELD-SYMBOL(<first_confirmation>).
CLEAR gs_event.
gs_event-productionorder = |{ <first_confirmation>-[Production order field] }|.
gs_event-activityname = 'First Confirmation Recorded'.
gs_event-eventtime = |{ <first_confirmation>-[Confirmation date field] } { <first_confirmation>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <first_confirmation>-[Production plant field] }|.
gs_event-productcode = |{ <first_confirmation>-[Product field] }|.
gs_event-actualstartdate = gs_event-eventtime.
APPEND gs_event TO gt_events.
EXIT.
ENDLOOP.
ENDLOOP.
* Intermediate Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<intermediate>) GROUP BY <intermediate>-[Production order field] ASSIGNING FIELD-SYMBOL(<intermediate_group>).
DATA(lv_intermediate_index) = 0.
DATA(lv_intermediate_count) = GROUP SIZE.
LOOP AT GROUP <intermediate_group> ASSIGNING FIELD-SYMBOL(<intermediate_row>).
lv_intermediate_index = lv_intermediate_index + 1.
IF lv_intermediate_index < lv_intermediate_count AND <intermediate_row>-[Final confirmation indicator field] <> '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <intermediate_row>-[Production order field] }|.
gs_event-activityname = 'Intermediate Confirmation Recorded'.
gs_event-eventtime = |{ <intermediate_row>-[Confirmation date field] } { <intermediate_row>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <intermediate_row>-[Production plant field] }|.
gs_event-productcode = |{ <intermediate_row>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDIF.
ENDLOOP.
ENDLOOP.
* Final Confirmation Recorded
LOOP AT lt_confirmations ASSIGNING FIELD-SYMBOL(<final>) WHERE [Final confirmation indicator field] = '[Final confirmation value]'.
CLEAR gs_event.
gs_event-productionorder = |{ <final>-[Production order field] }|.
gs_event-activityname = 'Final Confirmation Recorded'.
gs_event-eventtime = |{ <final>-[Confirmation date field] } { <final>-[Confirmation time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <final>-[Production plant field] }|.
gs_event-productcode = |{ <final>-[Product field] }|.
gs_event-actualenddate = gs_event-eventtime.
APPEND gs_event TO gt_events.
ENDLOOP.
* Goods Receipt Posted
SELECT [Production order field], [Posting date field], [Posting time field], [Production plant field], [Product field], [Quantity field]
FROM [Material document item source table]
INTO TABLE @DATA(lt_gr)
WHERE [Movement type field] IN ('[Goods receipt movement type 1]', '[Goods receipt movement type 2]')
AND [Posting date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr
AND [Production plant field] IN @s_werks.
LOOP AT lt_gr ASSIGNING FIELD-SYMBOL(<gr>).
CLEAR gs_event.
gs_event-productionorder = |{ <gr>-[Production order field] }|.
gs_event-activityname = 'Goods Receipt Posted'.
gs_event-eventtime = |{ <gr>-[Posting date field] } { <gr>-[Posting time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <gr>-[Production plant field] }|.
gs_event-productcode = |{ <gr>-[Product field] }|.
gs_event-deliveredquantity = |{ <gr>-[Quantity field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Technically Completed
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_teco)
WHERE [Status field] = '[Technically completed status code]'
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_teco ASSIGNING FIELD-SYMBOL(<teco>).
CLEAR gs_event.
gs_event-productionorder = |{ <teco>-[Production order field] }|.
gs_event-activityname = 'Order Technically Completed'.
gs_event-eventtime = |{ <teco>-[Status change date field] } { <teco>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <teco>-[Production plant field] }|.
gs_event-productcode = |{ <teco>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Settlement Ran
SELECT [Production order field], [Settlement date field], [Settlement time field], [Production plant field], [Product field]
FROM [Order settlement source table]
INTO TABLE @DATA(lt_settlement)
WHERE [Settlement date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_settlement ASSIGNING FIELD-SYMBOL(<settlement>).
CLEAR gs_event.
gs_event-productionorder = |{ <settlement>-[Production order field] }|.
gs_event-activityname = 'Order Settlement Ran'.
gs_event-eventtime = |{ <settlement>-[Settlement date field] } { <settlement>-[Settlement time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <settlement>-[Production plant field] }|.
gs_event-productcode = |{ <settlement>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
* Order Cancellation Set
SELECT [Production order field], [Status change date field], [Status change time field], [Production plant field], [Product field]
FROM [Order status history source table]
INTO TABLE @DATA(lt_cancelled)
WHERE [Status field] IN ('[Cancellation status code]', '[Deletion status code]')
AND [Status change date field] BETWEEN @p_from AND @p_to
AND [Production order field] IN @s_aufnr.
LOOP AT lt_cancelled ASSIGNING FIELD-SYMBOL(<cancelled>).
CLEAR gs_event.
gs_event-productionorder = |{ <cancelled>-[Production order field] }|.
gs_event-activityname = 'Order Cancellation Set'.
gs_event-eventtime = |{ <cancelled>-[Status change date field] } { <cancelled>-[Status change time field] }|.
gs_event-sourcesystem = p_src.
gs_event-lastdataupdate = gv_update_timestamp.
gs_event-productionplant = |{ <cancelled>-[Production plant field] }|.
gs_event-productcode = |{ <cancelled>-[Product field] }|.
APPEND gs_event TO gt_events.
ENDLOOP.
SORT gt_events BY productionorder eventtime activityname.
DELETE ADJACENT DUPLICATES FROM gt_events COMPARING productionorder activityname eventtime productionplant productcode.
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'The application server output file could not be opened' TYPE 'E'.
ENDIF.
TRANSFER 'ProductionOrder,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProductionPlant,ProductCode,PlannedQuantity,DeliveredQuantity,ActualStartDate,ActualEndDate' TO p_file.
LOOP AT gt_events INTO gs_event.
gv_line = |{ gs_event-productionorder },{ gs_event-activityname },{ gs_event-eventtime },{ gs_event-sourcesystem },{ gs_event-lastdataupdate },{ gs_event-productionplant },{ gs_event-productcode },{ gs_event-plannedquantity },{ gs_event-deliveredquantity },{ gs_event-actualstartdate },{ gs_event-actualenddate }|.
TRANSFER gv_line TO p_file.
ENDLOOP.
CLOSE DATASET p_file.
MESSAGE |Event log written to { p_file }| TYPE 'S'. 始める準備はできましたか?
このテンプレートを使ってデータを準備し、生産計画プロセスの最適化に取り組みましょう。インサイトを見つけ、今すぐ業務を効率化できます。
生産計画を最適化し、効率を高める
非効率を明らかにし、サイクルタイムを30%短縮して、目標を達成しましょう。
クレジットカードは不要です。今すぐ最適化を始めましょう。