この資料では、すべての国と言語ロケールのすべての Microsoft Dynamics NAV に該当します。
現象
Microsoft Dynamics NAV 2009 年に品目の明細行を追跡する 2 つ以上の項目を持つジョブ仕訳帳を使用するいると仮定します。ジョブ仕訳帳で、箱にアイテムを投稿するときにウェアハウスのエントリは入力された行を追跡する最後の項目にのみ更新されます。したがって、倉庫と、品目元帳の品目の不均衡があります。
この問題は、次の製品で発生します。
-
Microsoft Dynamics NAV 2009 R2
-
Microsoft Dynamics NAV 2009 サービス パック 1 (SP1)
解決策
修正プログラムの情報
サポートされている修正プログラムはマイクロソフトから現在入手可能です。ただし、この資料に記載されている問題を解決するためのものはのみ。この特定の問題が発生したシステムにのみ適用してください。この修正プログラムは、今後さらにテストを行うことがあります。この問題で深刻な影響を受けていない場合は、次の Microsoft Dynamics NAV の service pack または修正プログラムを含む次の Microsoft Dynamics NAV バージョン待つことを勧めします。
注: かかる料金が免除されるテクニカル サポート担当者 Microsoft Dynamics および関連製品のことは、通常は特別な場合は、特定の更新プログラムは、問題を解決するにを決定します。追加の質問および問題の特定のアップデートの対象にはなりませんが、通常のサポート料金が適用されます。
インストール情報
マイクロソフトでは解説することのみを目的としてプログラミング例を提供しています。暗示あるいは明示していることに対しての保証はしておりません。ここで言う保証とは、特定の目的に対する商品性や適合性の暗示的保証を含んでいますが、それに限定されるわけではありません。この資料では、例示されているプログラミング言語およびプロシージャの作成やデバッグに使用するツールにお客様が精通していることを前提としています。マイクロソフトのサポート エンジニアは、特定のプロシージャの機能を説明することができますが、機能の追加またはお客様固有の要件を満たすようにプロシージャを作成するこれらの例は変更されません。
注: この修正プログラムをインストールする前に、Microsoft Navision のすべてのクライアント ユーザーがシステムの電源を記録することを確認します。これには、Microsoft Navision アプリケーション サービス (NAS) クライアントのユーザーが含まれます。この修正プログラムを実装すると、ログオンしている唯一のクライアント ユーザーが必要です。
この修正プログラムを実装するには、開発者用のライセンスが必要です。
ユーザー アカウントまたはデータベース ログイン ウィンドウに Windows のログイン ウィンドウにある「スーパー」ロール id を割り当てられていることをお勧めします。ユーザー アカウントには、「スーパー」ロール ID を割り当てることができません、する場合は、ユーザー アカウントが次のアクセス許可を持っているを確認する必要があります。
-
変更するオブジェクトの変更のアクセス許可。
-
システム オブジェクトの ID 5210オブジェクトおよびシステム オブジェクトの ID 9015オブジェクトの実行が許可されます。
注:
データの修復を実行する必要があるない限り、データ ストアへの権限を持っている必要はありません。
コードの変更
注: 常にテスト コードを修正、管理された環境で適用する前に、運用コンピューターに修正プログラムします。
この問題を解決するには、以下の手順: 次のローカル変数を作成します。
-
(210)、ジョブ仕訳帳明細行の表に、新しいグローバル変数を追加し、次のように変数を指定します。
-
名: WMSManagement
-
データ型: Codeunit
-
サブタイプ: WMS 管理(7302)
-
-
箱のコードのTableRelationプロパティに次のコードでは、ジョブ仕訳帳明細行のテーブル (210) (5403) のフィールドを削除します。
Bin.Code WHERE (Location Code=FIELD(Location Code));
-
箱コードのOnValidateトリガー内のコードで次のようには、ジョブ仕訳帳明細行テーブル (210) (5403) のフィールドを変更します。
既存のコード...// Delete the following lines.
TESTFIELD("Location Code");
CheckItemAvailable;
// End of the lines.
...置換用コード
...// Add the following lines.
TESTFIELD("Location Code");
IF "Bin Code" <> '' THEN BEGIN
GetLocation("Location Code");
Location.TESTFIELD("Bin Mandatory");
END;
TESTFIELD(Type,Type::Item);
CheckItemAvailable;
WMSManagement.FindBinContent("Location Code","Bin Code","No.","Variant Code",'')
// End of the lines.
... -
Bin コード - OnLookup triggerin (210)、ジョブ仕訳帳明細行のテーブルに新しいローカル変数を追加し、次のように変数を指定します。
-
名: BinCode
-
データ型:コード
-
長さ: 20
-
-
ジョブ仕訳帳明細行のテーブル (210) の箱のコードの OnLookupトリガーには、次のコードを追加します。
TESTFIELD("Location Code");TESTFIELD(Type,Type::Item);
BinCode := WMSManagement.BinContentLookUp("Location Code","No.","Variant Code",'',"Bin Code");
IF BinCode <> '' THEN
VALIDATE("Bin Code",BinCode); -
なければプロパティのソース ドキュメント(25) テーブルのフィールドの倉庫の仕訳帳明細行 (7311) の値を次のように変更します。
なければでは、%s の = の順序、%s の請求書、S. クレジット メモ、%s の戻り値の順序、P. 順、P. の請求書、P. クレジット メモ、P. の戻り値の順序、Inb。Outb、転送します。転送では、本番環境です。消費品目 Jnl。 [Phys. Invt。Jnl。 Reclass。Jnl、消費 Jnl。 出力 Jnl。、BOM Jnl、Serv の順序、ジョブの Jnl。 。 -
なければプロパティの参照ドキュメント(60) テーブルのフィールドの倉庫の仕訳帳明細行 (7311) の値を次のように変更します。
なければ= 、rcpt 時、P. 在庫の転記を転記すると、Rtrn rcpt 時、P. Cr. のメモ型、出荷、S. 在庫、Rtrn。 出荷、S. Cr. のメモ型、T. の出荷が転記される、T. 入庫を転記の転記の転記の転記の転記の転記に転記された品目仕訳帳、Prod.、Put にある、選択、移動、ジョブ仕訳帳、BOM 仕訳帳。 -
ソース ドキュメント内のフィールド (25) エントリ テーブル (7312)なければプロパティの値を次のように変更します。
なければでは、%s の = の順序、%s の請求書、S. クレジット メモ、%s の戻り値の順序、P. 順、P. の請求書、P. クレジット メモ、P. の戻り値の順序、Inb。Outb、転送します。転送では、本番環境です。消費品目 Jnl。 [Phys. Invt。Jnl。 Reclass。Jnl、消費 Jnl。 注文出力 Jnl。、BOM Jnl、Serv.、ジョブの Jnl。 。 -
なければプロパティの参照ドキュメント (60) テーブルのフィールドの倉庫のエントリ (7312) の値を次のように変更します。
なければ= 、rcpt 時、P. 在庫の転記を転記すると、Rtrn rcpt 時、P. Cr. のメモ型、出荷、S. 在庫、Rtrn。 出荷、S. Cr. のメモ型、T. の出荷が転記される、T. 入庫を転記の転記の転記の転記の転記の転記に転記された品目仕訳帳、Prod.、Put にある、選択、移動、ジョブ仕訳帳、BOM 仕訳帳。 -
次のように、コントロールの表示プロパティ、場所コード (60) では、ジョブ仕訳帳フォーム (201) を変更します。
既存のコードVisible = Yes
置換用コード
Visible = No
-
ジョブ仕訳帳フォーム (201)、場所コードフィールドと、作業の種類コード] フィールドのBin コードフィールドを追加し、[次のようにフィールドを指定します。
...{ 61 ;Label ;0 ;0 ;0 ;0 ;ParentControl=60;
InColumnHeading=Yes }
// Add the following lines.
{ 102 ;TextBox ;35507;1650 ;1700 ;440 ;ParentControl=1;
InColumn=Yes;
SourceExpr="Bin Code" }
{ 103 ;Label ;0 ;0 ;0 ;0 ;ParentControl=102;
InColumnHeading=Yes }
// End of the lines.
{ 48 ;TextBox ;11430;2530 ;1650 ;440 ;ParentControl=1;
... -
ジョブ Jnl。 で、新しいグローバル変数を追加-投稿行 codeunit (1012)、し、次のように変数を指定します。
-
名前:場所
-
データ型:レコード
-
サブタイプ:場所(14)
-
-
ジョブ Jnl の新しいGetLocation関数を作成する-次のように Post 行 codeunit (1012)。
LOCAL PROCEDURE GetLocation@25(LocationCode@1000 : Code[10]);
-
ジョブ Jnl のGetLocation関数で次のコードを追加-投稿の行の codeunit (1012)。
IF LocationCode = '' THENCLEAR(Location)
ELSE
IF Location.Code <> LocationCode THEN
Location.GET(LocationCode); -
ジョブ Jnl の新しいPostWhseJnlLine関数を作成する-次のように Post 行 codeunit (1012)。
LOCAL PROCEDURE PostWhseJnlLine@24(ItemJnlLine@1000 : Record 83;OriginalQuantity@1001 : Decimal;OriginalQuantityBase@1002 : Decimal;VAR TempTrackingSpecification@1003 : TEMPORARY Record 336);
-
ジョブ Jnl のPostWhseJnlLine関数で次のローカル変数を作成・投稿行 codeunit (1012)。
-
ジョブ Jnl のPostWhseJnlLine関数でローカル変数を追加-投稿行 codeunit (1012)、し、次のように変数を指定します。
-
名: WarehouseJournalLine
-
データ型:レコード
-
サブタイプ:倉庫の仕訳帳明細行(7311)
-
-
ジョブ Jnl のPostWhseJnlLine関数でローカル変数を追加-投稿行 codeunit (1012)、し、次のように変数を指定します。
-
名: TempWarehouseJournalLine
-
データ型:レコードの一時的な
-
サブタイプ:倉庫の仕訳帳明細行(7311)
-
-
ジョブ Jnl のPostWhseJnlLine関数でローカル変数を追加-投稿行 codeunit (1012)、し、次のように変数を指定します。
-
名: ItemTrackingManagement
-
データ型: Codeunit
-
サブタイプ:項目の管理のトラッキング(6500)
-
-
ジョブ Jnl のPostWhseJnlLine関数でローカル変数を追加-投稿行 codeunit (1012)、し、次のように変数を指定します。
-
名: WMSManagement
-
データ型: Codeunit
-
サブタイプ: WMS 管理(7302)
-
-
ジョブ Jnl のPostWhseJnlLine関数でローカル変数を追加-投稿行 codeunit (1012)、し、次のように変数を指定します。
-
名: WhseJnlRegisterLine
-
データ型: Codeunit
-
サブタイプ: Whse。Jnl-行の登録(7301)。
-
-
-
ジョブ Jnl のPostWhseJnlLine関数で次のコードを追加する-次のように Post 行 codeunit (1012)。
WITH ItemJnlLine DO BEGINIF "Entry Type" IN ["Entry Type"::Consumption,"Entry Type"::Output] THEN
EXIT;
Quantity := OriginalQuantity;
"Quantity (Base)" := OriginalQuantityBase;
GetLocation("Location Code");
IF Location."Bin Mandatory" THEN
IF WMSManagement.CreateWhseJnlLine(ItemJnlLine,0,WarehouseJournalLine,FALSE,FALSE) THEN BEGIN
TempTrackingSpecification.MODIFYALL("Source Type",DATABASE::"Job Journal Line");
ItemTrackingManagement.SplitWhseJnlLine(WarehouseJournalLine,TempWarehouseJournalLine,TempTrackingSpecification,FALSE);
IF TempWarehouseJournalLine.FIND('-') THEN
REPEAT
WMSManagement.CheckWhseJnlLine(TempWarehouseJournalLine,1,0,FALSE);
WhseJnlRegisterLine.RUN(TempWarehouseJournalLine);
UNTIL TempWarehouseJournalLine.NEXT = 0;
END;
END; -
ジョブ Jnl の関数で新しいローカル変数を追加-投稿行 codeunit (1012)、し、次のように変数を指定します。
-
名: TempTrackingSpecification
-
データ型:レコードの一時的な
-
サブタイプ: (336)仕様の追跡
-
-
ジョブ Jnl の関数で新しいローカル変数を追加-投稿行 codeunit (1012)、し、次のように変数を指定します。
-
名: ItemJnlLine2
-
データ型:レコード
-
サブタイプ:仕訳帳明細行の品目(83)
-
-
ジョブ Jnl のコードの関数のコードを変更する-次のように Post 行 codeunit (1012)。
既存のコード 1...ItemJnlLine.INIT;
ItemJnlLine."Item No." := JobJnlLine2."No.";
...置換用コード 1
...ItemJnlLine.INIT;
// Add the following line.
ItemJnlLine."Line No." := "Line No.";
ItemJnlLine."Item No." := JobJnlLine2."No.";
...既存のコード 2
...ItemLedgEntry.LOCKTABLE;
ItemJnlPostLine.RunWithCheck(ItemJnlLine,TempJnlLineDim);
END;
...置換用コード 2
...ItemLedgEntry.LOCKTABLE;
// Add the following line.
ItemJnlLine2 := ItemJnlLine;
ItemJnlPostLine.RunWithCheck(ItemJnlLine,TempJnlLineDim);
// Add the following lines.
ItemJnlPostLine.CollectTrackingSpecification(TempTrackingSpecification);
PostWhseJnlLine(ItemJnlLine2,ItemJnlLine2.Quantity,ItemJnlLine2."Quantity (Base)",TempTrackingSpecification);
// End of the lines.
... -
なければパラメーターのプロパティの参照ドキュメント、Whse 内のGetSourceDocument関数内で値を変更します。次の管理 codeunit (5775)。
なければでは、%s の = の順序、%s の請求書、S. クレジット メモ、%s の戻り値の順序、P. 順、P. の請求書、P. クレジット メモ、P. の戻り値の順序、Inb。Outb、転送します。転送では、本番環境です。消費品目 Jnl。 [Phys. Invt。Jnl。 Reclass。Jnl、消費 Jnl。 注文出力 Jnl。、BOM Jnl、Serv.、ジョブの Jnl。 。 -
Whse 内のGetSourceDocument関数内のコードを変更します。Codeunit (5775) 次のように管理します。
既存のコード...EXIT;
END;
END;
ERROR(Text000);
...置換用コード
...EXIT;
END;
// Add the following lines.
DATABASE::"Job Journal Line":
BEGIN
SourceDocument := SourceDocument::"Job Jnl.";
EXIT;
END;
// End of the lines.
END;
ERROR(Text000);
... -
WMS 管理 codeunit (7302) 内のCreateWhseJnlLine関数内のコードは、次のように変更します。
既存のコード...WhseJnlLine."Source Line No." := "Line No.";
END;
WhseJnlLine."Source Code" := "Source Code";
WhseJnlLine."Reason Code" := "Reason Code";
WhseJnlLine."Registering No. Series" := "Posting No. Series";
WhseJnlLine."Whse. Document Type" := WhseJnlLine."Whse. Document Type"::" ";
// Delete the following line.
WhseJnlLine."Reference Document" := WhseJnlLine."Reference Document"::"Item Journal";
WhseJnlLine."Reference No." := "Document No.";
...置換用コード
...WhseJnlLine."Source Line No." := "Line No.";
// Add the following lines.
END ELSE
IF "Job No." <> '' THEN BEGIN
WhseJnlLine."Source Type" := DATABASE::"Job Journal Line";
WhseJnlLine."Source Subtype" := ItemJnlTemplateType;
WhseMgt.GetSourceDocument(WhseJnlLine."Source Document",WhseJnlLine."Source Type",WhseJnlLine."Source Subtype");
WhseJnlLine."Source No." := "Document No.";
WhseJnlLine."Source Line No." := "Line No.";
// End of the lines.
END;WhseJnlLine."Source Code" := "Source Code";
WhseJnlLine."Reason Code" := "Reason Code";
WhseJnlLine."Registering No. Series" := "Posting No. Series";
WhseJnlLine."Whse. Document Type" := WhseJnlLine."Whse. Document Type"::" ";
// Add the following lines.
IF "Job No." = '' THEN
WhseJnlLine."Reference Document" := WhseJnlLine."Reference Document"::"Item Journal"
ELSE
WhseJnlLine."Reference Document" := WhseJnlLine."Reference Document"::"Job Journal";
// End of the lines.
WhseJnlLine."Reference No." := "Document No.";
...ine."Source Code" := "Source Code";
WhseJnlLine."Reason Code" := "Reason Code";
WhseJnlLine."Registering No. Series" := "Posting No. Series";
WhseJnlLine."Whse. Document Type" := WhseJnlLine."Whse. Document Type"::" ";
// Add the following lines.
IF "Job No." = '' THEN
WhseJnlLine."Reference Document" := WhseJnlLine."Reference Document"::"Item Journal"
ELSE
WhseJnlLine."Reference Document" := WhseJnlLine."Reference Document"::"Job Journal";
// End of the lines.
WhseJnlLine."Reference No." := "Document No.";
...
必要条件
この修正プログラムを適用するのにはインストールされている製品は次のいずれかが必要です。
-
Microsoft Dynamics NAV 2009 R2
-
Microsoft Dynamics NAV 2009 サービス パック 1 (SP1)
アンインストール情報
この修正プログラムを削除することはできません。
状況
マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。
注: これは、マイクロソフト サポートの組織内から直接作成した「高速公開」の資料です。ここに含まれる情報は、新たに発生している問題に応じて現状のまま提供されています。速やかに利用できるようにした結果として、内容には誤植が含まれている可能性があり、事前告知なしで改訂する場合があります。その他の考慮事項については、使用条件を参照してください。