Nu toate intrările în registrul de clienți care sunt generate dintr-o factură sunt închise atunci când înregistrați factura în versiunea italiană de Microsoft Dynamics NAV

Se aplică la
Dynamics NAV 2009 Service Pack 1 Dynamics NAV 2009 Microsoft Dynamics NAV 5.0 Service Pack 1

Articolele publicate rapid furnizează informații direct din cadrul organizației de asistență Microsoft. Informațiile conținute aici sunt create ca răspuns la subiecte emergente sau unice sau sunt menite să completeze alte informații din baza de cunoștințe.

Acest articol se aplică la Microsoft Dynamics NAV pentru setările regionale de limbă italiană (it).

Simptome

Să presupunem că aveți o factură care utilizează mai multe tarife, iar metoda de plată a facturii utilizează un număr de cont de sold din versiunea italiană a Microsoft Dynamics NAV. Atunci când contabilizați factura utilizând o plată automată, Microsoft Dynamics NAV creează mai multe linii pentru factură și o linie pentru plată. Cu toate acestea, doar prima factură este aplicată și închisă. Celelalte facturi sunt încă deschise.

Această problemă apare în cazul următoarelor produse:

  • Versiunea italiană de Microsoft Dynamics NAV 2009 Service Pack 1
  • Versiunea italiană de Microsoft Dynamics NAV 2009
  • Versiunea italiană de Microsoft Dynamics NAV 5.0 Service Pack 1

Rezolvare

Informații despre remedierea rapidă

O remediere rapidă acceptată este acum disponibilă de la Microsoft. Însă, scopul său este doar să corecteze problema descrisă în acest articol. Aplicați-o doar sistemelor care se confruntă cu această problemă specifică. Această remediere rapidă poate fi testată suplimentar. De aceea, dacă nu sunteți grav afectat de această problemă, vă recomandăm să așteptați următorul pachet Service Pack Microsoft Dynamics NAV sau următoarea versiune Microsoft Dynamics NAV care conține această remediere rapidă.

Notă În cazuri speciale, costurile implicate de obicei pentru apelurile de asistență pot fi revocate dacă un specialist în asistență tehnică pentru Microsoft Dynamics și produsele asociate stabilește că o anumită actualizare va rezolva problema. Costurile uzuale de suport se vor aplica pentru întrebări suplimentare de suport și pentru probleme ce nu fac obiectul actualizării în chestiune.

            
          

Informații despre instalare

Microsoft oferă exemple de programare numai în scop ilustrativ, fără nicio garanție explicită sau implicită. Aceasta include, dar nu se limitează la, garanțiile implicite de vandabilitate sau adecvare pentru un anumit scop. Acest articol presupune că sunteți familiarizat cu limbajul de programare prezentat și cu instrumentele utilizate pentru a crea și a depana proceduri. Inginerii de asistență Microsoft pot ajuta la explicarea funcționalității unei anumite proceduri, însă nu vor modifica aceste exemple pentru a furniza funcționalitate suplimentară și nu vor construi proceduri pentru a răspunde cerințelor dvs. specifice.

Notă Înainte de a instala această remediere rapidă, verificați dacă toți utilizatorii clientului Microsoft Navision sunt deconectați de la sistem. Printre aceștia se numără utilizatorii clienților Microsoft Navision Application Services (NAS). Ar trebui să fiți singurul utilizator client conectat atunci când implementați această remediere rapidă.

Pentru a implementa această remediere rapidă, trebuie să aveți o licență de dezvoltator.

Recomandăm ca contului de utilizator din fereastra Conectări Windows sau din fereastra Conectări bază de date să primească ID-ul de rol "SUPER". În cazul în care contului de utilizator nu i se poate atribui ID-ul de rol "SUPER", trebuie să verificați dacă acel cont de utilizator are următoarele permisiuni:

  • Permisiunea Modificare pentru obiectul pe care îl veți modifica.
  • Permisiunea de executare pentru obiectul cu ID obiect de sistem 5210 și pentru obiectul ID obiect de sistem 9015.

                
Notă: nu trebuie să aveți drepturi asupra depozitelor de date decât dacă trebuie să efectuați repararea datelor.

Modificări de cod

Notă: testați întotdeauna remedierile de cod într-un mediu controlat înainte de a aplica remedierile la computerele de producție.
Pentru a aplica această remediere rapidă, urmați acești pași:

  1. Modificați cheia din tabelul Intrare registru particularizat (21) după cum urmează:
    Unul existent

    • Activat:Da
    • Cheie: Tip document,Nr. document,Ocurență document
    • SumIndexFields:

    Prima înlocuire

    • Activat:Da
    • Cheie: Tip document,Nr. document,Ocurență document
    • SumIndexFields: Disc pmt. rămas Posibil
  2. Se modifică cheia din tabelul Intrare registru distribuitor (25) după cum urmează:
    Unul existent

    • Activat:Da
    • Cheie: Tip document,Nr. document,Ocurență document,Nr. distribuitor
    • SumIndexFields:

    Prima înlocuire

    • Activat:Da
    • Cheie: Tip document,Nr. document,Ocurență document,Nr. distribuitor
    • SumIndexFields: Disc pmt. rămas Posibil
  3. Adăugați o variabilă locală în funcția ApplyCustLedgEntry din generație. Jnl.-Post Line codeunit (12), apoi specificați variabila după cum urmează:

    • Nume: PaymentTerms
    • Tip de date: Înregistrare
    • Subtip: Termeni de plată
  4. Modificați codul din funcția ApplyCustLedgEntry din generație. Unitatea de cod Jnl.-Post Line (12), după cum urmează:
    Cod existent 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
    ...
    
    

    Cod de înlocuire 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
    ...
    
    

    Cod existent 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
    ...
    
    

    Codul de înlocuire 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
    ...
    
    

    Cod existent 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
    ...
    
    

    Codul de înlocuire 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. Adăugați o variabilă locală în funcția ApplyVendLedgEntry din gen. Jnl.-Post Line codeunit (12), apoi specificați variabila după cum urmează:

    • Nume: PaymentTerms
    • Tip de date: Înregistrare
    • Subtip: Termeni de plată
  6. Modificați codul din funcția ApplyVendLedgEntry din generația. Unitatea de cod Jnl.-Post Line (12), după cum urmează:
    Cod existent 1

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

    Cod de înlocuire 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
    ...
    
    

    Cod existent 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
    ...
    
    

    Codul de înlocuire 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
    ...
    
    

    Cod existent 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
    ...
    
    

    Codul de înlocuire 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. Adăugați o variabilă locală în triggerul OnRun din unitatea de cod Sales-Post (80), apoi specificați variabila după cum urmează:

    • Nume: TotalRemainPmtDiscPossible
    • Tip de date: Zecimal
  8. Modificați codul din triggerul OnRun din unitatea de cod Sales-Post (80), după cum urmează:
    Cod existent 1

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

    Cod de înlocuire 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;
    ...
    
    

    Cod existent 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;
    ...
    
    

    Codul de înlocuire 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. Adăugați o variabilă locală în triggerul OnRun din codeunti Purch.-Post (90), apoi specificați variabila după cum urmează:

    • Nume: TotalRemainPmtDiscPossible
    • Tip de date: Zecimal
  10. Modificați codul din declanșatorul OnRun din codul Purch.-Post (90), după cum urmează:
    Cod existent 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";
    ...
    
    

    Cod de înlocuire 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";
    
    ...
    
    

    Cod existent 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";
    ...
    
    

    Codul de înlocuire 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";
    ...
    
    

Cerințe preliminare

Trebuie să aveți instalat unul dintre următoarele produse pentru a aplica această remediere rapidă:

  • Versiunea italiană de Microsoft Dynamics NAV 2009 Service Pack 1
  • Versiunea italiană de Microsoft Dynamics NAV 2009
  • Versiunea italiană de Microsoft Dynamics NAV 5.0 Service Pack 1

              

Eliminarea informațiilor

Nu puteți elimina această remediere rapidă.

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft care sunt listate în secțiunea „Se aplică la”.

MICROSOFT ȘI/SAU FURNIZORII SĂI NU FAC NICIO DECLARAȚIE SAU GARANȚIE CU PRIVIRE LA ADECVAREA, FIABILITATEA SAU ACURATEȚEA INFORMAȚIILOR CONȚINUTE ÎN DOCUMENTELE ȘI GRAFICELE ASOCIATE PUBLICATE PE ACEST SITE WEB ("MATERIALELE") ÎN NICIUN SCOP.

MATERIALELE POT INCLUDE INEXACTITĂȚI TEHNICE SAU ERORI TIPOGRAFICE ȘI POT FI REVIZUITE ÎN ORICE MOMENT, FĂRĂ NOTIFICARE PREALABILĂ. ÎN MĂSURA MAXIMĂ PERMISĂ DE LEGISLAȚIA APLICABILĂ, MICROSOFT ȘI/SAU FURNIZORII SĂI EXCLUD TOATE REPREZENTĂRILE, GARANȚIILE ȘI CONDIȚIILE, EXPRESE, IMPLICITE SAU LEGALE, INCLUSIV, DAR FĂRĂ A SE LIMITA LA, DECLARAȚII, GARANȚII SAU CONDIȚII DE TITLU, NEÎNCĂLCARE A DREPTURILOR, CONDIȚII SAU CALITĂȚI SATISFĂCĂTOARE, VANDABILITATE ȘI ADECVARE PENTRU UN ANUMIT SCOP, ÎN CEEA CE PRIVEȘTE MATERIALELE.