生産計画データテンプレート
生産計画データテンプレート
- 生産計画の分析に推奨される属性
- 追跡すべき生産計画の主要なアクティビティ
- SAP S/4HANAからのデータ抽出手順
生産計画の属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ Activity | 製造計画プロセスの中で、ある時点に発生した特定のイベントまたはタスクの名前です。 | ||
| 説明 この属性には、製造指図のライフサイクルにおける個々のステップや節目が記録されます。例として、「製造指図作成」「資材の利用可能性を確認」「製造開始」「製造指図の財務クローズ」などがあります。各アクティビティは、システムに記録された特定の操作またはステータス変更を表します。 これらのアクティビティの順序や発生頻度を分析することは、プロセスマイニングの中心的な機能です。プロセスの流れを可視化し、標準手順からの逸脱を特定できます。また、「製造計画を調整」のように、遅延や頻繁な手戻りの原因となるアクティビティも把握できます。 重要な理由 プロセスの各ステップを定義する属性です。実際の製造ワークフローとそのバリエーションを把握し、可視化できます。 入手先 JESTやJCDSなどのテーブルに記録されたステータス変更、使用されたトランザクションコード(作成時のCO01など)、またはAFRUの確認レコードから取得します。 例 生産指図を作成生産指図をリリース生産を開始最終実績を入力入庫を記録 | |||
| 製造指図 ProductionOrder | 製造指図を一意に識別する番号で、製造計画プロセスの主要なケース識別子として使用されます。 | ||
| 説明 製造指図番号は、特定数量の製品の製造に関するすべてのアクティビティを管理、追跡するためにSAP S/4HANAが生成する一意のキーです。計画やリリースから実行、最終決済まで、関連するすべてのイベントを結び付けます。 プロセスマイニングでは、この属性を使って関連イベントを1つのエンドツーエンドのプロセスインスタンスにまとめます。製造指図ごとにプロセスを分析すると、サイクルタイムやスケジュール遵守率などの重要業績評価指標を測定し、特定の製造実行に影響するボトルネックを特定できます。 重要な理由 プロセスのすべてのステップを結び付ける基本属性です。製造ライフサイクルの開始から終了までを、ケース単位で分析できます。 入手先 製造指図番号です。通常、AFKO(項目AUFNR)やAFPOなどのSAPテーブルにあります。 例 100056710008341001299 | |||
| 開始時刻 StartTime | 特定のアクティビティまたはイベントが開始した日時を示すタイムスタンプです。 | ||
| 説明 この属性には、製造プロセスで記録された各イベントの日付と時刻が含まれます。時間に基づくプロセス分析の基礎となるデータです。 開始時刻は、アクティビティ間の所要時間や製造指図全体のサイクルタイムの算出、イベントの発生時期の把握に欠かせません。実際のタイムスタンプを計画日と比較することで、ボトルネックや待ち時間、スケジュールの遵守状況を分析できます。 重要な理由 すべてのイベントの時系列を把握できるため、プロセスのパフォーマンスや所要時間、ボトルネックを分析できます。 入手先 通常、ステータス変更は変更文書テーブル(CDHDR/CDPOS)、実行ステップは確認テーブル(AFRU)、作成日はヘッダーテーブル(AFKO)に記録されています。 例 2023-10-26T09:00:00Z2023-10-26T14:30:00Z2023-10-27T08:15:00Z | |||
| ソースシステム SourceSystem | 製造計画データの抽出元となるシステムです。 | ||
| 説明 この属性はデータの取得元を示します。複数のシステムが連携する環境では、データの出所を把握することが欠かせません。このプロセスでは、通常、特定のSAP S/4HANAインスタンスが該当します。 データ分析全般において、ソースシステムを把握しておくと、データの整合性を確認し、異なるソースのデータを統合する際に適切なコンテキストを保てます。データガバナンスと追跡可能性を支える基本的なメタデータです。 重要な理由 データガバナンスに必要なメタデータを提供し、プロセスデータの出所とコンテキストを明確にします。 入手先 通常、データ抽出時にSAP S/4HANAのクライアントとシステムID(SID)を識別する固定値として追加されます。 例 S4P_100S4H_PRD_200S4Q_300 | |||
| 最終データ更新日時 LastDataUpdate | ソースシステムからデータが最後に更新または抽出された日時を示すタイムスタンプです。 | ||
| 説明 この属性には、データを最後に取得した日時が記録されます。分析対象のデータがどの時点のものかを把握するための重要なメタデータです。 最終更新日時を確認すると、分析結果を適切に解釈できます。リアルタイムの情報を見ているのか、特定時点のスナップショットを見ているのかが分かり、データに基づく調査結果や意思決定の妥当性を判断できます。 重要な理由 データの鮮度を把握できるため、正確で適切な業務上の意思決定に役立ちます。 入手先 このタイムスタンプは、データの抽出、変換、読み込み(ETL)の過程で生成、追加されます。 例 2024-05-21T02:00:00Z2024-05-22T02:00:00Z2024-05-23T02:00:00Z | |||
| プラント Plant | 製造指図を実行する製造施設または拠点です。 | ||
| 説明 プラントは、製造拠点や施設を表すSAPの組織単位です。各製造指図は、製造作業を行う特定のプラントに割り当てられます。 この属性は、製造拠点間の比較分析に欠かせません。プラントごとにプロセスデータを分けることで、組織はパフォーマンスを比較し、拠点固有の問題や優れた取り組みを特定できます。また、効率性、キャパシティ、基準の遵守状況における地域差も把握できます。 重要な理由 製造拠点間のパフォーマンスを比較し、優れた取り組みの共有や拠点固有の問題への対応に役立ちます。 入手先 製造指図のヘッダーテーブルAFKO(項目DWERK)にあります。 例 100017102000 | |||
| 作業区 WorkCenter | 作業を担当する特定の機械、機械群、または組立エリアです。 | ||
| 説明 作業区は、製造工程を実施するプラント内の特定の作業単位です。単一の機械、生産ライン、または従業員のグループを指します。 作業区ごとにプロセスデータを分析すると、キャパシティのボトルネックを特定し、リソースの割り当てを最適化できます。どの作業区に負荷が集中しているか、十分に使われていない作業区はどこか、製造実行中に遅延が頻発する工程はどこかを把握できます。これは「キャパシティボトルネック特定」ダッシュボードに欠かせない情報です。 重要な理由 ボトルネックとなっている機械や生産ラインを特定し、キャパシティやリソースの利用状況を改善するための対策につなげられます。 入手先 製造指図の作業データ、テーブルAFVC(項目AR BPL)にあります。 例 WC-ASSEMBLY-01WC-MILLING-05WC-PACKING | |||
| 品目番号 MaterialNumber | 製造指図で製造する製品を一意に識別する番号です。 | ||
| 説明 品目番号は、製造指図で製造する品目を示します。部品表(BOM)や作業手順など、その品目のマスターデータと製造プロセスを結び付けます。 品目番号ごとにプロセスを分析すると、遅延や手戻り、資材不足が発生しやすい製品を特定できます。計画パラメーターの調整や特定部品のサプライチェーン改善など、製品に応じたプロセス改善につなげられます。 重要な理由 製造する製品で絞り込んで分析できるため、製品固有の非効率な点やボトルネックを把握できます。 入手先 製造指図の明細テーブルAFPO(項目MATNR)にあります。 例 RM-1001FG-2050SA-3100-B | |||
| 製造指図ステータス OrderStatus | 作成済み、リリース済み、技術的完了など、製造指図の現在の処理状況です。 | ||
| 説明 製造指図ステータスは、ライフサイクル全体の中で製造指図がどの段階にあるかを示します。製造指図に設定された各種のシステムステータスとユーザーステータスをまとめたものです。一般的なステータスには、CRTD(作成済み)、REL(リリース済み)、CNF(確認済み)、TECO(技術的完了)、CLSD(クローズ済み)があります。 製造指図の現在のステータスを分析すると、仕掛品の状況を把握できます。プロセスマイニングでは、ステータスの推移を時系列で追跡してアクティビティログを作成し、プロセスの流れや各段階の所要時間を詳しく確認できます。 重要な理由 製造指図のライフサイクルにおける段階を大まかに把握でき、プロセスマイニングでアクティビティの順序を導き出すための基本情報になります。 入手先 AFKOのオブジェクト番号(項目OBJNR)に関連付けられた、テーブルJESTのシステムステータスから取得します。 例 CRTDRELTECOCLSD | |||
| 計画終了日 PlannedEndDate | 当初の計画で定められた製造指図の完了予定日です。 | ||
| 説明 計画終了日は、製造指図に関するすべての製造作業を完了する目標日です。製造計画のスケジュール設定時に決定されます。 この属性は、スケジュールの遵守状況を測定するために欠かせません。計画終了日と実際の完了日時を比較すると、製造スケジュール遵守率の重要業績評価指標(KPI)を算出し、遅延した製造指図を特定できます。この分析は、計画の精度と顧客満足度の向上に役立ちます。 重要な理由 スケジュールの遵守状況を測る基準となり、計画の精度と実行の効率性を評価できます。 入手先 製造指図のヘッダーテーブルAFKO(項目GLTRP)にあります。 例 2023-11-152023-12-012024-01-20 | |||
| ユーザー User | 製造指図に関するイベントを作成、変更、または確認したユーザーのシステムIDです。 | ||
| 説明 この属性には、製造指図のリリースや確認の入力など、特定のトランザクションまたはステータス変更に関連付けられたSAPユーザーIDが記録されます。システム内で行われた操作を追跡できます。 ユーザーごとにアクティビティを分析すると、作業負荷の分布やトレーニングの必要性を把握し、手順の遵守状況を確認できます。たとえば、特定のユーザーが計画の調整に頻繁に関わっているか、特定のチームに遅延が関連しているかを確認できます。 重要な理由 操作の責任の所在を明らかにし、作業負荷やユーザーごとの行動、トレーニングの機会を分析できます。 入手先 通常、変更文書ヘッダー(CDHDR、項目UNAME)または確認レコード(AFRU、従業員番号の項目PERNR)にあります。 例 CB9980000021JSMITHPLANNER01 | |||
| 手直しあり IsRework | 製造指図で、開始後に手直しや大幅な計画変更があったかを示すフラグです。 | ||
| 説明 この真偽値属性は、製造開始後に是正措置や計画変更が行われた製造指図を特定するために導出されます。明示的な手直しアクティビティや、「製造開始」後に発生した「製造計画を調整」イベントが該当します。 このフラグは、製造手直し率の重要業績評価指標(KPI)の算出や、「製造の手直しと改訂」ダッシュボードに欠かせません。問題のあるケースを簡単に絞り込んで分析し、コストのかかる手直しにつながる品質問題やプロセス逸脱の根本原因を特定できます。 重要な理由 手直しが発生したケースを抽出し、品質問題やプロセス逸脱、その関連コストの原因を分析して削減できます。 入手先 計算項目です。同じケース内で「製造開始」後に「製造計画を調整」アクティビティが発生した場合、または特定の手直し指図タイプが使われた場合にtrueに設定されます。 例 truefalse | |||
| 確認済み数量 TotalConfirmedQuantity | 製造指図について、製造済みとして確認された品目の合計数量です。 | ||
| 説明 この属性は、製造確認を通じて報告された完成品または半製品の累計数量を表します。製造指図の完了目標に対する進捗を追跡できます。 確認済み数量と計画数量を比較すると、製造の進捗を把握し、歩留まりの問題や差異を特定できます。生産量を測る基本的な指標であり、廃棄率や効率性など、さまざまなパフォーマンスの算出に使われます。 重要な理由 製造指図の実際の生産量を追跡できるため、進捗の把握や歩留まりの算出、差異の特定に役立ちます。 入手先 AFRUの確認レコード(歩留まり数量の項目LMNGA)から集計します。 例 9801000501200 | |||
| 納期どおり IsOnTime | 製造指図が計画終了日までに完了したかを示すフラグです。 | ||
| 説明 この計算済みの真偽値属性は、実際の完了日と計画終了日を比較し、スケジュールの遵守状況を直接測定します。各製造指図が納期どおりに完了したかを明確に示します。 この属性は、製造スケジュール遵守率の重要業績評価指標(KPI)の基礎となります。納期どおりに完了した指図と遅延した指図を簡単に分けて分析できるため、遅延につながる共通の特徴やプロセス経路を特定できます。 重要な理由 各製造指図のスケジュール遵守状況を明確かつ簡単に測定でき、遅延の根本原因を分析しやすくなります。 入手先 計算項目です。「製造指図を技術的に完了」アクティビティのタイムスタンプが、「計画終了日」属性以下の場合にtrueに設定されます。 例 truefalse | |||
| 終了時刻 EndTime | 特定のアクティビティまたはイベントが完了した日時を示すタイムスタンプです。 | ||
| 説明 この属性には、記録された各イベントの完了日時が含まれます。開始時刻と組み合わせることで、アクティビティの所要時間を算出できます。 終了時刻は、個々のアクティビティの処理時間を正確に算出するために欠かせません。キャパシティやリソースの利用状況を分析する際の基礎データになります。実作業時間とアイドル時間や待ち時間を区別できるため、ボトルネックをより正確に特定できます。 重要な理由 アクティビティの所要時間を正確に算出できるため、リソースの効率性やプロセスのボトルネックを分析できます。 入手先 実行ステップについては確認テーブル(AFRU)に記録されています。瞬時に発生するイベントの場合、ほかのイベントの終了時刻は開始時刻と同じになることがあります。 例 2023-10-26T09:45:00Z2023-10-26T15:00:00Z2023-10-27T10:30:00Z | |||
| 製造優先度 ProductionPriority | 製造指図の緊急度や重要度を示すコードまたは値です。 | ||
| 説明 製造優先度は、特にリソースが限られている場合に、製造指図の順序付けや優先順位付けに使われます。通常、優先度の高い指図は、低い指図より先に処理されます。 この属性を分析すると、現場で割り当てられた優先度に沿って処理されているかを確認できます。「製造優先順位の一貫性」ダッシュボードでは、処理順序と割り当てられた優先度を比較し、不整合を特定します。これにより、スケジュール管理の徹底と計画と実行の整合性向上につなげられます。 重要な理由 製造スケジュールが業務上の優先順位に沿っているかを確認し、重要な製造指図が意図どおりに優先処理されているかを把握できます。 入手先 カスタム項目の場合や、ほかの製造指図パラメーターに基づく場合があります。具体的な格納場所は設定によって異なります。 例 高中低15 | |||
| 製造指図タイプ OrderType | 製造指図の目的を分類し、処理方法を決める区分です。 | ||
| 説明 製造指図タイプは、SAP PPで製造指図の処理方法を決める重要な設定項目です。番号範囲、マスターデータの選択、原価計算パラメーター、決済ルールを制御します。標準製造指図、手直し指図、試作指図などがあります。 製造指図タイプごとにプロセスを分析すると、異なる製造プロセスのパフォーマンスや流れを比較できます。手直し指図に大幅な時間がかかっているか、特定の指図タイプで計画変更が発生しやすいかを把握し、対象を絞ったプロセス改善に役立てられます。 重要な理由 製造指図の業務上の目的ごとに分析できるため、標準製造、手直し、その他のプロセスを比較できます。 入手先 製造指図のヘッダーテーブルAFKO(項目AUART)にあります。 例 PP01PP03ZP01 | |||
| 計画開始日 PlannedStartDate | 当初の計画で定められた製造指図の開始予定日です。 | ||
| 説明 計画開始日は、製造指図の製造作業を開始する目標日です。スケジュール設定の過程で決定される重要な日付です。 この属性は、スケジュール遵守状況を分析する際の開始基準になります。計画開始日と実際の開始時刻を比較すると、資材の準備や製造指図のリリースなど、製造前の段階で発生する遅延を把握できます。こうした遅延は、製造全体のスケジュールに影響することがあります。 重要な理由 開始時刻の遵守状況を測る基準となり、製造指図のリリースや資材の確保など、製造前の段階で発生する遅延の特定に役立ちます。 入手先 製造指図のヘッダーテーブルAFKO(項目GSTRP)にあります。 例 2023-11-102023-11-252024-01-15 | |||
| 資材利用可能ステータス MaterialAvailabilityStatus | 製造指図に必要な資材がすべてそろっているかを示します。 | ||
| 説明 このステータスは、製造指図に対して実施した資材利用可能性チェックの結果を示します。すべての資材がそろっている、一部が不足している、またはチェックが未実施であることを表します。「不足」ステータスは、遅延の可能性を示す重要な兆候です。 この属性は、「資材不足の影響分析」ダッシュボードに欠かせません。不足ステータスと製造指図のリリースから製造開始までの時間を関連付けることで、資材不足による遅延を定量化できます。この指標の改善は、製造の流れをスムーズにするうえで重要です。 重要な理由 製造指図のリリースから製造開始までの遅延の原因を直接示し、サプライチェーンの問題が製造に与える影響を定量化できます。 入手先 資材構成品全体のステータスから導かれることが多いステータスです。システムステータス(JEST)に「MSPT」(資材不足)などとして記録されます。 例 利用可能不足未確認 | |||
生産計画のアクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| 入庫を記録 | 完成品を生産ラインから在庫へ受け入れたことを記録します。これにより、生産した品目の在庫数が正式に増加します。 | ||
| 重要な理由 生産物の完成を示す重要な節目です。納期遵守率や全体のリードタイムを測る際、生産サイクルの終了時点とみなされることがよくあります。 入手先 通常は移動タイプ101で記録される、明示的な会計転記です。品目レベルのMSEGテーブルとヘッダーレベルのMKPFテーブルに記録され、生産指図に関連付けられます。 記録 指図に関連付けられた、移動タイプ101の品目伝票をMSEGで特定します。 イベントタイプ explicit | |||
| 最終実績を入力 | 生産指図の工程順序における最後の作業の実績確認を示します。計画された製造工程がすべて製造現場で完了したことを表します。 | ||
| 重要な理由 最終実績確認は、実際の生産作業が終わったことを示す重要な節目です。製品の最終入庫前に、製造現場のサイクルタイムをより正確に測るための終了時点として使われることがあります。 入手先 AFRUテーブルの実績確認データから推定します。最終実績確認フラグ(AFRUD-AUERU)が設定された、最後の工程順序(AFVC-VPLNR)の実績確認レコードを特定します。 記録 最終実績確認フラグが設定された、AFRU内の最後の工程実績確認を特定します。 イベントタイプ inferred | |||
| 指図を技術的に完了 | 入出庫や実績確認など、指図に対する以降の物流上の変更を防ぐための事務的な締め処理です。物流の観点では、指図が完了した状態とみなされます。 | ||
| 重要な理由 TECOは生産プロセスの確定的な終了点であり、生産指図の総サイクルタイムを算出するうえで重要です。物流上の作業がすべて完了し、指図が財務決済に進める状態であることを示します。 入手先 ユーザーがステータスをTECO(技術的完了)に設定すると、このイベントが発生します。対応するタイムスタンプとともに、ステータス変更としてJCDSテーブルに記録されます。 記録 JCDSテーブルに記録された「TECO」へのステータス変更時刻。 イベントタイプ inferred | |||
| 生産を開始 | 指図に基づく実際の生産作業の開始を示します。通常は、製造現場で最初に実績確認が行われた時点、または指図に対して最初に部品が出庫された時点から推定します。 | ||
| 重要な理由 このアクティビティは、計画から実行への移行を示します。実際の開始日と計画開始日を比較し、スケジュール遵守状況を追跡するうえで欠かせません。 入手先 推定イベントです。通常は、指図に関連する最も早い入出庫記録(MSEGテーブル、移動タイプ261)または作業時間の実績確認(AFRUテーブル)のタイムスタンプから判定します。 記録 指図に関連するAFRU(実績確認)またはMSEG(入出庫)の最も早いタイムスタンプ。 イベントタイプ inferred | |||
| 生産指図をリリース | 生産指図が承認され、製造現場で実行できる状態になる重要な節目です。リリース後は、出庫、実績確認などの実行工程を開始できます。 | ||
| 重要な理由 実行可能な生産プロセスの正式な開始を示すイベントであり、リードタイムの測定に欠かせない時点です。作成からリリースまでの時間は、生産開始前の効率を測る重要業績評価指標(KPI)です。 入手先 ユーザーまたはシステムジョブが明示的にリリースを実行すると、ステータスがRELに変わります。このステータス変更は、タイムスタンプとともにJCDSテーブルに記録されます。リリース日はAFKO-FTRMIにも保存されることがあります。 記録 JCDSテーブルに記録された「REL」へのステータス変更時刻。 イベントタイプ inferred | |||
| 生産指図を作成 | システムで生産指図を新規作成します。これは、指定した数量の製品を生産する正式な依頼です。ユーザーが新しい指図を保存すると、初期ステータスがCRTD(作成済み)に設定され、このイベントが明示的に記録されます。 | ||
| 重要な理由 生産指図のライフサイクルの開始を示します。作成からリリースまでの時間を分析すると、生産スケジュールが正式に設定される前の事務処理や計画上の遅れを特定できます。 入手先 このイベントは、作成日(ERDAT)とともにAUFKテーブル(指図マスタデータ)に記録されます。作成ステータス(CRTD)は、指図のオブジェクト番号(OBJNR)を介して関連付けられたJESTテーブルとJCDSテーブルに記録されます。 記録 AUFK-ERDATのタイムスタンプ、またはJCDSに記録された「CRTD」へのステータス変更時刻。 イベントタイプ explicit | |||
| 生産計画を変更 | 生産指図のリリース後に行われる、数量、日付、部品表などの重要な変更を指します。変更文書を分析して記録します。 | ||
| 重要な理由 頻繁な変更は、計画の不安定さや需要の変動を示している可能性があります。このアクティビティは、生産計画の変更率を測る重要業績評価指標(KPI)の基礎となり、プロセスの変動要因の特定に役立ちます。 入手先 生産指図オブジェクト(AUFKまたはAFPO)に関するCDHDR(変更文書ヘッダー)テーブルとCDPOS(変更文書明細)テーブルの変更ログから推定します。リリース日以降の変更を計画変更として扱います。 記録 リリース後に、CDHDR/CDPOSで主要項目(数量や日付など)の変更を特定します。 イベントタイプ inferred | |||
| キャパシティ所要量を計画 | 生産指図の作業をスケジュールし、必要な作業区でキャパシティを確保できるか確認します。システムは作業区のキャパシティ負荷を評価し、設定されている場合は負荷を平準化して、生産日を決定します。 | ||
| 重要な理由 実行可能な生産スケジュールを確保するうえで欠かせないステップです。所要時間と結果を分析すると、キャパシティのボトルネックを特定し、リソース計画の精度を高められます。 入手先 通常、指図がスケジュール済みであることを示すSETC(スケジューリング実行済み)などのシステムステータスから推定します。スケジュール開始日と終了日(AUFK-GSTRP、AUFK-GLTRP)が入力されていることも、このアクティビティの完了を示します。 記録 AUFK/AFKOのスケジュール日付の入力、またはJESTのスケジューリング関連ステータスから推定します。 イベントタイプ inferred | |||
| 指図を財務的に締める | 指図の決済を行う最終的な締め処理です。以降の財務転記はできません。管理会計と財務会計の観点から、指図のライフサイクルが終了したことを示します。 | ||
| 重要な理由 生産そのものの分析対象外となることが多いものの、このアクティビティを含めると、プロセス全体を把握できます。物流上の完了(TECO)から財務上の締めまでの時間の分析にも役立ちます。 入手先 ユーザーがステータスをCLSD(クローズ)に設定すると、このイベントが発生します。対応するタイムスタンプとともに、ステータス変更としてJCDSテーブルに記録されます。 記録 JCDSテーブルに記録された「CLSD」へのステータス変更時刻。 イベントタイプ inferred | |||
| 生産実績を入力 | 生産指図内の特定の作業について、進捗を記録します。生産数量、スクラップ、作業区での作業時間などを入力します。 | ||
| 重要な理由 実績確認により、製造現場の進捗をリアルタイムで把握できます。また、生産状況の追跡にも欠かせません。実績確認の頻度とタイミングを分析すると、作業の流れを監視し、工程間の遅れを特定できます。 入手先 各実績確認は、タイムスタンプ(BUDAT、UZEIT)と作業の詳細とともに、AFRU(指図完了確認)テーブルのレコードとして明示的に記録されます。 記録 AFRUテーブルの文書として記録されます。 イベントタイプ explicit | |||
| 生産指図をキャンセル | 生産指図が完了前にキャンセルされたことを示します。プロセスが正常に完了しなかった場合の終了状態です。 | ||
| 重要な理由 キャンセルされた指図を分析すると、需要計画、マスタデータ、販売プロセスの問題が明らかになることがあります。キャンセル率が高い場合は、対処が必要な組織的な問題を示している可能性があります。 入手先 JCDSテーブルでシステムステータスCACL(キャンセル)が設定されたことから推定します。また、削除フラグ(AUFK-LOEKZ)が設定されている場合も、キャンセルを示すことがあります。 記録 JCDSでCACLへのステータス変更が記録された時刻、またはAUFKで削除フラグが設定された時刻。 イベントタイプ inferred | |||
| 計画外の停止が発生 | 生産の実行中に発生した、一定以上の待機時間を示す計算イベントです。システムに明示的に記録されるイベントではなく、連続する生産実績確認の間に長い時間が空いていることから判定します。 | ||
| 重要な理由 機械の故障や品質問題など、計画外の中断を監視するのに役立ちます。頻繁な停止や長時間の停止を特定することは、製造現場の安定性と生産量の向上に欠かせません。 入手先 AFRUテーブルの「生産実績を入力」アクティビティについて、連続するタイムスタンプを分析して算出します。あらかじめ定めたしきい値を超える時間の空きがある場合、計画外の停止として記録します。 記録 連続する実績確認のタイムスタンプ(AFRU-BUDAT/UZEIT)の時間差を算出します。 イベントタイプ calculated | |||
| 資材の入手可能性を確認 | 生産指図に必要なすべての部品が、必要な数量と時期にそろっているかをシステムまたはユーザーが確認する作業です。通常は指図の作成時またはリリース時に自動で確認されますが、手動で確認する場合もあり、その結果が指図のステータスに反映されます。 | ||
| 重要な理由 資材不足を早期に特定することは、先を見越した計画に欠かせません。このアクティビティを追跡すると、資材の入手可能性が指図のリリースや予定どおりの生産開始にどう影響するかを把握できます。 入手先 指図のステータスから推定します。MACM(資材引当済み)などのステータスや、資材入手可能日(AFKO-MSERF)の変更は、確認が行われたことを示します。資材不足ステータス(MSPT)がないことから、資材が入手可能と推定することもできます。 記録 資材引当に関するステータス変更、またはトランザクションCOMACの実行から推定します。 イベントタイプ inferred | |||
| 資材不足が発生 | 必要な部品が1つ以上入手できず、生産プロセスに影響が出た、または停止したことを示します。システムは、その状況を示す特定のステータスを指図に設定します。 | ||
| 重要な理由 資材不足の追跡は、資材不足の影響分析に欠かせません。サプライチェーンの問題による遅延を定量化し、資材計画を改善するのに役立ちます。 入手先 生産指図に「MSPT」(資材不足)ステータスが設定されたことから推定します。このステータスの変更時刻はJCDSテーブルで確認できます。 記録 JCDSテーブルに記録された「MSPT」へのステータス変更時刻。 イベントタイプ inferred | |||
データ抽出ガイド
ステップ
- 前提条件の確認:必要なCore Data Services(CDS)ビューにアクセスする権限を持つSAP S/4HANAユーザーがいることを確認します。対象となるビューは
I_ProductionOrder、I_ProdOrdConfirmation、I_MaterialDocumentItem、I_ObjectStatus、I_ChangeDocumentです。また、SAP HANAデータベースに接続するSQL実行環境(SAP HANA Studio、DBeaver、外部ETLツールなど)も必要です。 - システム情報の確認:
SourceSystem属性に使用するソースシステム識別子を決めます。これはデータの取得元を示すために定義する論理名です。例:S4H_PROD。 - 抽出パラメーターの設定:クエリを実行する前に、抽出期間の開始日と終了日、対象を絞る
PlantやProductionOrderTypeなどのフィルターを設定します。 - SQLクエリの準備:
queryセクションに記載されたSQLクエリ全体を、使用するSQLクライアントまたはデータ抽出ツールにコピーします。 - プレースホルダーの設定:クエリ内のプレースホルダーを実際の値に置き換えます。
_StartDate、_EndDate、ソースシステム識別子を指定してください。また、Unplanned Halt Occurredイベントのしきい値(例:'24:00:00')を業務に合わせて調整します。 - 抽出クエリの実行:設定したSQLスクリプトをSAP S/4HANAシステムのデータベースに対して実行します。長期間にわたる大規模なデータを抽出する場合は、パフォーマンスへの影響を避けるため、月単位など小さな期間に分けて実行してください。
- データの初期確認:クエリの実行後、出力内容を簡単に確認します。行数とすべての列が含まれていることを確認し、
アクティビティ列に想定される複数のイベントが含まれているかを確認します。 - データの検証:
validationStepsセクションの手順に従い、詳しく検証します。SAPシステムでトランザクションCO03を使い、いくつかの製造指図の詳細と照合して、抽出したイベントログが正確であることを確認します。 - CSVへのエクスポート:最終結果をCSVファイルにエクスポートします。文字化けを防ぐため、ファイルの文字コードはUTF-8にしてください。
- アップロードの準備:CSVの列見出しが、必要な属性名
ProductionOrder、Activity、StartTime、SourceSystem、LastDataUpdateと一致していることを確認します。プロセスマイニングツールにアップロードする前に、StartTime列がISO 8601(YYYY-MM-DDTHH:MM:SS)などの標準的なタイムスタンプ形式になっていることも確認してください。
設定
- 主要なCDSビュー:抽出では、基盤となるSAPテーブルを業務向けに構造化して表示する標準CDSビューを主に使用します。主なビューは次のとおりです。
I_ProductionOrder:ヘッダーレベルのデータと作成イベント。I_ProdOrdConfirmation:すべての作業確認。I_MaterialDocumentItem:出庫や入庫などの在庫移動。I_ObjectStatus:製造指図のステータス変更。I_ChangeDocumentおよび関連ビュー:主要な指図項目の変更。
- 期間による絞り込み:データ量を抑えるため、期間フィルターを必ず設定してください。提示されたクエリでは製造指図の
CreationDateを使用します。初回分析では、通常3~6か月分のデータが目安です。 - 主要な業務フィルター:組織やマスターデータの主要な属性で絞り込むと、データセットをさらに適切な範囲にできます。よく使われるフィルターは次のとおりです。
Plant:特定の製造拠点を分析する場合に指定します。ProductionOrderType:標準生産、手直し、その他の指図タイプを対象にする場合に指定します。CompanyCode:特定の法人にデータを限定する場合に指定します。
- 計画外停止のしきい値:クエリには
Unplanned Halt Occurredイベントを導出するロジックが含まれています。作業間の大きな空き時間を判定するには、時間のしきい値が必要です。通常の生産サイクル時間と業務ルールに基づいて設定してください。 - 権限の前提条件:クエリを実行するSAPユーザーには、すべてのCDSビューと基盤テーブルに対する表示権限が必要です。権限が不足していると、結果が空になったり、不完全になったりすることがあります。
クエリの例 sql
WITH BaseOrders AS (
SELECT
ProductionOrder,
Material AS MaterialNumber,
ProductionPlant AS Plant,
CreationDate,
CreationTime,
BasicEndDate AS PlannedEndDate,
TechnicalCompletionDate,
LastChangeDateTime
FROM I_ProductionOrder
-- P_CreationDateFrom and P_CreationDateTo are placeholders for your date range
WHERE CreationDate BETWEEN '[_StartDate]' AND '[_EndDate]'
-- Add other filters as needed, for example:
-- AND ProductionPlant IN ('[Your_Plant_1]', '[Your_Plant_2]')
-- AND ProductionOrderType = '[Your_Order_Type]'
)
SELECT
bo.ProductionOrder,
'Production Order Created' AS Activity,
TO_TIMESTAMP(bo.CreationDate || ' ' || LPAD(bo.CreationTime, 6, '0'), 'YYYYMMDD HH24MISS') AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
'CRTD' AS OrderStatus
FROM BaseOrders bo
UNION ALL
-- System status changes like Released, Technically Completed, Closed, Cancelled, Material Shortage
SELECT
os.ObjectInternalID AS ProductionOrder,
CASE os.SystemStatus
WHEN 'I0002' THEN 'Production Order Released'
WHEN 'I0043' THEN 'Material Availability Checked' -- Status: MACM (Material committed)
WHEN 'I0045' THEN 'Order Technically Completed'
WHEN 'I0046' THEN 'Order Financially Closed'
WHEN 'I0047' THEN 'Production Order Cancelled'
WHEN 'I0010' THEN 'Material Shortage Occurred' -- Status: MSPT (Material shortage)
END AS Activity,
os.StatusChangeDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
os.SystemStatus AS OrderStatus
FROM I_ObjectStatus AS os
JOIN BaseOrders AS bo ON os.ObjectInternalID = bo.ProductionOrder
WHERE os.SystemStatus IN ('I0002', 'I0043', 'I0045', 'I0046', 'I0047', 'I0010') AND os.StatusIsInactive = ''
UNION ALL
-- Production Started, inferred from the first goods issue or first confirmation
SELECT
s.ProductionOrder,
'Production Started' AS Activity,
s.StartEventTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
s.MaterialNumber,
s.Plant,
NULL AS WorkCenter,
s.PlannedEndDate,
NULL AS OrderStatus
FROM (
SELECT
bo.ProductionOrder,
bo.MaterialNumber,
bo.Plant,
bo.PlannedEndDate,
MIN(COALESCE(gm.PostingTime, cf.ConfirmationDateTime)) AS StartEventTime,
ROW_NUMBER() OVER(PARTITION BY bo.ProductionOrder ORDER BY MIN(COALESCE(gm.PostingTime, cf.ConfirmationDateTime))) as rn
FROM BaseOrders bo
LEFT JOIN I_MaterialDocumentItem gm ON bo.ProductionOrder = gm.ProductionOrder AND gm.GoodsMovementType IN ('261', '262') -- Goods Issue
LEFT JOIN I_ProdOrdConfirmation cf ON bo.ProductionOrder = cf.ProductionOrder
WHERE gm.ProductionOrder IS NOT NULL OR cf.ProductionOrder IS NOT NULL
GROUP BY bo.ProductionOrder, bo.MaterialNumber, bo.Plant, bo.PlannedEndDate
) s
WHERE s.rn = 1
UNION ALL
-- Production Confirmation Entered (for each confirmation)
SELECT
cf.ProductionOrder,
'Production Confirmation Entered' AS Activity,
cf.ConfirmationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
cf.WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
UNION ALL
-- Final Confirmation Entered
SELECT
cf.ProductionOrder,
'Final Confirmation Entered' AS Activity,
cf.ConfirmationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
cf.WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
WHERE cf.IsFinalConfirmation = 'X'
UNION ALL
-- Unplanned Halt Occurred (derived from gaps between confirmations)
SELECT
ProductionOrder,
'Unplanned Halt Occurred' AS Activity,
PreviousConfirmationTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
MaterialNumber,
Plant,
WorkCenter,
PlannedEndDate,
NULL AS OrderStatus
FROM (
SELECT
cf.ProductionOrder,
bo.MaterialNumber,
bo.Plant,
bo.PlannedEndDate,
cf.WorkCenter,
cf.ConfirmationDateTime,
LAG(cf.ConfirmationDateTime, 1) OVER (PARTITION BY cf.ProductionOrder ORDER BY cf.ConfirmationDateTime) AS PreviousConfirmationTime,
(SECONDS_BETWEEN(LAG(cf.ConfirmationDateTime, 1) OVER (PARTITION BY cf.ProductionOrder ORDER BY cf.ConfirmationDateTime), cf.ConfirmationDateTime) / 3600.0) as HoursDiff
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
) AS gaps
WHERE gaps.HoursDiff > 24 -- Configurable threshold in hours, e.g. 24 hours
UNION ALL
-- Goods Receipt Posted
SELECT
gm.ProductionOrder,
'Goods Receipt Posted' AS Activity,
gm.PostingTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_MaterialDocumentItem gm
JOIN BaseOrders bo ON gm.ProductionOrder = bo.ProductionOrder
WHERE gm.GoodsMovementType = '101'
UNION ALL
-- Capacity Requirements Planned (using Release event as a proxy)
SELECT
os.ObjectInternalID AS ProductionOrder,
'Capacity Requirements Planned' AS Activity,
os.StatusChangeDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
os.SystemStatus AS OrderStatus
FROM I_ObjectStatus AS os
JOIN BaseOrders AS bo ON os.ObjectInternalID = bo.ProductionOrder
WHERE os.SystemStatus = 'I0002' AND os.StatusIsInactive = '' -- Status 'REL' (Released)
UNION ALL
-- Production Plan Adjusted
SELECT
ch.ObjectValue AS ProductionOrder,
'Production Plan Adjusted' AS Activity,
ch.CreationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL as WorkCenter,
bo.PlannedEndDate,
NULL as OrderStatus
FROM I_ChangeDocument AS ch
JOIN BaseOrders bo ON ch.ObjectValue = bo.ProductionOrder
WHERE ch.ChangeDocumentObject = 'PRODORDER'
-- Monitoring changes in key fields like Total Quantity (GAMNG) or Basic Finish Date (GLTRP)
AND ch.FieldName IN ('GAMNG', 'GLTRP')
GROUP BY ch.ObjectValue, ch.CreationDateTime, bo.MaterialNumber, bo.Plant, bo.PlannedEndDate ステップ
- 製造指図データを含むSAP HANAスキーマへの直接読み取りアクセスが可能であることを確認し、スキーマの所有者、クライアントの扱い、タイムスタンプの規則、権限モデルを特定します。SAP HANA Database Explorerまたは承認済みのSQLクライアントを使用してください。クエリを確定する前に、該当するSAP S/4HANAのリリースと有効化されている生産計画の範囲を確認します。
- 接続文字列、認証情報、スキーマ名、クライアント値、抽出開始日と終了日、会社固有のフィルターを設定します。以下のクエリではAUFK、AFPO、JEST、JCDSを使用し、AFKO、AFVC、AFRU、RESB、MSEG、CDHDR、CDPOSも参照します。拡張機能、互換ビュー、リリースごとの差異があるため、実行前にシステム内でこれらのオブジェクトが利用可能か、フィールド定義が一致するかを確認してください。
- SAP HANA Database Explorerまたは承認済みのSQL実行ツールでクエリを実行します。クエリは明示的に抽出した各アクティビティについて1行を作成し、UNION ALLでアクティビティの行を結合します。ProcessMindによるイベントの推定には依存しません。
- ソースデータを確認し、必要に応じて、システム固有として示された式を調整します。特に、資材の利用可能状況、キャパシティ計画、技術的完了、財務上のクローズ、取消に使用するステータスコードを確認してください。生産計画の調整を特定するための変更文書オブジェクト名とフィールド名も確認します。
- タイムスタンプの変換とクライアントによる絞り込みを検証します。SAPシステムでは日付と時刻が別々のフィールドに格納されることがあり、UTCを使う環境と、拠点またはシステムの現地時刻を使う環境があります。
StartTimeの値でタイムゾーンが統一されていること、および無効な日付や初期値の日付が除外されていることを確認してください。 - 結果を、ProcessMindがサポートするフラットファイル形式(CSVまたはUTF-8の区切りテキストを推奨)でエクスポートします。出力列名
ProductionOrder、Activity、StartTime、SourceSystem、LastDataUpdate、MaterialNumber、Plant、WorkCenter、PlannedEndDate、OrderStatusは正確に保持してください。 - エクスポートした行を
ProductionOrder、StartTimeの順に並べます。アップロード処理で対応している場合は、同一タイムスタンプの行にも一意に決まる並び順を設定してください。別々のソースレコードに対応する場合は、繰り返しの確認やステータス変更も含め、イベントごとに1行を保持します。 - ファイルをProcessMindにアップロードし、
ProductionOrderをケース識別子、Activityをアクティビティ、StartTimeをイベント時刻として割り当てます。残りの列は、ProcessMindのインポート設定に応じてイベント属性またはケース属性に割り当てます。アクティビティのラベルが14種類すべて、クエリの出力どおりに保持されていることを確認してください。
設定
- 期間:まずは直近3~6か月の期間を指定します。初期テストでは短い期間を使い、行数とクエリのパフォーマンスを検証してから対象を広げてください。
- 抽出パラメーター:[Your schema name]、[Your client]、[Extraction start date]、[Extraction end date]、[Your source system name]を環境に応じた値に置き換えます。会社固有のフィルターは、関連する組織フィールドと値を確認してから適用してください。
- ステータス設定:CRTD、リリース、資材の利用可能状況、キャパシティ計画、技術的完了、財務上のクローズ、取消に使用するSAPの正確なステータスコードとステータスオブジェクト識別子を確認します。ステータスプロファイルやカスタム拡張によって、利用可能なコードが変わる場合があります。
- 変更文書:数量、日付、部品表、作業手順の変更に使われる製造指図の変更文書オブジェクト、テーブル名、フィールド名、値の形式を確認します。クエリでは、条件に一致するCDHDRおよびCDPOSのレコードを計画調整の根拠として扱います。
- タイムスタンプの扱い:すべてのソースタイムスタンプを同じタイムゾーンに統一します。日付と時刻のフィールドが別々に格納されているか、タイムスタンプが現地時刻かUTCか、初期値の日付がどのように表されるかを確認してください。
- パフォーマンス:指図の作成日など、インデックスが設定された製造指図の日付で抽出対象を絞り、クライアントを指定し、必要な列だけを選択して、適切なレポート時間帯に実行します。大規模なデータセットは月単位または製造指図の範囲ごとに抽出し、結果を段階的に保存してください。
- データベースオブジェクト:選択したスキーマでAUFK、AFPO、JEST、JCDS、AFKO、AFVC、AFRU、RESB、MSEG、CDHDR、CDPOSが利用可能で、読み取り可能であることを確認します。使用中のリリースでビューやフィールドが異なる場合は、対応するリリース済みまたは承認済みのオブジェクトに置き換えてください。
- 権限:選択したSAP HANAスキーマとオブジェクトへの読み取り権限、およびSQLの実行権限が必要です。ガバナンス上の手順によっては、SAPアプリケーションの権限も必要になる場合があります。
- 対象範囲:選択した期間の生産計画・実行データ、在庫移動データ、ステータス履歴、変更文書が保持されている必要があります。アーカイブ済みまたは削除済みのレコードは返されません。
- ProcessMindへの割り当て:
ProductionOrderをケース識別子、Activityをアクティビティ、StartTimeをイベント時刻として設定します。属性から不足しているアクティビティが導出されることはありません。
クエリの例 sql
WITH
params AS (
SELECT
'[Your client]' AS mandt,
TO_DATE('[Extraction start date]', 'YYYY-MM-DD') AS date_from,
TO_DATE('[Extraction end date]', 'YYYY-MM-DD') AS date_to,
'[Your source system name]' AS source_system,
CURRENT_UTCTIMESTAMP AS last_data_update
FROM DUMMY
),
orders AS (
SELECT
a.mandt,
LTRIM(a.aufnr, '0') AS production_order,
a.aufnr AS production_order_raw,
a.erdat AS order_created_date,
a.erfzeit AS order_created_time,
a.auart AS order_type,
a.werks AS plant,
a.objnr AS object_number,
a.ktext AS order_text,
p.matnr AS material_number,
p.psmng AS planned_quantity,
p.wemng AS delivered_quantity,
k.gstrp AS planned_start_date,
k.gltrp AS planned_end_date,
k.ftrmi AS release_date,
k.ftrmp AS release_time,
k.gamng AS total_order_quantity,
k.plnbez AS header_material_number,
k.plnty AS task_list_type,
k.plnnr AS task_list_group,
k.plnal AS task_list_group_counter
FROM [Your schema name].AUFK a
LEFT JOIN [Your schema name].AFPO p
ON p.mandt = a.mandt
AND p.aufnr = a.aufnr
LEFT JOIN [Your schema name].AFKO k
ON k.mandt = a.mandt
AND k.aufnr = a.aufnr
CROSS JOIN params x
WHERE a.mandt = x.mandt
AND a.erdat >= x.date_from
AND a.erdat < ADD_DAYS(x.date_to, 1)
),
status_history AS (
SELECT
o.*,
j.stat,
j.inact,
j.chgnr,
j.udate AS status_date,
j.utime AS status_time,
c.usnam AS status_user,
c.chind AS status_change_indicator
FROM orders o
INNER JOIN [Your schema name].JEST j
ON j.mandt = o.mandt
AND j.objnr = o.object_number
LEFT JOIN [Your schema name].JCDS c
ON c.mandt = j.mandt
AND c.objnr = j.objnr
AND c.stat = j.stat
AND c.chgnr = j.chgnr
WHERE COALESCE(j.inact, '') <> 'X'
),
operations AS (
SELECT
o.production_order,
o.mandt,
v.vornr,
v.arbid,
v.steus,
v.ltxa1,
v.aufpl,
v.aplzl,
cr.name1 AS work_center
FROM orders o
LEFT JOIN [Your schema name].AFVC v
ON v.mandt = o.mandt
AND v.aufpl = (SELECT MAX(k2.aufpl) FROM [Your schema name].AFKO k2 WHERE k2.mandt = o.mandt AND k2.aufnr = o.production_order_raw)
LEFT JOIN [Your schema name].CRHD cr
ON cr.mandt = v.mandt
AND cr.objty = 'A'
AND cr.objid = v.arbid
),
confirmations AS (
SELECT
o.production_order,
o.mandt,
r.rmzhl,
r.vornr,
r.budat AS confirmation_date,
r.ersda AS entry_date,
r.erzet AS entry_time,
r.ism01,
r.ism02,
r.ism03,
r.ism04,
r.ism05,
r.ism06,
r.xmnga,
r.stzhl,
r.stzhl AS reversal_counter,
r.lmnga AS confirmed_quantity,
r.xmnge AS scrap_quantity,
r.aufpl,
r.aplzl,
op.work_center
FROM orders o
INNER JOIN [Your schema name].AFRU r
ON r.mandt = o.mandt
AND r.aufnr = o.production_order_raw
LEFT JOIN operations op
ON op.production_order = o.production_order
AND op.mandt = r.mandt
AND op.vornr = r.vornr
),
first_confirmation AS (
SELECT production_order, MIN(TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS')) AS start_time
FROM confirmations
GROUP BY production_order
),
last_confirmation AS (
SELECT production_order, MAX(TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS')) AS final_time
FROM confirmations
GROUP BY production_order
),
first_goods_issue AS (
SELECT
o.production_order,
MIN(TO_TIMESTAMP(TO_VARCHAR(m.budat_mkpf, 'YYYYMMDD') || LPAD(TO_VARCHAR(m.cputm_mkpf), 6, '0'), 'YYYYMMDDHH24MISS')) AS start_time
FROM orders o
INNER JOIN [Your schema name].MSEG m
ON m.mandt = o.mandt
AND m.aufnr = o.production_order_raw
AND m.bwart IN ('261', '262')
GROUP BY o.production_order
),
first_receipt AS (
SELECT
o.production_order,
MIN(TO_TIMESTAMP(TO_VARCHAR(m.budat_mkpf, 'YYYYMMDD') || LPAD(TO_VARCHAR(m.cputm_mkpf), 6, '0'), 'YYYYMMDDHH24MISS')) AS receipt_time
FROM orders o
INNER JOIN [Your schema name].MSEG m
ON m.mandt = o.mandt
AND m.aufnr = o.production_order_raw
AND m.bwart IN ('101', '102')
GROUP BY o.production_order
),
plan_changes AS (
SELECT
o.production_order,
MIN(TO_TIMESTAMP(TO_VARCHAR(h.udate, 'YYYYMMDD') || LPAD(TO_VARCHAR(h.utime), 6, '0'), 'YYYYMMDDHH24MISS')) AS adjustment_time
FROM orders o
INNER JOIN [Your schema name].CDHDR h
ON h.mandant = o.mandt
AND h.objectid = o.production_order_raw
INNER JOIN [Your schema name].CDPOS p
ON p.mandant = h.mandant
AND p.objectclas = h.objectclas
AND p.objectid = h.objectid
AND p.changenr = h.changenr
WHERE h.objectclas IN ('ORDER', 'PP_ORDER')
AND p.tabname IN ('AFKO', 'AFPO', 'AFVC', 'RESB')
AND p.fname IN ('GAMNG', 'PSMNG', 'GSTRP', 'GLTRP', 'MATNR', 'BDMNG', 'VORNR')
GROUP BY o.production_order
),
status_times AS (
SELECT
production_order,
MIN(CASE WHEN stat IN ('I0001', 'CRTD') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS created_status_time,
MIN(CASE WHEN stat IN ('I0002', 'REL') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS released_time,
MIN(CASE WHEN stat IN ('I0003', 'MATC', 'MANC') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS material_available_time,
MIN(CASE WHEN stat IN ('I0004', 'CAPC', 'CAPA') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS capacity_planned_time,
MIN(CASE WHEN stat IN ('I0045', 'TECO') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS technically_completed_time,
MIN(CASE WHEN stat IN ('I0046', 'CLSD') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS financially_closed_time,
MIN(CASE WHEN stat IN ('I0076', 'DLFL', 'CANC') THEN TO_TIMESTAMP(TO_VARCHAR(status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(status_time), 6, '0'), 'YYYYMMDDHH24MISS') END) AS cancelled_time
FROM status_history
GROUP BY production_order
),
material_shortages AS (
SELECT
o.production_order,
MIN(TO_TIMESTAMP(TO_VARCHAR(j.status_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(j.status_time), 6, '0'), 'YYYYMMDDHH24MISS')) AS shortage_time
FROM status_history j
INNER JOIN orders o
ON o.production_order = j.production_order
WHERE j.stat IN ('I0042', 'MANC', 'MSHT')
GROUP BY o.production_order
),
capacity_times AS (
SELECT
production_order,
MIN(COALESCE(released_time, created_status_time)) AS capacity_time
FROM status_times
GROUP BY production_order
),
base_attributes AS (
SELECT
o.production_order,
o.material_number,
o.plant,
COALESCE(op.work_center, '') AS work_center,
o.planned_end_date,
COALESCE(st.stat, '') AS current_status
FROM orders o
LEFT JOIN status_history st
ON st.production_order = o.production_order
AND st.inact = ''
LEFT JOIN operations op
ON op.production_order = o.production_order
AND op.vornr = (SELECT MIN(op2.vornr) FROM operations op2 WHERE op2.production_order = o.production_order)
),
events AS (
SELECT o.production_order, 'Production Order Created' AS activity, COALESCE(st.created_status_time, TO_TIMESTAMP(TO_VARCHAR(o.order_created_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(o.order_created_time), 6, '0'), 'YYYYMMDDHH24MISS')) AS start_time FROM orders o LEFT JOIN status_times st ON st.production_order = o.production_order
UNION ALL
SELECT production_order, 'Material Availability Checked', material_available_time FROM status_times WHERE material_available_time IS NOT NULL
UNION ALL
SELECT production_order, 'Capacity Requirements Planned', capacity_time FROM capacity_times WHERE capacity_time IS NOT NULL
UNION ALL
SELECT production_order, 'Production Order Released', released_time FROM status_times WHERE released_time IS NOT NULL
UNION ALL
SELECT o.production_order, 'Production Started', LEAST(COALESCE(fc.start_time, TO_TIMESTAMP('99991231235959', 'YYYYMMDDHH24MISS')), COALESCE(fg.start_time, TO_TIMESTAMP('99991231235959', 'YYYYMMDDHH24MISS'))) FROM orders o LEFT JOIN first_confirmation fc ON fc.production_order = o.production_order LEFT JOIN first_goods_issue fg ON fg.production_order = o.production_order WHERE fc.start_time IS NOT NULL OR fg.start_time IS NOT NULL
UNION ALL
SELECT production_order, 'Production Confirmation Entered', TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS') FROM confirmations
UNION ALL
SELECT production_order, 'Material Shortage Occurred', shortage_time FROM material_shortages WHERE shortage_time IS NOT NULL
UNION ALL
SELECT production_order, 'Production Plan Adjusted', adjustment_time FROM plan_changes WHERE adjustment_time IS NOT NULL
UNION ALL
SELECT c.production_order, 'Unplanned Halt Occurred', ADD_SECONDS(c.confirmation_time, 1) FROM (SELECT production_order, TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS') AS confirmation_time, LEAD(TO_TIMESTAMP(TO_VARCHAR(entry_date, 'YYYYMMDD') || LPAD(TO_VARCHAR(entry_time), 6, '0'), 'YYYYMMDDHH24MISS')) OVER (PARTITION BY production_order ORDER BY entry_date, entry_time, rmzhl) AS next_confirmation_time FROM confirmations) c WHERE c.next_confirmation_time IS NOT NULL AND SECONDS_BETWEEN(c.confirmation_time, c.next_confirmation_time) >= 86400
UNION ALL
SELECT production_order, 'Final Confirmation Entered', final_time FROM last_confirmation WHERE final_time IS NOT NULL
UNION ALL
SELECT production_order, 'Goods Receipt Posted', receipt_time FROM first_receipt WHERE receipt_time IS NOT NULL
UNION ALL
SELECT production_order, 'Order Technically Completed', technically_completed_time FROM status_times WHERE technically_completed_time IS NOT NULL
UNION ALL
SELECT production_order, 'Order Financially Closed', financially_closed_time FROM status_times WHERE financially_closed_time IS NOT NULL
UNION ALL
SELECT production_order, 'Production Order Cancelled', cancelled_time FROM status_times WHERE cancelled_time IS NOT NULL
)
SELECT
e.production_order AS "ProductionOrder",
e.activity AS "Activity",
e.start_time AS "StartTime",
p.source_system AS "SourceSystem",
p.last_data_update AS "LastDataUpdate",
b.material_number AS "MaterialNumber",
b.plant AS "Plant",
NULLIF(b.work_center, '') AS "WorkCenter",
b.planned_end_date AS "PlannedEndDate",
b.current_status AS "OrderStatus"
FROM events e
INNER JOIN base_attributes b
ON b.production_order = e.production_order
CROSS JOIN params p
WHERE e.start_time IS NOT NULL
ORDER BY e.production_order, e.start_time, e.activity; 始める準備はできていますか?
生産計画の効率を高めるための第一歩を踏み出しましょう。このテンプレートを使ってデータを準備し、最適化に役立つインサイトを見つけてください。
今日から生産計画の最適化を始めましょう
ボトルネックを特定して解消し、生産サイクル時間を30%短縮します。
クレジットカード不要