Applies ToDynamics NAV 2009

この資料では、すべての国と言語ロケールのすべての 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 Navision のすべてのクライアント ユーザーがシステムの電源を記録することを確認します。これには、Microsoft Navision アプリケーション サービス (NAS) クライアントのユーザーが含まれます。この修正プログラムを実装すると、ログオンしている唯一のクライアント ユーザーが必要です。この修正プログラムを実装するには、開発者用のライセンスが必要です。ユーザー アカウントまたはデータベース ログイン ウィンドウに Windows のログイン ウィンドウにある「スーパー」ロール id を割り当てられていることをお勧めします。ユーザー アカウントには、「スーパー」ロール ID を割り当てることができません、する場合は、ユーザー アカウントが次のアクセス許可を持っているを確認する必要があります。

  • 変更するオブジェクトの変更のアクセス許可。

  • システム オブジェクトの ID 5210オブジェクトおよびシステム オブジェクトの ID 9015オブジェクトの実行が許可されます。

注: データの修復を実行する必要があるない限り、データ ストアへの権限を持っている必要はありません。

コードの変更

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

  1. GetDescriptionAndRcptName関数内のコードを変更するのでは、次のように ReqJnlManagement codeunit (330)。既存のコード

    ...ELSEDescription := '';// Delete the following lines.ReqLine.Type::Item: IF Item.GET(ReqLine."No.") THENDescription := Item.DescriptionELSE Description := '';// End of the lines.END;END;IF ReqLine."Vendor No." = '' THEN...

    置換用コード

    ...ELSEDescription := '';END;END;IF ReqLine."Vendor No." = '' THEN...
  2. 新しいグローバル変数を追加で、求人 Wksh。-注文 codeunit (333) を行い、次のように変数を指定。

    • : DropShptSpecialOrderExists

    • データ型:ブール値

  3. InsertPurchOrderLine関数で、求人 Wksh。 で新しいローカル変数を追加-注文 codeunit (333) を行い、次のように変数を指定します。

    • : SalesHeader

    • データ型:レコード

    • サブタイプ:販売のヘッダー

  4. InsertPurchOrderLine関数で、求人 Wksh。 で新しいローカル変数を追加-注文 codeunit (333) を行い、次のように変数を指定します。

    • : DropShptSplOrderDiffAddress

    • データ型:ブール

  5. InsertPurchOrderLine関数で、求人 Wksh。 でコードを変更-codeunit (333) の順序を次のように作成します。既存のコード

    ...WITH ReqLine2 DO BEGINIF ("No." = '') OR ("Vendor No." = '') OR (Quantity = 0) THENEXIT;IF (PurchOrderHeader."Buy-from Vendor No." <> "Vendor No.") OR(PurchOrderHeader."Sell-to Customer No." <> "Sell-to Customer No.") OR(PrevShipToCode <> "Ship-to Code") OR(PurchOrderHeader."Order Address Code" <> "Order Address Code") OR(PurchOrderHeader."Currency Code" <> "Currency Code") OR// Delete the following line.(PrevPurchCode <> "Purchasing Code")THEN BEGIN...

    置換用コード

    ...WITH ReqLine2 DO BEGINIF ("No." = '') OR ("Vendor No." = '') OR (Quantity = 0) THENEXIT;// Add the following lines.DropShptSpecialOrderExists := FALSE; IF SalesHeader.GET(SalesHeader."Document Type"::Order,"Sales Order No.") THEN BEGIN DropShptSpecialOrderExists := PurchOrderHeader.DropShptSplOrderExists(SalesHeader); IF DropShptSpecialOrderExists THEN DropShptSplOrderDiffAddress := NOT PurchOrderHeader.CheckAndAddShipToAdd(SalesHeader,FALSE);END; // End of the lines.IF (PurchOrderHeader."Buy-from Vendor No." <> "Vendor No.") OR(PurchOrderHeader."Sell-to Customer No." <> "Sell-to Customer No.") OR(PrevShipToCode <> "Ship-to Code") OR(PurchOrderHeader."Order Address Code" <> "Order Address Code") OR(PurchOrderHeader."Currency Code" <> "Currency Code") OR// Add the following lines.(PrevPurchCode <> "Purchasing Code") OR (DropShptSplOrderDiffAddress) // End of the lines.THEN BEGIN...
  6. InsertHeader関数で、求人 Wksh。 で新しいローカル変数を追加-注文 codeunit (333) を行い、次のように変数を指定します。

    • : SalesHeader

    • データ型:レコード

    • サブタイプ:の販売注文ヘッダー

  7. InsertHeader関数で、求人 Wksh。 でコードを変更-codeunit (333) の順序を次のように作成します。既存のコード

    ...PurchOrderHeader.SetShipToForSpecOrder;END;PurchOrderHeader.MODIFY;...

    置換用コード

    ...PurchOrderHeader.SetShipToForSpecOrder;END;// Add the following lines.IF DropShptSpecialOrderExists THEN BEGIN SalesHeader.GET(SalesHeader."Document Type"::Order,"Sales Order No.");PurchOrderHeader."Ship-to Name" := SalesHeader."Ship-to Name"; PurchOrderHeader."Ship-to Name 2" := SalesHeader."Ship-to Name 2"; PurchOrderHeader."Ship-to Address" := SalesHeader."Ship-to Address";PurchOrderHeader."Ship-to Address 2" := SalesHeader."Ship-to Address 2";PurchOrderHeader."Ship-to Post Code" := SalesHeader."Ship-to Post Code";PurchOrderHeader."Ship-to City" := SalesHeader."Ship-to City"; PurchOrderHeader."Ship-to Contact" := SalesHeader."Ship-to Contact"; END; // End of the lines.PurchOrderHeader.MODIFY;...
  8. 版統合 codeunit (5702) 内のEnterPurchaseItemCrossRef関数内のコードを次のように変更します。既存のコード

    ...IF Found THEN BEGIN"Cross-Reference No." := ItemCrossReference."Cross-Reference No.";"Unit of Measure (Cross Ref.)" := ItemCrossReference."Unit of Measure";"Cross-Reference Type" := ItemCrossReference."Cross-Reference Type";"Cross-Reference Type No." := ItemCrossReference."Cross-Reference Type No.";// Delete the following lines.IF ItemCrossReference.Description <> '' THEN BEGIN Description := ItemCrossReference.Description;"Description 2" := '';END;// End of the lines.END ELSE BEGIN"Cross-Reference No." := '';"Cross-Reference Type" := "Cross-Reference Type"::" ";"Cross-Reference Type No." := '';// Delete the following lines.IF "Variant Code" <> '' THEN BEGIN ItemVariant.GET("No.","Variant Code");Description := ItemVariant.Description;"Description 2" := ItemVariant."Description 2";END ELSE BEGINItem.GET("No."); Description := Item.Description;"Description 2" := Item."Description 2";END; // End of the lines.GetItemTranslation;...

    置換用コード

    ...IF Found THEN BEGIN"Cross-Reference No." := ItemCrossReference."Cross-Reference No.";"Unit of Measure (Cross Ref.)" := ItemCrossReference."Unit of Measure";"Cross-Reference Type" := ItemCrossReference."Cross-Reference Type";"Cross-Reference Type No." := ItemCrossReference."Cross-Reference Type No.";END ELSE BEGIN"Cross-Reference No." := '';"Cross-Reference Type" := "Cross-Reference Type"::" ";"Cross-Reference Type No." := '';GetItemTranslation;...
  9. 版統合 codeunit (5702) 内のGetSpecialOrders関数内のコードを次のように変更します。既存のコード

    ...TESTFIELD("Sell-to Customer No.",SalesHeader."Sell-to Customer No.");TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");// Delete the following line.PurchHeader.SetShipToForSpecOrder;PurchLine.LOCKTABLE;...

    置換用コード

    ...TESTFIELD("Sell-to Customer No.",SalesHeader."Sell-to Customer No.");TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");// Add the following lines.IF DropShptSplOrderExists(SalesHeader) THEN CheckAndAddShipToAdd(SalesHeader,TRUE);// End of the lines.PurchLine.LOCKTABLE;...
  10. コピー文書管理 codeunit (6620) 内のTransfldsFromSalesToPurchLine関数内のコードを次のように変更します。既存のコード

    ...VALIDATE("Direct Unit Cost");END;...

    置換用コード

    ...VALIDATE("Direct Unit Cost");// Add the following lines.Description := FromSalesLine.Description;"Description 2" := FromSalesLine."Description 2";// End of the lines.END;...
  11. 購買のコード内のコードを変更する-ドロップ Shpt. codeunit (76) を次のように取得します。既存のコード 1

    ...TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");PurchLine.LOCKTABLE;...

    置換用コード 1

    ...TESTFIELD("Ship-to Code",SalesHeader."Ship-to Code");// Add the following line.IF DropShptSplOrderExists(SalesHeader) THEN CheckAndAddShipToAdd(SalesHeader,TRUE); // End of the lines.PurchLine.LOCKTABLE;...

    既存のコード 2

    ...CopyDocMgt.TransfldsFromSalesToPurchLine(SalesLine,PurchLine);PurchLine.Description := SalesLine.Description;PurchLine."Sales Order No." := SalesLine."Document No.";...

    置換用コード 2

    ...CopyDocMgt.TransfldsFromSalesToPurchLine(SalesLine,PurchLine);PurchLine.Description := SalesLine.Description;// Add the following line.PurchLine."Description 2" := SalesLine."Description 2";PurchLine."Sales Order No." := SalesLine."Document No.";...
  12. 次のように、販売注文を取得するレポート (698) でInsertReqWkshLineのコードを変更します。既存のコード

    ..."Sell-to Customer No." := SalesLine."Sell-to Customer No.";SalesHeader.GET(1,SalesLine."Document No.");IF SpecOrder <> 1 THEN...

    置換用コード

    ..."Sell-to Customer No." := SalesLine."Sell-to Customer No.";// Add the following lines.Description := SalesLine.Description;"Description 2" := SalesLine."Description 2";// End of the lines.SalesHeader.GET(1,SalesLine."Document No.");IF SpecOrder <> 1 THEN...
  13. 購買注文ヘッダー テーブル (38)、新しいグローバル変数を追加し、次のように変数を指定します。

    • : NameAddressDetails

    • データ型:テキスト

    • 長さ: 512

  14. 購買注文ヘッダー テーブル (38)、新しいグローバル変数を追加し、次のように変数を指定します。

    • : NameAddressDetails2

    • データ型:テキストの

    • 長さ: 512

  15. 購買注文ヘッダー テーブル (38)、[新しい文字列定数を追加し、次のように文字列定数を指定します。

    • : Text051

    • ConstValue:発注書 %2 の %1 のフィールドは、販売注文の % の 3 と同じである必要があります。

  16. 購買注文ヘッダー テーブル (38) では、新しいCheckAndAddShipToAdd関数を作成します。これを行うには、以下の手順を実行します。

    1. 購買注文ヘッダー テーブル (38) のCheckAndAddShipToAdd関数で新しいローカル パラメーターを追加し、次のようにパラメーターを指定します。

      • Var: No

      • : SalesHeader

      • データ型:レコード

      • サブタイプ:販売のヘッダー

    2. 購買注文ヘッダー テーブル (38) のCheckAndAddShipToAdd関数で新しいローカル パラメーターを追加し、次のようにパラメーターを指定します。

      • Var: No

      • 名前: ShowError

      • データ型:ブール値

    3. 購買注文ヘッダー テーブル (38) のCheckAndAddShipToAdd関数の戻り値を追加し、戻り値を指定し、次のように。

      • 戻り型:ブール値

    4. 購買注文ヘッダー テーブル (38) のCheckAndAddShipToAdd関数で新しいローカル変数を追加し、次のように変数を指定します。

      • : PurchLine2

      • データ型:レコード

      • サブタイプ: PurchLine2

    5. 購買注文ヘッダー テーブル (38) のCheckAndAddShipToAdd関数では、次のコードを追加します。

      IF ShowError THEN BEGINPurchLine2.RESET;PurchLine2.SETRANGE("Document Type","Document Type"::Order);PurchLine2.SETRANGE("Document No.","No.");IF NOT PurchLine2.ISEMPTY THEN BEGINIF "Ship-to Name" <> SalesHeader."Ship-to Name" THENERROR(Text051,FIELDCAPTION("Ship-to Name"),"No.",SalesHeader."No.");IF "Ship-to Name 2" <> SalesHeader."Ship-to Name 2" THENERROR(Text051,FIELDCAPTION("Ship-to Name 2"),"No.",SalesHeader."No.");IF ("Ship-to Address" <> SalesHeader."Ship-to Address") THENERROR(Text051,FIELDCAPTION("Ship-to Address"),"No.",SalesHeader."No.");IF ("Ship-to Address 2" <> SalesHeader."Ship-to Address 2") THENERROR(Text051,FIELDCAPTION("Ship-to Address 2"),"No.",SalesHeader."No.");IF ("Ship-to Post Code" <> SalesHeader."Ship-to Post Code") THENERROR(Text051,FIELDCAPTION("Ship-to Post Code"),"No.",SalesHeader."No.");IF ("Ship-to City" <> SalesHeader."Ship-to City") THENERROR(Text051,FIELDCAPTION("Ship-to City"),"No.",SalesHeader."No.");IF ("Ship-to Contact" <> SalesHeader."Ship-to Contact") THENERROR(Text051,FIELDCAPTION("Ship-to Contact"),"No.",SalesHeader."No.");END ELSE BEGIN// no purchase line exists"Ship-to Name" := SalesHeader."Ship-to Name";"Ship-to Name 2" := SalesHeader."Ship-to Name 2";"Ship-to Address" := SalesHeader."Ship-to Address";"Ship-to Address 2" := SalesHeader."Ship-to Address 2";"Ship-to Post Code" := SalesHeader."Ship-to Post Code";"Ship-to City" := SalesHeader."Ship-to City";"Ship-to Contact" := SalesHeader."Ship-to Contact";END;END ELSE BEGINNameAddressDetails :=SalesHeader."Ship-to Name" + SalesHeader."Ship-to Name 2" +SalesHeader."Ship-to Address" + SalesHeader."Ship-to Address 2" +SalesHeader."Ship-to Post Code" + SalesHeader."Ship-to City" +SalesHeader."Ship-to Contact";IF NameAddressDetails2 = '' THENNameAddressDetails2 := NameAddressDetails;EXIT(NameAddressDetails2 = NameAddressDetails);END;
  17. 購買注文ヘッダー テーブル (38) では、新しいDropShptSplOrderExists関数を作成します。これを行うには、以下の手順を実行します。

    1. 購買注文ヘッダー テーブル (38) のDropShptSplOrderExists関数で新しいローカル パラメーターを追加し、次のようにパラメーターを指定します。

      • Var: No

      • : SalesHeader

      • データ型:レコード

      • サブタイプ:販売のヘッダー

    2. 購買注文ヘッダー テーブル (38) のDropShptSplOrderExists関数の戻り値の型を追加し、戻り値を指定し、次のように。

      • 戻り型:ブール値

    3. 購買注文ヘッダー テーブル (38) のDropShptSplOrderExists関数で新しいローカル変数を追加し、次のように変数を指定します。

      • : SalesLine2

      • データ型:レコード

      • サブタイプ:販売注文明細行

    4. 購買注文ヘッダー テーブル (38) のDropShptSplOrderExists関数では、次のコードを追加します。

      // returns TRUE if sales is either Drop Shipment of Special OrderSalesLine2.RESET;SalesLine2.SETRANGE("Document Type",SalesLine2."Document Type"::Order);SalesLine2.SETRANGE("Document No.",SalesHeader."No.");SalesLine2.SETRANGE("Drop Shipment",TRUE);IF NOT SalesLine2.ISEMPTY THENEXIT(TRUE);SalesLine2.SETRANGE("Drop Shipment");SalesLine2.SETRANGE("Special Order",TRUE);EXIT(NOT SalesLine2.ISEMPTY);

必要条件

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

  • Microsoft Dynamics NAV 2009 R2

  • Microsoft Dynamics NAV 2009 サービス パック 1 (SP1)

アンインストール情報

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

状況

マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。

注: これは、マイクロソフト サポートの組織内から直接作成した「高速公開」の資料です。ここに含まれる情報は、新たに発生している問題に応じて現状のまま提供されています。速やかに利用できるようにした結果として、内容には誤植が含まれている可能性があり、事前告知なしで改訂する場合があります。その他の考慮事項については、使用条件を参照してください。

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。