この記事は、すべてのリージョンの Microsoft Dynamics NAV に適用されます。
現象
Microsoft Dynamics NAV 2009 の [場所カード] ダイアログ ボックスで、場所の [選択が必須] ボックスと [ビン必須] チェック ボックスを選択したとします。 場所から [自動ビルド キット BOM チェック] ボックスが選択されているキットアイテムの販売注文を出荷すると、倉庫エントリに不適切な数量が残ります。 ただし、品目台帳エントリには、販売エントリの正しい数量が表示されます。 そのため、倉庫エントリと品目台帳エントリの間に不均衡があります。
この問題は、次の製品で発生します。
- Microsoft Dynamics NAV 2009 R2
- Microsoft Dynamics NAV 2009 Service Pack 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 アクセス許可。
メモ データ修復を実行する必要がない限り、データ ストアに対する権限は必要ありません。
コードの変更
メモ 運用環境のコンピューターに修正プログラムを適用する前に、制御された環境でコード修正を常にテストします。
この問題を解決するには、次の手順を実行します。
Item Jnl.-Post Line codeunit (22) に新しいグローバル変数を作成し、次のように変数を指定します。
- 名前: TempWhseJnlLine
- DataType: レコード
- サブタイプ: 倉庫仕訳帳明細行
- 一時: はい
Item Jnl.-Post Line codeunit (22) の PostOutput 関数のコードを次のように変更します。
既存のコード... "Invoiced Quantity" := 0; END; PostItem; IF NOT Kitting THEN UpdateProdOrderLine(ProdOrderLine,ReTrack); // Delete the following lines. IF Location."Bin Mandatory" AND (NOT CalledFromInvtPutawayPick) THEN WhseJnlPostLine.RUN(WhseJnlLine); // End of the lines. END; END; END; ...置換コード
... "Invoiced Quantity" := 0; END; PostItem; IF NOT Kitting THEN UpdateProdOrderLine(ProdOrderLine,ReTrack); // Add the following lines. IF Location."Bin Mandatory" AND (NOT CalledFromInvtPutawayPick) THEN BEGIN TempWhseJnlLine := WhseJnlLine; WhseJnlPostLine.RUN(WhseJnlLine); END; // End of the lines. END; END; END; ...Item Jnl.-Post Line codeunit (22) で GetOutputWhseJnlLine プロシージャを次のように作成します。
パラメーター変数を作成し、次のように変数を指定します。
- 名前: OutputWhseJnlLine
- DataType: レコード
- サブタイプ: 倉庫仕訳帳明細行
- 一時: はい
次のようにコードを追加します。
PROCEDURE GetOutputWhseJnlLine(VAR OutputWhseJnlLine); OutputWhseJnlLine := TempWhseJnlLine; OutputWhseJnlLine.INSERT;
BOM Jnl.-Post Line codeunit (32) の Code 関数に新しいローカル変数を作成し、次のように変数を指定します。
- 名前: TempOutputWhseJnlLine
- DataType: レコード
- サブタイプ: 倉庫仕訳帳明細行
- 一時: はい
BOM Jnl.-Post Line codeunit (32) の Code 関数のコードを次のように変更します。
既存のコード 1... TransferDimToItemJnlLine(ItemJnlLine,TempJnlLineDim2); ReserveBOMJnlLine.TransferBOMJnlToItemJnlLine(BOMJnlLine,ItemJnlLine,"Quantity (Base)"); ItemJnlPostLine.RunWithCheck(ItemJnlLine,TempJnlLineDim2); IF "Entry Type" = "Entry Type"::Assembly THEN BEGIN ProdOrderLine.DELETE; ProdOrderLine.Status := ProdOrderLine.Status::Finished; ProdOrderLine.INSERT; ...置換コード 1
... TransferDimToItemJnlLine(ItemJnlLine,TempJnlLineDim2); ReserveBOMJnlLine.TransferBOMJnlToItemJnlLine(BOMJnlLine,ItemJnlLine,"Quantity (Base)"); ItemJnlPostLine.RunWithCheck(ItemJnlLine,TempJnlLineDim2); // Add the following line. ItemJnlPostLine.GetOutputWhseJnlLine(TempOutputWhseJnlLine); IF "Entry Type" = "Entry Type"::Assembly THEN BEGIN ProdOrderLine.DELETE; ProdOrderLine.Status := ProdOrderLine.Status::Finished; ProdOrderLine.INSERT; ...既存のコード 2
... OutputItemLedgEntryNo := ItemJnlLine."Item Shpt. Entry No."; END; PostWhseJnlLine(ItemJnlLine,TempHandlingSpecification,OriginalQuantity,OriginalQuantityBase); PostTempJnlLines; IF BOMReg."No." = 0 THEN BEGIN BOMReg.LOCKTABLE; IF BOMReg.FIND('+') THEN BOMReg."No." := BOMReg."No." + 1 ...置換コード 2
... OutputItemLedgEntryNo := ItemJnlLine."Item Shpt. Entry No."; END; PostWhseJnlLine(ItemJnlLine,TempHandlingSpecification,OriginalQuantity,OriginalQuantityBase); PostTempJnlLines; // Add the following line. PostSalesWhseJnlLine(TempOutputWhseJnlLine); IF BOMReg."No." = 0 THEN BEGIN BOMReg.LOCKTABLE; IF BOMReg.FIND('+') THEN BOMReg."No." := BOMReg."No." + 1 ...BOM Jnl.-Post Line codeunit (32) で PostSalesWhseJnlLine 関数を次のように作成します。
新しいパラメーターを作成し、次のように パラメーターを指定します。
- 名前: TempOutputWhseJnlLine2
- DataType: レコード
- サブタイプ: 倉庫仕訳帳明細行
- 一時: はい
次のようにコードを追加します。
LOCAL PROCEDURE PostSalesWhseJnlLine(VAR TempOutputWhseJnlLine); BEGIN WITH TempOutputWhseJnlLine2 DO BEGIN IF FINDFIRST THEN BEGIN Quantity := -Quantity; "From Bin Code" := "To Bin Code"; "From Zone Code" := "To Zone Code"; "To Bin Code" := ''; "To Zone Code" := ''; WhseJnlPostLine.RUN(TempOutputWhseJnlLine2); END; END; END;
前提条件
この修正プログラムを適用するには、次のいずれかの製品がインストールされている必要があります。
- Microsoft Dynamics NAV 2009 R2
- Microsoft Dynamics NAV 2009 Service Pack 1
アンインストール情報
この修正プログラムを削除することはできません。
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
注: この資料は、"迅速な公開" を目的としてマイクロソフト サポート組織により直接作成されたものです。 ここに含まれる情報は、新しい問題に対応するため、そのままの状態で提供されます。 情報を迅速に公開するため、この資料には誤植などが含まれる可能性があり、また、予告なく改訂される場合があります。 その他の注意事項については、使用条件を参照してください。