生産計画データテンプレート
生産計画データテンプレート
- 収集を推奨する属性
- 追跡する主要なアクティビティ
- 具体的な抽出方法
生産計画の属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ名 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で各製造指図に割り当てられる一意の英数字キーです。作成や計画から実行、最終決済まで、関連するすべてのアクティビティを結び付ける中心的なオブジェクトです。 プロセスマイニングでは、単一の生産実行に属するすべてのイベントをグループ化するために欠かせない属性です。これにより、生産指図のライフサイクル全体をエンドツーエンドで分析し、進捗の追跡、サイクルタイムの測定、標準プロセスからの逸脱の特定が可能になります。生産指図単位でプロセスを分析すると、個々の製造依頼がどのように処理されたかを明確に把握できます。 重要な理由 関連するすべてのプロセスイベントを結び付ける中核識別子です。各生産の開始から完了までの流れを再構成し、分析できます。 入手先 この属性は、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', 'On-Time', 'Late')。 例 期限内遅延 | |||
| プランナーグループ PlannerGroup | 指図を担当するMRPコントローラーまたは生産計画担当者のグループです。 | ||
| 説明 プランナーグループは、特定の資材または製造指図の計画と管理を担当する個人のグループを表す組織要素です。指図をプランナーグループに割り当てることで、作業負荷を分散し、担当範囲を明確にできます。 プロセスマイニングでは、この属性を使って、計画を担当するチームごとのパフォーマンスを分析できます。「スケジュールのずれが最も多いプランナーグループはどこか」「グループによって指図のサイクルタイムに違いがあるか」といった問いに答えられます。作業負荷の平準化や、トレーニングが必要な領域の特定にも役立ちます。 重要な理由 担当チームごとにパフォーマンスを分けて分析できるため、計画の有効性や作業負荷の違いを特定できます。 入手先 SAPのAFKOテーブルのDISPOフィールドに格納されるMRPコントローラーです。 例 001002P01P02 | |||
| 担当ユーザー ResponsibleUser | 製造指図を作成したユーザー、または最後に変更したユーザーのユーザーIDです。 | ||
| 説明 担当ユーザーは、作成やリリースなど、製造指図のライフサイクルにおける主要なイベントに関連付けられたSAPユーザーアカウントを示します。システム上で実行された操作の責任所在と追跡可能性を確保できます。 プロセスマイニングでは、この属性を使って、ユーザーの行動に基づくプロセスのばらつきを分析できます。追加トレーニングが必要なユーザーや、標準外の手順に従っているユーザーを特定するのに役立ちます。また、ユーザー間で作業がどのように分担されているかを把握し、リソースを分析できます。 重要な理由 プロセスのアクティビティを特定の担当者に関連付けることで、ユーザーレベルのパフォーマンス分析と責任の明確化が可能になります。 入手先 指図を作成したユーザーはAUFK-ERNAM、最後に変更したユーザーはAUFK-AENAMに格納されます。変更文書(CDHDR-USERNAME)を使うと、特定の変更を行ったユーザーの履歴を確認できます。 例 JSMITHPROD_PLANNER1BATCH_USERAMILLER | |||
| 数量差異 QuantityVariance | 計画生産数量と実際の納入数量の差です。 | ||
| 説明 数量差異は、生産実績が当初計画からどの程度ずれているかを測定する計算指標です。「納入数量」から「計画数量」を引いて算出します。正の差異は過剰生産、負の差異は生産不足または歩留まり損失を示します。 この属性は、「計画対実績の生産量」ダッシュボードと対応するKPIに欠かせません。差異を分析することで、生産歩留まり、スクラップ率、データ入力ミスに関する問題を特定できます。生産プロセスが目標数量をどの程度安定して達成できているかを直接測定できます。 重要な理由 計画に対する生産実績の正確さを定量化し、歩留まり、スクラップ、プロセス管理に関する潜在的な問題を明らかにします。 入手先 計算フィールド:「DeliveredQuantity」-「PlannedQuantity」。 例 -2-5005 | |||
| 製造優先度 ProductionPriority | 製造指図の緊急度または優先順位を示す分類です。 | ||
| 説明 製造優先度は、製造指図の相対的な重要度を示すフィールドです。生産スケジューラーや現場担当者は、この情報をもとに作業の優先順位を決め、重要な指図を優先的に処理できます。 この属性を分析すると、優先順位付けの仕組みが有効に機能しているかを評価できます。優先度の高い指図と低い指図のサイクルタイムを比較することで、緊急の指図が実際に速く処理されているかを確認できます。そうでない場合は、コミュニケーション、リソース配分、または実行プロセス全体に問題がある可能性があります。 重要な理由 優先度管理の仕組みが有効かどうかを評価し、緊急度の高い指図が通常の指図より速く完了しているかを確認できます。 入手先 製造指図ヘッダーの標準フィールドではない場合が多く、カスタムフィールド、販売指図の優先度から導出された値、または分類システムの一部である可能性があります。SAP ECC PPのドキュメントまたはシステム設定を確認してください。 例 高中低緊急 | |||
| 製造指図ステータス ProductionOrderStatus | 作成済み、リリース済み、技術的完了など、製造指図の現在の処理ステータスです。 | ||
| 説明 製造指図ステータスは、ライフサイクルにおける指図の現在の段階を示します。SAPでは、ステータスコードを使って指図の進行を管理します。たとえば、CRTD(作成済み)、REL(リリース済み)、CNF(確認済み)、DLV(納入済み)、TECO(技術的完了)などです。 さまざまなステータスに費やした時間の分析は、製造プロセスのプロセスマイニングにおける基本的な分析です。作成後のリリース待ち時間や、一部納入の状態が続く期間を把握できます。ステータス変更をアクティビティとして追跡することで、プロセスフローを俯瞰できます。 重要な理由 指図の進捗状況を把握でき、長時間停滞しているボトルネックを特定できます。 入手先 ステータス情報は、指図のオブジェクト番号(AUFK-OBJNR)に関連付けられたJESTおよびJSTOテーブルに保存されます。ステータスのテキストはTJ02Tに格納されます。ステータスの読み取りには、STATUS_TEXT_EDITなどのファンクションモジュールがよく使われます。 例 CRTD(作成済み)REL(リリース済み)DLV(納入済み)TECO(技術的完了) | |||
| 計画終了日 PlannedEndDate | 指図の生産を完了する予定日です。 | ||
| 説明 計画終了日は、生産指図の目標完了日であり、スケジューリングの段階で設定されます。最終実績確認や入庫を含むすべての生産活動を完了する予定期間を定めます。 「スケジュール遵守率」KPIの算出に欠かせない日付です。「計画終了日」と実際の完了時刻、たとえば「入庫を転記」または「最終実績確認を記録」アクティビティのタイムスタンプを比較すると、指図が予定どおり完了したかどうかを確認できます。この分析により、生産スケジュールの信頼性を評価し、納期遅延の根本原因を特定できます。 重要な理由 生産指図が予定どおり完了したかを判断する基準であり、顧客満足度と計画の信頼性に直接影響します。 入手先 SAPテーブルAFKOの項目GLTRPにある基本終了日です。 例 2023-05-152023-06-282023-07-05 | |||
| 計画開始日 PlannedStartDate | 指図の生産を開始する予定日です。 | ||
| 説明 計画開始日は、生産計画およびスケジューリングの段階で決定される主要なスケジュール項目です。指図の生産活動を開始する目標日を示します。 スケジュール遵守を測定するうえで欠かせない属性です。「計画開始日」と生産の実際の開始時刻、たとえば「初回実績確認を記録」アクティビティのタイムスタンプを比較すると、生産開始の遅延を特定できます。遅延の理由を分析することは、この領域におけるプロセスマイニングの主要な用途です。 重要な理由 スケジュール遵守を測定し、生産実行の開始遅延を特定するための基準になります。 入手先 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 | |||
| 最終実績確認を記録 | このアクティビティは、生産指図のすべての作業が現場の観点で完了したことを示します。最後の作業に対する最終実績確認レコードによって記録されます。 | ||
| 重要な理由 このマイルストーンは、実際の生産活動の終了を示します。初回実績確認から最終実績確認までの時間が、実際の生産実行時間に相当します。 入手先 システムステータス「CNF」(I0009、確認済み)が設定された時点で取得します。通常は、テーブルAFRUの最終実績確認レコード(AFRU-AUERU=「X」)によって設定されます。ステータス変更はJCDSに記録されます。 取得 「CNF」ステータスが設定された時点のタイムスタンプを特定するか、AFRUの最後の実績確認レコードを取得します。 イベントタイプ explicit | |||
| 初回実績確認を記録 | このイベントは、指図に対する実際の生産作業の開始を示します。生産指図のいずれかの作業について、最初の実績確認がシステムに入力された時点で取得します。 | ||
| 重要な理由 このアクティビティにより、生産の実際の開始時刻を把握できます。リソースの割り当てから作業開始までの遅延を特定し、スケジュール遵守を測定するうえで欠かせません。 入手先 AFRUテーブルに記録された指図のすべての実績確認から、最も早い転記日(AFRU-BUDAT)を特定して推定します。最初のレコードが実際の生産開始を示します。 取得 テーブルAFRUの転記日に基づき、指図の最初の実績確認レコードを特定します。 イベントタイプ inferred | |||
| 指図を技術的に完了 | これは、物流の観点から生産指図を完了させる管理上の締め処理です。以降の資材移動や実績確認を防ぎ、財務決済を可能にします。 | ||
| 重要な理由 物流における指図ライフサイクルの最終地点です。このイベントを分析すると、生産後の管理業務を含むプロセス全体の所要時間を把握できます。 入手先 システムステータス「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を使います。前の手順で作成した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 ECC PPの生産指図処理、確認、在庫管理、管理会計のデータが利用可能であることを確認し、抽出用ユーザーに必要なアプリケーションテーブルの読み取り権限とカスタムABAPレポートの実行権限があることを確認します。
- ABAP Workbenchで、たとえばトランザクションSE38またはSE80を使用し、[Your custom report name]などの専用実行レポートを作成します。[Start date]や[End date]などの日付パラメーターを必須とする選択画面を用意し、[Company Code]、[Production Plant]、[Order Type]、[Material]、[Production Order]の任意のフィルターも追加します。
- 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の順に並べ、同一タイムスタンプの場合は決定的な第2ソートキーを使用します。削除するのはソース上の完全な重複レコードだけとし、正当な繰り返しイベントは削除しません。出力スキーマに必須の12種類のアクティビティ名がすべて含まれていること、また出力される各行にケース識別子、アクティビティ名、イベントタイムスタンプがあることを検証します。
- 承認済みのABAPファイルインターフェースと設定済みの論理ファイルパスを使用して、結果をアプリケーションサーバー上のファイルに書き込みます。ProcessMindの取り込み設定で合意した区切り文字とテキストエンコーディングを使用し、ヘッダー行を含めます。区切り文字を含む値は引用符で囲み、タイムスタンプは一貫した形式、できればYYYY-MM-DDThh:mm:ssで出力します。
- 承認済みのSAPファイル転送手順でファイルをダウンロードし、独立して内容を確認したうえで、ProductionOrderをケース識別子、ActivityNameをアクティビティ、EventTimeをイベントタイムスタンプとして、イベントログとしてProcessMindにアップロードします。ProcessMindが行をそのまま読み取る設定になっており、不足しているアクティビティを推測することを想定していないことを確認します。
設定
- 日付範囲:初回分析では、3~6か月のローリング抽出期間を使用します。パフォーマンスとデータ量を評価した後に限り、期間を延長します。選択した開始日より前に作成され、分析期間中も有効な指図を含めるため、ルックバック期間を設けます。
- 選択フィルター:[Company Code]、[Production Plant]、[Order Type]、[Material]、[Production Order]、指図ステータス、作成日または変更日のフィルターに対応します。生産指図で利用できる項目はリリースやカスタマイズによって異なるため、正確な項目は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システムで確認する必要があります。標準的で信頼できるソースが実装にない場合は、[Configure based on your system]を使用します。
a サンプルクエリ 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%短縮して、目標を達成します。
クレジットカードは不要です。今すぐ最適化を始めてください。