Introduktion/Forklaring/Ansvarsfraskrivelse: Der er meget gode grunde til, at posteringer i Navision og Business Central og de fleste bogføringsprogrammer som f.eks. Datev og Diamand og HS ikke kan ændres efterfølgende. Den vigtigste er f.eks. GoB, Grundsätze ordnungsgemäßer Buchführung (principper for korrekt bogføring). Disse er også lovfæstede. Denne løsning til efterfølgende korrigering af en bogføringsdato vedrører f.eks. § 146, stk. 4 AO og § 239, stk. 3. I henhold til disse forordninger skal den oprindelige indhold af en registrering kunne konstateres, når der foretages ændringer i registreringer. Hvis der skal foretages ændringer, skal det sikres, at disse markeres, så det tydeligt fremgår, at den oprindelige registrering er blevet ændret.
Dette sikrer denne funktion for Navision eller Business Central - i en vis udstrækning - at
-Bogføringsjournalerne må ikke ændres, dvs. at det fra Navision Fibu-bogføringsjournalen og artikeljournalen stadig kan udlæses, hvornår den oprindelige bogføring blev oprettet.
-Selve hændelsen („Bookingdato ændret“) registreres i fakturareferencen.
§146 stk. 1 AO og §239 stk. 2 HGB kræver princippet om ordentlig og rettidig bogføring. Efter begge bestemmelser skal registreringer være fuldstændige, korrekte, Tidssvarende og ordentligt gennemført. Og det er netop her, min korrektionsfunktion til Navision eller Business Central kommer ind. For den tjener naturligvis ikke til at flytte omsætninger tilfældigt frem og tilbage. Dette forbydes allerede af den indbyggede sikkerhed, der kræver, at den nye bogføringsdato skal ligge inden for det tilladte bogføringsområde, så du f.eks. ikke kan bagatellisere en faktura i en bogføringsperiode, der allerede er indberettet via UVA. Den tjener til at ombogføre en faktura, der ved en fejl er bogført på en forkert dato, til den korrekte dato.
For at være på den sikre side bør du drøfte denne fremgangsmåde med din revisor., før Byg denne funktion ind i din Navision / Business Central.
Hvis du også vil ændre bogføringsbeskrivelsen, kan du blot udvide kodestykket til det formål. Tale til mig.
Denne Navision / Business Central-funktion er opstået uændret fra et specifikt kundeønske fra en Navision 2009r2 (en logisk Navision 4.03), og er derfor allerede lidt individuel, f.eks. med bogføringsdatoen i salgsfakturalinjer. Til gengæld er den, som den står her, også Kolo 🙂. .
OBJECT Codeunit 50003 Ændring af bogføringsdato
{
OBJEKT-EGENSKABER
{
Dato=02.04.22;
Time=07:51:44;
Modificeret=Ja;
Versionsliste=;
}
EGENSKABER
{
Tilladelser=TableData 17=m,
TableData 21=m,
TableData 32=m,
TableData 112=m,
TableData 113=m,
TableData 169=m,
TableData 203=m,
TableData 254=m,
TableData 379=m,
TableData 5802=m;
OnRun=BEGIN
SLUT;
}
CODE
{
VAR
GLentry@1119455019 : Post 17;
GLentry2@1119455018 : Post 17;
VATentry@1119455017 : Post 254;
VATentry2@1119455016 : Post 254;
CustLedgEntry@1119455015 : Post 21;
CustLedgEntry2@1119455014 : Post 21;
DetCustLedgEntry@1119455013 : Post 379;
DetCustLedgEntry2@1119455012 : Post 379;
ItemLedgEntry@1119455011 : Optagelse 32;
ItemLedgEntry2@1119455010 : Post 32;
ValueEntry@1119455009 : Optagelse 5802;
ValueEntry2@1119455008 : post 5802;
ResLedgEntry@1119455007 : Optagelse 203;
ResLedgEntry2@1119455006 : post 203;
JobLedgEntry@1119455005 : Optagelse 169;
JobLedgEntry2@1119455004 : Record 169;
GenJrnCheckLine@1119455000 : Kodeenhed 11;
Window@1119455020 : Dialog;
NewPostingDate@1119455021 : Dato;
PROCEDURE GetNewPostDate@1119455002(pInitPostingDate@1119455000 : Date) : Dato;
BEGIN
Window.OPEN('Ny posteringsdato: #1###########');
Window.INPUT(1,pInitPostingDate);
Window.CLOSE;
EXIT(pInitPostingDate);
SLUT;
PROCEDURE ChangeInvoicePostingDate@1119455000(pSalesInvHeader@1119455000 : Record 112);
VAR
SalesInvoiceLine@1119455001 : Record 113;
PaymentTerms@1119455002 : Record 3;
SalesCommentLines@1119455003 : Post 44;
BEGIN
NewPostingDate := GetNewPostDate(pSalesInvHeader. "Posting Date");
IF NewPostingDate = pSalesInvHeader. "Posting Date" THEN
EXIT;
IF GenJrnCheckLine.DateNotAllowed(NewPostingDate) THEN;
SalesCommentLines."Document Type" := SalesCommentLines."Document Type":: "Posted Invoice";
SalesCommentLines."No." := pSalesInvHeader."No.";
SalesCommentLines."Line No." := 1; //Toppen af kommentaren
SalesCommentLines.Date := TODAY;
SalesCommentLines.Comment := STRSUBSTNO('Bookingdato ændret! %1 -> %2„,pSalesInvHeader.'Posting Date",NewPostingDate);
WHILE NOT SalesCommentLines.INSERT(TRUE) DO
SalesCommentLines."Line No." += 1;
WITH pSalesInvHeader DO BEGIN
HVIS "Dokumentdato" = "Bogføringsdato" SÅ
"Dokumentdato" := NewPostingDate;
"Posteringsdato" := NewPostingDate;
IF ("Payment Terms Code" "') AND ('Document Date" = "Posting Date") THEN BEGIN
PaymentTerms.GET("Kode for betalingsbetingelser");
"Forfaldsdato" := CALCDATE(PaymentTerms. "Beregning af forfaldsdato", "Dokumentdato");
"Pmt. Discount Date" := CALCDATE(PaymentTerms. "Discount Date Calculation", "Document Date");
END;
END;
WITH GLentry DO BEGIN
SETCURRENTKEY("Dokumentnr.");
SETRANGE("Dokumentnr.",pSalesInvHeader. "Nr.");
SETRANGE("Posting Date",pSalesInvHeader. "Posting Date");
HVIS FINDSET SÅ GENTAG
GLentry2 := GLentry;
GLentry2."Posting Date" := NewPostingDate;
GLentry2.MODIFY;
INDTIL NÆSTE = 0;
SLUT;
WITH VATentry DO BEGIN
SETCURRENTKEY("Dokumentnr.");
SETRANGE("Dokumentnr.",pSalesInvHeader. "Nr.");
SETRANGE("Posting Date",pSalesInvHeader. "Posting Date");
HVIS FINDSET SÅ GENTAG
VATentry2 := VATentry;
VATentry2."Posting Date" := NewPostingDate;
VATentry2.MODIFY;
INDTIL NÆSTE = 0;
SLUT;
WITH CustLedgEntry DO BEGIN
SETCURRENTKEY("Dokumentnr.");
SETRANGE("Dokumentnr.",pSalesInvHeader. "Nr.");
SETRANGE("Posting Date",pSalesInvHeader. "Posting Date");
HVIS FINDSET SÅ GENTAG
CustLedgEntry2 := CustLedgEntry;
CustLedgEntry2."Posting Date" := NewPostingDate;
CustLedgEntry2."Document Date" := pSalesInvHeader."Document Date";
CustLedgEntry2."Due Date" := pSalesInvHeader."Due Date";
CustLedgEntry2."Pmt. Discount Date" := pSalesInvHeader. "Pmt. Discount Date";
CustLedgEntry2.MODIFY;
INDTIL NÆSTE = 0;
SLUT;
WITH DetCustLedgEntry DO BEGIN
SETCURRENTKEY("Dokumentnr.");
SETRANGE("Dokumentnr.",pSalesInvHeader. "Nr.");
SETRANGE("Posting Date",pSalesInvHeader. "Posting Date");
HVIS FINDSET SÅ GENTAG
DetCustLedgEntry2 := DetCustLedgEntry;
DetCustLedgEntry2."Posting Date" := NewPostingDate;
DetCustLedgEntry2.MODIFY;
INDTIL NÆSTE = 0;
SLUT;
WITH ItemLedgEntry DO BEGIN
SETCURRENTKEY("Dokumentnr.");
SETRANGE("Dokumentnr.",pSalesInvHeader. "Nr.");
SETRANGE("Posting Date",pSalesInvHeader. "Posting Date");
HVIS FINDSET SÅ GENTAG
ItemLedgEntry2 := ItemLedgEntry;
ItemLedgEntry2."Posting Date" := NewPostingDate;
ItemLedgEntry2.MODIFY;
INDTIL NÆSTE = 0;
SLUT;
WITH ValueEntry DO BEGIN
SETCURRENTKEY("Dokumentnr.");
SETRANGE("Dokumentnr.",pSalesInvHeader. "Nr.");
SETRANGE("Posting Date",pSalesInvHeader. "Posting Date");
HVIS FINDSET SÅ GENTAG
ValueEntry2 := ValueEntry;
ValueEntry2."Posting Date" := NewPostingDate;
ValueEntry2.MODIFY;
INDTIL NÆSTE = 0;
SLUT;
WITH ResLedgEntry DO BEGIN
SETCURRENTKEY("Dokumentnr.");
SETRANGE("Dokumentnr.",pSalesInvHeader. "Nr.");
SETRANGE("Posting Date",pSalesInvHeader. "Posting Date");
HVIS FINDSET SÅ GENTAG
ResLedgEntry2 := ResLedgEntry;
ResLedgEntry2."Posting Date" := NewPostingDate;
ResLedgEntry2.MODIFY;
INDTIL NÆSTE = 0;
SLUT;
WITH JobLedgEntry DO BEGIN
SETCURRENTKEY("Dokumentnr.");
SETRANGE("Dokumentnr.",pSalesInvHeader. "Nr.");
SETRANGE("Posting Date",pSalesInvHeader. "Posting Date");
HVIS FINDSET SÅ GENTAG
JobLedgEntry2 := JobLedgEntry;
JobLedgEntry2."Posting Date" := NewPostingDate;
JobLedgEntry2.MODIFY;
INDTIL NÆSTE = 0;
SLUT;
pSalesInvHeader.MODIFY;
SalesInvoiceLine.SETRANGE("Dokumentnr.",pSalesInvHeader. "Nr.");
SalesInvoiceLine.MODIFYALL("Bogføringsdato",pSalesInvHeader. "Bogføringsdato");
SLUT;
BEGIN
{
}
END.
}
}
Desuden sikrer enheden din egen kode, at du kun kan delegere hele funktionen til ansvarligt arbejdende medarbejdere („Adgangsrettigheder“)
