Microsoft Dynamics NAV で顧客のカードから販売注文を作成する場合、販売注文の [支払割引 %] フィールドはゼロです

適用先
Dynamics NAV 2009 Microsoft Dynamics NAV 5.0 Service Pack 1

RAPID PUBLISHING の資料には、マイクロソフト サポート組織内からの直接の情報が記載されています。 ここに含まれる情報は、新しいトピックまたは一意のトピックに応答して作成されるか、または他のナレッジ ベース情報を補完することを目的としています。

この記事は、すべての国とすべての言語ロケールの Microsoft Dynamics NAV に適用されます。

現象

次のような状況を想定します。 Microsoft Dynamics NAV 2009 には、顧客の支払用語コードがあります。 顧客カードから販売注文を作成します。 このシナリオでは、販売注文のヘッダーの [支払割引 %] フィールドは 0 です。 さらに、後で販売注文を転記した場合、支払割引は計算されません。

解決策

修正プログラムの情報

サポートされている修正プログラムが 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 アクセス許可。

                
メモ データ修復を実行する必要がない限り、データ ストアに対する権限は必要ありません。

コードの変更

メモ 運用環境のコンピューターに修正プログラムを適用する前に、制御された環境でコード修正を常にテストします。

このコードフィックスをインストールするには、Sales Header テーブル (36) と Purchase Header テーブル (38) のコードを次のように変更します。

注 次の手順は、Sales Header テーブル (36) に対して行う必要がある変更を示しています。 購買ヘッダー テーブル (38) に対して同じ変更を行う必要があります。

  1. 新しいグローバル変数を追加します。

    名前: UpdateDocumentDate
    データ型: ブール型

  2. [請求先の顧客] で [いいえ] を選択します。 - OnValidate()" 関数は、次のようにコードを変更します。

    既存のコード 1

    …
    IF NOT SkipBillToContact THEN
      "Bill-to Contact" := Cust.Contact;
    "Payment Terms Code" := Cust."Payment Terms Code";
    IF "Document Type" = "Document Type"::"Credit Memo" THEN BEGIN
    …
    

    置換コード 1

    …
    IF NOT SkipBillToContact THEN
      "Bill-to Contact" := Cust.Contact;
    "Payment Terms Code" := Cust."Payment Terms Code";
    "Prepmt. Payment Terms Code" := Cust."Payment Terms Code";
    IF "Document Type" = "Document Type"::"Credit Memo" THEN BEGIN
    …
    

    既存のコード 2

    …
      DATABASE::"Customer Template","Bill-to Customer Template Code");
    VALIDATE("Payment Terms Code");
    VALIDATE("Payment Method Code");
    VALIDATE("Currency Code");
    IF (xRec."Sell-to Customer No." = "Sell-to Customer No.") AND
    …
    

    置換コード 2

    …
      DATABASE::"Customer Template","Bill-to Customer Template Code");
    VALIDATE("Payment Terms Code");
    VALIDATE("Prepmt. Payment Terms Code");
    VALIDATE("Payment Method Code");
    VALIDATE("Currency Code");
    IF (xRec."Sell-to Customer No." = "Sell-to Customer No.") AND
    …
    
  3. "支払条件コード - OnValidate()" 関数で、コードを次のように変更します。

    既存のコード

    IF ("Payment Terms Code" <> '') AND ("Document Date" <> 0D) THEN BEGIN
      PaymentTerms.GET("Payment Terms Code");
      IF (("Document Type" IN ["Document Type"::"Return Order","Document Type"::"Credit Memo"]) AND
          NOT PaymentTerms."Calc. Pmt. Disc. on Cr. Memos")
      THEN BEGIN
        VALIDATE("Due Date","Document Date");
        VALIDATE("Pmt. Discount Date",0D);
        VALIDATE("Payment Discount %",0);
      END ELSE BEGIN
        "Due Date" := CALCDATE(PaymentTerms."Due Date Calculation","Document Date");
        "Pmt. Discount Date" := CALCDATE(PaymentTerms."Discount Date Calculation","Document Date");
      IF xRec."Document Date"="Document Date" THEN
         VALIDATE("Payment Discount %",PaymentTerms."Discount %")
      END;
    END ELSE BEGIN
      VALIDATE("Due Date","Document Date");
    IF xRec."Document Date"="Document Date" THEN BEGIN
      VALIDATE("Pmt. Discount Date",0D);
      VALIDATE("Payment Discount %",0);
    END;
    …
    

    置換コード

    IF ("Payment Terms Code" <> '') AND ("Document Date" <> 0D) THEN BEGIN
      PaymentTerms.GET("Payment Terms Code");
      IF (("Document Type" IN ["Document Type"::"Return Order","Document Type"::"Credit Memo"]) AND
          NOT PaymentTerms."Calc. Pmt. Disc. on Cr. Memos")
      THEN BEGIN
        VALIDATE("Due Date","Document Date");
        VALIDATE("Pmt. Discount Date",0D);
        VALIDATE("Payment Discount %",0);
      END ELSE BEGIN
        "Due Date" := CALCDATE(PaymentTerms."Due Date Calculation","Document Date");
        "Pmt. Discount Date" := CALCDATE(PaymentTerms."Discount Date Calculation","Document Date");
        IF NOT UpdateDocumentDate THEN
         VALIDATE("Payment Discount %",PaymentTerms."Discount %")
      END;
    END ELSE BEGIN
      VALIDATE("Due Date","Document Date");
    IF NOT UpdateDocumentDate THEN BEGIN
      VALIDATE("Pmt. Discount Date",0D);
      VALIDATE("Payment Discount %",0);
    END;
    …
    
  4. "Document Date - OnValidate()" 関数で、コードを次のように変更します。

    既存のコード

    VALIDATE("Payment Terms Code");
    VALIDATE("Prepmt. Payment Terms Code");
    
    

    置換コード

    IF xRec."Document Date" <> "Document Date" THEN
      UpdateDocumentDate := TRUE;
    VALIDATE("Payment Terms Code");
    VALIDATE("Prepmt. Payment Terms Code");
    
    
  5. "Prepmt。支払条件コード - OnValidate()" 関数は、次のようにコードを変更します。

    既存のコード

    …
      END ELSE BEGIN
        "Prepayment Due Date" := CALCDATE(PaymentTerms."Due Date Calculation","Document Date");
        "Prepmt. Pmt. Discount Date" := CALCDATE(PaymentTerms."Discount Date Calculation","Document Date");
        VALIDATE("Prepmt. Payment Discount %",PaymentTerms."Discount %")
      END;
    END ELSE BEGIN
      VALIDATE("Prepayment Due Date","Document Date");
      VALIDATE("Prepmt. Pmt. Discount Date",0D);
      VALIDATE("Prepmt. Payment Discount %",0);
    END;
    

    置換コード

    …
      END ELSE BEGIN
        "Prepayment Due Date" := CALCDATE(PaymentTerms."Due Date Calculation","Document Date");
        "Prepmt. Pmt. Discount Date" := CALCDATE(PaymentTerms."Discount Date Calculation","Document Date");
        IF NOT UpdateDocumentDate THEN
          VALIDATE("Prepmt. Payment Discount %",PaymentTerms."Discount %")
      END;
    END ELSE BEGIN
      VALIDATE("Prepayment Due Date","Document Date");
      IF NOT UpdateDocumentDate THEN BEGIN
        VALIDATE("Prepmt. Pmt. Discount Date",0D);
        VALIDATE("Prepmt. Payment Discount %",0);
      END;
    END;
    

前提条件

この codefix をインストールするには、次のいずれかの製品がインストールされている必要があります。

  • Microsoft Dynamics NAV 5.0 Service Pack 1 (SP1)
  • Microsoft Dynamics NAV 2009
  • Microsoft Dynamics NAV SP1

再起動に関する情報

このコードフィックスを適用した後、コンピューターを再起動する必要はありません。

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

追加情報

MICROSOFT および/またはそのサプライヤーは、この WEB サイト (「素材」) に掲載されているドキュメントおよび関連するグラフィックスに含まれる情報の適合性、信頼性、正確性について、いかなる目的でも表明または保証しません。

THE MATERIALS MAY INCLUDE TECHNICAL INACCURACIES OR TYPOGRAPHICAL ERRORS AND MAY BE REVISED AT ANY TIME WITHOUT NOTICE. 適用法によって許容される最大限の範囲において、MICROSOFT および/またはそのサプライヤーは、明示、黙示、または法令に基づくすべての表明、保証、および条件 (タイトルの表明、保証、または条件、非侵害、満足のいく条件または品質、商品性および特定の目的への適合性を含むがこれに限定されない)を、素材に関して否認し、除外します。