Microsoft Dynamics NAV 2009 SP1 で前払い請求書を転記した後に販売注文を請求するとエラー メッセージ: "差し引く準備 Amt は、販売ドキュメントの [NN.NN] を超えることはできません"

適用先
Dynamics NAV 2009 Service Pack 1

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

現象

Microsoft Dynamics NAV 2009 で Service Pack 1 (SP1) を使用して販売注文の前払い請求書を転記した後、販売注文の請求書を転記すると、次のエラー メッセージが表示されます。

差し引く準備が、販売伝票の NN.NN を超えることはできません。

このエラー メッセージでは、 NN.NN は実際の金額を表すプレースホルダーです。

解決策

修正プログラムの情報

サポートされている修正プログラムが Microsoft から入手できるようになりました。 ただし、この記事で説明されている問題を修正することのみを目的としています。 この特定の問題が発生しているシステムにのみ適用します。 この修正プログラムは、追加のテストを受け取る場合があります。 したがって、この問題の影響を大きく受けない場合は、次の Microsoft Dynamics NAV Service Pack またはこの修正プログラムを含む次のバージョンを待つことをおすすめします。

注 特別なケースでは、Microsoft Dynamics および関連製品のテクニカル サポート プロフェッショナルが特定の更新プログラムによって問題が解決されると判断した場合、通常はサポート呼び出しに対して発生する料金が取り消されることがあります。 ただし、特定の更新プログラムの対象とならない追加の質問および問題については、通常のサポート料金が適用されます。

            
          

インストール情報

Microsoft は、明示または黙示の保証なしで、説明のみを目的としてプログラミング例を提供しています。 これには、商品性または特定の目的への適合性に関する暗黙の保証が含まれますが、これらに限定されません。 この記事では、デモンストレーションされているプログラミング言語と、プロシージャの作成とデバッグに使用されるツールについてよく理解していることを前提としています。 マイクロソフト サポート窓口では、特定のプロシージャの機能説明に関するご質問に対して支援いたしますが、本例を特定の目的を満たすために機能を追加したり、プロシージャを構築することは行いません。

注 この修正プログラムをインストールする前に、すべての Microsoft Navision クライアント ユーザーがシステムからログオフされていることを確認します。 これには、Microsoft Navision Application Services (NAS) クライアント ユーザーが含まれます。 この修正プログラムを実装するときにログオンする唯一のクライアント ユーザーである必要があります。

この修正プログラムを実装するには、開発者ライセンスが必要です。

[Windows ログイン] ウィンドウまたは [データベース ログイン] ウィンドウのユーザー アカウントに "SUPER" ロール ID を割り当てることをお勧めします。 ユーザー アカウントに "SUPER" ロール ID を割り当てることができない場合は、ユーザー アカウントに次のアクセス許可があることを確認する必要があります。

  • 変更するオブジェクトの [変更] アクセス許可。
  • システム オブジェクト ID 5210 オブジェクトとシステム オブジェクト ID 9015 オブジェクトの Execute アクセス許可。

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

コードの変更

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

この修正プログラムをインストールするには、Sales Line テーブル (37) と購買明細行テーブル (39) のコードを次のように変更します。

  1. 次のように、Sales Line テーブル (37) の CalcPrepaymentToDeduct 関数にローカル変数を追加します。

    • 名前: GrossAmount
    • DataType: Decimal
  2. Sales Line テーブル (37) の CalcPrepaymentToDeduct 関数のコードを次のように変更します。
    既存のコード

          //Code.Remove.begin
          IF (Quantity - "Quantity Invoiced") <> 0 THEN BEGIN
            GetSalesHeader;
            IF SalesHeader."Prices Including VAT" THEN
              "Prepmt Amt to Deduct" :=
                ROUND(
                  ROUND(
                    ROUND(
                      ROUND("Unit Price" * "Qty. to Invoice",Currency."Amount Rounding Precision") *
                      (1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *
                    ("Prepayment %" / 100) / (1 + ("VAT %" / 100)),Currency."Amount Rounding Precision") *
                  (1 + ("VAT %" / 100)),Currency."Amount Rounding Precision")
            ELSE
              "Prepmt Amt to Deduct" :=
                ROUND(
                  ROUND(
                    ROUND("Unit Price" * "Qty. to Invoice",Currency."Amount Rounding Precision") *
                    (1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *
                  "Prepayment %" / 100 ,Currency."Amount Rounding Precision")
          END ELSE
            "Prepmt Amt to Deduct" := 0
          //Code.Remove.end
    

    置換コード

          //Code.Add.begin 
          IF ((Quantity - "Quantity Invoiced") <> 0) AND ("Prepmt. Amt. Inv." <> 0) THEN BEGIN
            GetSalesHeader;
            GrossAmount := ROUND("Unit Price" * Quantity,Currency."Amount Rounding Precision");
            "Prepmt Amt to Deduct" :=
              ROUND(
                ROUND(
                  ROUND(
                    (GrossAmount -
                     ROUND(GrossAmount * "Line Discount %" / 100,Currency."Amount Rounding Precision")) *
                    "Prepayment %" / 100 ,Currency."Amount Rounding Precision") - "Prepmt Amt Deducted") *
                "Qty. to Invoice" / (Quantity - "Quantity Invoiced"),Currency."Amount Rounding Precision");
          END ELSE
            "Prepmt Amt to Deduct" := 0
          //Code.Add.end
    
  3. 次のように、購入ライン テーブル (39) の CalcPrepaymentToDeduct 関数にローカル変数を追加します。

    • 名前: GrossAmount
    • DataType: Decimal
  4. 購買明細行テーブル (39) の CalcPrepaymentToDeduct 関数のコードを次のように変更します。
    既存のコード

          //Code.Remove.begin
          IF (Quantity - "Quantity Invoiced") <> 0 THEN BEGIN
            GetPurchHeader;
            IF PurchHeader."Prices Including VAT" THEN
              "Prepmt Amt to Deduct" :=
                ROUND(
                  ROUND(
                    ROUND(
                      ROUND("Direct Unit Cost" * "Qty. to Invoice",Currency."Amount Rounding Precision") *
                      (1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *
                    ("Prepayment %" / 100) / (1 + ("VAT %" / 100)),Currency."Amount Rounding Precision") *
                  (1 + ("VAT %" / 100)),Currency."Amount Rounding Precision")
            ELSE
              "Prepmt Amt to Deduct" :=
                ROUND(
                  ROUND(
                    ROUND("Direct Unit Cost" * "Qty. to Invoice",Currency."Amount Rounding Precision") *
                    (1 - ("Line Discount %" / 100)),Currency."Amount Rounding Precision") *
                  "Prepayment %" / 100,Currency."Amount Rounding Precision")
          END ELSE
            "Prepmt Amt to Deduct" := 0
          //Code.Remove.end
    

    置換コード

          //Code.Add.begin 
          IF ((Quantity - "Quantity Invoiced") <> 0) AND ("Prepmt. Amt. Incl. VAT" <> 0) THEN BEGIN
            GetPurchHeader;
            GrossAmount := ROUND("Direct Unit Cost" * Quantity,Currency."Amount Rounding Precision");
            "Prepmt Amt to Deduct" :=
              ROUND(
                ROUND(
                  ROUND(
                    (GrossAmount -
                     ROUND(GrossAmount * "Line Discount %" / 100,Currency."Amount Rounding Precision")) *
                    "Prepayment %" / 100 ,Currency."Amount Rounding Precision") - "Prepmt Amt Deducted") *
                "Qty. to Invoice" / (Quantity - "Quantity Invoiced"),Currency."Amount Rounding Precision");
          END ELSE
            "Prepmt Amt to Deduct" := 0
          //Code.Add.end 
    

前提条件

この修正プログラムを適用するには、Microsoft Dynamics NAV 2009 SP1 がインストールされている必要があります。

アンインストール情報

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

状態

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

注: この資料は、"迅速な公開" を目的としてマイクロソフト サポート組織により直接作成されたものです。 ここに含まれる情報は、新しい問題に対応するため、そのままの状態で提供されます。 情報を迅速に公開するため、この資料には誤植などが含まれる可能性があり、また、予告なく改訂される場合があります。 その他の注意事項については、使用条件を参照してください。