Microsoft Dynamics NAV のアイテムの [予約] フィールドで [常に] 値を設定した場合、アイテムに対して予期したとおりにアイテムが作成されたアイテム台帳エントリに対して予約されていません

適用先
Dynamics NAV 2009 Service Pack 1 Dynamics NAV 2009 Microsoft Dynamics NAV 5.0 Service Pack 1 Microsoft Dynamics NAV 5.0

この記事は、すべての国とすべての言語ロケールの Microsoft Dynamics NAV に適用されます。

現象

[予約] の値が [Microsoft Dynamics NAV でに] に設定されているアイテムがあるとします。 品目の製造オーダーを作成する場合、アイテムは、期待どおりに品目に対して作成された品目台帳エントリに対して予約されません。
注 この状況では、アイテムはアイテムに対して作成された発注書に対して予約されます。
この問題は、次の製品で発生します。

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
  • Microsoft Dynamics NAV 2009
  • Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1)
  • Microsoft Dynamics NAV 5.0

      

原因

この問題は、明細台帳エントリの予約数量が、明細行を自動的に予約したときに計算されないために発生します。

解決策

修正プログラムの情報

サポートされている修正プログラムが Microsoft から入手できるようになりました。 ただし、この記事で説明されている問題を修正することのみを目的としています。 この特定の問題が発生しているシステムにのみ適用します。 この修正プログラムは、追加のテストを受け取る場合があります。 したがって、この問題の影響を大きく受けない場合は、次の Microsoft Dynamics NAV Service Pack またはこの修正プログラムを含む次の Microsoft Dynamics NAV バージョンを待機することをお勧めします。

注 特別なケースでは、Microsoft Dynamics および関連製品のテクニカル サポート プロフェッショナルが特定の更新プログラムによって問題が解決されると判断した場合、通常はサポート呼び出しに対して発生する料金が取り消されることがあります。 ただし、特定の更新プログラムの対象とならない追加の質問および問題については、通常のサポート料金が適用されます。

            
          

インストール情報

Microsoft は、明示または黙示の保証なしで、説明のみを目的としてプログラミング例を提供しています。 これには、商品性または特定の目的への適合性に関する暗黙の保証が含まれますが、これらに限定されません。 この記事では、デモンストレーションされているプログラミング言語と、プロシージャの作成とデバッグに使用されるツールについてよく理解していることを前提としています。 マイクロソフト サポート窓口では、特定のプロシージャの機能説明に関するご質問に対して支援いたしますが、本例を特定の目的を満たすために機能を追加したり、プロシージャを構築することは行いません。

注 この修正プログラムをインストールする前に、すべての Microsoft Navision クライアント ユーザーがシステムからログオフされていることを確認します。 これには、Microsoft Navision Application Services (NAS) クライアント ユーザーが含まれます。 この修正プログラムを実装するときにログオンする唯一のクライアント ユーザーである必要があります。

この修正プログラムを実装するには、開発者ライセンスが必要です。

[Windows ログイン] ウィンドウまたは [データベース ログイン] ウィンドウのユーザー アカウントに "SUPER" ロール ID を割り当てることをお勧めします。 ユーザー アカウントに "SUPER" ロール ID を割り当てることができない場合は、ユーザー アカウントに次のアクセス許可があることを確認する必要があります。

  • 変更するオブジェクトの [変更] アクセス許可。
  • システム オブジェクト ID 5210 オブジェクトとシステム オブジェクト ID 9015 オブジェクトの Execute アクセス許可。

                
メモ データ修復を実行する必要がない限り、データ ストアに対する権限は必要ありません。

コードの変更

メモ 運用環境のコンピューターに修正プログラムを適用する前に、制御された環境でコード修正を常にテストします。
この問題を解決するには、次の手順を実行します。

  1. Reservation Management codeunit (99000845) の SetSalesLine 関数のコードを次のように変更します。
    既存のコード

    ...
    SetPointerFilter(CalcReservEntry2);
    
    // Delete the following lines.
    IF (CalcReservEntry."Location Code" <> '') AND
    Location.GET(CalcReservEntry."Location Code") AND
    (Location."Bin Mandatory" OR Location."Require Pick")
    THEN
    CalcReservedQtyOnPick(TotalAvailQty,QtyAllocInWhse);
    // End of the lines.
    
    END;
    
    PROCEDURE SetReqLine@13(NewReqLine@1000 : Record 246);
    ...
    

    置換コード

    ...
    SetPointerFilter(CalcReservEntry2);
    
    // Add the following line.
    CallCalcReservedQtyOnPick;
    
    END;
    
    PROCEDURE SetReqLine@13(NewReqLine@1000 : Record 246);
    ...
    
  2. Reservation Management codeunit (99000845) の SetReqLine 関数のコードを次のように変更します。
    既存のコード

    ...
    GetItemSetup(CalcReservEntry);
    SetPointerFilter(CalcReservEntry2);
    END;
    
    PROCEDURE SetPurchLine@2(NewPurchLine@1000 : Record 39);
    ...
    

    置換コード

    ...
    GetItemSetup(CalcReservEntry);
    
    SetPointerFilter(CalcReservEntry2);
    
    // Add the following line.
    CallCalcReservedQtyOnPick;
    
    END;
    
    PROCEDURE SetPurchLine@2(NewPurchLine@1000 : Record 39);
    ...
    
  3. Reservation Management codeunit (99000845) の SetPurchLine 関数のコードを次のように変更します。
    既存のコード

    ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForPurchLine."Outstanding Qty. (Base)") < 0);
    
    SetPointerFilter(CalcReservEntry2);
    END;
    
    PROCEDURE SetItemJnlLine@3(NewItemJnlLine@1000 : Record 83);
    ...
    

    置換コード

    ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForPurchLine."Outstanding Qty. (Base)") < 0);
    
    SetPointerFilter(CalcReservEntry2);
    
    // Add the following line.
    CallCalcReservedQtyOnPick;
    
    END;
    
    PROCEDURE SetItemJnlLine@3(NewItemJnlLine@1000 : Record 83);
    
  4. Reservation Management codeunit (99000845) の SetItemJnlLine 関数のコードを次のように変更します。
    既存のコード

    ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForItemJnlLine."Quantity (Base)") < 0);
    
    SetPointerFilter(CalcReservEntry2);
    END;
    
    PROCEDURE SetProdOrderLine@9(NewProdOrderLine@1000 : Record 5406);
    ...
    

    置換コード

    ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForItemJnlLine."Quantity (Base)") < 0);
    
    SetPointerFilter(CalcReservEntry2);
    
    // Add the following line.
    CallCalcReservedQtyOnPick;
    
    END;
    
    PROCEDURE SetProdOrderLine@9(NewProdOrderLine@1000 : Record 5406);
    ...
    
  5. Reservation Management codeunit (99000845) の SetProdOrderLine 関数のコードを次のように変更します。
    既存のコード

    ...
    Positive := ForProdOrderLine."Remaining Qty. (Base)" < 0;
    
    SetPointerFilter(CalcReservEntry2);
    END;
    
    PROCEDURE SetProdOrderComponent@11(NewProdOrderComp@1000 : Record 5407);
    ...
    

    置換コード

    ...
    Positive := ForProdOrderLine."Remaining Qty. (Base)" < 0;
    
    SetPointerFilter(CalcReservEntry2); 
    
    // Add the following line.
    CallCalcReservedQtyOnPick;
    
    END;
    
    PROCEDURE SetProdOrderComponent@11(NewProdOrderComp@1000 : Record 5407);
    
  6. Reservation Management codeunit (99000845) の SetProdOrderComponent 関数のコードを次のように変更します。
    既存のコード

    ...
    Positive := ForProdOrderComp."Remaining Qty. (Base)" > 0;
    
    SetPointerFilter(CalcReservEntry2);
    END;
    
    PROCEDURE SetPlanningComponent@12(NewPlanningComponent@1000 : Record 99000829);
    ...
    

    置換コード

    ...
    Positive := ForProdOrderComp."Remaining Qty. (Base)" > 0;
    
    SetPointerFilter(CalcReservEntry2); 
    
    // Add the following line.
    CallCalcReservedQtyOnPick;
    
    END;
    
    PROCEDURE SetPlanningComponent@12(NewPlanningComponent@1000 : Record 99000829);
    ...
    
  7. 予約管理 codeunit (99000845) の SetPlanningComponent 関数のコードを次のように変更します。
    既存のコード

    ...
    Positive := ForPlanningComponent."Net Quantity (Base)" > 0;
    
    SetPointerFilter(CalcReservEntry2);
    END;
    
    PROCEDURE SetItemLedgEntry@34(NewItemLedgEntry@1000 : Record 32);
    ...
    

    置換コード

    ...
    Positive := ForPlanningComponent."Net Quantity (Base)" > 0;
    
    SetPointerFilter(CalcReservEntry2);
    
    // Add the following line.
    CallCalcReservedQtyOnPick;
    
    END;
    
    PROCEDURE SetItemLedgEntry@34(NewItemLedgEntry@1000 : Record 32);
    ...
    
  8. Reservation Management codeunit (99000845) の SetItemLedgEntry 関数のコードを次のように変更します。
    既存のコード

    ...
    GetItemSetup(CalcReservEntry);
    
    SetPointerFilter(CalcReservEntry2);
    END;
    
    PROCEDURE SetTransferLine@47(NewTransLine@1000 : Record 5741;Direction@1001 : 'Outbound,Inbound');
    ...
    

    置換コード

    ...
    GetItemSetup(CalcReservEntry);
    
    SetPointerFilter(CalcReservEntry2); 
    
    // Add the following line.
    CallCalcReservedQtyOnPick;
    
    END;
    
    PROCEDURE SetTransferLine@47(NewTransLine@1000 : Record 5741;Direction@1001 : 'Outbound,Inbound');
    ...
    
  9. Reservation Management codeunit (99000845) の SetTransferLine 関数のコードを次のように変更します。
    既存のコード

    ...
    GetItemSetup(CalcReservEntry);
    
    SetPointerFilter(CalcReservEntry2);
    END;
    
    PROCEDURE SetServLine@48(NewServiceInvLine@1000 : Record 5902);
    ...
    

    置換コード

    ...
    GetItemSetup(CalcReservEntry);
    
    SetPointerFilter(CalcReservEntry2); 
    
    // Add the following line.
    CallCalcReservedQtyOnPick;
    
    END;
    
    PROCEDURE SetServLine@48(NewServiceInvLine@1000 : Record 5902);
    ...
    
  10. 予約管理 codeunit (99000845) の SetServLine 関数のコードを次のように変更します。
    既存のコード

    ...
    SetPointerFilter(CalcReservEntry2);
    
    // Delete the following lines.
    IF (CalcReservEntry."Location Code" <> '') AND
    Location.GET(CalcReservEntry."Location Code") AND
    (Location."Bin Mandatory" OR Location."Require Pick")
    THEN
    CalcReservedQtyOnPick(TotalAvailQty,QtyAllocInWhse);
    // End of the lines.
    
    END;
    
    PROCEDURE SetBOMJnlLine@61(NewBOMJnlLine@1000 : Record 89);
    

    置換コード

    ...
    SetPointerFilter(CalcReservEntry2);
    
    // Add the following line.
    CallCalcReservedQtyOnPick;
    
    END;
    
    PROCEDURE SetBOMJnlLine@61(NewBOMJnlLine@1000 : Record 89);
    ...
    
  11. 予約管理 codeunit (99000845) の SetBOMJnlLine 関数のコードを次のように変更します。
    既存のコード

    ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForBOMJnlLine."Quantity (Base)") < 0);
    
    SetPointerFilter(CalcReservEntry2);
    END;
    
    PROCEDURE SetJobJnlLine@20(NewJobJnlLine@1000 : Record 210);
    ...
    

    置換コード

    ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForBOMJnlLine."Quantity (Base)") < 0);
    
    SetPointerFilter(CalcReservEntry2);
    
    // Add the following line.
    CallCalcReservedQtyOnPick;
    
    END;
    
    PROCEDURE SetJobJnlLine@20(NewJobJnlLine@1000 : Record 210);
    ...
    
  12. Reservation Management codeunit (99000845) の SetJobJnlLine 関数のコードを次のように変更します。
    既存のコード

    ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForJobJnlLine."Quantity (Base)") < 0);
    
    SetPointerFilter(CalcReservEntry2);
    END;
    
    PROCEDURE SalesLineUpdateValues@54(VAR CurrentSalesLine@1000 : Record 37;VAR QtyToReserve@1001 : Decimal;VAR QtyReservedThisLine@1002 : Decimal);
    ...
    

    置換コード

    ...
    ((CreateReservEntry.SignFactor(CalcReservEntry) * ForJobJnlLine."Quantity (Base)") < 0);
    
    SetPointerFilter(CalcReservEntry2);
    
    // Add the following line.
    CallCalcReservedQtyOnPick;
    
    END;
    
    PROCEDURE SalesLineUpdateValues@54(VAR CurrentSalesLine@1000 : Record 37;VAR QtyToReserve@1001 : Decimal;VAR QtyReservedThisLine@1002 : Decimal);
    ...
    
    
  13. Reservation Management codeunit (99000845) の CallCalcReservedQtyOnPick 関数のコードを次のように変更します。
    既存のコード

    ...
    CreateReservEntry2.CreateRemainingReservEntry(SurplusEntry,QtyToSave);
    END;
    
    BEGIN
    END.
    }
    ...
    

    置換コード

    ...
    CreateReservEntry2.CreateRemainingReservEntry(SurplusEntry,QtyToSave);
    END;
    
    // Add the following lines.
    PROCEDURE CallCalcReservedQtyOnPick@104();
    BEGIN
    IF Positive AND
    (CalcReservEntry."Location Code" <> '') AND
    Location.GET(CalcReservEntry."Location Code") AND
    (Location."Bin Mandatory" OR Location."Require Pick")
    THEN
    CalcReservedQtyOnPick(TotalAvailQty,QtyAllocInWhse);
    END;
    // End of the lines.
    
    BEGIN
    END.
    }
    ...
    

前提条件

この修正プログラムを適用するには、次のいずれかの製品がインストールされている必要があります。

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
  • Microsoft Dynamics NAV 2009
  • Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1)
  • Microsoft Dynamics NAV 5.0

アンインストール情報

この修正プログラムを削除することはできません。

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

注: この資料は、"迅速な公開" を目的としてマイクロソフト サポート組織により直接作成されたものです。 ここに含まれる情報は、新しい問題に対応するため、そのままの状態で提供されます。 情報を迅速に公開するため、この資料には誤植などが含まれる可能性があり、また、予告なく改訂される場合があります。 その他の注意事項については、使用条件を参照してください。