Symptomer
Gruppert feil grunnlag og beløp for den samme mva-prosenten og perioden i mva-kontant involvert i den spanske versjonen av Microsoft Dynamics NAV 2009 340-deklareringen.
Samme scenario med normal mva., fungerer som forventet, å skille hver faktura uansett om de har samme mva-prosenten. Følg trinnene i delen kodeendringer for å løse dette problemet. Dette problemet oppstår i følgende produkter:
-
Den spanske versjonen av Microsoft Dynamics NAV 2009 R2
-
Den spanske versjonen av Microsoft Dynamics NAV 2009 SP1
Oppløsning
Informasjon om hurtigreparasjon
En støttet hurtigreparasjon er nå tilgjengelig fra Microsoft. Det er imidlertid bare ment å løse problemet som er beskrevet i denne artikkelen. Bruk den bare på systemer som har dette bestemte problemet. Denne hurtigreparasjonen kan gjennomgå ytterligere testing. Hvis du ikke er alvorlig påvirket av dette problemet, anbefaler vi derfor at du venter på neste oppdateringspakke for Microsoft Dynamics NAV 2009 eller den neste versjonen av Microsoft Dynamics NAV som inneholder denne hurtigreparasjonen.
Obs! I spesielle tilfeller avgifter som vanligvis påløper for støtte samtaler kan avbrytes hvis en kundestøttemedarbeider for Microsoft Dynamics og beslektede produkter avgjør at en bestemt oppdatering løser problemet. Vanlige kundestøttekostnader gjelder for ytterligere kundestøttespørsmål og problemer som ikke dekkes av den gjeldende oppdateringen.
Installasjonsinformasjon
Microsoft bruker ment som eksempler, uten garanti, verken direkte eller indirekte. Dette inkluderer, men er ikke begrenset til, eventuelle stilltiende garantier om salgbarhet eller anvendelighet for særskilte formål. Denne artikkelen forutsetter at du er kjent med programmeringsspråket som anvendes, og verktøyene som brukes til å opprette og feilsøke prosedyrer. Microsofts kundestøtteteknikere kan hjelpe deg med å forklare funksjonaliteten til en bestemt prosedyre. De endrer imidlertid ikke disse eksemplene for å lage forbedret funksjonalitet eller lage prosedyrer som dekker dine spesifikke behov.
Obs! Før du installerer denne hurtigreparasjonen, må du kontrollere at alle brukerne i Microsoft Dynamics NAV-klienten er logget av systemet. Dette inkluderer tjenester for Microsoft Dynamics NAV Application Server (NAS). Du skal bare klient-brukeren som er logget på når du implementerer denne hurtigreparasjonen.
Hvis du vil implementere denne hurtigreparasjonen, må du ha en utviklerlisens.
Vi anbefaler at kontoen i vinduet Windows-pålogging eller i vinduet Database-pålogging være tildelt "SUPER" rolle-ID. Hvis brukerkontoen ikke kan tilordnes "SUPER" rolle-IDen, må du kontrollere at brukerkontoen har følgende tillatelser:
-
Endre-tillatelse for objektet du vil endre.
-
Tilgangsnivået for systemet objekt-IDen til 5210 objektet og systemet objekt-ID-9015
-objektet.
Obs! Du har ikke tilgangsrettigheter til datalagre med mindre du har til å utføre data reparasjon.
Kodeendringer
Obs! Alltid løser teste koden i et kontrollert miljø før du installerer hurtigreparasjoner til produksjonsdatamaskiner for.
Hvis du vil løse dette problemet, gjør du følgende:
-
Endre koden i rapporten gjør 340-deklarering (10743) som følger:
Eksisterende kode 1... END;
END;
// Delete the following line.
OnAfterGetRecord=BEGIN
// End of the deleted line.
OperationCode := GetOperationCode(VATEntry2);
VATBuffer."VAT %" := "VAT %";
...Ny kode 1
... END;
END;
// Add the following lines.
OnAfterGetRecord=VAR
VendLedgEntryAppl@1100000 : Record 25;
NewEntry@1100001 : Boolean;
BEGIN
// End of the added lines.
OperationCode := GetOperationCode(VATEntry2);
VATBuffer."VAT %" := "VAT %";
...Eksisterende kode 2
... VATBuffer.Amount := Amount;
END;
VATBuffer.INSERT;
// Delete the following lines.
IF Type = VATEntry.Type::Purchase THEN BEGIN
VATEntryTemporary := VATEntry2;
VATEntryTemporary.INSERT;
END;
END;
// End of the deleted lines.
END;
TotalFields=Base,Amount;
...Ny kode 2
...VATBuffer.Amount := Amount;
END;
VATBuffer.INSERT;
// Add the following lines.
END;
IF Type = VATEntry.Type::Purchase THEN
IF HasBeenRealized("Entry No.") OR ("Unrealized VAT Entry No." <> 0) THEN BEGIN
NewEntry := CheckVLEApplication(VATEntry2);
VATEntryTemporary.SETRANGE("Posting Date","Posting Date");
VATEntryTemporary.SETRANGE("Document No.","Document No.");
VATEntryTemporary.SETRANGE("Document Type","Document Type");
VATEntryTemporary.SETRANGE(Type,Type);
VATEntryTemporary.SETRANGE("VAT %","VAT %");
VATEntryTemporary.SETRANGE("Transaction No.","Transaction No.");
IF VATEntryTemporary.FINDFIRST AND NOT NewEntry THEN BEGIN
VATEntryTemporary.Base += Base;
VATEntryTemporary.Amount += Amount;
VATEntryTemporary.MODIFY;
END ELSE BEGIN
VATEntryTemporary := VATEntry2;
VATEntryTemporary.INSERT;
END;
END ELSE BEGIN
VATEntryTemporary := VATEntry2;
VATEntryTemporary.INSERT;
END;
// End of the added lines.
END;
TotalFields=Base,Amount;
...Eksisterende kode 3
... DataItemVarName=<Integer2>;
OnPreDataItem=BEGIN
VATBuffer.FIND('-');
VATEntryTemporary.SETCURRENTKEY("VAT %","EC %");
IF VATEntryTemporary.FINDFIRST THEN;
CurrReport.CREATETOTALS(VATBuffer2.Base,VATBuffer2.Amount);
Fin := FALSE;
...Ny kode 3
... DataItemVarName=<Integer2>;
OnPreDataItem=BEGIN
VATBuffer.FIND('-');
// Delete the following line.
VATEntryTemporary.SETCURRENTKEY("VAT %","EC %");
// End of the deleted line.
IF VATEntryTemporary.FINDFIRST THEN;
CurrReport.CREATETOTALS(VATBuffer2.Base,VATBuffer2.Amount);
Fin := FALSE;
...Eksisterende kode 4
...IF VATEntry.Type = VATEntry.Type::Purchase THEN BEGIN
VATEntryTemporary.Amount := VATBuffer.Amount;
VATDeductAmt := CheckDeductibleVAT(VATEntryTemporary);
// Delete the following lines.
VATEntryTemporary.NEXT;
RecordTypePurchase(VATEntry2);
// End of the deleted lines.
END;
Fin := VATBuffer.NEXT = 0;
END;
...Ny kode 4
... IF VATEntry.Type = VATEntry.Type::Purchase THEN BEGIN
VATEntryTemporary.Amount := VATBuffer.Amount;
VATDeductAmt := CheckDeductibleVAT(VATEntryTemporary);
// Add the following lines.
VATEntryTemporary.SETCURRENTKEY("VAT %","EC %");
VATEntryTemporary.SETRANGE("VAT %",VATBuffer."VAT %");
VATEntryTemporary.SETRANGE("EC %",VATBuffer."EC %");
VATEntryTemporary.FINDSET;
REPEAT
RecordTypePurchase(VATEntryTemporary);
UNTIL VATEntryTemporary.NEXT = 0;
// End of the added lines.
END;
Fin := VATBuffer.NEXT = 0;
END;
... -
Endre koden i globale variabler i rapporten gjør 340-deklarering (10743) som følger:
Eksisterende kode...VATEntryTemporary@1100078 : TEMPORARY Record 254;
TempDeclarationLines@1100149 : TEMPORARY Record 10744;
TempVATEntry@1100007 : TEMPORARY Record 254;
CommonDialogMgt@1100015 : Codeunit 412;
OutFile@1100016 : File;
DeclarationNum@1100017 : Text[4];
...Ny kode
... VATEntryTemporary@1100078 : TEMPORARY Record 254;
TempDeclarationLines@1100149 : TEMPORARY Record 10744;
TempVATEntry@1100007 : TEMPORARY Record 254;
// Add the following line.
TempDtldVendLedgerEntry@1100115 : TEMPORARY Record 380;
// End of the added line.
CommonDialogMgt@1100015 : Codeunit 412;
OutFile@1100016 : File;
DeclarationNum@1100017 : Text[4];
... -
Endre koden i RecordTypePurchase -funksjonen i rapporten gjør 340-deklarering (10743) som følger:
Eksisterende kode... END ELSE
OperationDateText := FormatDate(VATEntryRec."Posting Date");
// Delete the following lines.
IF VATEntryRec."Document Type" IN [VATEntryRec."Document Type"::Payment,VATEntryRec."Document Type"::Refund] THEN BEGIN
UnrealizedVATEntryNo := VATEntryRec."Unrealized VAT Entry No.";
DocumentDate := VATEntryRec."Posting Date";
IF UnrealizedVATEntryNo <> 0 THEN BEGIN
UnrealizedVATEntry.GET(UnrealizedVATEntryNo);
OperationDateText := FormatDate(UnrealizedVATEntry."Posting Date");
DocumentDate := UnrealizedVATEntry."Document Date";
// End of the deleted lines.
END;
END ELSE
UnrealizedVATEntryNo := 0;
...Ny kode
... END ELSE
OperationDateText := FormatDate(VATEntryRec."Posting Date");
// Add the following lines.
VATBuffer2.Base := VATBuffer.Base;
VATBuffer2.Amount := VATBuffer.Amount;
IF VATEntryRec."Document Type" IN [VATEntryRec."Document Type"::Payment,VATEntryRec."Document Type"::Refund] THEN BEGIN
UnrealizedVATEntryNo := VATEntryTemporary."Unrealized VAT Entry No.";
DocumentDate := VATEntryTemporary."Posting Date";
IF UnrealizedVATEntryNo <> 0 THEN BEGIN
UnrealizedVATEntry.GET(UnrealizedVATEntryNo);
OperationDateText := FormatDate(UnrealizedVATEntry."Posting Date");
DocumentDate := UnrealizedVATEntry."Document Date";
IF FindPmtOrderBillGrBankAcc(VATEntry.Type,VATEntry."Document No.") = '' THEN BEGIN
VendorDocumentNo := UnrealizedVATEntry."External Document No.";
VATBuffer2.Base := VATEntryTemporary.Base;
VATBuffer2.Amount := VATEntryTemporary.Amount;
END;
// End of the added lines.
END;
END ELSE
UnrealizedVATEntryNo := 0;
... -
Endre koden i CheckVLEApplication -funksjonen i rapporten gjør 340-deklarering (10743) som følger:
Eksisterende kode... PrevDeclarationNumEnable := ReplaceDeclaration;
END;
BEGIN
END.
}
...Ny kode
...PrevDeclarationNumEnable := ReplaceDeclaration;
END;
// Add the following lines.
LOCAL PROCEDURE CheckVLEApplication@1100074(VATEntry@1100000 : Record 254) : Boolean;
VAR
VendorLedgerEntry@1100001 : Record 25;
DtldVendLedgEntry@1100002 : Record 380;
CheckVendLedgEntry@1100003 : Record 25;
UnrealizedVendLedgEntry@1100004 : Integer;
BEGIN
FilterVendLedgerEntryByVATEntry(VendorLedgerEntry,VATEntry);
UnrealizedVendLedgEntry := GetUnrealizedInvoiceVLENo(VATEntry."Unrealized VAT Entry No.");
IF VendorLedgerEntry.FINDSET THEN
REPEAT
DtldVendLedgEntry.RESET;
DtldVendLedgEntry.SETRANGE(Unapplied,FALSE);
DtldVendLedgEntry.SETRANGE("Entry Type",DtldVendLedgEntry."Entry Type"::Application);
DtldVendLedgEntry.SETRANGE("Applied Vend. Ledger Entry No.",VendorLedgerEntry."Entry No.");
IF UnrealizedVendLedgEntry <> 0 THEN
DtldVendLedgEntry.SETRANGE("Vendor Ledger Entry No.",UnrealizedVendLedgEntry);
IF DtldVendLedgEntry.FINDSET THEN
REPEAT
IF (DtldVendLedgEntry."Vendor Ledger Entry No." <> DtldVendLedgEntry."Applied Vend. Ledger Entry No.") AND
CheckVendLedgEntry.GET(DtldVendLedgEntry."Vendor Ledger Entry No.")
THEN BEGIN
IF ExistDtldVLE(DtldVendLedgEntry."Vendor Ledger Entry No.",DtldVendLedgEntry."Applied Vend. Ledger Entry No.") THEN
EXIT(FALSE);
InsertTempDtldVLE(DtldVendLedgEntry."Vendor Ledger Entry No.",DtldVendLedgEntry."Applied Vend. Ledger Entry No.");
EXIT(TRUE);
END;
UNTIL DtldVendLedgEntry.NEXT = 0
ELSE BEGIN
DtldVendLedgEntry.SETRANGE("Applied Vend. Ledger Entry No.");
DtldVendLedgEntry.SETRANGE("Vendor Ledger Entry No.",VendorLedgerEntry."Entry No.");
IF UnrealizedVendLedgEntry <> 0 THEN
DtldVendLedgEntry.SETRANGE("Applied Vend. Ledger Entry No.",UnrealizedVendLedgEntry);
IF DtldVendLedgEntry.FINDSET THEN
REPEAT
IF CheckVendLedgEntry.GET(DtldVendLedgEntry."Applied Vend. Ledger Entry No.") THEN BEGIN
IF ExistDtldVLE(DtldVendLedgEntry."Applied Vend. Ledger Entry No.",DtldVendLedgEntry."Vendor Ledger Entry No.") THEN
EXIT(FALSE);
InsertTempDtldVLE(DtldVendLedgEntry."Applied Vend. Ledger Entry No.",DtldVendLedgEntry."Vendor Ledger Entry No.");
EXIT(TRUE);
END;
UNTIL DtldVendLedgEntry.NEXT = 0;
END;
UNTIL VendorLedgerEntry.NEXT = 0;
EXIT(TRUE);
END;
LOCAL PROCEDURE GetUnrealizedInvoiceVLENo@1100075(VATEntryNo@1100000 : Integer) : Integer;
VAR
VATEntry@1100002 : Record 254;
VendLedgEntry@1100001 : Record 25;
BEGIN
IF NOT VATEntry.GET(VATEntryNo) THEN
EXIT(0);
FilterVendLedgerEntryByVATEntry(VendLedgEntry,VATEntry);
IF VendLedgEntry.FINDFIRST THEN
EXIT(VendLedgEntry."Entry No.");
EXIT(0);
END;
LOCAL PROCEDURE FilterVendLedgerEntryByVATEntry@1100087(VAR VendLedgEntry@1100001 : Record 25;VATEntry@1100000 : Record 254);
BEGIN
VendLedgEntry.SETRANGE("Vendor No.",VATEntry."Bill-to/Pay-to No.");
VendLedgEntry.SETRANGE("Posting Date",VATEntry."Posting Date");
VendLedgEntry.SETRANGE("Document Type",VATEntry."Document Type");
VendLedgEntry.SETRANGE("Document No.",VATEntry."Document No.");
VendLedgEntry.SETRANGE("Transaction No.",VATEntry."Transaction No.");
END;
LOCAL PROCEDURE HasBeenRealized@1100064(VATEntryNo@1100000 : Integer) : Boolean;
VAR
UnrealizedVATEntry@1100001 : Record 254;
BEGIN
UnrealizedVATEntry.SETRANGE("Unrealized VAT Entry No.",VATEntryNo);
EXIT(NOT UnrealizedVATEntry.ISEMPTY);
END;
LOCAL PROCEDURE ExistDtldVLE@1100195(VLENo@1100001 : Integer;AppliedVLENo@1100000 : Integer) : Boolean;
BEGIN
TempDtldVendLedgerEntry.SETRANGE("Vendor Ledger Entry No.",VLENo);
TempDtldVendLedgerEntry.SETRANGE("Applied Vend. Ledger Entry No.",AppliedVLENo);
EXIT(NOT TempDtldVendLedgerEntry.ISEMPTY);
END;
LOCAL PROCEDURE InsertTempDtldVLE@1100191(VLENo@1100000 : Integer;AppliedVLENo@1100001 : Integer);
BEGIN
TempDtldVendLedgerEntry.INIT;
IF TempDtldVendLedgerEntry.FINDLAST THEN;
TempDtldVendLedgerEntry."Entry No." += 1;
TempDtldVendLedgerEntry."Vendor Ledger Entry No." := VLENo;
TempDtldVendLedgerEntry."Applied Vend. Ledger Entry No." := AppliedVLENo;
TempDtldVendLedgerEntry.INSERT;
END;
// End of the added lines.
BEGIN
END.
}
...
Forutsetninger
Du må ha én av de følgende programmene installert for å bruke denne hurtigreparasjonen:
-
Den spanske versjonen av Microsoft Dynamics NAV 2009 R2
-
Den spanske versjonen av Microsoft Dynamics NAV 2009 SP1
Informasjon om fjerning
Du kan ikke fjerne denne hurtigreparasjonen.
Status
Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".
Obs! Dette er en "RASKT PUBLISERE" artikkel opprettet direkte fra innenfor organisasjonen Microsoft Kundestøtte. Informasjonen i dette dokumentet tilbys som-er som svar på nye problemer. Som et resultat av hastigheten i å gjøre den tilgjengelig materialene kan inkludere typografiske feil, og den kunne bli revidert når som helst uten varsel. Se Vilkårene for Brukfor andre hensyn.