Sistemul vă permite în mod neașteptat să postați o comandă care conține o cantitate parțială dintr-un articol dacă activați numărul de serie. Urmărirea specifică pentru elementul din Microsoft Dynamics NAV 2009

Se aplică la
Dynamics NAV 2009

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

Simptome

Să presupunem că activați numărul de serie. Setarea Urmărire specifică pentru un articol din comanda de achiziționare sau din comanda de vânzări în Microsoft Dynamics NAV 2009 R2 și în Microsoft Dynamics NAV 2009 Service Pack 1 (SP1). Când înregistrați comanda de achiziționare sau comanda de vânzări care conține o cantitate parțială din element, sistemul vă permite să postați comanda în mod neașteptat. Totuși, sistemul ar trebui să vă permită doar să postați o comandă care conține o cantitate întreagă din articol.

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 vă pot ajuta să explicați funcționalitatea unei anumite proceduri. Totuși, 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. Modificați codul din tabelul Linie de vânzări (37). Pentru a face acest lucru, urmați acești pași:

    1. Adăugați o constantă text globală, apoi specificați constanta text după cum urmează:

      • Nume: Text055
      • ConstValue: ENU=Cantitatea trebuie să fie un număr întreg, deoarece elementul %1 este configurat pentru urmărire specifică SN.
    2. Modificați codul din Qty. în Invoice - OnValidatetrigger după cum urmează:
      Cod existent

      ...
      "VAT Difference" := 0;
      CalcInvDiscToInvoice;
      CalcPrepaymentToDeduct;
      ...
      

      Codul de înlocuire

      ...
      VAT Difference" := 0;
      CalcInvDiscToInvoice;
      CalcPrepaymentToDeduct;
      
      // Add the following line.
      CheckPartialOnSNTracking(xRec."Qty. to Invoice","Qty. to Invoice");
      
      ...
      
    3. Modificați codul din Qty. to Ship – Declanșatorul OnValidate după cum urmează:
      Cod existent

      ...
      IF (CurrFieldNo <> 0) AND (Type = Type::Item) AND ("Qty. to Ship" < 0) THEN
      CheckApplFromItemLedgEntry(ItemLedgEntry);
      ...
      

      Codul de înlocuire

      ...
      IF (CurrFieldNo <> 0) AND (Type = Type::Item) AND ("Qty. to Ship" < 0) THEN
      CheckApplFromItemLedgEntry(ItemLedgEntry);
      
      // Add the following line.
      CheckPartialOnSNTracking(xRec."Qty. to Ship","Qty. to Ship");
      
      ...
      
    4. Modificați codul din Return Qty (Trimitere la primire – Declanșatorul OnValidate) după cum urmează:
      Cod existent

      ...
      IF (CurrFieldNo <> 0) AND (Type = Type::Item) AND ("Return Qty. to Receive" > 0) THEN
      CheckApplFromItemLedgEntry(ItemLedgEntry);
      ...
      

      Codul de înlocuire

      ...
      IF (CurrFieldNo <> 0) AND (Type = Type::Item) AND ("Return Qty. to Receive" > 0) THEN
      CheckApplFromItemLedgEntry(ItemLedgEntry);
      
      // Add the following line.
      CheckPartialOnSNTracking(xRec."Return Qty. to Receive","Return Qty. to Receive");
      
      ...
      
    5. Creați o nouă funcție, după cum urmează:

      LOCAL PROCEDURE CheckPartialOnSNTracking@1109(PrevQty@1000 : Decimal;NewQty@1001 : Decimal);
      VAR
      Item@1003 : Record 27;
      ItemTracking@1004 : Record 6502;
      //Code.Add.begin
      IF (PrevQty <> NewQty) AND (Type = Type::Item) THEN BEGIN
      IF Item.GET("No.") THEN
      IF ItemTracking.GET(Item."Item Tracking Code") THEN
      IF ItemTracking."SN Specific Tracking" THEN
      IF ROUND(NewQty,1) <> NewQty THEN
      ERROR(Text055,Item."No.");
      END;
      
  2. Modificați codul din tabelul Linie de achiziție (39). Pentru a face acest lucru, urmați acești pași:

    1. Adăugați o constantă text globală, apoi specificați constanta text după cum urmează:

      • Nume: Text055
      • ConstValue: ENU=Cantitatea trebuie să fie un număr întreg, deoarece elementul %1 este configurat pentru urmărire specifică SN.
    2. Modificați codul din Qty. în Invoice - OnValidatetrigger după cum urmează:
      Cod existent

      ...
      VAT Difference" := 0;
      CalcInvDiscToInvoice;
      CalcPrepaymentToDeduct;
      ...
      

      Codul de înlocuire

      ...
      "VAT Difference" := 0;
      CalcInvDiscToInvoice;
      CalcPrepaymentToDeduct;
      
      // Add the following line.
      CheckPartialOnSNTracking(xRec."Qty. to Invoice (Base)","Qty. to Invoice (Base)");
      
      ...
      
    3. Modificați codul din Qty. pentru a primi – Declanșatorul OnValidate după cum urmează:
      Cod existent

      ...
      IF (CurrFieldNo <> 0) AND (Type = Type::Item) AND ("Qty. to Receive" < 0) THEN
      CheckApplToItemLedgEntry;
      ...
      

      Codul de înlocuire

      ...
      IF (CurrFieldNo <> 0) AND (Type = Type::Item) AND ("Qty. to Receive" < 0) THEN
      CheckApplToItemLedgEntry;
      
      // Add the following line.
      CheckPartialOnSNTracking(xRec."Qty. to Receive (Base)","Qty. to Receive (Base)");
      
      ...
      
    4. Modificați codul din Return Qty (Trimitere la primire – Declanșatorul OnValidate) după cum urmează:
      Cod existent

      ...IF (CurrFieldNo <> 0) AND (Type = Type::Item) AND ("Qty. to Receive" < 0) THEN
      CheckApplToItemLedgEntry;
      ...
      

      Codul de înlocuire

      ...IF (CurrFieldNo <> 0) AND (Type = Type::Item) AND ("Qty. to Receive" < 0) THEN
      CheckApplToItemLedgEntry;
      
      // Add the following line.
      CheckPartialOnSNTracking(xRec."Qty. to Receive (Base)","Qty. to Receive (Base)");
      
      ...
      
    5. Modificați codul din Return Qty. to Ship – OnValidate trigger după cum urmează
      Cod existent

      ...
      IF (CurrFieldNo <> 0) AND (Type = Type::Item) AND ("Return Qty. to Ship" > 0) THEN
      CheckApplToItemLedgEntry;
      ...
      

      Codul de înlocuire

      ...
      IF (CurrFieldNo <> 0) AND (Type = Type::Item) AND ("Return Qty. to Ship" > 0) THEN
      CheckApplToItemLedgEntry;
      
      // Add the following line.
      CheckPartialOnSNTracking(xRec."Return Qty. to Ship","Return Qty. to Ship");
      
      ...
      
    6. Creați o nouă funcție, după cum urmează:

      LOCAL PROCEDURE CheckPartialOnSNTracking@1109(PrevQty@1000 : Decimal;NewQty@1001 : Decimal);
      VAR
      Item@1003 : Record 27;
      ItemTracking@1004 : Record 6502;
      //Code.Add.begin
      IF (PrevQty <> NewQty) AND (Type = Type::Item) THEN BEGIN
      IF Item.GET("No.") THEN
      IF ItemTracking.GET(Item."Item Tracking Code") THEN
      IF ItemTracking."SN Specific Tracking" THEN
      IF ROUND(NewQty,1) <> NewQty THEN
      ERROR(Text055,Item."No.");
      END;
      

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

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.