Production Planningのデータテンプレート
Production Planningのデータテンプレート
- 生産計画の分析に推奨される属性
- 追跡すべき主要な生産計画アクティビティ
- 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テーブル(項目ARBPL)に格納されています。 例 WC-ASSEMBLY-01WC-MILLING-05WC-PACKING | |||
| 製造指図ステータス OrderStatus | 作成済み、リリース済み、技術的完了など、製造指図の現在の処理ステータスです。 | ||
| 説明 製造指図ステータスは、ライフサイクルにおける製造指図の全体的な段階を示します。製造指図に適用されたさまざまなシステムステータスとユーザーステータスをまとめたものです。一般的なステータスには、CRTD(作成済み)、REL(リリース済み)、CNF(確認済み)、TECO(技術的完了)、CLSD(クローズ済み)があります。 製造指図の現在のステータスを分析すると、仕掛かり状況を把握できます。プロセスマイニングでは、これらのステータス間の遷移を時系列で追跡することでアクティビティログが生成され、プロセスフローと各段階の滞留時間を詳しく確認できます。 重要な理由 製造指図のライフサイクル上の段階を俯瞰でき、プロセスマイニングでアクティビティの順序を導出するための基本情報です。 入手先 JESTテーブルに格納されたシステムステータスから取得し、AFKOのオブジェクト番号(項目OBJNR)を介して関連付けます。 例 CRTDRELTECOCLSD | |||
| 計画終了日 PlannedEndDate | 初期計画に基づく製造指図の予定完了日です。 | ||
| 説明 計画終了日は、製造指図に関するすべての生産活動を完了する目標日です。生産計画のスケジューリング段階で決定されます。 この属性は、スケジュール遵守率を測定するために欠かせません。計画終了日と実際の完了タイムスタンプを比較することで、生産スケジュール遵守率KPIを算出し、遅延している製造指図を特定できます。計画精度と顧客満足度を高めるうえで重要な分析です。 重要な理由 スケジュール遵守率を測定する基準となり、計画の精度と実行の効率を評価できます。 入手先 製造指図ヘッダーテーブルAFKO(項目GLTRP)に格納されています。 例 2023-11-152023-12-012024-01-20 | |||
| 資材番号 MaterialNumber | 製造指図で生産する製品を一意に識別する番号です。 | ||
| 説明 資材番号は、製造指図の生産対象となる品目を示します。部品表(BOM)や作業手順など、資材のマスターデータと生産プロセスを結び付けます。 資材番号単位でプロセスを分析すると、特定の製品で遅延、手戻り、資材不足が発生しやすいかを確認できます。これにより、計画パラメーターの調整や特定部品のサプライチェーン改善など、製品ごとのプロセス改善が可能になります。 重要な理由 生産対象の製品でフィルタリングや分析を行い、製品固有の非効率やボトルネックを明らかにできます。 入手先 製造指図明細テーブルAFPO(項目MATNR)に格納されています。 例 RM-1001FG-2050SA-3100-B | |||
| ユーザー User | 製造指図に関するイベントを作成、変更、または確認したユーザーのシステムIDです。 | ||
| 説明 この属性には、製造指図のリリースや確認入力など、特定のトランザクションまたはステータス変更に関連するSAPユーザーIDが記録されます。システム内で実行された操作を追跡できます。 ユーザー単位でアクティビティを分析すると、業務負荷の分布を把握し、トレーニングの必要性を特定し、手順のコンプライアンスを確認できます。たとえば、特定のユーザーが計画調整に頻繁に関与しているか、特定のチームに遅延が関連しているかを明らかにできます。 重要な理由 操作の責任を明確にし、業務負荷、ユーザーごとの行動、トレーニング機会を分析できます。 入手先 通常、変更文書ヘッダー(CDHDR、項目UNAME)または確認レコード(AFRU、従業員番号の項目PERNR)に格納されています。 例 CB9980000021JSMITHPLANNER01 | |||
| 手直しあり IsRework | 製造指図に手直しまたは開始後の大幅な計画調整があったかどうかを示すフラグです。 | ||
| 説明 このブール型属性は、生産開始後に是正措置や計画変更が行われた製造指図を特定するために導出されます。明示的な手直しアクティビティ、または「生産開始」後に発生した「生産計画調整」イベントがトリガーになる場合があります。 このフラグは、生産手直し率KPIの算出や「生産手直しと修正」ダッシュボードに欠かせません。問題のあるケースを簡単に絞り込み、品質問題やプロセス逸脱の根本原因、コストの高い手直しにつながる要因を分析できます。 重要な理由 手直しが発生したケースを分離し、品質問題、プロセス逸脱、それに伴うコストを把握して削減するための分析に役立ちます。 入手先 計算項目です。同じケース内で「生産計画調整」アクティビティが「生産開始」アクティビティの後に発生した場合、または特定の手直し製造指図タイプが使われた場合にtrueに設定されます。 例 truefalse | |||
| 生産優先度 ProductionPriority | 製造指図の緊急度または重要度を示すために割り当てられるコードまたは値です。 | ||
| 説明 生産優先度は、特にリソースが限られている場合に、計画担当者やスケジューラーが製造指図の順序付けと優先順位付けを行うために使います。理想的には、優先度の高い製造指図を低いものより先に処理します。 この属性を分析すると、現場で割り当てられた優先度どおりに処理されているかを評価できます。「生産優先順位の一貫性」ダッシュボードでは、処理順序と割り当てられた優先度を比較し、一貫性のない処理を特定します。これにより、スケジューリングの規律を高め、計画と実行の整合性を改善できます。 重要な理由 生産スケジューリングが業務上の優先順位に沿っているかを確認し、重要な製造指図が意図どおりに優先処理されているかを把握できます。 入手先 多くの場合、カスタム項目または他の製造指図パラメーターに基づく値です。具体的な格納場所は設定によって異なります。 例 高中低15 | |||
| 確認済み数量 TotalConfirmedQuantity | 製造指図について、生産済みとして確認された資材の合計数量です。 | ||
| 説明 この属性は、生産確認を通じて報告された完成品または半製品の累計数量を表します。製造指図が完了目標に向けてどこまで進んでいるかを追跡できます。 確認済み数量と計画数量を比較することで、生産の進捗を監視し、歩留まりの問題や差異を特定できます。生産量を測る基本的な指標であり、廃棄率や効率など、さまざまなパフォーマンス計算に使われます。 重要な理由 製造指図の実際の生産量を追跡し、進捗の監視、歩留まりの計算、差異の特定に役立ちます。 入手先 AFRUの確認レコード(歩留まり数量の項目LMNGA)から集計されます。 例 9801000501200 | |||
| 納期遵守 IsOnTime | 製造指図が計画終了日以前に完了したかどうかを示すフラグです。 | ||
| 説明 この計算済みブール型属性は、実際の完了日と計画終了日を比較して、スケジュール遵守率を直接測定します。各製造指図の納期遵守状況を明確に二値で示します。 この属性は、生産スケジュール遵守率KPIの基礎となります。納期どおりの製造指図と遅延した製造指図を簡単に分けて分析でき、遅延に関連する共通の特徴やプロセス経路を特定できます。 重要な理由 各製造指図のスケジュール遵守率を明確かつ簡単に測定し、遅延の根本原因を分析できます。 入手先 計算項目です。「製造指図を技術的に完了」アクティビティのタイムスタンプが「計画終了日」属性以下の場合にtrueに設定されます。 例 truefalse | |||
| 終了時刻 EndTime | 特定のアクティビティまたはイベントが完了した時点を示すタイムスタンプです。 | ||
| 説明 この属性には、記録されたすべてのイベントの完了日時が含まれます。開始時刻と組み合わせることで、アクティビティの所要時間を定義できます。 終了時刻は、個々のアクティビティの正確な処理時間を計算するために欠かせません。これは、能力とリソースの利用効率を分析するための重要な入力情報です。実作業時間とアイドル時間や待機時間を区別できるため、ボトルネックをより正確に特定できます。 重要な理由 アクティビティの正確な所要時間を計算できるため、リソース効率の分析とプロセスのボトルネック特定に役立ちます。 入手先 実行ステップについては確認テーブル(AFRU)に格納されています。その他のイベントでは、瞬時に完了するイベントの場合、開始時刻と同じ値になることがあります。 例 2023-10-26T09:45:00Z2023-10-26T15:00:00Z2023-10-27T10:30:00Z | |||
| 製造指図タイプ 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テーブルの実績確認データから推定します。最後の作業順序(AFVC-VPLNR)に対応し、「最終実績確認」フラグ(AFRUD-AUERU)が設定された実績確認レコードを特定します。 取得 AFRUで、最終実績確認フラグが設定された最後の作業実績確認を特定します。 イベントタイプ inferred | |||
| 指図を技術的に完了 | 出庫や実績確認など、指図に対する追加の物流変更を防ぐ管理上の締め処理です。物流の観点では、指図が完了した状態になります。 | ||
| 重要な理由 TECOは生産プロセスの確定した終点であり、生産指図の総サイクルタイムを計算するうえで重要です。すべての物流活動が完了し、指図が財務精算に進められる状態であることを示します。 入手先 ユーザーがステータスをTECO(Technically Completed)に設定すると実行されます。イベントは、対応するタイムスタンプとともにJCDSテーブルのステータス変更として記録されます。 取得 JCDSテーブルで「TECO」へステータスが変更された時点のタイムスタンプ。 イベントタイプ inferred | |||
| 生産を開始 | 指図に対する実際の生産作業が始まったことを示します。通常は、製造現場での最初の実績確認、または指図に対する構成品の最初の出庫から推定します。 | ||
| 重要な理由 計画から実行への移行を示すアクティビティです。実際の開始日と予定開始日を比較することで、スケジュール遵守を追跡できます。 入手先 推定イベントです。通常は、指図に関連する出庫記録(MSEGテーブル、移動タイプ261)または時間実績確認記録(AFRUテーブル)の最も早いタイムスタンプから導出します。 取得 指図に関するAFRU(実績確認)またはMSEG(在庫移動)の最も早いタイムスタンプ。 イベントタイプ inferred | |||
| 生産指図をリリース | 生産指図が承認され、製造現場で実行できる状態になったことを示す重要なマイルストーンです。リリース後は、出庫、実績確認などの実行ステップを開始できます。 | ||
| 重要な理由 実行可能な生産プロセスの正式な開始を示すイベントであり、リードタイムを測定する重要な時点です。作成からリリースまでの時間は、生産前の効率を測る重要なKPIです。 入手先 ユーザーまたはシステムジョブによってリリースが明示的に実行され、ステータスがRELになります。このステータス変更は、タイムスタンプとともにJCDSテーブルに記録されます。リリース日はAFKO-FTRMIに保存されることもあります。 取得 JCDSテーブルで「REL」へステータスが変更された時点のタイムスタンプ。 イベントタイプ inferred | |||
| 生産指図を作成 | システムで生産指図を最初に作成するイベントです。指定した数量の製品を生産する正式な依頼として機能します。ユーザーが新しい指図を保存すると明示的に記録され、初期ステータスはCRTD(Created)になります。 | ||
| 重要な理由 生産指図のライフサイクルの開始を示します。作成からリリースまでの時間を分析すると、生産が正式に計画される前の事務処理や計画上の遅延を特定できます。 入手先 このイベントは、作成日(ERDAT)とともにAUFKテーブル(指図マスタデータ)に記録されます。作成ステータス(CRTD)は、指図のオブジェクト番号(OBJNR)を介して関連付けられたJESTテーブルとJCDSテーブルに記録されます。 取得 AUFK-ERDATのタイムスタンプ、またはJCDSにおける「CRTD」へのステータス変更ログのタイムスタンプ。 イベントタイプ explicit | |||
| 生産計画を調整 | リリース後の生産指図に対して行われた重要な変更を示します。数量、日付、部品表の変更などが該当します。変更文書を分析して記録します。 | ||
| 重要な理由 変更が頻繁に行われる場合、計画の不安定さや需要の変動が示唆されます。このアクティビティは、生産計画変更率KPIの基礎となり、プロセスの変動要因の特定に役立ちます。 入手先 生産指図オブジェクト(AUFKまたはAFPO)について、CDHDR(変更文書ヘッダー)テーブルとCDPOS(変更文書明細)テーブルに記録された変更ログから推定します。リリース日以降に行われた変更を調整として扱います。 取得 リリースイベント後に、CDHDR/CDPOSで主要項目(数量、日付など)の変更を特定します。 イベントタイプ inferred | |||
| 指図を財務的に完了 | 指図を精算し、それ以降の財務転記をできなくする最終締め処理です。管理会計と財務会計の観点から、指図のライフサイクルが終了したことを示します。 | ||
| 重要な理由 純粋な生産分析の範囲外となることもありますが、エンドツーエンドの全体像を把握できます。物流上の完了(TECO)から財務上の締めまでの時間の分析にも役立ちます。 入手先 ユーザーがステータスをCLSD(Closed)に設定すると実行されます。イベントは、対応するタイムスタンプとともにJCDSテーブルのステータス変更として記録されます。 取得 JCDSテーブルで「CLSD」へステータスが変更された時点のタイムスタンプ。 イベントタイプ inferred | |||
| 生産実績を入力 | 生産指図内の特定の作業について、進捗を記録することを示します。作業区で生産した数量、不良数量、作業時間などを記録します。 | ||
| 重要な理由 実績確認によって製造現場の進捗をリアルタイムで把握でき、生産状況の追跡に欠かせません。実績確認の頻度とタイミングを分析すると、フローを監視し、作業間の遅延を特定できます。 入手先 各実績確認は、タイムスタンプ(BUDAT、UZEIT)と作業の詳細を含むレコードとして、AFRU(指図完了確認)テーブルに明示的に記録されます。 取得 AFRUテーブルの伝票として記録されます。 イベントタイプ explicit | |||
| 生産指図をキャンセル | 完了前に生産指図をキャンセルすることを示します。プロセスが正常に完了しなかった場合の終了状態です。 | ||
| 重要な理由 キャンセルされた指図を分析すると、需要計画、マスターデータ、販売プロセスの問題を明らかにできます。キャンセル率が高い場合、対応が必要な構造的な問題が示されている可能性があります。 入手先 JCDSテーブルでシステムステータスCACL(Cancellation)が設定されたことから推定します。別の方法として、削除フラグ(AUFK-LOEKZ)からキャンセルを判断することもできます。 取得 JCDSで「CACL」へステータスが変更された時点のタイムスタンプ、またはAUFKで削除フラグが設定された時点。 イベントタイプ inferred | |||
| 能力所要量を計画 | 生産指図の作業をスケジュールし、必要な作業区で能力が利用可能かを確認するアクティビティです。システムは作業区の能力負荷を評価し、設定に応じて平準化したうえで、生産日を決定します。 | ||
| 重要な理由 実行可能な生産スケジュールを確保するうえで重要なステップです。所要時間と結果を分析することで、能力のボトルネックを特定し、リソース計画の精度を高められます。 入手先 通常は、指図がスケジュール済みであることを示すシステムステータス(SETC(Scheduling carried out)など)から推定します。予定開始日と予定終了日(AUFK-GSTRP、AUFK-GLTRP)が入力されていることも、このアクティビティの完了を示します。 取得 AUFK/AFKOへの予定日の入力、またはJESTのスケジュール関連ステータスから推定します。 イベントタイプ inferred | |||
| 計画外の停止が発生 | 生産実行中に発生した大きな待機時間を表す計算イベントです。システム上の明示的なイベントではなく、連続する生産実績確認の間に長い時間差があることから導出します。 | ||
| 重要な理由 機械故障や品質問題など、計画外の中断を監視できます。停止が頻繁に発生する場合や長時間に及ぶ場合の特定は、製造現場の安定性とスループットの改善に重要です。 入手先 AFRUテーブルにある連続する「生産実績を入力」アクティビティのタイムスタンプを分析して計算します。あらかじめ定めたしきい値を超える時間差を、計画外の停止として記録します。 取得 連続する実績確認のタイムスタンプ(AFRU-BUDAT/UZEIT)の時間差を計算します。 イベントタイプ calculated | |||
| 資材の可用性を確認 | 生産指図に必要なすべての構成品が、必要な数量と納期で利用可能かどうかをシステムまたはユーザーが確認する操作を示します。通常は、指図の作成時またはリリース時に自動で確認されるか、手動で確認され、その結果が指図ステータスに反映されます。 | ||
| 重要な理由 資材不足を早期に特定することは、先回りした計画に欠かせません。このアクティビティを追跡すると、資材の可用性が指図のリリースや予定どおりの生産開始に与える影響を把握できます。 入手先 指図ステータスから推定します。MACM(Material committed)のようなステータスや、資材可用日(AFKO-MSERF)の変更は、確認が実施されたことを示します。資材不足ステータス(MSPT)がないことから、資材が利用可能だと判断することもできます。 取得 資材コミットメントに関するステータス変更、またはトランザクションCOMACの実行から推定します。 イベントタイプ inferred | |||
| 資材不足が発生 | 必要な構成品の1つ以上が利用できないため、生産プロセスに影響が生じた、または停止したことを示します。システムは、これを反映する特定のステータスを指図に設定します。 | ||
| 重要な理由 資材不足の追跡は、資材不足影響分析に欠かせません。サプライチェーン上の問題による遅延を定量化し、資材計画を改善できます。 入手先 生産指図で「MSPT」(Material shortage)ステータスが有効になったことから推定します。このステータス変更のタイムスタンプは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、アクティビティ、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ビューと基盤テーブルに対する表示権限が必要です。権限が不足している場合、結果が空になるか、不完全な結果が返されます。
a サンプルクエリ sql
WITH BaseOrders AS (
SELECT
ProductionOrder,
Material AS MaterialNumber,
ProductionPlant AS Plant,
CreationDate,
CreationTime,
BasicEndDate AS PlannedEndDate,
TechnicalCompletionDate,
LastChangeDateTime
FROM I_ProductionOrder
-- P_CreationDateFrom and P_CreationDateTo are placeholders for your date range
WHERE CreationDate BETWEEN '[_StartDate]' AND '[_EndDate]'
-- Add other filters as needed, for example:
-- AND ProductionPlant IN ('[Your_Plant_1]', '[Your_Plant_2]')
-- AND ProductionOrderType = '[Your_Order_Type]'
)
SELECT
bo.ProductionOrder,
'Production Order Created' AS Activity,
TO_TIMESTAMP(bo.CreationDate || ' ' || LPAD(bo.CreationTime, 6, '0'), 'YYYYMMDD HH24MISS') AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
'CRTD' AS OrderStatus
FROM BaseOrders bo
UNION ALL
-- System status changes like Released, Technically Completed, Closed, Cancelled, Material Shortage
SELECT
os.ObjectInternalID AS ProductionOrder,
CASE os.SystemStatus
WHEN 'I0002' THEN 'Production Order Released'
WHEN 'I0043' THEN 'Material Availability Checked' -- Status: MACM (Material committed)
WHEN 'I0045' THEN 'Order Technically Completed'
WHEN 'I0046' THEN 'Order Financially Closed'
WHEN 'I0047' THEN 'Production Order Cancelled'
WHEN 'I0010' THEN 'Material Shortage Occurred' -- Status: MSPT (Material shortage)
END AS Activity,
os.StatusChangeDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
os.SystemStatus AS OrderStatus
FROM I_ObjectStatus AS os
JOIN BaseOrders AS bo ON os.ObjectInternalID = bo.ProductionOrder
WHERE os.SystemStatus IN ('I0002', 'I0043', 'I0045', 'I0046', 'I0047', 'I0010') AND os.StatusIsInactive = ''
UNION ALL
-- Production Started, inferred from the first goods issue or first confirmation
SELECT
s.ProductionOrder,
'Production Started' AS Activity,
s.StartEventTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
s.MaterialNumber,
s.Plant,
NULL AS WorkCenter,
s.PlannedEndDate,
NULL AS OrderStatus
FROM (
SELECT
bo.ProductionOrder,
bo.MaterialNumber,
bo.Plant,
bo.PlannedEndDate,
MIN(COALESCE(gm.PostingTime, cf.ConfirmationDateTime)) AS StartEventTime,
ROW_NUMBER() OVER(PARTITION BY bo.ProductionOrder ORDER BY MIN(COALESCE(gm.PostingTime, cf.ConfirmationDateTime))) as rn
FROM BaseOrders bo
LEFT JOIN I_MaterialDocumentItem gm ON bo.ProductionOrder = gm.ProductionOrder AND gm.GoodsMovementType IN ('261', '262') -- Goods Issue
LEFT JOIN I_ProdOrdConfirmation cf ON bo.ProductionOrder = cf.ProductionOrder
WHERE gm.ProductionOrder IS NOT NULL OR cf.ProductionOrder IS NOT NULL
GROUP BY bo.ProductionOrder, bo.MaterialNumber, bo.Plant, bo.PlannedEndDate
) s
WHERE s.rn = 1
UNION ALL
-- Production Confirmation Entered (for each confirmation)
SELECT
cf.ProductionOrder,
'Production Confirmation Entered' AS Activity,
cf.ConfirmationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
cf.WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
UNION ALL
-- Final Confirmation Entered
SELECT
cf.ProductionOrder,
'Final Confirmation Entered' AS Activity,
cf.ConfirmationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
cf.WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
WHERE cf.IsFinalConfirmation = 'X'
UNION ALL
-- Unplanned Halt Occurred (derived from gaps between confirmations)
SELECT
ProductionOrder,
'Unplanned Halt Occurred' AS Activity,
PreviousConfirmationTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
MaterialNumber,
Plant,
WorkCenter,
PlannedEndDate,
NULL AS OrderStatus
FROM (
SELECT
cf.ProductionOrder,
bo.MaterialNumber,
bo.Plant,
bo.PlannedEndDate,
cf.WorkCenter,
cf.ConfirmationDateTime,
LAG(cf.ConfirmationDateTime, 1) OVER (PARTITION BY cf.ProductionOrder ORDER BY cf.ConfirmationDateTime) AS PreviousConfirmationTime,
(SECONDS_BETWEEN(LAG(cf.ConfirmationDateTime, 1) OVER (PARTITION BY cf.ProductionOrder ORDER BY cf.ConfirmationDateTime), cf.ConfirmationDateTime) / 3600.0) as HoursDiff
FROM I_ProdOrdConfirmation cf
JOIN BaseOrders bo ON cf.ProductionOrder = bo.ProductionOrder
) AS gaps
WHERE gaps.HoursDiff > 24 -- Configurable threshold in hours, e.g. 24 hours
UNION ALL
-- Goods Receipt Posted
SELECT
gm.ProductionOrder,
'Goods Receipt Posted' AS Activity,
gm.PostingTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
NULL AS OrderStatus
FROM I_MaterialDocumentItem gm
JOIN BaseOrders bo ON gm.ProductionOrder = bo.ProductionOrder
WHERE gm.GoodsMovementType = '101'
UNION ALL
-- Capacity Requirements Planned (using Release event as a proxy)
SELECT
os.ObjectInternalID AS ProductionOrder,
'Capacity Requirements Planned' AS Activity,
os.StatusChangeDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL AS WorkCenter,
bo.PlannedEndDate,
os.SystemStatus AS OrderStatus
FROM I_ObjectStatus AS os
JOIN BaseOrders AS bo ON os.ObjectInternalID = bo.ProductionOrder
WHERE os.SystemStatus = 'I0002' AND os.StatusIsInactive = '' -- Status 'REL' (Released)
UNION ALL
-- Production Plan Adjusted
SELECT
ch.ObjectValue AS ProductionOrder,
'Production Plan Adjusted' AS Activity,
ch.CreationDateTime AS StartTime,
'[_SourceSystemName]' AS SourceSystem,
CURRENT_UTCTIMESTAMP AS LastDataUpdate,
bo.MaterialNumber,
bo.Plant,
NULL as WorkCenter,
bo.PlannedEndDate,
NULL as OrderStatus
FROM I_ChangeDocument AS ch
JOIN BaseOrders bo ON ch.ObjectValue = bo.ProductionOrder
WHERE ch.ChangeDocumentObject = 'PRODORDER'
-- Monitoring changes in key fields like Total Quantity (GAMNG) or Basic Finish Date (GLTRP)
AND ch.FieldName IN ('GAMNG', 'GLTRP')
GROUP BY ch.ObjectValue, ch.CreationDateTime, bo.MaterialNumber, bo.Plant, bo.PlannedEndDate ステップ
- 生産指図データを含む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が一貫した1つのタイムゾーンを使用し、無効なSAP日付や初期値の日付が除外されるようにします。
- 結果をProcessMindがサポートするフラットファイルとしてエクスポートします。CSVまたはUTF-8区切りテキストを推奨します。出力列名ProductionOrder、Activity、StartTime、SourceSystem、LastDataUpdate、MaterialNumber、Plant、WorkCenter、PlannedEndDate、OrderStatusは正確に維持します。
- エクスポートした行をProductionOrder、StartTimeの順に並べ替えます。同一タイムスタンプの行について、アップロード処理が対応している場合は、決定的な第2ソート条件を設定します。別々のソースレコードを表す場合は、同じ確認やステータス変更が繰り返されていても、イベントごとに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の一致するレコードを計画調整の根拠として扱います。
- タイムスタンプ処理:すべてのソースタイムスタンプを1つのタイムゾーンに統一します。日付と時刻が別々に保存されているか、タイムスタンプが現地時刻かUTCか、初期日付がどのように表現されるかを確認してください。
- パフォーマンス:製造指図の作成日など、インデックスが設定された日付で抽出を制限し、クライアントで絞り込み、必要な列だけを選択して、適切なレポート時間帯に実行します。大規模なデータセットでは、月単位または製造指図の範囲単位で抽出し、結果を段階的に保存してください。
- データベースオブジェクト:選択したスキーマでAUFK、AFPO、JEST、JCDS、AFKO、AFVC、AFRU、RESB、MSEG、CDHDR、CDPOSが利用可能で、読み取り可能であることを確認します。リリースによってビューや項目が異なる場合は、対応するリリース済みまたは承認済みのオブジェクトに置き換えてください。
- 権限:選択したSAP HANAスキーマとオブジェクトへの読み取り権限、およびSQL実行権限が必要です。ガバナンスの手順によっては、SAPアプリケーションの権限も必要になる場合があります。
- 機能範囲:選択期間の生産計画・実行データ、在庫移動データ、ステータス履歴、変更文書を保持しておく必要があります。アーカイブまたは削除されたレコードは返されません。
- ProcessMindのマッピング:
ProductionOrderをケース識別子、Activityをアクティビティ、StartTimeをイベントタイムスタンプとして設定します。属性から不足しているアクティビティがProcessMindによって導出されることは想定しないでください。
a サンプルクエリ 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%短縮します。
クレジットカードは不要です