Tämä artikkeli koskee Microsoft Dynamics NAV -ohjelmaa kaikissa maissa ja kaikilla kielialueilla.
Ongelman ilmenemistapa
Kun kirjaat käänteisen arvonlisäveron (ALV) ostolaskun, joka sisältää useita rivejä, ja rivit linkittävät eri työpaikkoihin Microsoft Dynamics NAV :ssa, ALV-laskutoimitus on virheellinen. Tämä ongelma ilmenee seuraavissa tuotteissa:
- Microsoft Dynamics NAV 2009 R2
- Microsoft Dynamics NAV 2009 Service Pack 1
- Microsoft Dynamics NAV 5.0 Service Pack 1
Ratkaisu
Hotfix-tiedot
Tuettu hotfix-korjaus on nyt saatavilla Microsoftilta. Sen tarkoituksena on kuitenkin korjata vain tässä artikkelissa kuvattu ongelma. Käytä sitä vain järjestelmissä, joissa on tämä ongelma. Tämä hotfix-korjaus voi saada lisätestejä. Jos ongelma ei siis vaikuta sinuun vakavasti, suosittelemme odottamaan seuraavaa Microsoft Dynamics NAV 2009 Service Pack -pakettia tai seuraavaa Microsoft Dynamics NAV -versiota, joka sisältää tämän hotfix-korjauksen.
Huomautus Erityistapauksissa tukipuheluista tavallisesti aiheutuvat maksut voidaan peruuttaa, jos Microsoft Dynamicsin ja siihen liittyvien tuotteiden teknisen tuen asiantuntija määrittää, että tietty päivitys ratkaisee ongelmasi. Tavanomaiset tukikustannukset koskevat muita tukikysymyksiä ja -ongelmia, jotka eivät ole oikeutettuja kyseiseen päivitykseen.
Asennustiedot
Microsoft tarjoaa ohjelmointiesimerkkejä vain havainnollistamista varten ilman ilmaistua tai oletettua takuuta. Tämä sisältää muun muassa oletetut takuut soveltuvuudesta kaupankäynnin kohteeksi tai sopivuudesta tiettyyn tarkoitukseen. Tässä artikkelissa oletetaan, että tunnet ohjelmointikielen, jota esitellään, sekä työkalut, joita käytetään toimintosarjojen luomiseen ja virheenkorjaukseen. Microsoftin tukihenkilöt voivat auttaa selittämään tietyn toimintosarjan toiminnallisuuden. He eivät kuitenkaan muokkaa näitä esimerkkejä tarjotakseen lisätoimintoja tai luodakseen toimintosarjoja, jotka vastaavat tarpeitasi.
Huomautus Varmista ennen tämän hotfix-korjauksen asentamista, että kaikki Microsoft Navision -asiakasohjelman käyttäjät ovat kirjautuneet ulos järjestelmästä. Tämä koskee myös Microsoft Navision Application Services (NAS) -asiakaskäyttäjiä. Sinun pitäisi olla ainoa asiakaskäyttäjä, joka on kirjautunut sisään, kun otat tämän hotfix-korjauksen käyttöön.
Jotta voit ottaa tämän hotfix-korjauksen käyttöön, sinulla on oltava kehittäjän käyttöoikeus.
Suosittelemme, että käyttäjätilille, joka on Windowsin kirjautumisikkunassa tai Tietokannan kirjautumiset -ikkunassa, määritetään "SUPER"-roolitunnus. Jos käyttäjätilille ei voi määrittää "SUPER"-roolitunnusta, sinun on varmistettava, että käyttäjätilillä on seuraavat käyttöoikeudet:
- Muutettavan objektin Muokkaa-käyttöoikeus.
- System Object ID 5210 -objektin ja System Object ID 9015 -objektin Suoritus-oikeus.
Huomautus Sinulla ei tarvitse olla oikeuksia tietosäilöihin, ellei sinun tarvitse korjata tietoja.
Koodin muutokset
Huomautus Testaa koodikorjaukset aina valvotussa ympäristössä, ennen kuin otat korjaukset käyttöön tuotantotietokoneissasi.
Voit ratkaista ongelman muuttamalla purch.-post codeunit (90) -koodia. Voit tehdä tämän seuraavasti:
Lisää paikallinen muuttuja OnRun-käynnistimeen ja määritä muuttuja seuraavasti:
- Nimi:TempRevChargeVATAmountLine
- DataType:Record
- Alatyyppi:ALV-summarivi
Huomautus Ota tilapäinen ominaisuus käyttöön.
Lisää paikallinen muuttuja OnRun-käynnistimeen ja määritä muuttuja seuraavasti:
- Nimi:TempRevChargeVATAmountLine2
- DataType:Record
- Alatyyppi:ALV-summarivi
Huomautus Ota tilapäinen ominaisuus käyttöön.
Muuta OnRun-käynnistimen koodia seuraavasti:
Aiemmin luotu koodi....
CASE InvPostingBuffer[1]."VAT Calculation Type" OF InvPostingBuffer[1]."VAT Calculation Type"::"Reverse Charge VAT": //delete lines begin BEGIN VATPostingSetup.GET( InvPostingBuffer[1]."VAT Bus. Posting Group",InvPostingBuffer[1]."VAT Prod. Posting Group"); InvPostingBuffer[1]."VAT Amount" := ROUND( InvPostingBuffer[1].Amount * VATPostingSetup."VAT %" / 100); InvPostingBuffer[1]."VAT Amount (ACY)" := ROUND( (InvPostingBuffer[1]."Amount (ACY)" * VATPostingSetup."VAT %" / 100),Currency."Amount Rounding Precision"); END //delete lines end InvPostingBuffer[1]."VAT Calculation Type"::"Sales Tax":Korvaava koodi
... CASE InvPostingBuffer[1]."VAT Calculation Type" OF InvPostingBuffer[1]."VAT Calculation Type"::"Reverse Charge VAT": // Add the following line. CalcRevChargeVATAmounts(InvPostingBuffer[1],TempRevChargeVATAmountLine,TempRevChargeVATAmountLine2); InvPostingBuffer[1]."VAT Calculation Type"::"Sales Tax": ...Lisää uusi CalcRevChargeVATAmount-funktio. Voit tehdä tämän seuraavasti:
Määritä Paikallinen-ominaisuuden arvoksi Kyllä.
Lisää paikallinen parametri CalcRevChargeVATAmount-funktioon ja määritä parametri seuraavasti:
- Var: Kyllä
- Nimi:InvoicePostBuffer
- DataType:Record
- Alatyyppi:Laskun viesti. Puskuri
Lisää paikallinen parametri CalcRevChargeVATAmount-funktioon ja määritä parametri seuraavasti:
- Var: Kyllä
- Nimi:TempRevChargeVATAmountLine
- DataType:Record
- Alatyyppi:ALV-summarivi
Lisää paikallinen muuttuja CalcRevChargeVATAmount-funktioon ja määritä muuttuja seuraavasti:
- Nimi:ALV-kanta
- DataType:Desimaali
Lisää paikallinen muuttuja CalcRevChargeVATAmount-funktioon ja määritä muuttuja seuraavasti:
- Nimi:TotalVATBase
- DataType:Desimaali
Luodussa CalcRevChargeVATAmount(VAR InvoicePostBuffer: Record "Invoice Post. Buffer"; VAR TempRevChargeVATAmountLine : Record "VAT Amount Line") -funktio, lisää seuraava koodi:
VATBase := InvoicePostBuffer.Amount; TotalVATBase := GetTotalVATBase(TempRevChargeVATAmountLine,InvoicePostBuffer); InvoicePostBuffer."VAT Amount" := GetVATAmount(TotalVATBase + VATBase) - GetVATAmount(TotalVATBase); SetTotalVATBase(TempRevChargeVATAmountLine,InvoicePostBuffer,VATBase);
Lisää uusi CalcRevChargeVATAmounts-funktio. Voit tehdä tämän seuraavasti:
Määritä Paikallinen-ominaisuuden arvoksi Kyllä.
Lisää paikallinen parametri CalcRevChargeVATAmounts-funktioon ja määritä parametri seuraavasti:
- Var: Kyllä
- Nimi:InvoicePostBuffer
- DataType:Record
- Alatyyppi:Laskun viesti. Puskuri
Lisää paikallinen parametri CalcRevChargeVATAmounts-funktioon ja määritä parametri seuraavasti:
- Var: Kyllä
- Nimi:TempRevChargeVATAmountLine
- DataType:Record
- Alatyyppi:ALV-summarivi
Lisää paikallinen parametri CalcRevChargeVATAmounts-funktioon ja määritä parametri seuraavasti:
- Var: Kyllä
- Nimi:TempRevChargeVATAmountLine2
- DataType:Record
- Alatyyppi:ALV-summarivi
Lisää paikallinen muuttuja CalcRevChargeVATAmounts-funktioon ja määritä muuttuja seuraavasti:
- Nimi:ACYInvoicePostBuffer
- DataType:Record
- Alatyyppi:Laskun viesti. Puskuri
Huomautus Ota tilapäinen ominaisuus käyttöön.
Luodussa CalcRevChargeVATAmounts(VAR InvoicePostBuffer: Record "Invoice Post. Buffer"; VAR TempRevChargeVATAmountLine : Record "VAT Amount Line") -funktio, lisää seuraava koodi:
CalcRevChargeVATAmount(InvoicePostBuffer,TempRevChargeVATAmountLine); CopyACYAmounts(InvoicePostBuffer,ACYInvoicePostBuffer); CalcRevChargeVATAmount(ACYInvoicePostBuffer,TempRevChargeVATAmountLine2); InvoicePostBuffer."VAT Amount (ACY)" := ACYInvoicePostBuffer."VAT Amount";
Lisää uusi FillVATAmountLine-funktio. Toimi tätä varten seuraavasti:
Määritä Paikallinen-ominaisuuden arvoksi Kyllä.
Lisää paikallinen parametri FillVATAmountLine-funktioon ja määritä parametri seuraavasti:
- Var: Kyllä
- Nimi:TempRevChargeVATAmountLine
- DataType:Record
- Alatyyppi:ALV-summarivi
Lisää paikallinen parametri FillVATAmountLine-funktioon ja määritä parametri seuraavasti:
- Var: Ei
- Nimi:InvoicePostBuffer
- DataType:Record
- Alatyyppi:Laskun viesti. Puskuri
Luotu FillVATAmountLine(VAR TempRevChargeVATAmountLine : Record "ALV Amount Line"; InvoicePostBuffer : Record "Invoice Post. Buffer") -funktio, lisää seuraava koodi:
VATPostingSetup.GET(InvoicePostBuffer."VAT Bus. Posting Group",InvoicePostBuffer."VAT Prod. Posting Group"); TempRevChargeVATAmountLine.INIT; TempRevChargeVATAmountLine."VAT Identifier" := VATPostingSetup."VAT Identifier"; TempRevChargeVATAmountLine."VAT Calculation Type" := VATPostingSetup."VAT Calculation Type"; TempRevChargeVATAmountLine."Tax Group Code" := InvoicePostBuffer."Tax Group Code"; TempRevChargeVATAmountLine."Use Tax" := InvoicePostBuffer."Use Tax"; TempRevChargeVATAmountLine.Positive := InvoicePostBuffer.Amount > 0;
Lisää uusi SetTotalVATBase-funktio. Voit tehdä tämän seuraavasti:
Määritä Paikallinen-ominaisuuden arvoksi Kyllä.
Lisää paikallinen parametri SetTotalVATBase-funktioon ja määritä parametri seuraavasti:
- Var: Kyllä
- Nimi:TempRevChargeVATAmountLine
- DataType:Record
- Alatyyppi:ALV-summarivi
Lisää paikallinen parametri SetTotalVATBase-funktioon ja määritä parametri seuraavasti:
- Var: Ei
- Nimi:InvoicePostBuffer
- DataType:Record
- Alatyyppi:Laskun viesti. Puskuri
Lisää paikallinen parametri SetTotalVATBase-funktioon ja määritä parametri seuraavasti:
- Var: Ei
- Nimi:ALV-kanta
- DataType:Desimaali
Luodussa SetTotalVATBase(VAR TempRevChargeVATAmountLine : Record "VAT Amount Line"; InvoicePostBuffer : Tietue "Laskun viesti. puskuri"; ALV-kanta : D) -funktio, lisää seuraava koodi:
FillVATAmountLine(TempRevChargeVATAmountLine,InvoicePostBuffer); IF NOT TempRevChargeVATAmountLine.FIND THEN TempRevChargeVATAmountLine.INSERT; TempRevChargeVATAmountLine."VAT Base" += VATBase; TempRevChargeVATAmountLine.MODIFY;
Lisää uusi GetTotalVATBase-funktio. Voit tehdä tämän seuraavasti:
Määritä Paikallinen-ominaisuuden arvoksi Kyllä.
Lisää paikallinen parametri GetTotalVATBase-funktioon ja määritä parametri seuraavasti:
- Var: Kyllä
- Nimi:TempRevChargeVATAmountLine
- DataType:Record
- Alatyyppi:ALV-summarivi
Lisää paikallinen parametri GetTotalVATBase-funktioon ja määritä parametri seuraavasti:
- Var: Ei
- Nimi:InvoicePostBuffer
- DataType:Record
- Alatyyppi:Laskun viesti. Puskuri
Määritä gettotalVATBase-funktion palautusarvo ja määritä arvo seuraavasti:
- Nimi:ALV-kanta
- Palautustyyppi:Desimaali
Luodussa GetTotalVATBase(VAR TempRevChargeVATAmountLine : Record "VAT Amount Line"; InvoicePostBuffer : Record "Invoice Post. Buffer") VATBase-funktio, lisää seuraava koodi:
FillVATAmountLine(TempRevChargeVATAmountLine,InvoicePostBuffer); IF TempRevChargeVATAmountLine.FIND THEN VATBase := TempRevChargeVATAmountLine."VAT Base";
Lisää uusi CopyACYAmounts-funktio. Voit tehdä tämän seuraavasti:
Määritä Paikallinen-ominaisuuden arvoksi Kyllä.
Lisää paikallinen parametri CopyACYAmounts-funktioon ja määritä parametri seuraavasti:
- Var: Ei
- Nimi:FromInvoicePostBuffer
- DataType:Record
- Alatyyppi:Laskun viesti. Puskuri
Lisää paikallinen parametri CopyACYAmounts-funktioon ja määritä parametri seuraavasti:
- Var: Kyllä
- Nimi:ToInvoicePostBuffer
- DataType:Record
- Alatyyppi:Laskun viesti. Puskuri
Luodussa CopyACYAmounts(FromInvoicePostBuffer: Record "Invoice Post. Buffer"; VAR ToInvoicePostBuffer : Record "Invoice Post. Buffer") -funktio, lisää seuraava koodi:
ToInvoicePostBuffer := FromInvoicePostBuffer; ToInvoicePostBuffer.Amount := FromInvoicePostBuffer."Amount (ACY)";
Lisää uusi GetVATAmount-funktio. Voit tehdä tämän seuraavasti:
Määritä Paikallinen-ominaisuuden arvoksi Kyllä.
Lisää paikallinen parametri GetVATAmount-funktioon ja määritä parametri seuraavasti:
- Var: Ei
- Nimi:ALV-kanta
- DataType:Desimaali
Määritä GetVATAmount-funktion palautusarvo ja määritä arvo seuraavasti:
- Palautustyyppi:Desimaali
Lisää luotuun GetVATAmount(VATBase : Desimaali) : Desimaalifunktioon seuraava koodi:
EXIT(ROUND(VATBase * VATPostingSetup."VAT %" / 100));
Edellytykset
Sinulla on oltava asennettuna jokin seuraavista tuotteista, jotta voit käyttää tätä hotfix-korjausta:
- Microsoft Dynamics NAV 2009 R2
- Microsoft Dynamics NAV 2009 Service Pack 1
- Microsoft Dynamics NAV 5.0 Service Pack 1
Poistotiedot
Et voi poistaa tätä hotfix-korjausta.
Tila
Microsoft on vahvistanut tämän olevan ongelma niissä Microsoftin tuotteissa, jotka ovat listattuna Koskee seuraavia tuotteita -osiossa.
Huomautus Tämä on FAST PUBLISH -artikkeli, joka on luotu suoraan Microsoftin tukiorganisaatiosta. Tässä annetut tiedot annetaan sellaisenaan vastauksena uusiin ongelmiin. Koska materiaalit ovat nopeasti käytettävissä, ne voivat sisältää typografisia virheitä, ja niitä voidaan muuttaa milloin tahansa ilman ennakkoilmoitusta. Lisätietoja on ohjeaiheessa Käyttöehdot .