Întâmpinați performanțe lente atunci când rulați activitatea lot "Ajustare intrări elemente de cost" în Microsoft Dynamics NAV

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

Acest articol se aplică la Microsoft Dynamics NAV pentru toate țările și setările regionale de limbă.

Simptome

Atunci când rulați operațiunea batch "Ajustare intrări elemente de cost", experimentați performanțe lente atunci când sunt ajustate elementele care utilizează metoda costului mediu și utilizarea frecventă a transferurilor. Această problemă apare în cazul următoarelor produse:

  • Microsoft Dynamics NAV 2009 R2
  • Microsoft Dynamics NAV 2009 Service Pack 1
  • Microsoft Dynamics NAV 2009
  • 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ă această problemă nu vă afectează grav, vă recomandăm să așteptați următorul pachet Service Pack Microsoft Dynamics NAV 2009 sau versiunea următoare 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 rezolva această problemă, urmați acești pași:

  1. Adăugați următoarele variabile locale în funcția IsAvgCostException din tabelul de intrare valori (5802):

    • ItemLedgEntry@1002 : Înregistrarea 32;
    • xItemLedgEntry@1003 : Înregistrarea 32;
    • TempItemLedgEntry@1005 : Înregistrare TEMPORARĂ 32;
    • GoThroughChain@1004 : Boolean;
  2. Modificați codul din funcția IsAvgCostException din tabelul de intrare valori (5802) după cum urmează:
    Cod existent

    ...
    IF "Partial Revaluation" THEN
      EXIT(TRUE);
    
    // Delete the following lines.
    IF "Item Ledger Entry Type" = "Item Ledger Entry Type"::Transfer THEN  
      EXIT(TRUE);  
    IF ItemApplnEntry.AppliedInbndEntryExists("Item Ledger Entry No.",TRUE) THEN  
      EXIT(TRUE);  
    // End of the lines.
    
    EXIT(FALSE);
    ...
    
    

    Codul de înlocuire

    ...
    IF "Partial Revaluation" THEN
      EXIT(TRUE);
    
    // Add the following lines.
    IF "Item Ledger Entry Type" = "Item Ledger Entry Type"::Consumption THEN
      GoThroughChain := ItemApplnEntry.AppliedFromEntryExists("Item Ledger Entry No.")
    ELSE
      GoThroughChain := ItemApplnEntry.AppliedInbndEntryExists("Item Ledger Entry No.",TRUE);
    
    IF GoThroughChain THEN
      REPEAT
        IF "Item Ledger Entry Type" = "Item Ledger Entry Type"::Transfer THEN
          ItemLedgEntry.GET(ItemApplnEntry."Inbound Item Entry No.")
        ELSE
          ItemLedgEntry.GET(ItemApplnEntry."Outbound Item Entry No.");
        IF ItemLedgEntry."Entry No." <> xItemLedgEntry."Entry No." THEN BEGIN
          xItemLedgEntry := ItemLedgEntry;
          ItemApplnEntry.GetVisitedEntries(ItemLedgEntry,TempItemLedgEntry);
          TempItemLedgEntry.SETCURRENTKEY("Item No.",Positive,"Location Code","Variant Code");
          TempItemLedgEntry.SETRANGE("Item No.","Item No.");
          TempItemLedgEntry.SETRANGE(Positive,TRUE);
          TempItemLedgEntry.SETRANGE("Location Code","Location Code");
          TempItemLedgEntry.SETRANGE("Variant Code","Variant Code");
          IF NOT TempItemLedgEntry.ISEMPTY THEN
            EXIT(TRUE);
        END;
      UNTIL ItemApplnEntry.NEXT = 0;
    // End of the lines.
    
    
    
    EXIT(FALSE);
    ...
    
    
  3. Adăugați următoarea variabilă globală în unitatea de cod Ajustare inventar (5895):

    • RevaluationPoint@1022 : Înregistrare TEMPORARĂ 2000000026;
  4. Adăugați următoarele variabile locale în funcția AvgValueEntriesToAdjustExist din unitatea de cod Ajustare inventar (5895):

    • CurrIsException@1009 : Boolean;
    • NextIsException@1010 : Boolean;
  5. Modificați codul din funcția AvgValueEntriesToAdjustExist din unitatea de cod Ajustare inventar (5895) după cum urmează:
    Cod existent

    ...
        END;
    
        FINDSET;
        REPEAT
          IF "Valued By Average Cost" AND NOT Adjustment AND ("Valued Quantity" < 0) THEN BEGIN
            OutbndValueEntry := ValueEntry;
            OutbndValueEntry.INSERT;
            FindNextRange := FALSE;
          END;
    
    // Delete the following lines.
          IF IsAvgCostException THEN BEGIN  
            AvgCostExceptionBuf.Number := "Entry No.";  
            AvgCostExceptionBuf.INSERT;  
          END;  
    // End of the lines.
    
          IF ("Entry Type" = "Entry Type"::Revaluation) OR
    ...
    
    

    Codul de înlocuire

    ...
        END;
    
         CLEAR(RevaluationPoint);  
        RevaluationPoint.DELETEALL;  
    
    
    
        FINDSET;
        REPEAT
    
    // Add the following lines.
          IF "Partial Revaluation" THEN BEGIN  
            RevaluationPoint.Number := "Entry No.";  
            RevaluationPoint.INSERT;  
          END;  
    // End of the lines.
    
          IF "Valued By Average Cost" AND NOT Adjustment AND ("Valued Quantity" < 0) THEN BEGIN
            OutbndValueEntry := ValueEntry;
            OutbndValueEntry.INSERT;
            FindNextRange := FALSE;
          END;
    
     // Add the following lines.
          IF NOT Adjustment THEN BEGIN  
            CurrIsException := NextIsException;  
            NextIsException := IsAvgCostException;  
            IF NextIsException OR CurrIsException THEN BEGIN  
              AvgCostExceptionBuf.Number := "Entry No.";  
              AvgCostExceptionBuf.INSERT;  
            END;  
          END;  
    // End of the lines.
    
          IF ("Entry Type" = "Entry Type"::Revaluation) OR
    ...
    
    
  6. Modificați codul din funcția IsExcludeEntryFromAvgCostCalc din unitatea de cod pentru Ajustare stoc (5895), după cum urmează:
    Cod existent

    ...
    WITH ValueEntry DO BEGIN
      IF "Partial Revaluation" THEN
    ...
    
    

    Codul de înlocuire

    ...
    WITH ValueEntry DO BEGIN
    
    // Add the following lines.
      RevaluationPoint.SETRANGE(Number,"Entry No.",OutbndValueEntry."Entry No.");  
      IF NOT RevaluationPoint.ISEMPTY THEN  
        EXIT(FALSE);  
    // End of the lines.
    
    
      IF "Partial Revaluation" THEN
    ...
    
    

Cerințe preliminare

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

  • Microsoft Dynamics NAV 2009 R2
  • Microsoft Dynamics NAV 2009 Service Pack 1
  • Microsoft Dynamics NAV 2009
  • Microsoft Dynamics NAV 5.0 Service Pack 1

În plus, trebuie să aveți instalată o remediere rapidă 2481793 pentru a aplica această remediere rapidă.
  Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:

2481793 Costul unitar al elementelor devine negativ după ce rulați reevaluarea pentru elementele care utilizează metoda costului mediu în Microsoft Dynamics NAV

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”.

Notă: Acesta este un articol "PUBLICARE RAPIDĂ" creat direct din cadrul organizației de asistență Microsoft. Informațiile din acest document sunt furnizate ca atare ca răspuns la problemele apărute. Ca urmare a vitezei de punere la dispoziție, materialele pot include erori tipografice și pot fi revizuite în orice moment fără preaviz. Consultați Condițiile de utilizare pentru alte considerente.