支払いまたは Microsoft Dynamics NAV の請求書に対して [未適用エントリ] 機能を実行すると、総勘定元帳エントリの VAT 金額が正しくありません

適用先
Dynamics NAV 2009

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

現象

VAT エントリの支払割引調整と Microsoft Dynamics NAV の支払い許容範囲を使用することを想定しています。 販売支払が、支払割引と支払許容範囲が使用された売上請求書から適用されない場合、総勘定元帳 (G/L) エントリの VAT 金額が正しくないことがわかります。 この問題は、購入側でも発生します。
この問題は、次の製品で発生します。

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

解決策

修正プログラムの情報

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

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

コードの変更

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

  1. Gen の AutoEntrForDtldCustLedgEntries 関数のコードを変更します。 Jnl.-Post Line codeunit (12) を次に示します。
    既存のコード

    ...
       DtldCVLedgEntryBuf."Entry Type"::"Payment Tolerance (VAT Excl.)":
        BEGIN
          DtldCVLedgEntryBuf.TESTFIELD("Gen. Prod. Posting Group");
          GenPostingSetup.GET(
            DtldCVLedgEntryBuf."Gen. Bus. Posting Group",
            DtldCVLedgEntryBuf."Gen. Prod. Posting Group");
          CASE GLSetup."Payment Tolerance Posting" OF
            GLSetup."Payment Tolerance Posting"::"Payment Tolerance Accounts":
              IF DtldCVLedgEntryBuf."Amount (LCY)" > 0 THEN BEGIN
                GenPostingSetup.TESTFIELD("Sales Pmt. Tol. Debit Acc.");
                AccNo := GenPostingSetup."Sales Pmt. Tol. Debit Acc.";
              END ELSE BEGIN
                GenPostingSetup.TESTFIELD("Sales Pmt. Tol. Credit Acc.");
                AccNo := GenPostingSetup."Sales Pmt. Tol. Credit Acc.";
              END;
            GLSetup."Payment Tolerance Posting"::"Payment Discount Accounts":
              IF DtldCVLedgEntryBuf."Amount (LCY)" > 0 THEN BEGIN
                GenPostingSetup.TESTFIELD("Sales Pmt. Disc. Debit Acc.");
                AccNo := GenPostingSetup."Sales Pmt. Disc. Debit Acc.";
              END ELSE BEGIN
                GenPostingSetup.TESTFIELD("Sales Pmt. Disc. Credit Acc.");
                AccNo := GenPostingSetup."Sales Pmt. Disc. Credit Acc.";
              END;
          END;
          InitGLEntry(AccNo,-DtldCVLedgEntryBuf."Amount (LCY)",0,FALSE,TRUE);
          GLEntry."Additional-Currency Amount" := -DtldCVLedgEntryBuf."Additional-Currency Amount";
          GLEntry."Gen. Posting Type" := GLEntry."Gen. Posting Type"::Sale;
          GLEntry."Gen. Bus. Posting Group" := DtldCVLedgEntryBuf."Gen. Bus. Posting Group";
          GLEntry."Gen. Prod. Posting Group" := DtldCVLedgEntryBuf."Gen. Prod. Posting Group";
          GLEntry."VAT Bus. Posting Group" := DtldCVLedgEntryBuf."VAT Bus. Posting Group";
          GLEntry."VAT Prod. Posting Group" := DtldCVLedgEntryBuf."VAT Prod. Posting Group";
          GLEntry."Tax Area Code" := DtldCVLedgEntryBuf."Tax Area Code";
          GLEntry."Tax Liable" := DtldCVLedgEntryBuf."Tax Liable";
          GLEntry."Tax Group Code" := DtldCVLedgEntryBuf."Tax Group Code";
          GLEntry."Use Tax" := DtldCVLedgEntryBuf."Use Tax";
          InsertGLEntry(TRUE);
        END;
    ...
    

    置換コード

    ...
         DtldCVLedgEntryBuf."Entry Type"::"Payment Tolerance (VAT Excl.)":
        BEGIN
          DtldCVLedgEntryBuf.TESTFIELD("Gen. Prod. Posting Group");
          GenPostingSetup.GET(
            DtldCVLedgEntryBuf."Gen. Bus. Posting Group",
            DtldCVLedgEntryBuf."Gen. Prod. Posting Group");
          CASE GLSetup."Payment Tolerance Posting" OF
            GLSetup."Payment Tolerance Posting"::"Payment Tolerance Accounts":
              IF DtldCVLedgEntryBuf."Amount (LCY)" > 0 THEN BEGIN
                GenPostingSetup.TESTFIELD("Sales Pmt. Tol. Debit Acc.");
                AccNo := GenPostingSetup."Sales Pmt. Tol. Debit Acc.";
              END ELSE BEGIN
                GenPostingSetup.TESTFIELD("Sales Pmt. Tol. Credit Acc.");
                AccNo := GenPostingSetup."Sales Pmt. Tol. Credit Acc.";
              END;
            GLSetup."Payment Tolerance Posting"::"Payment Discount Accounts":
              IF DtldCVLedgEntryBuf."Amount (LCY)" > 0 THEN BEGIN
                GenPostingSetup.TESTFIELD("Sales Pmt. Disc. Debit Acc.");
                AccNo := GenPostingSetup."Sales Pmt. Disc. Debit Acc.";
              END ELSE BEGIN
                GenPostingSetup.TESTFIELD("Sales Pmt. Disc. Credit Acc.");
                AccNo := GenPostingSetup."Sales Pmt. Disc. Credit Acc.";
              END;
          END;
          InitGLEntry(AccNo,-DtldCVLedgEntryBuf."Amount (LCY)",0,FALSE,TRUE);
          GLEntry."Additional-Currency Amount" := -DtldCVLedgEntryBuf."Additional-Currency Amount";
    
    // Add the following line.     
          GLEntry."VAT Amount" := -DtldCVLedgEntryBuf."VAT Amount (LCY)";
    // End of the added line.
          GLEntry."Gen. Posting Type" := GLEntry."Gen. Posting Type"::Sale;
          GLEntry."Gen. Bus. Posting Group" := DtldCVLedgEntryBuf."Gen. Bus. Posting Group";
          GLEntry."Gen. Prod. Posting Group" := DtldCVLedgEntryBuf."Gen. Prod. Posting Group";
          GLEntry."VAT Bus. Posting Group" := DtldCVLedgEntryBuf."VAT Bus. Posting Group";
          GLEntry."VAT Prod. Posting Group" := DtldCVLedgEntryBuf."VAT Prod. Posting Group";
          GLEntry."Tax Area Code" := DtldCVLedgEntryBuf."Tax Area Code";
          GLEntry."Tax Liable" := DtldCVLedgEntryBuf."Tax Liable";
          GLEntry."Tax Group Code" := DtldCVLedgEntryBuf."Tax Group Code";
          GLEntry."Use Tax" := DtldCVLedgEntryBuf."Use Tax";
          InsertGLEntry(TRUE);
        END; 
    ...
    
  2. Gen の AutoEntrForDtldVendLedgEntries 関数のコードを変更します。 Jnl.-Post Line codeunit (12) を次に示します。
    既存のコード

    ...
       DtldCVLedgEntryBuf."Entry Type"::"Payment Tolerance (VAT Excl.)":
        BEGIN
          GenPostingSetup.GET(
            DtldCVLedgEntryBuf."Gen. Bus. Posting Group",
            DtldCVLedgEntryBuf."Gen. Prod. Posting Group");
          CASE GLSetup."Payment Tolerance Posting" OF
            GLSetup."Payment Tolerance Posting"::"Payment Tolerance Accounts":
              BEGIN
                IF DtldCVLedgEntryBuf."Amount (LCY)" > 0 THEN BEGIN
                  GenPostingSetup.TESTFIELD("Purch. Pmt. Tol. Debit Acc.");
                  AccNo := GenPostingSetup."Purch. Pmt. Tol. Debit Acc.";
                END ELSE BEGIN
                  GenPostingSetup.TESTFIELD("Purch. Pmt. Tol. Credit Acc.");
                  AccNo := GenPostingSetup."Purch. Pmt. Tol. Credit Acc.";
                END;
              END;
            GLSetup."Payment Tolerance Posting"::"Payment Discount Accounts":
              BEGIN
                IF DtldCVLedgEntryBuf."Amount (LCY)" > 0 THEN BEGIN
                  GenPostingSetup.TESTFIELD("Purch. Pmt. Disc. Debit Acc.");
                  AccNo := GenPostingSetup."Purch. Pmt. Disc. Debit Acc.";
                END ELSE BEGIN
                  GenPostingSetup.TESTFIELD("Purch. Pmt. Disc. Credit Acc.");
                  AccNo := GenPostingSetup."Purch. Pmt. Disc. Credit Acc.";
                END;
              END;
          END;
          InitGLEntry(AccNo,-DtldCVLedgEntryBuf."Amount (LCY)",0,FALSE,TRUE);
          GLEntry."Additional-Currency Amount" := -DtldCVLedgEntryBuf."Additional-Currency Amount";
          GLEntry."Gen. Posting Type" := GLEntry."Gen. Posting Type"::Purchase;
          GLEntry."Gen. Bus. Posting Group" := DtldCVLedgEntryBuf."Gen. Bus. Posting Group";
          GLEntry."Gen. Prod. Posting Group" := DtldCVLedgEntryBuf."Gen. Prod. Posting Group";
          GLEntry."VAT Bus. Posting Group" := DtldCVLedgEntryBuf."VAT Bus. Posting Group";
          GLEntry."VAT Prod. Posting Group" := DtldCVLedgEntryBuf."VAT Prod. Posting Group";
          GLEntry."Tax Area Code" := DtldCVLedgEntryBuf."Tax Area Code";
          GLEntry."Tax Liable" := DtldCVLedgEntryBuf."Tax Liable";
          GLEntry."Tax Group Code" := DtldCVLedgEntryBuf."Tax Group Code";
          GLEntry."Use Tax" := DtldCVLedgEntryBuf."Use Tax";
          InsertGLEntry(TRUE);
    
          InsertVatEntriesFromTemp(DtldCVLedgEntryBuf);
        END;
    ...
    

    置換コード

    ...
         DtldCVLedgEntryBuf."Entry Type"::"Payment Tolerance (VAT Excl.)":
        BEGIN
          GenPostingSetup.GET(
            DtldCVLedgEntryBuf."Gen. Bus. Posting Group",
            DtldCVLedgEntryBuf."Gen. Prod. Posting Group");
          CASE GLSetup."Payment Tolerance Posting" OF
            GLSetup."Payment Tolerance Posting"::"Payment Tolerance Accounts":
              BEGIN
                IF DtldCVLedgEntryBuf."Amount (LCY)" > 0 THEN BEGIN
                  GenPostingSetup.TESTFIELD("Purch. Pmt. Tol. Debit Acc.");
                  AccNo := GenPostingSetup."Purch. Pmt. Tol. Debit Acc.";
                END ELSE BEGIN
                  GenPostingSetup.TESTFIELD("Purch. Pmt. Tol. Credit Acc.");
                  AccNo := GenPostingSetup."Purch. Pmt. Tol. Credit Acc.";
                END;
              END;
            GLSetup."Payment Tolerance Posting"::"Payment Discount Accounts":
              BEGIN
                IF DtldCVLedgEntryBuf."Amount (LCY)" > 0 THEN BEGIN
                  GenPostingSetup.TESTFIELD("Purch. Pmt. Disc. Debit Acc.");
                  AccNo := GenPostingSetup."Purch. Pmt. Disc. Debit Acc.";
                END ELSE BEGIN
                  GenPostingSetup.TESTFIELD("Purch. Pmt. Disc. Credit Acc.");
                  AccNo := GenPostingSetup."Purch. Pmt. Disc. Credit Acc.";
                END;
              END;
          END;
          InitGLEntry(AccNo,-DtldCVLedgEntryBuf."Amount (LCY)",0,FALSE,TRUE);
          GLEntry."Additional-Currency Amount" := -DtldCVLedgEntryBuf."Additional-Currency Amount";
    
    // Add the following line.      
          GLEntry."VAT Amount" := -DtldCVLedgEntryBuf."VAT Amount (LCY)";
    // End of the added line.
    
          GLEntry."Gen. Posting Type" := GLEntry."Gen. Posting Type"::Purchase;
          GLEntry."Gen. Bus. Posting Group" := DtldCVLedgEntryBuf."Gen. Bus. Posting Group";
          GLEntry."Gen. Prod. Posting Group" := DtldCVLedgEntryBuf."Gen. Prod. Posting Group";
          GLEntry."VAT Bus. Posting Group" := DtldCVLedgEntryBuf."VAT Bus. Posting Group";
          GLEntry."VAT Prod. Posting Group" := DtldCVLedgEntryBuf."VAT Prod. Posting Group";
          GLEntry."Tax Area Code" := DtldCVLedgEntryBuf."Tax Area Code";
          GLEntry."Tax Liable" := DtldCVLedgEntryBuf."Tax Liable";
          GLEntry."Tax Group Code" := DtldCVLedgEntryBuf."Tax Group Code";
          GLEntry."Use Tax" := DtldCVLedgEntryBuf."Use Tax";
          InsertGLEntry(TRUE);
    
          InsertVatEntriesFromTemp(DtldCVLedgEntryBuf);
        END; 
    ...
    

          

前提条件

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

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

                
              

アンインストール情報

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

状態

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

参考資料

VSTF DynamicsNAV SE: 278603;283382

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