この記事は、すべての言語ロケールの Microsoft Dynamics NAV に適用されます。
現象
注文計画関数は、Microsoft Dynamics NAV で受注環境を使用する場合に、正しくない "Qty. to Order" 候補を計算します。 この問題は、マルチレベル部品表 (BOM) を使用する場合に発生します。
この問題は、次の製品で発生します。
Microsoft Dynamics NAV 2009 R2
Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
Microsoft Dynamics NAV 2009
Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1)
原因
システムは、常に見つかった項目の数量を変更する再帰関数を使用します (BOM では、一部の項目が 1 回以上発生する可能性がある "ツリー" が作成されます)。 ただし、更新されたアイテムのすべての子を削除または更新する必要があるため、これは正しくない動作です。
解決策
修正プログラムの情報
サポートされている修正プログラムが Microsoft から入手できるようになりました。 ただし、この記事で説明されている問題を修正することのみを目的としています。 この特定の問題が発生しているシステムにのみ適用します。 この修正プログラムは、追加のテストを受け取る場合があります。 したがって、この問題の影響を大きく受けない場合は、次の Microsoft Dynamics NAV 2009 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 アクセス許可。
メモ データ修復を実行する必要がない限り、データ ストアに対する権限は必要ありません。
コードの変更
メモ 運用環境のコンピューターに修正プログラムを適用する前に、制御された環境でコード修正を常にテストします。
この問題を解決するには、次の手順を実行します。
codeunit にローカル関数 UpdateRelatedComponent を作成します (99000809)。
... LOCAL PROCEDURE UpdateRelatedComponent@15(ParentReqLine@1000 : Record 246); WITH PlanningComponent DO BEGIN SETCURRENTKEY("Worksheet Template Name","Worksheet Batch Name","Worksheet Line No.","Item No."); SETRANGE("Worksheet Line No.",ParentReqLine."Line No."); SETFILTER("Item No.",'<>%1',''); SETFILTER("Expected Quantity",'<>0'); SETFILTER("Planning Level Code",'<>0'); IF FIND('-') THEN REPEAT IF LineHasBeenCreated(ChildReqLine,PlanningComponent) THEN BEGIN UpdateRelatedComponent(ChildReqLine); IF ChildReqLine.Quantity <> "Expected Quantity" THEN BEGIN // qty has to be updated, there is a new need of component ChildReqLine.BlockDynamicTracking(Blocked); ChildReqLine.VALIDATE(Quantity,ChildReqLine.Quantity - "Expected Quantity"); ChildReqLine.MODIFY; // updating qty of component for parent VALIDATE("Quantity per","Quantity per"); MODIFY; END ELSE // line will be recreated ChildReqLine.DELETE(TRUE); END; UNTIL NEXT = 0; END; ...関数に次のパラメーターを追加します。
- 名前: PlanningComponent;DataType: レコード (99000829)
- 名前: ChildReqLine;DataType: レコード (246)
codeunit でローカル関数 LineHasBeenCreated を作成します (99000829)。
... LOCAL PROCEDURE LineHasBeenCreated@18(VAR ChildReqLine@1000 : Record 246;PlanningComponent@1001 : Record 99000829) : Boolean; WITH ChildReqLine DO BEGIN SETCURRENTKEY("Worksheet Template Name","Journal Batch Name",Type,"No."); SETRANGE("Worksheet Template Name",PlanningComponent."Worksheet Template Name"); SETRANGE("Journal Batch Name",PlanningComponent."Worksheet Batch Name"); SETRANGE(Type,Type::Item); SETRANGE("No.",PlanningComponent."Item No."); SETRANGE("Variant Code",PlanningComponent."Variant Code"); SETRANGE("Ref. Order Type","Ref. Order Type"::"Prod. Order"); SETRANGE("Ref. Order Status",PlanningComponent."Ref. Order Status"); SETRANGE("Ref. Order No.",PlanningComponent."Ref. Order No."); SETFILTER("Planning Level",'>%1',0); EXIT(FINDFIRST); END; ...InsertPlanningLine 関数 codeunit (99000809) のコードを次のように変更します。
既存のコード... IF ReqLine2."Planning Level" < ReqLine."Planning Level" THEN ReqLine2."Planning Level" := ReqLine."Planning Level"; ReqLine2.MODIFY; ...置換コード
... IF ReqLine2."Planning Level" <ReqLine."Planning Level" THEN ReqLine2."Planning Level" := ReqLine."Planning Level"; // the ReqLine2 can have children which has to be delete or updated // Add the following line. UpdateRelatedComponent(ReqLine2); ReqLine2.MODIFY; ...
前提条件
この修正プログラムを適用するには、次のいずれかの製品がインストールされている必要があります。
Microsoft Dynamics NAV 2009 R2
Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
Microsoft Dynamics NAV 2009
Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1)
アンインストール情報
この修正プログラムを削除することはできません。
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
注: この資料は、"迅速な公開" を目的としてマイクロソフト サポート組織により直接作成されたものです。 ここに含まれる情報は、新しい問題に対応するため、そのままの状態で提供されます。 情報を迅速に公開するため、この資料には誤植などが含まれる可能性があり、また、予告なく改訂される場合があります。 その他の注意事項については、使用条件を参照してください。