この資料では、すべての国と言語ロケールのすべての Microsoft Dynamics NAV に該当します。
現象
Microsoft Dynamics NAV 2009 年にバッチ処理での追跡順序のトラックの明細行の数量を変更することを想定しています。出荷の選択を作成するときの出荷ピッキング数量が正しくありません。
この問題は、次の製品で発生します。
-
Microsoft Dynamics NAV 2009 R2
-
Microsoft Dynamics NAV 2009 サービス パック 1 (SP1)
解決策
修正プログラムの情報
サポートされている修正プログラムはマイクロソフトから現在入手可能です。ただし、この資料に記載されている問題を解決するためのものはのみ。この特定の問題が発生したシステムにのみ適用してください。この修正プログラムは、今後さらにテストを行うことがあります。この問題で深刻な影響を受けていない場合は、次の Microsoft Dynamics NAV 2009 サービス パックまたは修正プログラムを含む次の Microsoft Dynamics NAV バージョン待つことを勧めします。
注: かかる料金が免除されるテクニカル サポート担当者 Microsoft Dynamics および関連製品のことは、通常は特別な場合は、特定の更新プログラムは、問題を解決するにを決定します。追加の質問および問題の特定のアップデートの対象にはなりませんが、通常のサポート料金が適用されます。
インストール情報
マイクロソフトでは解説することのみを目的としてプログラミング例を提供しています。暗示あるいは明示していることに対しての保証はしておりません。ここで言う保証とは、特定の目的に対する商品性や適合性の暗示的保証を含んでいますが、それに限定されるわけではありません。この資料では、例示されているプログラミング言語およびプロシージャの作成やデバッグに使用するツールにお客様が精通していることを前提としています。マイクロソフトのサポート エンジニアは、特定のプロシージャの機能について説明することができます。ただし、お客様固有の要件を満たすために、追加機能の提供またはプロシージャの作成のために、これらの例に変更を加えたりはしません。
注: この修正プログラムをインストールする前に、Microsoft Dynamics NAV のすべてのクライアント ユーザーがシステムの電源を記録することを確認します。これには、Microsoft Dynamics NAV アプリケーション サーバー (NAS) のサービスが含まれます。この修正プログラムを実装すると、ログオンしている唯一のクライアント ユーザーが必要です。
この修正プログラムを実装するには、開発者用のライセンスが必要です。
ユーザー アカウントまたはデータベース ログイン ウィンドウに Windows のログイン ウィンドウにある「スーパー」ロール id を割り当てられていることをお勧めします。ユーザー アカウントには、「スーパー」ロール ID を割り当てることができません、する場合は、ユーザー アカウントが次のアクセス許可を持っているを確認する必要があります。
-
変更するオブジェクトの変更のアクセス許可。
-
実行のアクセス許可、システム オブジェクトの ID 5210オブジェクトおよびシステム オブジェクトの ID 9015
オブジェクトです。
注: データの修復を実行する必要があるない限り、データ ストアへの権限を持っている必要はありません。
コードの変更
注: 常にテスト コードを修正、管理された環境で適用する前に、運用コンピューターに修正プログラムします。
この問題を解決するには、次のように、作成を選択 Codeunit (7312) 内のコードを変更します。
既存のコード
...CODE
...
PROCEDURE CreateTempLine@29(LocationCode@1002 : Code[10];ItemNo@1003 : Code[20];VariantCode@1004 : Code[10];UnitofMeasureCode@1005 : Code[10];FromBinCode@1000 : Code[20];ToBinCode@1007 : Code[20];QtyPerUnitofMeasure@1010 : Decimal;VAR TotalQtytoPick@1001 : Decimal;VAR TotalQtytoPickBase@1000000000 : Decimal);
...
i@1012 : Integer;
RemQtyToPickBase@1000000002 : Decimal;
QtyToPickBase@1000000001 : Decimal;
QtyToTrackBase@1009 : Decimal;
QtyBaseMaxAvailToPick@1011 : Decimal;
...
TempWhseItemTrkgLine.RESET;
TempWhseItemTrkgLine.SETFILTER("Qty. to Handle",'<> 0');
IF TempWhseItemTrkgLine.FIND('-') THEN BEGIN
REPEAT
IF TempWhseItemTrkgLine."Qty. to Handle (Base)" <> 0 THEN BEGIN
// Delete the following lines.
IF TempWhseItemTrkgLine."Qty. to Handle" > RemQtyToPick THEN BEGIN
TempWhseItemTrkgLine."Qty. to Handle" := RemQtyToPick;
...
TempWhseItemTrkgLine.MODIFY;
END;
// Delete the following lines.
IF TempWhseItemTrkgLine."Qty. to Handle (Base)" > RemQtyToPickBase THEN BEGIN
TempWhseItemTrkgLine."Qty. to Handle (Base)" := RemQtyToPickBase;
// End of the deleted lines.
...
TempWhseItemTrkgLine.MODIFY;
END;
...
QtyToPick := TempWhseItemTrkgLine."Qty. to Handle";
QtyToPickBase := TempWhseItemTrkgLine."Qty. to Handle (Base)";
CreateTempLine2(LocationCode,ItemNo,VariantCode,UnitofMeasureCode,FromBinCode,ToBinCode,
QtyPerUnitofMeasure,QtyToPick,TempWhseItemTrkgLine,QtyToPickBase);
RemQtyToPickBase -= TempWhseItemTrkgLine."Qty. to Handle (Base)" - QtyToPickBase;
// Delete the following line.
RemQtyToPick -= (TempWhseItemTrkgLine."Qty. to Handle" / QtyPerUnitofMeasure) - QtyToPick;
// End of the deleted line.
...
LOCAL PROCEDURE UpdateToQtyToPick@71(QtyAvailableBase@1008 : Decimal;ToQtyPerUOM@1004 : Decimal;VAR ToQtyToPick@1003 : Decimal;VAR ToQtyToPickBase@1002 : Decimal;TotalQtyToPick@1001 : Decimal;TotalQtyToPickBase@1000 : Decimal);
...
ToQtyToPick := ROUND(ToQtyToPickBase / ToQtyPerUOM,0.00001);
IF ToQtyToPick > TotalQtyToPick THEN
ToQtyToPick := TotalQtyToPick;
IF (ToQtyToPick <> TotalQtyToPick) AND (ToQtyToPickBase = TotalQtyToPickBase) THEN
// Delete the following line.
IF ToQtyToPickBase = ROUND(TotalQtyToPick * ToQtyPerUOM,0.00001) THEN
// End of the deleted line.
...
置換用コード
...
CODE
...
PROCEDURE CreateTempLine@29(LocationCode@1002 : Code[10];ItemNo@1003 : Code[20];VariantCode@1004 : Code[10];UnitofMeasureCode@1005 : Code[10];FromBinCode@1000 : Code[20];ToBinCode@1007 : Code[20];QtyPerUnitofMeasure@1010 : Decimal;VAR TotalQtytoPick@1001 : Decimal;VAR TotalQtytoPickBase@1000000000 : Decimal);
...
i@1012 : Integer;
RemQtyToPickBase@1000000002 : Decimal;
QtyToPickBase@1000000001 : Decimal;
QtyToTrackBase@1009 : Decimal;
QtyBaseMaxAvailToPick@1011 : Decimal;
// Add the following line.
NewQtyToHandle@1170000000 : Decimal;
// End of the added line.
...
TempWhseItemTrkgLine.RESET;
TempWhseItemTrkgLine.SETFILTER("Qty. to Handle",'<> 0');
IF TempWhseItemTrkgLine.FIND('-') THEN BEGIN
REPEAT
IF TempWhseItemTrkgLine."Qty. to Handle (Base)" <> 0 THEN BEGIN
// Add the following lines.
IF TempWhseItemTrkgLine."Qty. to Handle (Base)" > RemQtyToPickBase THEN BEGIN
TempWhseItemTrkgLine."Qty. to Handle (Base)" := RemQtyToPickBase;
// End of the added lines.
...
TempWhseItemTrkgLine.MODIFY;
END;
// Add the following lines.
NewQtyToHandle := ROUND(RemQtyToPick / RemQtyToPickBase * TempWhseItemTrkgLine."Qty. to Handle (Base)",0.00001);
IF TempWhseItemTrkgLine."Qty. to Handle" <> NewQtyToHandle THEN BEGIN
TempWhseItemTrkgLine."Qty. to Handle" := NewQtyToHandle;
// End of the added lines.
...
TempWhseItemTrkgLine.MODIFY;
END;
...
QtyToPick := TempWhseItemTrkgLine."Qty. to Handle";
QtyToPickBase := TempWhseItemTrkgLine."Qty. to Handle (Base)";
CreateTempLine2(LocationCode,ItemNo,VariantCode,UnitofMeasureCode,FromBinCode,ToBinCode,
QtyPerUnitofMeasure,QtyToPick,TempWhseItemTrkgLine,QtyToPickBase);
RemQtyToPickBase -= TempWhseItemTrkgLine."Qty. to Handle (Base)" - QtyToPickBase;
// Add the following line.
RemQtyToPick -= TempWhseItemTrkgLine."Qty. to Handle" - QtyToPick;
// End of the added line.
...
LOCAL PROCEDURE UpdateToQtyToPick@71(QtyAvailableBase@1008 : Decimal;ToQtyPerUOM@1004 : Decimal;VAR ToQtyToPick@1003 : Decimal;VAR ToQtyToPickBase@1002 : Decimal;TotalQtyToPick@1001 : Decimal;TotalQtyToPickBase@1000 : Decimal);
...
ToQtyToPick := ROUND(ToQtyToPickBase / ToQtyPerUOM,0.00001);
IF ToQtyToPick > TotalQtyToPick THEN
ToQtyToPick := TotalQtyToPick;
IF (ToQtyToPick <> TotalQtyToPick) AND (ToQtyToPickBase = TotalQtyToPickBase) THEN
// Add the following line.
IF (ABS(ToQtyToPick - TotalQtyToPick) = 0.00001) AND (ToQtyToPickBase = TotalQtyToPickBase) THEN
// End of the added line.
...
必要条件
この修正プログラムを適用するのにはインストールされている製品は次のいずれかが必要です。
-
Microsoft Dynamics NAV 2009 R2
-
Microsoft Dynamics NAV 2009 サービス パック 1
アンインストール情報
この修正プログラムを削除することはできません。
状況
マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。
注: これは、マイクロソフト サポートの組織内から直接作成した「高速公開」の資料です。ここに含まれる情報は、新たに発生している問題に応じて現状のまま提供されています。速やかに利用できるようにした結果として、内容には誤植が含まれている可能性があり、事前告知なしで改訂する場合があります。その他の考慮事項については、使用条件を参照してください。