"Suma (LCY) trebuie să aibă același semn ca și Suma din generația Gen. Linie jurnal" atunci când postați o factură pentru o comandă de vânzări livrată parțial sau o comandă de achiziție în care câmpul "Prepayment%" este setat la 100 în Microsoft Dynamics NAV...

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ă creați o comandă de vânzări care are câmpul % de plată anticipată setat la 100 în Microsoft Dynamics NAV 2009. Apoi înregistrați factura de plată anticipată pentru comanda de vânzări. În continuare, înregistrați livrarea parțial pentru comanda de vânzări. În această situație, atunci când înregistrați factura pentru comanda de vânzări, primiți următorul mesaj de eroare:

Notă

Suma (LCY) trebuie să aibă același semn ca Amount din gener. Linia de jurnal.

Această problemă apare și atunci când postați o factură pentru o comandă de cumpărare parțial expediată, în care câmpul % de plată anticipată este setat la 100.
Această problemă apare în cazul următoarelor produse:

  • Microsoft Dynamics NAV 2009 R2
  • Microsoft Dynamics NAV 2009 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. Modificați codul din procedura de CalcVATAmountLines@35 din tabelul "Linie de vânzări" (37), după cum urmează:
    Cod existent

    ...
    END ELSE BEGIN
    CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    BEGIN
    "VAT Base" := "Line Amount" - "Invoice Discount Amount";
    "VAT Amount" :=
    "VAT Difference" +
    ROUND(
    PrevVatAmountLine."VAT Amount" +
    "VAT Base" * "VAT %" / 100 * (1 - SalesHeader."VAT Base Discount %" / 100),
    Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    "Amount Including VAT" := "Line Amount" - "Invoice Discount Amount" + "VAT Amount";
    IF Positive THEN
    PrevVatAmountLine.INIT
    
    // Delete the following lines.
    ELSE BEGIN
    PrevVatAmountLine := VATAmountLine;
    PrevVatAmountLine."VAT Amount" :=
    ROUND(PrevVatAmountLine."VAT Amount" -
    "VAT Base" * "VAT %" / 100 * (1 - SalesHeader."VAT Base Discount %" / 100),
    Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    END;
    // End of the lines.
    ...
    

    Codul de înlocuire

    ...
    END ELSE BEGIN
    CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    BEGIN
    "VAT Base" := "Line Amount" - "Invoice Discount Amount";
    "VAT Amount" :=
    "VAT Difference" +
    ROUND(
    PrevVatAmountLine."VAT Amount" +
    "VAT Base" * "VAT %" / 100 * (1 - SalesHeader."VAT Base Discount %" / 100),
    Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    "Amount Including VAT" := "Line Amount" - "Invoice Discount Amount" + "VAT Amount";
    IF Positive THEN
    PrevVatAmountLine.INIT
    
    // Add the following lines.
    ELSE
    IF NOT "Includes Prepayment" THEN BEGIN
    PrevVatAmountLine := VATAmountLine;
    PrevVatAmountLine."VAT Amount" :=
    "VAT Base" * "VAT %" / 100 * (1 - SalesHeader."VAT Base Discount %" / 100);
    PrevVatAmountLine."VAT Amount" :=
    PrevVatAmountLine."VAT Amount" -
    ROUND(PrevVatAmountLine."VAT Amount",Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    END;
    // End of the lines.
    ... 
    
  2. Modificați codul din procedura de CalcVATAmountLines@24 din tabelul "Linie de achiziție" (39), după cum urmează:
    Cod existent

    ...
    CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    BEGIN
    "VAT Base" := "Line Amount" - "Invoice Discount Amount";
    "VAT Amount" :=
    "VAT Difference" +
    ROUND(
    PrevVatAmountLine."VAT Amount" +
    "VAT Base" * "VAT %" / 100 * (1 - PurchHeader."VAT Base Discount %" / 100),
    Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    "Amount Including VAT" := "Line Amount" - "Invoice Discount Amount" + "VAT Amount";
    IF Positive THEN
    PrevVatAmountLine.INIT
    
    // Delete the following lines.
    ELSE BEGIN
    PrevVatAmountLine := VATAmountLine;
    PrevVatAmountLine."VAT Amount" :=
    "VAT Base" * "VAT %" / 100 * (1 - PurchHeader."VAT Base Discount %" / 100);
    PrevVatAmountLine."VAT Amount" :=
    PrevVatAmountLine."VAT Amount" -
    ROUND(PrevVatAmountLine."VAT Amount",Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    END;
    // End of the lines.
    ...
    

    Codul de înlocuire

    ...
    CASE "VAT Calculation Type" OF
    "VAT Calculation Type"::"Normal VAT",
    "VAT Calculation Type"::"Reverse Charge VAT":
    BEGIN
    "VAT Base" := "Line Amount" - "Invoice Discount Amount";
    "VAT Amount" :=
    "VAT Difference" +
    ROUND(
    PrevVatAmountLine."VAT Amount" +
    "VAT Base" * "VAT %" / 100 * (1 - PurchHeader."VAT Base Discount %" / 100),
    Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    "Amount Including VAT" := "Line Amount" - "Invoice Discount Amount" + "VAT Amount";
    IF Positive THEN
    PrevVatAmountLine.INIT
    
    // Add the following lines.
    ELSE
    IF NOT "Includes Prepayment" THEN BEGIN
    PrevVatAmountLine := VATAmountLine;
    PrevVatAmountLine."VAT Amount" :=
    "VAT Base" * "VAT %" / 100 * (1 - PurchHeader."VAT Base Discount %" / 100);
    PrevVatAmountLine."VAT Amount" :=
    PrevVatAmountLine."VAT Amount" -
    ROUND(PrevVatAmountLine."VAT Amount",Currency."Amount Rounding Precision",Currency.VATRoundingDirection);
    END;
    // End of the lines.
    ...
    
  3. Modificați codul din declanșatorul OnRun din unitatea de cod "Vânzări-Post" (80), după cum urmează:
    Cod existent 1

    ...
    RemQtyToBeInvoiced := RemQtyToBeInvoiced - QtyToBeInvoiced;
    RemQtyToBeInvoicedBase := RemQtyToBeInvoicedBase - QtyToBeInvoicedBase;
    ReturnRcptLine."Quantity Invoiced" :=
    ReturnRcptLine."Quantity Invoiced" + QtyToBeInvoiced;
    ReturnRcptLine."Qty. Invoiced (Base)" :=
    ReturnRcptLine."Qty. Invoiced (Base)" + QtyToBeInvoicedBase;
    ReturnRcptLine."Return Qty. Rcd. Not Invd." :=
    ReturnRcptLine.Quantity - ReturnRcptLine."Quantity Invoiced";
    ReturnRcptLine.MODIFY;
    IF SalesLine.Type = SalesLine.Type::Item THEN
    PostItemJnlLine(
    SalesLine,
    0,0,
    QtyToBeInvoiced,
    QtyToBeInvoicedBase,
    
    // Delete the following line.
    {ReturnRcptLine."Item Rcpt. Entry No."}
    
    ItemEntryRelation."Item Entry No.",'',TempInvoicingSpecification);
    IF TrackingSpecificationExists THEN
    EndLoop := (TempInvoicingSpecification.NEXT = 0)
    ELSE
    EndLoop :=
    (ReturnRcptLine.NEXT = 0) OR (ABS(RemQtyToBeInvoiced) <= ABS(SalesLine."Return Qty. to Receive"));
    UNTIL EndLoop;
    END ELSE
    ERROR(
    Text025,
    SalesLine."Return Receipt Line No.",SalesLine."Return Receipt No.");
    END;
    ...
    

    Cod de înlocuire 1

    ...
    RemQtyToBeInvoiced := RemQtyToBeInvoiced - QtyToBeInvoiced;
    RemQtyToBeInvoicedBase := RemQtyToBeInvoicedBase - QtyToBeInvoicedBase;
    ReturnRcptLine."Quantity Invoiced" :=
    ReturnRcptLine."Quantity Invoiced" + QtyToBeInvoiced;
    ReturnRcptLine."Qty. Invoiced (Base)" :=
    ReturnRcptLine."Qty. Invoiced (Base)" + QtyToBeInvoicedBase;
    ReturnRcptLine."Return Qty. Rcd. Not Invd." :=
    ReturnRcptLine.Quantity - ReturnRcptLine."Quantity Invoiced";
    ReturnRcptLine.MODIFY;
    IF SalesLine.Type = SalesLine.Type::Item THEN
    PostItemJnlLine(
    SalesLine,
    0,0,
    QtyToBeInvoiced,
    QtyToBeInvoicedBase,
    ItemEntryRelation."Item Entry No.",'',TempInvoicingSpecification);
    IF TrackingSpecificationExists THEN
    EndLoop := (TempInvoicingSpecification.NEXT = 0)
    ELSE
    EndLoop :=
    (ReturnRcptLine.NEXT = 0) OR (ABS(RemQtyToBeInvoiced) <= ABS(SalesLine."Return Qty. to Receive"));
    UNTIL EndLoop;
    END ELSE
    ERROR(
    Text025,
    SalesLine."Return Receipt Line No.",SalesLine."Return Receipt No.");
    END;
    ...
    

    Cod existent 2

    ...
    RemQtyToBeInvoiced := RemQtyToBeInvoiced - QtyToBeInvoiced;
    RemQtyToBeInvoicedBase := RemQtyToBeInvoicedBase - QtyToBeInvoicedBase;
    SalesShptLine."Quantity Invoiced" :=
    SalesShptLine."Quantity Invoiced" - QtyToBeInvoiced;
    SalesShptLine."Qty. Invoiced (Base)" :=
    SalesShptLine."Qty. Invoiced (Base)" - QtyToBeInvoicedBase;
    SalesShptLine."Qty. Shipped Not Invoiced" :=
    SalesShptLine.Quantity - SalesShptLine."Quantity Invoiced";
    SalesShptLine.MODIFY;
    IF SalesLine.Type = SalesLine.Type::Item THEN
    PostItemJnlLine(
    SalesLine,
    0,0,
    QtyToBeInvoiced,
    QtyToBeInvoicedBase,
    
    // Delete the following line.
    {SalesShptLine."Item Shpt. Entry No."}
    
    ItemEntryRelation."Item Entry No.",'',TempInvoicingSpecification);
    IF TrackingSpecificationExists THEN
    EndLoop := (TempInvoicingSpecification.NEXT = 0)
    ELSE
    EndLoop :=
    (SalesShptLine.NEXT = 0) OR (ABS(RemQtyToBeInvoiced) <= ABS(SalesLine."Qty. to Ship"))
    UNTIL EndLoop;
    END ELSE
    ERROR(
    Text026,
    SalesLine."Shipment Line No.",SalesLine."Shipment No.");
    END;
    

    Codul de înlocuire 2

    ...
    RemQtyToBeInvoiced := RemQtyToBeInvoiced - QtyToBeInvoiced;
    RemQtyToBeInvoicedBase := RemQtyToBeInvoicedBase - QtyToBeInvoicedBase;
    SalesShptLine."Quantity Invoiced" :=
    SalesShptLine."Quantity Invoiced" - QtyToBeInvoiced;
    SalesShptLine."Qty. Invoiced (Base)" :=
    SalesShptLine."Qty. Invoiced (Base)" - QtyToBeInvoicedBase;
    SalesShptLine."Qty. Shipped Not Invoiced" :=
    SalesShptLine.Quantity - SalesShptLine."Quantity Invoiced";
    SalesShptLine.MODIFY;
    IF SalesLine.Type = SalesLine.Type::Item THEN
    PostItemJnlLine(
    SalesLine,
    0,0,
    QtyToBeInvoiced,
    QtyToBeInvoicedBase,
    ItemEntryRelation."Item Entry No.",'',TempInvoicingSpecification);
    IF TrackingSpecificationExists THEN
    EndLoop := (TempInvoicingSpecification.NEXT = 0)
    ELSE
    EndLoop :=
    (SalesShptLine.NEXT = 0) OR (ABS(RemQtyToBeInvoiced) <= ABS(SalesLine."Qty. to Ship"))
    UNTIL EndLoop;
    END ELSE
    ERROR(
    Text026,
    SalesLine."Shipment Line No.",SalesLine."Shipment No.");
    END;
    ...
    
  4. Modificați codul din procedura locală AdjustPrepmtAmountLCY@84 în unitatea de cod "Vânzări-Poștă" (80), după cum urmează:
    Cod existent 1

    ...
    TempPrepmtDeductLCYSalesLine.SETRANGE("Attached to Line No.",PrepmtSalesLine."Line No.");
    IF TempPrepmtDeductLCYSalesLine.FINDSET(TRUE) THEN
    REPEAT
    SalesLine := TempPrepmtDeductLCYSalesLine;
    SalesLine.FIND;
    IF SalesLine."Document Type" = SalesLine."Document Type"::Invoice THEN
    GetSalesOrderLine(SalesLine,SalesLine);
    DeductionFactor :=
    SalesLine."Prepmt Amt to Deduct" /
    (SalesLine."Prepmt. Amt. Inv." - SalesLine."Prepmt Amt Deducted");
    ...
    

    Cod de înlocuire 1

    ...
    TempPrepmtDeductLCYSalesLine.SETRANGE("Attached to Line No.",PrepmtSalesLine."Line No.");
    IF TempPrepmtDeductLCYSalesLine.FINDSET(TRUE) THEN
    REPEAT
    SalesLine := TempPrepmtDeductLCYSalesLine;
    SalesLine.FIND;
    IF SalesLine."Document Type" = SalesLine."Document Type"::Invoice THEN
    GetSalesOrderLine(SalesLine,SalesLine);
    
    // Add the following line.
    SalesLine."Prepmt Amt to Deduct" := CalcPrepmtAmtToDeduct(SalesLine);
    
    DeductionFactor :=
    SalesLine."Prepmt Amt to Deduct" /
    (SalesLine."Prepmt. Amt. Inv." - SalesLine."Prepmt Amt Deducted");
    ...
    

    Cod existent 2

    ...
    IF ABS(TotalPrepmtVATAmtLCYDifference) <= GLSetup."Amount Rounding Precision" THEN
    TotalPrepmtVATAmtLCYDifference := 0;
    PrepmtSalesLine."Prepmt. VAT Amount Inv. (LCY)" := TotalPrepmtVATAmtLCYDifference;
    NewAmountIncludingVAT := PrepmtSalesLine.Amount + TotalPrepmtVATAmtLCY + TotalPrepmtVATAmtLCYDifference;
    Increment(TotalSalesLineLCY."Amount Including VAT",PrepmtSalesLine."Amount Including VAT" - NewAmountIncludingVAT);
    PrepmtSalesLine."Amount Including VAT" := NewAmountIncludingVAT;
    END;
    END;
    LOCAL PROCEDURE GetSalesOrderLine@85(VAR SalesOrderLine@1000 : Record 37;SalesLine@1001 : Record 37);
    ...
    

    Codul de înlocuire 2

    ...
    IF ABS(TotalPrepmtVATAmtLCYDifference) <= GLSetup."Amount Rounding Precision" THEN
    TotalPrepmtVATAmtLCYDifference := 0;
    PrepmtSalesLine."Prepmt. VAT Amount Inv. (LCY)" := TotalPrepmtVATAmtLCYDifference;
    NewAmountIncludingVAT := PrepmtSalesLine.Amount + TotalPrepmtVATAmtLCY + TotalPrepmtVATAmtLCYDifference;
    Increment(TotalSalesLineLCY."Amount Including VAT",PrepmtSalesLine."Amount Including VAT" - NewAmountIncludingVAT);
    
    // Add the following lines.
    IF SalesLine."Currency Code" = '' THEN
    TotalSalesLine."Amount Including VAT" := TotalSalesLineLCY."Amount Including VAT";
    // End of the lines.
    
    PrepmtSalesLine."Amount Including VAT" := NewAmountIncludingVAT;
    END;
    END;
    
    // Add the following lines.
    PROCEDURE CalcPrepmtAmtToDeduct@71(SalesLine@1000 : Record 37) : Decimal;
    VAR
    AllowedQtyToInvoice@1001 : Decimal;
    BEGIN
    WITH SalesLine DO BEGIN
    AllowedQtyToInvoice := "Qty. Shipped Not Invoiced";
    IF SalesHeader.Ship THEN
    AllowedQtyToInvoice := AllowedQtyToInvoice + "Qty. to Ship";
    IF "Qty. to Invoice" > AllowedQtyToInvoice THEN BEGIN
    "Qty. to Invoice" := AllowedQtyToInvoice;
    CalcPrepaymentToDeduct;
    END;
    EXIT("Prepmt Amt to Deduct");
    END;
    END;
    // End of the lines.
    
    LOCAL PROCEDURE GetSalesOrderLine@85(VAR SalesOrderLine@1000 : Record 37;SalesLine@1001 : Record 37);
    ...
    
  5. Modificați codul din declanșatorul OnRun din unitatea de cod "Purch.-Post" (90), după cum urmează:
    Cod existent 1

    ...
    RemQtyToBeInvoiced := RemQtyToBeInvoiced - QtyToBeInvoiced;
    RemQtyToBeInvoicedBase := RemQtyToBeInvoicedBase - QtyToBeInvoicedBase;
    ReturnShptLine."Quantity Invoiced" :=
    ReturnShptLine."Quantity Invoiced" - QtyToBeInvoiced;
    ReturnShptLine."Qty. Invoiced (Base)" :=
    ReturnShptLine."Qty. Invoiced (Base)" - QtyToBeInvoicedBase;
    ReturnShptLine."Return Qty. Shipped Not Invd." :=
    ReturnShptLine.Quantity - ReturnShptLine."Quantity Invoiced";
    ReturnShptLine.MODIFY;
    IF PurchLine.Type = PurchLine.Type::Item THEN
    PostItemJnlLine(
    PurchLine,
    0,0,
    QtyToBeInvoiced,QtyToBeInvoicedBase,
    
    // Delete the following line.
    {ReturnShptLine."Item Shpt. Entry No."}
    
    ItemEntryRelation."Item Entry No.",'',TempInvoicingSpecification);
    IF TrackingSpecificationExists THEN
    ...
    

    Cod de înlocuire 1

    ...
    RemQtyToBeInvoiced := RemQtyToBeInvoiced - QtyToBeInvoiced;
    RemQtyToBeInvoicedBase := RemQtyToBeInvoicedBase - QtyToBeInvoicedBase;
    ReturnShptLine."Quantity Invoiced" :=
    ReturnShptLine."Quantity Invoiced" - QtyToBeInvoiced;
    ReturnShptLine."Qty. Invoiced (Base)" :=
    ReturnShptLine."Qty. Invoiced (Base)" - QtyToBeInvoicedBase;
    ReturnShptLine."Return Qty. Shipped Not Invd." :=
    ReturnShptLine.Quantity - ReturnShptLine."Quantity Invoiced";
    ReturnShptLine.MODIFY;
    IF PurchLine.Type = PurchLine.Type::Item THEN
    PostItemJnlLine(
    PurchLine,
    0,0,
    QtyToBeInvoiced,QtyToBeInvoicedBase,
    ItemEntryRelation."Item Entry No.",'',TempInvoicingSpecification);
    IF TrackingSpecificationExists THEN
    ...
    

    Cod existent 2

    ...
    RemQtyToBeInvoiced := RemQtyToBeInvoiced - QtyToBeInvoiced;
    RemQtyToBeInvoicedBase := RemQtyToBeInvoicedBase - QtyToBeInvoicedBase;
    PurchRcptLine."Quantity Invoiced" := PurchRcptLine."Quantity Invoiced" + QtyToBeInvoiced;
    PurchRcptLine."Qty. Invoiced (Base)" := PurchRcptLine."Qty. Invoiced (Base)" + QtyToBeInvoicedBase;
    PurchRcptLine."Qty. Rcd. Not Invoiced" :=
    PurchRcptLine.Quantity - PurchRcptLine."Quantity Invoiced";
    PurchRcptLine.MODIFY;
    IF PurchLine.Type = PurchLine.Type::Item THEN
    PostItemJnlLine(
    PurchLine,
    0,0,
    QtyToBeInvoiced,QtyToBeInvoicedBase,
    
    // Delete the following line.
    {PurchRcptLine."Item Rcpt. Entry No."}
    
    ItemEntryRelation."Item Entry No.",'',TempInvoicingSpecification);
    IF TrackingSpecificationExists THEN
    ...
    

    Codul de înlocuire 2

    ...
    RemQtyToBeInvoiced := RemQtyToBeInvoiced - QtyToBeInvoiced;
    RemQtyToBeInvoicedBase := RemQtyToBeInvoicedBase - QtyToBeInvoicedBase;
    PurchRcptLine."Quantity Invoiced" := PurchRcptLine."Quantity Invoiced" + QtyToBeInvoiced;
    PurchRcptLine."Qty. Invoiced (Base)" := PurchRcptLine."Qty. Invoiced (Base)" + QtyToBeInvoicedBase;
    PurchRcptLine."Qty. Rcd. Not Invoiced" :=
    PurchRcptLine.Quantity - PurchRcptLine."Quantity Invoiced";
    PurchRcptLine.MODIFY;
    IF PurchLine.Type = PurchLine.Type::Item THEN
    PostItemJnlLine(
    PurchLine,
    0,0,
    QtyToBeInvoiced,QtyToBeInvoicedBase,
    ItemEntryRelation."Item Entry No.",'',TempInvoicingSpecification);
    IF TrackingSpecificationExists THEN
    ...
    
  6. Modificați codul din procedura locală AdjustPrepmtAmountLCY@84 în unitatea de cod "Purch.-Post" (90), după cum urmează:
    Cod existent 1

    ...
    TempPrepmtDeductLCYPurchLine.SETRANGE("Attached to Line No.",PrepmtPurchLine."Line No.");
    IF TempPrepmtDeductLCYPurchLine.FINDSET(TRUE) THEN
    REPEAT
    PurchLine := TempPrepmtDeductLCYPurchLine;
    PurchLine.FIND;
    IF PurchLine."Document Type" = PurchLine."Document Type"::Invoice THEN
    GetPurchOrderLine(PurchLine,PurchLine);
    DeductionFactor :=
    PurchLine."Prepmt Amt to Deduct" /
    (PurchLine."Prepmt. Amt. Inv." - PurchLine."Prepmt Amt Deducted");
    PrepmtAmtLCYDifference :=
    ...
    

    Cod de înlocuire 1

    ...
    TempPrepmtDeductLCYPurchLine.SETRANGE("Attached to Line No.",PrepmtPurchLine."Line No.");
    IF TempPrepmtDeductLCYPurchLine.FINDSET(TRUE) THEN
    REPEAT
    PurchLine := TempPrepmtDeductLCYPurchLine;
    PurchLine.FIND;
    IF PurchLine."Document Type" = PurchLine."Document Type"::Invoice THEN
    GetPurchOrderLine(PurchLine,PurchLine);
    
    // Add the following line.
    PurchLine."Prepmt Amt to Deduct" := CalcPrepmtAmtToDeduct(PurchLine);
    
    DeductionFactor :=
    PurchLine."Prepmt Amt to Deduct" /
    (PurchLine."Prepmt. Amt. Inv." - PurchLine."Prepmt Amt Deducted");
    PrepmtAmtLCYDifference :=
    ...
    

    Cod existent 2

    ...
    IF ABS(TotalPrepmtVATAmtLCYDifference) <= GLSetup."Amount Rounding Precision" THEN
    TotalPrepmtVATAmtLCYDifference := 0;
    PrepmtPurchLine."Prepmt. VAT Amount Inv. (LCY)" := -TotalPrepmtVATAmtLCYDifference;
    NewAmountIncludingVAT := PrepmtPurchLine.Amount - (TotalPrepmtVATAmtLCY + TotalPrepmtVATAmtLCYDifference);
    Increment(TotalPurchLineLCY."Amount Including VAT",-(PrepmtPurchLine."Amount Including VAT" - NewAmountIncludingVAT));
    PrepmtPurchLine."Amount Including VAT" := NewAmountIncludingVAT;
    END;
    END;
    LOCAL PROCEDURE GetPurchOrderLine@85(VAR PurchOrderLine@1000 : Record 39;PurchLine@1001 : Record 39);
    ...
    

    Codul de înlocuire 2

    ...
    IF ABS(TotalPrepmtVATAmtLCYDifference) <= GLSetup."Amount Rounding Precision" THEN
    TotalPrepmtVATAmtLCYDifference := 0;
    PrepmtPurchLine."Prepmt. VAT Amount Inv. (LCY)" := -TotalPrepmtVATAmtLCYDifference;
    NewAmountIncludingVAT := PrepmtPurchLine.Amount - (TotalPrepmtVATAmtLCY + TotalPrepmtVATAmtLCYDifference);
    Increment(TotalPurchLineLCY."Amount Including VAT",-(PrepmtPurchLine."Amount Including VAT" - NewAmountIncludingVAT));
    
    // Add the following lines.
    IF PurchLine."Currency Code" = '' THEN
    TotalPurchLine."Amount Including VAT" := TotalPurchLineLCY."Amount Including VAT";
    // End of the lines.
    
    PrepmtPurchLine."Amount Including VAT" := NewAmountIncludingVAT;
    END;
    END;
    
    // Add the following lines.
    LOCAL PROCEDURE CalcPrepmtAmtToDeduct@71(PurchLine@1000 : Record 39) : Decimal;
    VAR
    AllowedQtyToInvoice@1001 : Decimal;
    BEGIN
    WITH PurchLine DO BEGIN
    AllowedQtyToInvoice := "Qty. Rcd. Not Invoiced";
    IF PurchHeader.Receive THEN
    AllowedQtyToInvoice := AllowedQtyToInvoice + "Qty. to Receive";
    IF "Qty. to Invoice" > AllowedQtyToInvoice THEN BEGIN
    "Qty. to Invoice" := AllowedQtyToInvoice;
    CalcPrepaymentToDeduct;
    END;
    EXIT("Prepmt Amt to Deduct");
    END;
    END;
    // End of the lines.
    
    LOCAL PROCEDURE GetPurchOrderLine@85(VAR PurchOrderLine@1000 : Record 39;PurchLine@1001 : Record 39);
    ...
    

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.