イタリア語バージョンの Microsoft Dynamics NAV で請求書を転記すると、請求書から生成されたすべての顧客台帳エントリが閉じられるわけではありません

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

迅速に公開された記事は、Microsoft サポート organization内から直接情報を提供します。 ここに含まれる情報は、新しいトピックまたは一意のトピックに応答して作成されるか、または他のナレッジ ベース情報を補完することを目的としています。

この記事は、イタリア語 (it) 言語ロケールの Microsoft Dynamics NAV に適用されます。

現象

複数のレートを使用する請求書があり、請求書の支払い方法でイタリア語バージョンの Microsoft Dynamics NAV の残高勘定番号が使用されているとします。 自動支払を使用して請求書を転記すると、Microsoft Dynamics NAV によって請求書に複数の明細行が作成され、支払に 1 行が作成されます。 ただし、最初の請求書のみが適用され、閉じられます。 他の請求書は引き続き開いています。

この問題は、次の製品で発生します。

  • Microsoft Dynamics NAV 2009 Service Pack 1 のイタリア語バージョン
  • Microsoft Dynamics NAV 2009 のイタリア語バージョン
  • Microsoft Dynamics NAV 5.0 Service Pack 1 のイタリア語バージョン

解決策

修正プログラムの情報

サポートされている修正プログラムが Microsoft から入手できるようになりました。 ただし、この記事で説明されている問題を修正することのみを目的としています。 この特定の問題が発生しているシステムにのみ適用します。 この修正プログラムは、追加のテストを受け取る場合があります。 したがって、この問題の影響を大きく受けない場合は、次の Microsoft Dynamics NAV 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. Cust のキーを変更します。台帳エントリ テーブル (21) を次のように変更します。
    既存のもの

    • 有効:はい
    • キー: ドキュメントの種類、ドキュメントの種類、ドキュメントの出現
    • SumIndexFields:

    置き換え 1

    • 有効:はい
    • キー: ドキュメントの種類、ドキュメントの種類、ドキュメントの出現
    • SumIndexFields: 残りの Pmt. ディスク。 可能です。
  2. 仕入先台帳エントリ テーブル (25) のキーを次のように変更します。
    既存のもの

    • 有効:はい
    • キー: ドキュメントの種類、ドキュメントの種類、ドキュメントの発生、ベンダーのいいえ。
    • SumIndexFields:

    置き換え 1

    • 有効:はい
    • キー: ドキュメントの種類、ドキュメントの種類、ドキュメントの発生、ベンダーのいいえ。
    • SumIndexFields: 残りの Pmt. ディスク。 可能です。
  3. Gen の ApplyCustLedgEntry 関数にローカル変数を追加します。 Jnl.-Post Line codeunit (12)、次のように変数を指定します。

    • 名前: PaymentTerms
    • DataType: レコード
    • サブタイプ: 支払条件
  4. Gen の ApplyCustLedgEntry 関数のコードを変更します。 Jnl.-Post Line codeunit (12) を次に示します。
    既存のコード 1

    ...
    END ELSE
        ApplnRoundingPrecision := GLSetup."Appln. Rounding Precision";
    ApplyingDate := GenJnlLine."Posting Date";
    
    IF GenJnlLine."Applies-to Doc. No." <> '' THEN BEGIN
      // Find the entry to be applied to
    ...
    
    

    置換コード 1

    ...
    END ELSE
        ApplnRoundingPrecision := GLSetup."Appln. Rounding Precision";
    ApplyingDate := GenJnlLine."Posting Date";
    // Add the following lines.
    Cust.GET(GenJnlLine."Account No.");    
    IF Cust."Payment Terms Code" <> '' THEN BEGIN  
      PaymentTerms.GET(Cust."Payment Terms Code"); 
      PaymentTerms.CALCFIELDS("Payment Nos.");
    END;  
    // End of the added lines.
    
    IF GenJnlLine."Applies-to Doc. No." <> '' THEN BEGIN
      // Find the entry to be applied to
    ...
    
    

    既存のコード 2

    ...
         (OldCustLedgEntry.COUNT=1)
      THEN
        GenJnlLine."Applies-to Occurrence No." := 1;
    
    // Delete the following line.
      OldCustLedgEntry.SETRANGE("Document Occurrence",GenJnlLine."Applies-to Occurrence No.");
    
      OldCustLedgEntry.SETRANGE(Open,TRUE);
    
      // Delete the following lines.
      OldCustLedgEntry.FINDFIRST;
      OldCustLedgEntry.TESTFIELD("Bank Receipt Issued", FALSE);  
      OldCustLedgEntry.TESTFIELD(Positive,NOT NewCVLedgEntryBuf.Positive);
      IF OldCustLedgEntry."Posting Date" > ApplyingDate THEN
        ApplyingDate := OldCustLedgEntry."Posting Date";
      GenJnlApply.CheckAgainstApplnCurrency(  
        NewCVLedgEntryBuf."Currency Code",
        OldCustLedgEntry."Currency Code", 
        GenJnlLine."Account Type"::Customer,
        TRUE);
      TempOldCustLedgEntry := OldCustLedgEntry;
      TempOldCustLedgEntry.INSERT;
    // End of the deleted lines.
    
    END ELSE BEGIN
      // Find the first old entry (Invoice) which the new entry (Payment) should apply to
    ...
    
    

    置換コード 2

    ...
         (OldCustLedgEntry.COUNT=1)
      THEN
        GenJnlLine."Applies-to Occurrence No." := 1;
      OldCustLedgEntry.SETRANGE(Open,TRUE);
    
      // Add the following lines.
      IF OldCustLedgEntry.FINDSET THEN
        REPEAT
          OldCustLedgEntry.TESTFIELD("Bank Receipt Issued", FALSE); 
          OldCustLedgEntry.TESTFIELD(Positive,NOT NewCVLedgEntryBuf.Positive);
          IF OldCustLedgEntry."Posting Date" > ApplyingDate THEN
            ApplyingDate := OldCustLedgEntry."Posting Date";  
            GenJnlApply.CheckAgainstApplnCurrency( 
            NewCVLedgEntryBuf."Currency Code", 
            OldCustLedgEntry."Currency Code", 
            GenJnlLine."Account Type"::Customer,
            TRUE);             
           TempOldCustLedgEntry := OldCustLedgEntry; 
           TempOldCustLedgEntry.INSERT;
         UNTIL OldCustLedgEntry.NEXT = 0;  
      IF NOT TempOldCustLedgEntry.FINDSET THEN
        EXIT;   
    // End of the added lines.
    
    END ELSE BEGIN
      // Find the first old entry (Invoice) which the new entry (Payment) should apply to
    ...
    
    

    既存のコード 3

    ...
      TempOldCustLedgEntry.DELETE;
    
        // Find the next old entry for application of the new entry
    
    // Delete the following line.
      IF GenJnlLine."Applies-to Doc. No." <> '' THEN
    
        Completed := TRUE
    ...
    
    

    置換コード 3

    ...
      TempOldCustLedgEntry.DELETE;
    
        // Find the next old entry for application of the new entry
    
    // Add the following line.
      IF (GenJnlLine."Applies-to Doc. No." <> '') AND (PaymentTerms."Payment Nos." <= 1) THEN
    
        Completed := TRUE
    ...
    
    
  5. Gen の ApplyVendLedgEntry 関数にローカル変数を追加します。 Jnl.-Post Line codeunit (12)、次のように変数を指定します。

    • 名前: PaymentTerms
    • DataType: レコード
    • サブタイプ: 支払条件
  6. Gen の ApplyVendLedgEntry 関数のコードを変更します。 Jnl.-Post Line codeunit (12) を次に示します。
    既存のコード 1

    ...
    ApplyingDate := GenJnlLine."Posting Date";
    
    IF GenJnlLine."Applies-to Doc. No." <> '' THEN BEGIN
      // Find the entry to be applied to
    ...
    
    

    置換コード 1

    ...
    ApplyingDate := GenJnlLine."Posting Date";
    // Add the following lines.
    Vend.GET(GenJnlLine."Account No.");   
    IF Vend."Payment Terms Code" <> '' THEN BEGIN  
      PaymentTerms.GET(Vend."Payment Terms Code"); 
      PaymentTerms.CALCFIELDS("Payment Nos.");
    END;  
    // End of the added lines.
    
    IF GenJnlLine."Applies-to Doc. No." <> '' THEN BEGIN
      // Find the entry to be applied to
    ...
    
    

    既存のコード 2

    ...
        GenJnlLine."Applies-to Occurrence No." := 1;
    
    // Delete the following line.  
    OldVendLedgEntry.SETRANGE("Document Occurrence",GenJnlLine."Applies-to Occurrence No.");
    
      OldVendLedgEntry.SETRANGE(Open,TRUE);
      OldVendLedgEntry.SETRANGE("On Hold",'');
    
     // Delete the following lines.  
      OldVendLedgEntry.FINDFIRST;
      OldVendLedgEntry.TESTFIELD(Positive,NOT NewCVLedgEntryBuf.Positive); 
      IF OldVendLedgEntry."Posting Date" > ApplyingDate THEN 
        ApplyingDate := OldVendLedgEntry."Posting Date"; 
      GenJnlApply.CheckAgainstApplnCurrency( 
        NewCVLedgEntryBuf."Currency Code",  
        OldVendLedgEntry."Currency Code",  
        GenJnlLine."Account Type"::Vendor, 
        TRUE);  
      TempOldVendLedgEntry := OldVendLedgEntry;
      TempOldVendLedgEntry.INSERT;
     // End of the deleted lines.
    
    END ELSE BEGIN
      // Find the first old entry (Invoice) which the new entry (Payment) should apply to
    ...
    
    

    置換コード 2

    ...
        GenJnlLine."Applies-to Occurrence No." := 1;
    
      OldVendLedgEntry.SETRANGE(Open,TRUE);
      OldVendLedgEntry.SETRANGE("On Hold",'');
    
     // Add the following lines.
      IF OldVendLedgEntry.FINDSET THEN  
        REPEAT  
          OldVendLedgEntry.TESTFIELD(Positive,NOT NewCVLedgEntryBuf.Positive);
          IF OldVendLedgEntry."Posting Date" > ApplyingDate THEN  
            ApplyingDate := OldVendLedgEntry."Posting Date"; 
          GenJnlApply.CheckAgainstApplnCurrency(
            NewCVLedgEntryBuf."Currency Code",
            OldVendLedgEntry."Currency Code", 
            GenJnlLine."Account Type"::Vendor,
            TRUE);
          TempOldVendLedgEntry := OldVendLedgEntry;
          TempOldVendLedgEntry.INSERT;
        UNTIL OldVendLedgEntry.NEXT = 0; 
      IF NOT TempOldVendLedgEntry.FINDSET THEN 
        EXIT; 
     // End of the added lines.
    
    END ELSE BEGIN
      // Find the first old entry (Invoice) which the new entry (Payment) should apply to
    ...
    
    

    既存のコード 3

    ...
      TempOldVendLedgEntry.DELETE;
    
      // Find the next old entry to apply to the new entry
    
    // Delete the following line.
      IF GenJnlLine."Applies-to Doc. No." <> '' THEN 
    
        Completed := TRUE
    ...
    
    

    置換コード 3

    ...
      TempOldVendLedgEntry.DELETE;
    
      // Find the next old entry to apply to the new entry
    
    // Add the following line.
      IF (GenJnlLine."Applies-to Doc. No." <> '') AND (PaymentTerms."Payment Nos." <= 1)  THEN
    
        Completed := TRUE
    ...
    
    
  7. Sales-Post codeunit (80) の OnRun トリガーにローカル変数を追加し、次のように変数を指定します。

    • 名前: TotalRemainPmtDiscPossible
    • DataType: Decimal
  8. Sales-Post codeunit (80) の OnRun トリガーのコードを次のように変更します。
    既存のコード 1

    ...
        // Balancing account
        IF "Bal. Account No." <> '' THEN BEGIN
          Window.UPDATE(5,1);
          CustLedgEntry.FINDLAST;
          GenJnlLine.INIT;
    ...
    
    

    置換コード 1

    ...
        // Balancing account
        IF "Bal. Account No." <> '' THEN BEGIN
          Window.UPDATE(5,1);
    
    // Add the following lines.
          CustLedgEntry.RESET;
          CustLedgEntry.SETCURRENTKEY("Document Type","Document No.");
          CustLedgEntry.SETRANGE("Document Type","Document Type");
          CustLedgEntry.SETRANGE("Document No.",GenJnlLineDocNo);
          CustLedgEntry.CALCSUMS("Remaining Pmt. Disc. Possible"); 
          TotalRemainPmtDiscPossible := CustLedgEntry."Remaining Pmt. Disc. Possible"; 
    // End of the added lines.
    
          CustLedgEntry.FINDLAST;
          GenJnlLine.INIT;
    ...
    
    

    既存のコード 2

    ...
          GenJnlLine."Currency Code" := "Currency Code";
          GenJnlLine.Amount :=
    
    // Delete the following line.
            TotalSalesLine."Amount Including VAT" + CustLedgEntry."Remaining Pmt. Disc. Possible";
    
          GenJnlLine."Source Currency Code" := "Currency Code";
          GenJnlLine."Source Currency Amount" := GenJnlLine.Amount;
    ...
    
    

    置換コード 2

    ...
          GenJnlLine."Currency Code" := "Currency Code";
          GenJnlLine.Amount :=
    
    // Add the following line.
            TotalSalesLine."Amount Including VAT" + TotalRemainPmtDiscPossible;
    
          GenJnlLine."Source Currency Code" := "Currency Code";
          GenJnlLine."Source Currency Amount" := GenJnlLine.Amount;
    ...
    
    
  9. Purch.-Post codeunti (90) の OnRun トリガーにローカル変数を追加し、次のように変数を指定します。

    • 名前: TotalRemainPmtDiscPossible
    • DataType: Decimal
  10. Purch.-Post codeunti (90) の OnRun トリガーのコードを次のように変更します。
    既存のコード 1

    ...
        GenJnlPostLine.RunWithCheck(GenJnlLine,TempJnlLineDim);
    
        // Balancing account
        IF "Bal. Account No." <> '' THEN BEGIN
          IF GUIALLOWED THEN
            Window.UPDATE(5,1);
          VendLedgEntry.FINDLAST;
          GenJnlLine.INIT;
          GenJnlLine."Posting Date" := "Posting Date";
    ...
    
    

    置換コード 1

    ...
        GenJnlPostLine.RunWithCheck(GenJnlLine,TempJnlLineDim);
    
        // Balancing account
        IF "Bal. Account No." <> '' THEN BEGIN
          IF GUIALLOWED THEN
            Window.UPDATE(5,1);
    
    // Add the following lines.
          VendLedgEntry.RESET;  
          VendLedgEntry.SETCURRENTKEY("Document Type","Document No.");
          VendLedgEntry.SETRANGE("Document Type","Document Type"); 
          VendLedgEntry.SETRANGE("Document No.",GenJnlLineDocNo); 
          VendLedgEntry.CALCSUMS("Remaining Pmt. Disc. Possible"); 
          TotalRemainPmtDiscPossible := VendLedgEntry."Remaining Pmt. Disc. Possible";
    // End of the added lines.
    
          VendLedgEntry.FINDLAST;
          GenJnlLine.INIT;
          GenJnlLine."Posting Date" := "Posting Date";
    
    ...
    
    

    既存のコード 2

    ...
          GenJnlLine."Currency Code" := "Currency Code";
          GenJnlLine.Amount := TotalPurchLine."Amount Including VAT" +
    
    // Delete the following line.
            VendLedgEntry."Remaining Pmt. Disc. Possible"; 
    
          GenJnlLine.Correction := Correction;
          GenJnlLine."Source Currency Code" := "Currency Code";
    ...
    
    

    置換コード 2

    ...
          GenJnlLine."Currency Code" := "Currency Code";
          GenJnlLine.Amount := TotalPurchLine."Amount Including VAT" +
    
    // Add the following line.
            TotalRemainPmtDiscPossible;
    
          GenJnlLine.Correction := Correction;
          GenJnlLine."Source Currency Code" := "Currency Code";
    ...
    
    

前提条件

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

  • Microsoft Dynamics NAV 2009 Service Pack 1 のイタリア語バージョン
  • Microsoft Dynamics NAV 2009 のイタリア語バージョン
  • Microsoft Dynamics NAV 5.0 Service Pack 1 のイタリア語バージョン

              

アンインストール情報

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

状態

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

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

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