Linija u Intrastat paketu za robu sabira red robe i red za usluge u fakturi kada pokrenete funkciju "Preuzmi unose" u Intrastat dnevniku u italijanskoj verziji aplikacije Microsoft Dynamics NAV

Primenjuje se na
Dynamics NAV 2009 Service Pack 1 Microsoft Dynamics NAV 5.0 Service Pack 1

Ovaj članak se odnosi na Microsoft Dynamics NAV za lokalni standard italijanskog (it).

Simptomi

Pretpostavimo da faktura za Evropsku uniju (EU) sadrži dva reda za isti broj artikla u italijanskoj verziji sistema Microsoft Dynamics NAV. Jedan red je linija robe, a druga linija za usluge. U ovom slučaju, kada pokrenete funkciju "Preuzmi unose" u Intrastat dnevniku, red u Intrastat paketu za robu sabira dva reda u fakturi.
Pored toga, ne možete da navedete način prevoza za robu ili da navedete "modalità di erogazione" za usluge ako su roba i usluge uključene u istu fakturu. Do ovog problema dolazi čak i ako roba i usluge koriste različite brojeve stavki ili drugačije tipove redova.

Ovaj problem se javlja u sledećim proizvodima:

  • Italijanska verzija Microsoft Dynamics NAV 2009 servisni paket 1 (SP1)
  • Italijanska verzija Microsoft Dynamics NAV 5.0 servisni paket 1 (SP1)

Rešenje

Informacije o hitnim ispravkama

Podržana hitna ispravka je sada dostupna od korporacije Microsoft. Međutim, namena je samo za rešavanje problema koji je opisan u ovom članku. Primenite je samo na sisteme koji imaju ovaj određeni problem. Ova hitna ispravka može proći dodatno testiranje. Stoga, ako ovaj problem ne utiče ozbiljno, preporučujemo da sačekate sledeći servisni paket za Microsoft Dynamics NAV ili sledeću verziju programa Microsoft Dynamics NAV koja sadrži ovu hitnu ispravku.

Napomena: U posebnim slučajevima, troškovi koji se obično nastaju za pozive podršci mogu biti otkazani ako stručnjak za tehničku podršku za Microsoft Dynamics i srodne proizvode utvrdi da će određena ispravka rešiti problem. Uobičajeni troškovi podrške primenjivaće se na dodatna pitanja podrške i probleme koji ne ispunjavaju uslove za određenu ispravku u pitanju.

            
          

Informacije o instalaciji

Microsoft pruža primere programiranja samo za ilustraciju, bez izričite ili podrazumevane garancije. Ovo uključuje, ali nije ograničeno na, podrazumevane garancije o podesnosti za prodaju ili o podesnosti za određenu namenu. U ovom članku se pretpostavlja da ste upoznati sa programskim jezikom koji se demonstrira i sa alatkama koje se koriste za kreiranje procedura i otklanjanje grešaka. Inženjeri Microsoft podrške mogu da vam objasne funkcionalnost određene procedure, ali neće izmeniti ove primere da bi obezbedili dodatnu funkcionalnost ili konstruisali procedure koje ispunjavaju vaše određene zahteve.

Napomena: Pre nego što instalirate ovu hitnu ispravku, proverite da li su svi korisnici Microsoft Navision klijenta odjavljeni iz sistema. To uključuje korisnike Microsoft Navision Application Services (NAS) klijenta. Vi bi trebalo da budete jedini korisnik klijenta koji je prijavljen kada primenjujete ovu hitnu ispravku.

Da biste primenili ovu hitnu ispravku, morate imati licencu za projektante.

Preporučujemo da se korisničkom nalogu u prozoru "Prijavljivanje u operativni sistem Windows" ili u prozoru "Prijavljivanje u bazu podataka" dodeli ID uloge "SUPER". Ako korisničkom nalogu nije moguće dodeliti ID uloge "SUPER", morate da proverite da li korisnički nalog ima sledeće dozvole:

  • Dozvola "Izmeni" za objekat koji ćete menjati.
  • Dozvola za izvršavanje za objekat sistema ID 5210 i za objekat sistema ID 9015.

                
Napomena: Ne morate da imate prava na skladišta podataka osim ako ne morate da izvršite popravku podataka.

Promene kodova

Napomena: Popravke kodova uvek testirajte u kontrolisanom okruženju pre nego što ih primenite na računare proizvodnje.
Da biste rešili ovaj problem, promenite kôd u okidaču "Stavka glavne knjige – OnAfterGetRecord" u izveštaju "Preuzmi stavke glavne knjige stavki" (594) na sledeći način:

Postojeći kôd

...
IF ValueEntry.FINDSET(FALSE,FALSE) THEN BEGIN
CASE ValueEntry."Item Ledger Entry Type" OF
ValueEntry."Item Ledger Entry Type" :: Purchase: BEGIN
IF ValueEntry."Invoiced Quantity" > 0 THEN BEGIN
PurchInvLine.SETRANGE("Document No.",ValueEntry."Document No.");
PurchInvLine.SETRANGE(Type, PurchInvLine.Type::Item);
PurchInvLine.SETRANGE("No.",ValueEntry."Item No.");
IF PurchInvLine.FIND('-') THEN BEGIN
PurchInvHeader.GET(ValueEntry."Document No.");
REPEAT
TotalInvoicedQty := TotalInvoicedQty + PurchInvLine.Quantity;
IF PurchInvHeader."Currency Factor" <> 0 THEN
TotalAmt := TotalAmt + (PurchInvLine.Amount / PurchInvHeader."Currency Factor")
ELSE
TotalAmt := TotalAmt + PurchInvLine.Amount;
UNTIL PurchInvLine.NEXT = 0;
END ELSE BEGIN
PurchRcptLine.SETRANGE("Document No.",ValueEntry."Document No.");
PurchRcptLine.SETRANGE(Type, PurchRcptLine.Type::Item);
PurchRcptLine.SETRANGE("No.",ValueEntry."Item No.");
IF PurchRcptLine.FIND('-') THEN BEGIN
REPEAT
IF PurchRcptLine.Correction = TRUE THEN
CorrectionFound := TRUE;
DocItemSum += PurchRcptLine."Quantity Invoiced";
UNTIL PurchRcptLine.NEXT = 0;
IF (DocItemSum = 0) AND CorrectionFound THEN CurrReport.SKIP;
END;
END;
END ELSE BEGIN
PurchCrMemoLine.SETRANGE("Document No.",ValueEntry."Document No.");
PurchCrMemoLine.SETRANGE(Type, PurchInvLine.Type::Item);
PurchCrMemoLine.SETRANGE("No.",ValueEntry."Item No.");
IF PurchCrMemoLine.FIND('-') THEN BEGIN
PurchCrMemoHdr.GET(ValueEntry."Document No.");
REPEAT
TotalInvoicedQty := TotalInvoicedQty - PurchCrMemoLine.Quantity;
IF PurchCrMemoHdr."Currency Factor" <> 0 THEN
TotalAmt := TotalAmt - (PurchCrMemoLine.Amount / PurchCrMemoHdr."Currency Factor")
ELSE
TotalAmt := TotalAmt - PurchCrMemoLine.Amount;
UNTIL PurchCrMemoLine.NEXT = 0;
END ELSE BEGIN
PurchRcptLine.SETRANGE("Document No.",ValueEntry."Document No.");
PurchRcptLine.SETRANGE(Type, PurchRcptLine.Type::Item);
PurchRcptLine.SETRANGE("No.",ValueEntry."Item No.");
IF PurchRcptLine.FIND('-') THEN BEGIN
REPEAT
IF PurchRcptLine.Correction = TRUE THEN
CorrectionFound := TRUE;
DocItemSum += PurchRcptLine."Quantity Invoiced";
UNTIL PurchRcptLine.NEXT = 0;
IF (DocItemSum = 0) AND CorrectionFound THEN CurrReport.SKIP;
END;
END;
END;
END;

ValueEntry."Item Ledger Entry Type" :: Sale: BEGIN
IF ValueEntry."Invoiced Quantity" < 0 THEN BEGIN
SalesInvoiceLine.SETRANGE("Document No.",ValueEntry."Document No.");
SalesInvoiceLine.SETRANGE(Type, SalesInvoiceLine.Type::Item);
SalesInvoiceLine.SETRANGE("No.",ValueEntry."Item No.");
IF SalesInvoiceLine.FIND('-') THEN BEGIN
SalesInvoiceHeader.GET(ValueEntry."Document No.");
REPEAT
TotalInvoicedQty := TotalInvoicedQty - SalesInvoiceLine.Quantity;
IF SalesInvoiceHeader."Currency Factor" <> 0 THEN
TotalAmt := TotalAmt - (SalesInvoiceLine.Amount / SalesInvoiceHeader."Currency Factor")
ELSE
TotalAmt := TotalAmt - (SalesInvoiceLine.Amount);
UNTIL SalesInvoiceLine.NEXT = 0;
END ELSE BEGIN
SalesShipLine.SETRANGE("Document No.",ValueEntry."Document No.");
SalesShipLine.SETRANGE(Type, SalesShipLine.Type::Item);
SalesShipLine.SETRANGE("No.",ValueEntry."Item No.");
IF SalesShipLine.FIND('-') THEN BEGIN
REPEAT
IF SalesShipLine.Correction = TRUE THEN
CorrectionFound := TRUE;
DocItemSum += SalesShipLine."Quantity Invoiced";
UNTIL SalesShipLine.NEXT = 0;
IF (DocItemSum = 0) AND CorrectionFound THEN CurrReport.SKIP;
END;
END;
END ELSE BEGIN
SalesCrMemoLine.SETRANGE("Document No.",ValueEntry."Document No.");
SalesCrMemoLine.SETRANGE(Type,SalesCrMemoLine.Type::Item);
SalesCrMemoLine.SETRANGE("No.",ValueEntry."Item No.");
IF SalesCrMemoLine.FIND('-') THEN BEGIN
SalesCrMemoHeader.GET(ValueEntry."Document No.");
REPEAT
TotalInvoicedQty := TotalInvoicedQty + SalesCrMemoLine.Quantity;
IF SalesCrMemoHeader."Currency Factor" <>0 THEN
TotalAmt := TotalAmt + (SalesCrMemoLine.Amount / SalesCrMemoHeader."Currency Factor")
ELSE
TotalAmt := TotalAmt + SalesCrMemoLine.Amount;
UNTIL SalesCrMemoLine.NEXT = 0;
END ELSE BEGIN
SalesShipLine.SETRANGE("Document No.",ValueEntry."Document No.");
SalesShipLine.SETRANGE(Type, SalesShipLine.Type::Item);
SalesShipLine.SETRANGE("No.",ValueEntry."Item No.");
IF SalesShipLine.FIND('-') THEN BEGIN
...

Kôd za zamenu

...
IF ValueEntry.FINDSET(FALSE,FALSE) THEN BEGIN
CASE ValueEntry."Item Ledger Entry Type" OF
ValueEntry."Item Ledger Entry Type" :: Purchase: BEGIN
IF ValueEntry."Invoiced Quantity" > 0 THEN BEGIN
PurchInvLine.SETRANGE("Document No.",ValueEntry."Document No.");
PurchInvLine.SETRANGE(Type, PurchInvLine.Type::Item);
PurchInvLine.SETRANGE("No.",ValueEntry."Item No.");

// Add the following line.
PurchInvLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

IF PurchInvLine.FIND('-') THEN BEGIN
PurchInvHeader.GET(ValueEntry."Document No.");
REPEAT
TotalInvoicedQty := TotalInvoicedQty + PurchInvLine.Quantity;
IF PurchInvHeader."Currency Factor" <> 0 THEN
TotalAmt := TotalAmt + (PurchInvLine.Amount / PurchInvHeader."Currency Factor")
ELSE
TotalAmt := TotalAmt + PurchInvLine.Amount;
UNTIL PurchInvLine.NEXT = 0;
END ELSE BEGIN
PurchRcptLine.SETRANGE("Document No.",ValueEntry."Document No.");
PurchRcptLine.SETRANGE(Type, PurchRcptLine.Type::Item);
PurchRcptLine.SETRANGE("No.",ValueEntry."Item No.");

// Add the following line.
PurchRcptLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

IF PurchRcptLine.FIND('-') THEN BEGIN
REPEAT
IF PurchRcptLine.Correction = TRUE THEN
CorrectionFound := TRUE;
DocItemSum += PurchRcptLine."Quantity Invoiced";
UNTIL PurchRcptLine.NEXT = 0;
IF (DocItemSum = 0) AND CorrectionFound THEN CurrReport.SKIP;
END;
END;
END ELSE BEGIN
PurchCrMemoLine.SETRANGE("Document No.",ValueEntry."Document No.");
PurchCrMemoLine.SETRANGE(Type, PurchInvLine.Type::Item);
PurchCrMemoLine.SETRANGE("No.",ValueEntry."Item No.");

// Add the following line.
PurchCrMemoLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

IF PurchCrMemoLine.FIND('-') THEN BEGIN
PurchCrMemoHdr.GET(ValueEntry."Document No.");
REPEAT
TotalInvoicedQty := TotalInvoicedQty - PurchCrMemoLine.Quantity;
IF PurchCrMemoHdr."Currency Factor" <> 0 THEN
TotalAmt := TotalAmt - (PurchCrMemoLine.Amount / PurchCrMemoHdr."Currency Factor")
ELSE
TotalAmt := TotalAmt - PurchCrMemoLine.Amount;
UNTIL PurchCrMemoLine.NEXT = 0;
END ELSE BEGIN
PurchRcptLine.SETRANGE("Document No.",ValueEntry."Document No.");
PurchRcptLine.SETRANGE(Type, PurchRcptLine.Type::Item);
PurchRcptLine.SETRANGE("No.",ValueEntry."Item No.");

// Add the following line.
PurchRcptLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

IF PurchRcptLine.FIND('-') THEN BEGIN
REPEAT
IF PurchRcptLine.Correction = TRUE THEN
CorrectionFound := TRUE;
DocItemSum += PurchRcptLine."Quantity Invoiced";
UNTIL PurchRcptLine.NEXT = 0;
IF (DocItemSum = 0) AND CorrectionFound THEN CurrReport.SKIP;
END;
END;
END;
END;

ValueEntry."Item Ledger Entry Type" :: Sale: BEGIN
IF ValueEntry."Invoiced Quantity" < 0 THEN BEGIN
SalesInvoiceLine.SETRANGE("Document No.",ValueEntry."Document No.");
SalesInvoiceLine.SETRANGE(Type, SalesInvoiceLine.Type::Item);
SalesInvoiceLine.SETRANGE("No.",ValueEntry."Item No.");

// Add the following line.
SalesInvoiceLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

IF SalesInvoiceLine.FIND('-') THEN BEGIN
SalesInvoiceHeader.GET(ValueEntry."Document No.");
REPEAT
TotalInvoicedQty := TotalInvoicedQty - SalesInvoiceLine.Quantity;
IF SalesInvoiceHeader."Currency Factor" <> 0 THEN
TotalAmt := TotalAmt - (SalesInvoiceLine.Amount / SalesInvoiceHeader."Currency Factor")
ELSE
TotalAmt := TotalAmt - (SalesInvoiceLine.Amount);
UNTIL SalesInvoiceLine.NEXT = 0;
END ELSE BEGIN
SalesShipLine.SETRANGE("Document No.",ValueEntry."Document No.");
SalesShipLine.SETRANGE(Type, SalesShipLine.Type::Item);
SalesShipLine.SETRANGE("No.",ValueEntry."Item No.");

// Add the following line.
SalesShipLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

IF SalesShipLine.FIND('-') THEN BEGIN
REPEAT
IF SalesShipLine.Correction = TRUE THEN
CorrectionFound := TRUE;
DocItemSum += SalesShipLine."Quantity Invoiced";
UNTIL SalesShipLine.NEXT = 0;
IF (DocItemSum = 0) AND CorrectionFound THEN CurrReport.SKIP;
END;
END;
END ELSE BEGIN
SalesCrMemoLine.SETRANGE("Document No.",ValueEntry."Document No.");
SalesCrMemoLine.SETRANGE(Type,SalesCrMemoLine.Type::Item);
SalesCrMemoLine.SETRANGE("No.",ValueEntry."Item No.");

// Add the following line.
SalesCrMemoLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

IF SalesCrMemoLine.FIND('-') THEN BEGIN
SalesCrMemoHeader.GET(ValueEntry."Document No.");
REPEAT
TotalInvoicedQty := TotalInvoicedQty + SalesCrMemoLine.Quantity;
IF SalesCrMemoHeader."Currency Factor" <>0 THEN
TotalAmt := TotalAmt + (SalesCrMemoLine.Amount / SalesCrMemoHeader."Currency Factor")
ELSE
TotalAmt := TotalAmt + SalesCrMemoLine.Amount;
UNTIL SalesCrMemoLine.NEXT = 0;
END ELSE BEGIN
SalesShipLine.SETRANGE("Document No.",ValueEntry."Document No.");
SalesShipLine.SETRANGE(Type, SalesShipLine.Type::Item);
SalesShipLine.SETRANGE("No.",ValueEntry."Item No.");

// Add the following line.
SalesShipLine.SETRANGE("Line No.",ValueEntry."Document Line No."); 

IF SalesShipLine.FIND('-') THEN BEGIN
...

              

Preduslovi

Morate da imate instaliran jedan od sledećih proizvoda da biste primenili ovu hitnu ispravku:

  • Italijanska verzija servisnog paketa 1 za Microsoft Dynamics NAV 2009
  • Italijanska verzija servisnog paketa Microsoft Dynamics NAV 5.0 sa servisnim paketom 1

Informacije o uklanjanju

Ne možete da uklonite ovu hitnu ispravku.

Status

Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku „Odnosi se na“.

Napomena: Ovo je članak "BRZO OBJAVLJIVANJE" koji je kreiran direktno u okviru organizacije Microsoft podrške. Informacije koje se nalaze ovde pružaju se kakve jesu kao odgovor na nove probleme. Kao rezultat brzine stavljanja na raspolaganje, materijali mogu sadržavati tipografske greške i mogu se revidirati u bilo kom trenutku bez prethodne najave. Pogledajte Uslove korišćenja za druga razmatranja.