Acest articol se aplică la Microsoft Dynamics NAV pentru toate țările și toate limbi regionale.
Simptome
Să presupunem că Setați Oldest se aplică ca Metodă de aplicare pentru un furnizor în Microsoft Dynamics NAV 2009. Și publicați un credit memo și două facturi utilizând un jurnal. Ca urmare, sistemul se aplică nota de credit pentru ambele facturi. Mai târziu, când nu se aplică toate documentele. În această situație, atunci când executați funcția inversă tranzacții pentru linie de notă de credit, sistemul creează intrări contabilitate inutile.
Această problemă se produce în următoarele produse:
-
Microsoft Dynamics NAV 2009
-
Microsoft Dynamics NAV 2009 R2
Rezolvare
Informații despre remedierea rapidă
Un hotfix acceptat este acum disponibil de la Microsoft. Cu toate acestea, acesta este destinat numai corectării problemei descrise în acest articol. Aplicați-o numai pe sistemele care întâmpină această problemă anume. Această remediere rapidă poate să necesite testare 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 2009 sau versiunea Microsoft Dynamics NAV următoare, care conține această remediere rapidă.
Notă În cazuri speciale, costurile implicate de obicei pentru asistență apeluri pot fi anulate dacă un specialist în asistență tehnică pentru Microsoft Dynamics și produse asociate stabilește că o anumită actualizare va rezolva problema. Se vor aplica costurile uzuale de asistenţă pentru întrebări suplimentare de asistenţă şi pentru probleme ce nu fac obiectul actualizării în cauză.
Informaţii despre instalare
Microsoft furnizează exemple de programare scop ilustrativ, fără nicio garanţie explicită sau implicită. Aceasta include, dar nu se limitează la, garanţiile implicite de vandabilitate sau de potrivire pentru un anumit scop. Acest articol presupune că sunteţi familiarizat cu limbajul de programare care este prezentat şi cu instrumentele utilizate pentru a crea şi a depana proceduri. Specialiștii în asistență Microsoft pot ajuta la explicarea funcționalității unei anumite proceduri. Cu toate acestea, nu vor modifica aceste exemple pentru a furniza funcționalitate suplimentară construi proceduri pentru a răspunde cerințelor dvs. specifice.
Notă Înainte de a instala această remediere rapidă, verificați dacă toți utilizatorii de client Microsoft Dynamics NAV sunt log off sistemul. Aceasta include servicii Microsoft Dynamics NAV Application Server (NAS). Ar trebui să fie singurul client utilizatorului care este conectat când implementați această remediere rapidă.
Pentru a implementa această remediere rapidă, trebuie să aveți o licență de dezvoltare.
Vă recomandăm că contul de utilizator în fereastra Conectări Windows sau în fereastra Conectări bază de date se atribuie "SUPER" rolul ID-ul. În cazul în care contul de utilizator nu poate fi atribuit ID-ul "SUPER" rolul, trebuie să verificați că contul de utilizator are următoarele permisiuni:
-
Modify permisiunea pentru obiectul care se va schimba.
-
Permisiunea de executare pentru obiectul sistem obiect ID 5210 și sistem obiect ID 9015
obiect.
Notă Nu trebuie să aveți drepturi de la magazine de date decât dacă trebuie să efectuați o reparare de date.
Modificări de cod
Notă Întotdeauna test cod remediază într-un mediu controlat înainte de a aplica remedieri pentru computerele de producție.
Pentru a rezolva această problemă, urmați acești pași:
-
Modificați codul din funcția InsertReversalEntry în tabelul de intrare inversare (179) după cum urmează:
Cod existent 1...CLEAR(DtldCustLedgEntry);
DtldCustLedgEntry.SETCURRENTKEY("Transaction No.","Customer No.","Entry Type");
DtldCustLedgEntry.SETRANGE(DtldCustLedgEntry."Transaction No.",CustLedgEntry."Transaction No.");
DtldCustLedgEntry.SETRANGE(DtldCustLedgEntry."Customer No.",CustLedgEntry."Customer No.");
DtldCustLedgEntry.SETFILTER(
DtldCustLedgEntry."Entry Type",'<>%1',DtldCustLedgEntry."Entry Type"::"Initial Entry");
// Delete the following line.
IF DtldCustLedgEntry.FIND('-') THEN BEGIN
// End of the deleted line.
IF RevType = RevType::Register THEN
ERROR(Text012,Number);
// Delete the following lines.
CLEAR(DtldCustLedgEntry);
DtldCustLedgEntry.SETCURRENTKEY("Cust. Ledger Entry No.");
DtldCustLedgEntry.SETRANGE("Cust. Ledger Entry No.",CustLedgEntry."Entry No.");
DtldCustLedgEntry.SETRANGE(Unapplied,TRUE);
IF DtldCustLedgEntry.FIND('-') THEN BEGIN
REPEAT
TempRevertTransactionNo.Number := DtldCustLedgEntry."Transaction No.";
IF TempRevertTransactionNo.INSERT THEN;
UNTIL DtldCustLedgEntry.NEXT = 0;
END;
END;
// End of the deleted lines.
UNTIL CustLedgEntry.NEXT = 0;
IF VendLedgEntry.FIND('-') THEN
REPEAT
CLEAR(ReversalEntry);
...Înlocuirea cod 1
...CLEAR(DtldCustLedgEntry);
DtldCustLedgEntry.SETCURRENTKEY("Transaction No.","Customer No.","Entry Type");
DtldCustLedgEntry.SETRANGE(DtldCustLedgEntry."Transaction No.",CustLedgEntry."Transaction No.");
DtldCustLedgEntry.SETRANGE(DtldCustLedgEntry."Customer No.",CustLedgEntry."Customer No.");
DtldCustLedgEntry.SETFILTER(
DtldCustLedgEntry."Entry Type",'<>%1',DtldCustLedgEntry."Entry Type"::"Initial Entry");
// Add the following line.
IF NOT DtldCustLedgEntry.ISEMPTY THEN
// End of the added line.
IF RevType = RevType::Register THEN
ERROR(Text012,Number);
// Add the following line.
CheckDtldCustLedgEntry(CustLedgEntry);
// End of the added line.
UNTIL CustLedgEntry.NEXT = 0;
IF VendLedgEntry.FIND('-') THEN
REPEAT
CLEAR(ReversalEntry);
...Cod existent 2
...CLEAR(DtldVendLedgEntry);
DtldVendLedgEntry.SETCURRENTKEY("Transaction No.","Vendor No.","Entry Type");
DtldVendLedgEntry.SETRANGE(DtldVendLedgEntry."Transaction No.",VendLedgEntry."Transaction No.");
DtldVendLedgEntry.SETRANGE(DtldVendLedgEntry."Vendor No.",VendLedgEntry."Vendor No.");
DtldVendLedgEntry.SETFILTER(
DtldVendLedgEntry."Entry Type",'<>%1',DtldVendLedgEntry."Entry Type"::"Initial Entry");
// Delete the following line.
IF DtldVendLedgEntry.FIND('-') THEN BEGIN
// End of the deleted line.
IF RevType = RevType::Register THEN
ERROR(Text012,Number);
// Delete the following lines.
CLEAR(DtldVendLedgEntry);
DtldVendLedgEntry.SETCURRENTKEY("Vendor Ledger Entry No.");
DtldVendLedgEntry.SETRANGE("Vendor Ledger Entry No.",VendLedgEntry."Entry No.");
DtldVendLedgEntry.SETRANGE(Unapplied,TRUE);
IF DtldVendLedgEntry.FIND('-') THEN BEGIN
REPEAT
TempRevertTransactionNo.Number := DtldVendLedgEntry."Transaction No.";
IF TempRevertTransactionNo.INSERT THEN;
UNTIL DtldVendLedgEntry.NEXT = 0;
END;
END;
// End of the deleted lines.
UNTIL VendLedgEntry.NEXT = 0;
IF BankAccLedgEntry.FIND('-') THEN
REPEAT
CLEAR(ReversalEntry);
...Înlocuirea cod 2
...CLEAR(DtldVendLedgEntry);
DtldVendLedgEntry.SETCURRENTKEY("Transaction No.","Vendor No.","Entry Type");
DtldVendLedgEntry.SETRANGE(DtldVendLedgEntry."Transaction No.",VendLedgEntry."Transaction No.");
DtldVendLedgEntry.SETRANGE(DtldVendLedgEntry."Vendor No.",VendLedgEntry."Vendor No.");
DtldVendLedgEntry.SETFILTER(
DtldVendLedgEntry."Entry Type",'<>%1',DtldVendLedgEntry."Entry Type"::"Initial Entry");
// Add the following line.
IF NOT DtldVendLedgEntry.ISEMPTY THEN
// End of the added line.
IF RevType = RevType::Register THEN
ERROR(Text012,Number);
// Add the following line.
CheckDtldVendLedgEntry(VendLedgEntry);
// End of the added line.
UNTIL VendLedgEntry.NEXT = 0;
IF BankAccLedgEntry.FIND('-') THEN
REPEAT
CLEAR(ReversalEntry);
... -
Modificați codul din funcția CheckDtldCustLedgEntry în tabelul de intrare inversare (179) după cum urmează:
Cod existent...LOCAL PROCEDURE CheckDtldCustLedgEntry@2(CustLedgEntry@1000 : Record 21) : Boolean;
VAR
DtldCustLedgEntry@1001 : Record 379;
BEGIN
// Delete the following lines.
DtldCustLedgEntry.SETCURRENTKEY("Cust. Ledger Entry No.");
DtldCustLedgEntry.SETRANGE("Cust. Ledger Entry No.",CustLedgEntry."Entry No.");
IF DtldCustLedgEntry.FIND('-') THEN
REPEAT
IF (DtldCustLedgEntry."Entry Type" <> DtldCustLedgEntry."Entry Type"::"Initial Entry") AND
(NOT DtldCustLedgEntry.Unapplied)
THEN
ERROR(
Text000,CustLedgEntry.TABLECAPTION,CustLedgEntry."Entry No.");
UNTIL DtldCustLedgEntry.NEXT = 0;
// End of the deleted lines.
END;
...Cod de înlocuire
...LOCAL PROCEDURE CheckDtldCustLedgEntry@2(CustLedgEntry@1000 : Record 21) : Boolean;
VAR
DtldCustLedgEntry@1001 : Record 379;
BEGIN
// Add the following lines.
DtldCustLedgEntry.SETCURRENTKEY("Cust. Ledger Entry No.","Entry Type");
DtldCustLedgEntry.SETRANGE("Cust. Ledger Entry No.",CustLedgEntry."Entry No.");
DtldCustLedgEntry.SETFILTER("Entry Type",'<>%1',DtldCustLedgEntry."Entry Type"::"Initial Entry");
DtldCustLedgEntry.SETRANGE(Unapplied,FALSE);
IF NOT DtldCustLedgEntry.ISEMPTY THEN
ERROR(Text000,CustLedgEntry.TABLECAPTION,CustLedgEntry."Entry No.");
// End of the added lines.
END;
... -
Modificați codul din funcția CheckDtldVendLedgEntry în tabelul de intrare inversare (179) după cum urmează:
Cod existent...LOCAL PROCEDURE CheckDtldVendLedgEntry@28(VendLedgEntry@1000 : Record 25) : Boolean;
VAR
DtldVendLedgEntry@1001 : Record 380;
BEGIN
// Delete the following lines.
DtldVendLedgEntry.SETCURRENTKEY("Vendor Ledger Entry No.");
DtldVendLedgEntry.SETRANGE("Vendor Ledger Entry No.",VendLedgEntry."Entry No.");
IF DtldVendLedgEntry.FIND('-') THEN
REPEAT
IF (DtldVendLedgEntry."Entry Type" <> DtldVendLedgEntry."Entry Type"::"Initial Entry") AND
(NOT DtldVendLedgEntry.Unapplied)
THEN
ERROR(
Text000,VendLedgEntry.TABLECAPTION,VendLedgEntry."Entry No.");
UNTIL DtldVendLedgEntry.NEXT = 0;
// End of the deleted lines.
END;
...Cod de înlocuire
...LOCAL PROCEDURE CheckDtldVendLedgEntry@28(VendLedgEntry@1000 : Record 25) : Boolean;
VAR
DtldVendLedgEntry@1001 : Record 380;
BEGIN
// Add the following lines.
DtldVendLedgEntry.SETCURRENTKEY("Vendor Ledger Entry No.","Entry Type");
DtldVendLedgEntry.SETRANGE("Vendor Ledger Entry No.",VendLedgEntry."Entry No.");
DtldVendLedgEntry.SETFILTER("Entry Type",'<>%1',DtldVendLedgEntry."Entry Type"::"Initial Entry");
DtldVendLedgEntry.SETRANGE(Unapplied,FALSE);
IF NOT DtldVendLedgEntry.ISEMPTY THEN
ERROR(Text000,VendLedgEntry.TABLECAPTION,VendLedgEntry."Entry No.");
// End of the added lines.
END;
...
Cerințe preliminare
Trebuie să aveți Microsoft Dynamics NAV 2009 instalat pentru a aplica această remediere rapidă.
Eliminare informaţii
Nu se poate elimina această remediere rapidă.
Stare
Microsoft a confirmat că aceasta este o problemă cu produsele Microsoft enumerate în secţiunea „Se aplică la".
Notă Acesta este un articol "rapid publicat" creat direct în cadrul organizației de asistență Microsoft. Informațiile conținute în acest document sunt furnizate ca răspuns la problemele care apar. Ca rezultat al vitezei în a-l face disponibil, materialele pot include erori tipografice și pot fi revizuite în orice moment, fără notificare. Consultați Termenii de utilizarepentru alte considerații.