次の方法で共有


製造における MRP 再生成プロセスは、Microsoft Dynamics GP で応答を停止するか、ロックアップするか、完全に処理されません

この記事では、製造で品目要件計画 (MRP) 再生成プロセスを実行するときに問題を解決する方法について説明します。

適用対象: Microsoft Dynamics GP
元の KB 番号: 942508

症状

Microsoft Dynamics GP 9.0 の製造で材料要件計画 (MRP) 再生成プロセスを使用すると、次のいずれかの現象が発生する可能性があります。

  • MRP 再生成プロセスが応答を停止します。
  • MRP 再生成プロセスが停止します。
  • MRP 再生成プロセスが完了していません。

原因

この問題は、以下のいずれかまたは複数の原因によって発生することがあります。

  • MRP のダウンデー制約が正しく設定されていません。

  • 低レベルのコードが正しく設定されていません。

  • 再帰的な部品表 (BOM) があります。

  • テーブル MSSP0230には複数のレコードがあります。

  • テーブル MSSP0230に正しくない会社 ID があります。

  • MRP セキュリティにはロックされたレコードがあります。

  • 受注、発注書、または製造オーダーがあり、必要な日付が許容される MRP 日付の範囲外です。

解決方法

注意

この記事の手順に従う前に、問題が発生した場合に復元できるデータベースの完全なバックアップ コピーがあることを確認してください。

解決策 1: MRP のダウンデー制約が正しく設定されていません

MRP 基本設定の既定値ウィンドウの Down Day Constraint フィールドでは、ショップカレンダーの休業日を使用して、コンポーネントのリードタイムを決定します。 MRP 再生成プロセスは、次の条件に該当する場合にロックアップします。

  • Noneオプションは、ショップカレンダーウィンドウの会社全体のダウン日数の設定で選択されています。
  • [MRP 基本設定の既定値] ウィンドウの Down Day Constraint フィールドの値が [なし] 以外に設定されています。

この問題を解決するには、使用している Microsoft Dynamics GP のバージョンに応じて、次の手順に従います。

Microsoft Dynamics GP 10.0

  1. Microsoft Dynamics GP 10.0 で、Microsoft Dynamics GP メニューの Tools をポイントし、Setup をポイントし、Manufacturing をポイントし、System Defaults をポイントして、Calendar を選択します。

  2. [ 会社全体のダウンデイ設定] で、次のいずれかのオプションが選択されていることを確認。 次のオプションは、 会社全体のダウンデイ設定の下にあります

    • なし
    • 日曜日のみ
    • 土曜日と日曜日
  3. [ Tools メニューで、 Setup をポイントし、 Manufacturing をポイントし、 System Defaults をポイントして、 MRP を選択します。

  4. ダウンデイ制約 ドロップダウンリストのオプションが ショップカレンダーの休業日 オプションと一致するかどうかを確認します。 次の一覧には、Down Day 制約 オプションと一致する Shop Calendar Down Days オプションが表示されます。

    • None オプション - このオプションには、NoneSaturdays and Sunday、または Sundays Only 設定を含めることができます。
    • Made オプション - このオプションには、Saturdays と Sunday または Sundays Only 設定を含めることができます。
    • Bought オプション - このオプションには、Saturdays と Sunday または Sundays Only 設定を含めることができます。
    • Both オプション - このオプションには、Saturdays と Sunday または Sundays Only 設定を含めることができます。

Microsoft Dynamics GP 9.0

  1. Microsoft Dynamics GP 9.0 で、Tools メニューの Setup をポイントし、Manufacturing をポイントし、System Defaults をポイントして、Calendar を選択します。

  2. [ 会社全体のダウンデイ設定] で、次のいずれかのオプションが選択されていることを確認。 [ 会社全体のダウンデイ設定] のオプションを次に示します

    • なし
    • 日曜日のみ
    • 土曜日と日曜日
  3. [ Tools メニューで、 Setup をポイントし、 Manufacturing をポイントし、 System Defaults をポイントして、 MRP を選択します。

  4. ダウンデイ制約 のドロップダウンリストのオプションが ショップカレンダーのダウンデイ オプションと一致するかどうかを確認します。 次の一覧には、Shop Calendar Down Days オプションがDown Day Constraints オプションに一致するものが示されています。

    • None オプション - このオプションには、NoneSaturdays and Sunday、または Sundays Only 設定を含めることができます。
    • Made オプション - このオプションには、Saturdays と Sunday または Sundays Only 設定を含めることができます。
    • Bought オプション - このオプションには、Saturdays と Sunday または Sundays Only 設定を含めることができます。
    • Both オプション - このオプションには、Saturdays と Sunday または Sundays Only 設定を含めることができます。

解決策 2: 低レベルのコードが正しく設定されていない

[項目エンジニアリング データ] ウィンドウには、コンポーネントごとに低レベルのコードが保持されます。 下位レベルのコードは、BOM 内のアイテムの最も深いレベルです。 MRP 低レベル コード ユーティリティを実行して、下位コードが正しいかどうかを判断する必要があります。 MRP 低レベル コード ユーティリティは、次のいずれかの方法で実行できます。

  • Microsoft Dynamics GP の場合
  • SQL Query Analyzer を使用するか、SQL Server Management Studio を使用して手動で実行する

Microsoft GP で低レベル コード ユーティリティを実行する方法

  1. 使用している Microsoft Dynamics GP のバージョンに応じて、次のいずれかの手順に従います。

    • Microsoft Dynamics GP 10.0 で、Microsoft Dynamics GP メニューの Tools をポイントし、ユーティリティをポイントし、製造をポイントして、MRP 低レベル コードを選択します。
      • Microsoft Dynamics GP 9.0 で、Tools メニューの Utilities をポイントし、Manufacturing をポイントし、MRP 低レベル コードを選択します。
  2. 任意の BOM の 最大レベル数 フィールドに「 110」と入力します。

  3. [Generate] \(生成) を選択します。

SQL Query Analyzer または SQL Server Management Studio で低レベル コード ユーティリティを実行する方法

SQL Query Analyzer または SQL Server Management Studio で、会社のデータベースに対して次のスクリプトを実行します。

execute mbomLLCUtility 110

解決策 3: 再帰 BOM

再帰 BOM は、それ自体のコンポーネントです。 コンポーネントとして直接割り当てることもできますし、BOM に割り当てられているサブアセンブリに割り当てることもできます。

再帰 BOM があるかどうかを確認する方法

  1. SQL Query Analyzer または SQL Server Management Studio で、会社のデータベースに対して次のステートメントを実行します。

    Select * from BM010115 where CPN_I=PPN_I
    
  2. 結果が返された場合は、BOM からコンポーネントを削除する必要があります。

    再帰 BOM を削除するには、SQL Query Analyzer または SQL Server Management Studio で会社のデータベースに対して次のステートメントを実行します。

    この記事の手順に従う前に、問題が発生した場合に復元できるデータベースの完全なバックアップ コピーがあることを確認してください。

    Delete BM010115 where PPN_I = CPN_I
    

BOM に割り当てられているサブアセンブリに BOM が割り当てられているかどうかを確認する方法

  1. 低レベル コード ユーティリティが実行されたことを確認します。

  2. SQL Query Analyzer または SQL Server Management Studio で、会社のデータベースに対して次のステートメントを実行します。

    Select * from IVR10015 where LLC=110
    

    レコードが返された場合、リストされている項目は親アイテムです。 ただし、BOM 構造のどこかに、コンポーネントと同じ部品番号が存在します。

  3. 対象のアイテムを含むサブアセンブリを削除します。

    1. [ カード メニューの Manufacturing をポイントし、 Bill of Materials を選択します。
    2. スクリプトから返される BOM 番号を Item Number フィールドに入力します。
    3. ツリー ビューで、各サブアセンブリを展開し、各サブアセンブリの下にあるコンポーネントを決定します。
    4. 対象のアイテムを含むサブアセンブリを削除します。

解決策 4: テーブル MPPS0230に複数のレコードが存在する

テーブル MPPS0230は MRP 基本設定の既定のテーブルです。 テーブル MPPS0230には 1 行のみを含める必要があります。

  1. SQL Query Analyzer または SQL Server Management Studio で、会社のデータベースに対して次のステートメントを実行します。

    Select * from MPPS0230
    
  2. このステートメントが複数の行を返す場合は、正しくない行を特定する必要があります。 次に、テーブルからこの行を削除する必要があります。

  3. 残りの行に正しい会社 ID があることを確認します。 これを行うには、「 Resolution 5 」セクションの手順に従います。

解決策 5: テーブル MPPS0230の会社 ID が正しくありません

  1. SQL Query Analyzer または SQL Server Management Studio の DYNAMICS データベースに対して次のスクリプトを実行して、データベースの正しい会社 ID を確認します。

    Select * from SY01500
    
  2. MRP で問題が発生した CMPANYIDCMPNYNAM フィールド f に対応するフィールドを見つけます。

  3. SQL Query Analyzer または SQL Server Management Studio で、会社のデータベースに対して次のステートメントを実行します。

    Select * from MPPS0230
    
  4. 手順 1 でテーブル SY01500から返された結果に基づいて、 CMPANYID フィールドが正しいことを確認します。

  5. テーブル MPPS0230で会社 ID が正しくない場合は、Query Analyzer または SQL Server Management Studio の会社データベースに対して次のスクリプトを実行します。

    /******************************************************************************/ 
    /* Description: */ 
    /* Updates any table that contains a company ID or database name value */ 
    /* with the appropriate values as they are stored in the DYNAMICS.dbo.SY01500 table */ 
    /* */ 
    /******************************************************************************/ 
    if not exists(select 1 from tempdb.dbo.sysobjects where name = '##updatedTables') 
    create table [##updatedTables] ([tableName] char(100)) 
    truncate table ##updatedTables 
    
    declare @cStatement varchar(255) 
    
    declare G_cursor CURSOR for 
    select 
    case 
    when UPPER(a.COLUMN_NAME) in ('COMPANYID','CMPANYID') 
    then 'update '+a.TABLE_NAME+' set '+a.COLUMN_NAME+' = '+ cast(b.CMPANYID as char(3)) 
    else 
    'update '+a.TABLE_NAME+' set '+a.COLUMN_NAME+' = '''+ db_name()+'''' 
    end 
    from INFORMATION_SCHEMA.COLUMNS a, DYNAMICS.dbo.SY01500 b, INFORMATION_SCHEMA.TABLES c 
    where UPPER(a.COLUMN_NAME) in ('COMPANYID','CMPANYID','INTERID','DB_NAME','DBNAME', 'COMPANYCODE_I') 
    and b.INTERID = db_name() and a.TABLE_NAME = c.TABLE_NAME and c.TABLE_CATALOG = db_name() and c.TABLE_TYPE = 'BASE TABLE' 
    
    set nocount on 
    OPEN G_cursor 
    FETCH NEXT FROM G_cursor INTO @cStatement 
    WHILE (@@FETCH_STATUS <> -1) 
    begin 
    insert ##updatedTables select 
    substring(@cStatement,8,patindex('%set%',@cStatement)-9) 
    Exec (@cStatement) 
    FETCH NEXT FROM G_cursor INTO @cStatement 
    end 
    DEALLOCATE G_cursor 
    
    select [tableName] as 'Tables that were Updated' from ##updatedTables 
    

解決策 6: MRP セキュリティでレコードがロックされている

ロックされたレコードにより、MRP 再生成プロセスを実行するときに MRP がフリーズする可能性があります。

  1. [ Transactions メニューの Manufacturing をポイントし、 MRP をポイントして、 Security を選択します。

    MRP を実行しているすべてのアクティブなセッションが表示されます。 MRP 再生成プロセスを現在実行していない場合は、このテーブルにレコードを含めることはできません。

  2. MRP 再生成プロセスを実行していない場合に、ここにレコード (またはレコード) がある場合は、この行を削除します。

  3. MRP 計画オーダーのセキュリティを確認します。 これを行うには、Transactions メニューの Manufacturing をポイントし、MRP をポイントして、Planned Order Security を選択します。 MRP 計画注文セキュリティには、他のプロセスによってロックされている計画注文が示されます。

  4. MRP 再生成プロセスを実行せず、ここにレコード (またはレコード) がある場合は、この行を削除します。

  5. 他の製造セキュリティ ウィンドウを確認して、MRP の再生成に必要なレコードがロックされていないかどうかを確認します。 次の一覧は、ロックされたレコードを検索できるさまざまな製造セキュリティウィンドウです。

    • [Transactions メニューで、製造を選択し、製造オーダーを選択し、Security を選択します。 ウィンドウに表示できるのは、現在アクティブな製造オーダーのみです。 アクティブな製造オーダーは、ユーザーが現在作業中で、製造ウィンドウで開かれている製造オーダーです。 現在アクティブではない製造オーダーがある場合は、削除します。
      • [ Transactions メニューの Manufacturing をポイントし、 Bill of Materials をポイントし、 Security を選択します。 ユーザーがBOMを操作している場合、BOMはロックされます。 さらに、BOM は製造ウィンドウで開かれるとロックされます。 現在アクティブではない BOM がある場合は、それらを削除します。
      • [ Transactions メニューの Manufacturing をポイントし、 Routings をポイントして、 Security を選択します。 ユーザーが作業している場合、ルーティングはロックされます。 さらに、ルーティングは、製造ウィンドウで開かれるとロックされます。 現在アクティブではないルーティングがある場合は、削除します。
      • Transactions メニューで Manufacturing にポイントし、WIP にポイントした後、TRX Security を選択します。 進行中の作業 (WIP) トランザクションは、ユーザーが操作しているときにロックされます。 さらに、WIP トランザクションは、製造ウィンドウで開かれるとロックされます。 現在アクティブではない WIP トランザクションがある場合は、削除します。

解決策 7: 古いレコードがある

テーブル DD040000は、Up_Days_Work テーブルです。 このテーブルは、MRP 再生成プロセスが完了するたびに再入力されます。 MRP は、有効な営業日を決定し、これらの日付をこのテーブルに格納します。 これは、MRP 需要が減少する必要がある日付範囲です。

このテーブルに表示される日数と、このテーブルに入力された最初の日付は、MRP 再生成プロセスの実行時間によって異なります。 再生成が 300 日以内に完了した場合、このテーブルには、MRP 再生成プロセスの開始日の約 600 日前と、MRP 再生成プロセスの開始日から 600 日後に設定されます。 MRP再生成プロセスの実行時間が300日を超えて延長されると、テーブルに含まれる稼働日の数が増加します。

MRP 再生成プロセスが計画指図を決定する場合、これらの指図の日付はテーブルDD040000で指定された日付内に収める必要があります。 MRP 再生成プロセスでこのテーブルに日付が見つからない場合は、計画オーダーを処理できません。 この動作により、ループが発生します。 一般に、テーブルDD040000に書き込まれる最も早いアップ日よりも前に必要なアップ日があります。

  1. MRP 再生成プロセスで日数を増やすと、テーブル DD040000に含まれる日数も増やされます。 MRP 再生成プロセスの日数を増やすには、次の手順に従います。

    1. [ Transactions メニューで、 製造をポイントし、 MRP をポイントして、 Regeneration を選択します。
    2. Run for フィールドで、日数、週数、または MRP 再生成プロセスが生成される月数を 2 倍にし、Process を選択します。
  2. MRP 再生成プロセスに含まれる期限を過ぎた注文の数を減らします。 過去の日数を減らすと、MRP 再生成プロセスから他のトランザクションも削除されます。 これを行うには、使用している Microsoft Dynamics GP のバージョンに応じて、いずれかの手順に従います。

    • Microsoft Dynamics GP 10.0 で、Microsoft Dynamics GP メニューの Tools をポイントし、Setup をポイントし、Manufacturing をポイントし、System Defaults をポイントして、MRP を選択します。
      • Microsoft Dynamics GP 9.0 で、Tools メニューの Setup をポイントし、Manufacturing をポイントし、System Defaults をポイントして、MRP を選択します。
  3. 指定した過去の期限日数を含むフィールドで、MRP再生成プロセスによる検索対象の過去日数を減らします。

  4. MRP 再生成プロセスをもう一度実行します。

日数を増やしてもこの問題が引き続き発生する場合は、次の手順に従います。

  1. MPR 再生成プロセスの実行中にDexsql.log ファイルを作成して、MRP が失敗した日付を特定します。

  2. GP フォルダーまたは GP データ フォルダーを見つけて、Dexsql.log ファイルを開きます。

  3. 開いたDexsql.logファイルの下部を確認します。 無効な需要日が問題である場合は、過去のUPDAYS_I日付と共に次の行が繰り返し表示されます。 この日付は、問題を作成するために、少なくとも過去 1 年である必要があります。 次のスクリプトでは、"2005.02.11" が問題の原因となる日付です。

    SELECT TOP 25 UPDAYS_I,SEQ_I,DEX_ROW_ID FROM WAVE.dbo.DD040000 WHERE (UPDAYS_I < '2005.02.11') ORDER BY UPDAYS_I DESC
    
  4. 次のスクリプトは、開始日が特定の日付より前の製造オーダーを検索します。

    Select * from WO010032 where MANUFACTUREORDERST_I<>8 and STRTDATE<'yyyy-mm-dd' and STRTDATE<>'1900-01-01'
    

    Note

    yyyy-mm-dd は、Dexsql.log ファイルの正しくない日付のプレースホルダーです。

  5. 結果が返された場合は、 開始日 フィールドを、該当する品目の [製造オーダーエントリ] ウィンドウのより新しい日付に変更します。 [製造オーダエントリ]ウィンドウを開くには、[トランザクション]メニューの製造をポイントし製造オーダをポイントし、Entry を選択します。

  6. 次のスクリプトでは、特定の日付より前の必要な日付を持つ製造オーダー コンポーネントを検索します。

    Select * from PK010033 where REQDATE<'yyyy-mm-dd' and REQDATE<>'1900-01-01' and MANUFACTUREORDER_I IN (select MANUFACTUREORDER_I from WO010032 where MANUFACTUREORDERST_I<>8)
    

    注釈

    yyyy-mm-dd は、Dexsql.log ファイルの正しくない日付のプレースホルダーです。

  7. 結果が返された場合は、対象の品目の [選択リスト] ウィンドウで Required Date フィールドをより新しい日付に変更します。 製造 メニューの トランザクション をポイントし、製造オーダー をポイントして、候補リスト を選択します。

  8. Dex.ini ファイルで、次のステートメントを FALSE に戻します。

    • SQLLogSQLStmt=FALSE
    • SQLLogODBCMessages=FALSE