Verfahrensdokumentation Verhalten von Bewegungen in geschlossener Periode

Verhalten von Bewegungen in geschlossener Periode
Programmabhängige Voraussetzungen
Programmschalter: „Neuanlage Anlagen vor Periodenabschluss" muss aktiviert sein
Unter welchen Umständen wird eine Bewegung für eine geschlossene Periode ausgeführt?
Es wird zuerst eine Prüfung durchlaufen mit der herausgefunden werden soll, ob es eine Bewegung gibt, die eigentlich eine Auswirkung auf bereits gesperrte Datensätze besitzt.
Diese Prüfung legt den Wert für die Variable FMovesInPeri fest.
Die Vorgangsweise im Programm ist immer von dieser Variable abhängig und erwartet, dass FMovesInPeri = true ist (also wahr: es gibt mindestens eine Bewegung, die in einer geschlossenen Periode ausgeführt werden soll).
Damit die Variable WAHR sein kann, muss folgendes gelten:

  • Es muss ein Periodenabschluss gesetzt sein!
  • Wenn es keinen Periodenabschluss im gewählten Bewertungsbereich gibt, dann sind alle Abschreibungsdaten offen. Die Bewegung wird ganz normal verarbeitet und eine gesonderte Behandlung von dieser Bewegung ist nicht notwendig.


  • Die Anlage, für die eine Bewegung für eine geschlossene Periode ausgeführt werden soll, darf weder Quelle noch Ziel von Umbuchungen sein.
  • Da die Durchführung dieser Methodik sehr speziell ist, wird jeglicher Zusammenhang mit Umbuchungen kategorisch ausgeschlossen (auch weil das in der Vergangenheit zu Datenverlust der geschlossenen Periode führte).


  • Die Anlage muss im ausgewählten BB über die Neuzugangssätze I-100 bzw. I-102, die Altdatensätze I-150, I-152 bzw. I-153 oder im Falle einer Datenübernahme/Migration über mindestens einen M-1110 Satz verfügen!
  • Wenn die Anlage noch gar nicht existiert, also keiner dieser Sätze vorhanden ist, dann gibt es für diese Anlage auch keine durch den Periodenabschluss geschützten Sätze. Der Neuzugang und alle folgenden Sätze werden dann in der ersten freien Periode nachgeholt und die Bewegung normal verarbeitet.


  • Zum Zeitpunkt des Ausführend


  • Es müssen für die Anlage Bewegungen existieren, die im ausgewählten Bewertungsbereich nicht geblockt sind (und zum Mandant gehören)!
  • Ermittelt werden alle Bewegungsnummern (assetmoveno) und deren Aktivierungsdatum (deprstart) aus der Tabelle assetmovepos für die das Feld „blocking" den Wert 0 hat, also die Bewegung frei ist. Die Reihenfolge erfolgt aufsteigend nach Aktivierungsdatum, d.h. die zuerst zu aktivierende Bewegung wird zuerst gelistet (wichtig für nächsten Schritt).


  • Die ermittelten Bewegungen dürfen nicht in der Tabelle preposting zu finden sein (also sie wurden in der abgeschlossenen Periode noch nicht ausgeführt). Die Suche in der preposting erfolgt jeweils über die Bewegungsnummer (assetmoveno).

Das Aktivierungsdatum der Bewegung (deprstart) muss innerhalb des bisherigen Periodenabschlusses liegen!
Deckt sich ein Aktivierungsdatum zeitlich mit einem Migrationssatz (M-1110), dann ist diese Bewegung nicht relevant (von der Migration „geschluckt")!
Ebenfalls werden alle Bewegungen von der weiteren Betrachtung ausgeschlossen, die zeitlich gesehen hinter einem Vollabgang liegen (da nach einem Vollabgang keine weiteren Bewegungen ausgeführt werden können und nur der ENDE-Satz folgt).

  • Wenn es dann noch mindestens eine Bewegung für die jeweilige Anlage im jeweiligen Bewertungsbereich gibt, die den bisher genannten Kriterien entspricht, dann wird FMovesInPeri wahr. Außerdem wird anhand dieser Bewegung das Datum ermittelt, zu dem diese Bewegung ausgeführt werden soll (also deprstart) und es wird der ursprünglich gesetzte Periodenabschluss vermerkt.


  • Da sich im Laufe der Versionen die Abwicklung/Implementierung der Methodik stetig weiterentwickelt hat, werden mittlerweile alle infrage kommenden Bewegungen ermittelt und nicht mehr nur die Erste. Dies ist im späteren Verlauf wichtig, um Abschreibungsänderungen (AfA, Subventionen und Zinsen) vereinzelt auf die Bewegungen aufteilen zu können, z.B. wenn im Nachhinein erneut die Methodik angewendet werden muss und sich dabei nachgeholte Bewegungen in einer geschlossenen Periode befinden.


---- Ende der Prüfung
Wie ist die Funktion im Programm umgesetzt, wie ist der Ablauf (programmatisch – Programmablaufplan in Worten beschrieben)?
Nur wenn die Prüfung erfolgreich verlief und FMovesInPeri wahr ist, dann gibt es drei davon abhängige Prozesse bei der Abschreibung:

  • TAfaCalc.BeforeStart
  • TAfaCalc.Start
  • TAfaCalc.MergeDataSetsSpecial


TAfaCalc.BeforeStart
Innerhalb der Prozedur sind insgesamt vier Variablen von Bedeutung

Variable

Typ

Default

FUNKTION

FMovesInPeri

Boolean

false

  • Indikator für die Durchführung einer Bewegung in eine geschlossene Periode
  • Setzt den Wert für FFirstSpecialMove

FFirstSpecialMove

String

leer

Enthält den Ausführungsmonat für die erste Bewegung (sollte es mehrere geben), die nachgeholt werden soll.

FSpecialMoveProcessPrepared

Boolean

false

Die Prozedur BeforeStart wird bei der Methodik zweimal ausgeführt. Wenn die Vorbereitungen für die Durchführung abgeschlossen sind, ändert sich der Zustand auf true und BeforeStart wird erneut aufgerufen (und durchläuft einen anderen Programmblock).

FSecondCalcForSpecialMoves

Boolean

false

Auch die Prozedur Start wird zweimal durchlaufen. Für den zweiten Lauf verhindert diese Variable, dass gewisse Programmblöcke ausgeführt werden.


Reihenfolge der Abwicklung:

  1. Die Prüfung auf FMovesInPeri wird ausgeführt. Sofern keine Bewegung für die Anlage nachgeholt werden muss, bleibt die Berechnung wie gewohnt. Ansonsten wird sowohl FMovesInPeri auf true gesetzt als auch der Wert für FFirstSpecialMove eingetragen.
  2. Es wird einerseits die normale Routine innerhalb BeforeStart durchgeführt, die alles für die nachfolgende Abschreibung vorbereitet. Andererseits findet eine extra Vorbereitung statt (dann, wenn FMovesInPeri true ist).
    1. Es erfolgt eine Sicherung der Tabelle preposting für das Anlagegut.
    2. Es werden alle Datensätze in einem Dataset selektiert, die sich in der aktuell geschlossenen Periode befinden. Dadurch wird man später weiterhin auf die Abschreibungshistorie zugreifen können.
    3. Es wird ein pseudo-AfA-Satz generiert, der initial dem letzten aktuellen Satz innerhalb der geschlossenen Periode entspricht.
    4. Einige Attribute dieses Satzes werden nun für die spätere Berechnung manipuliert (Felder: postingdate, linenr, id, text und recalcno).
    5. Der neue Satz wird gespeichert, zusätzlich werden in der neuen Tabelle prepostingrecalc Datensätze gelöscht, die durch die spätere Stornierung der Anlage keinen Bezug mehr zur Tabelle preposting hätten.
    6. Die Vorbereitungen für die nachzuholende Bewegung ist abgeschlossen und damit wird die Variable FSpecialMoveProcessPrepared auf true gesetzt.
    7. Die Prozedur BeforeStart ist nun eigentlich am Ende, an dieser Stelle wird sie mit den veränderten Parametern erneut aufgerufen.
  3. Weil sich der Wert von FSpecialMoveProcessPrepared auf true geändert hat, wird zu Beginn der Prozedur BeforeStart ein separater Block ausgeführt:
    1. In das Programmverzeichnis unter User\allusers wird nun der zu diesem Zeitpunkt gültige Originalverlauf mit dem Namen Anlagennummer_originalPreposting.xml gespeichert.
    2. Die erste freie Periode im aktuellen Bewertungsbereich wird ermittelt und der Periodenabschluss zurückgesetzt. Der Bewertungsbereich wird mit dieser Einstellung neu geladen, damit die Datensätze der geschlossenen Periode freigelegt werden.
    3. Es wird eine spezielle Stornoroutine (myStornoExtra) aufgerufen. Hier wird nur die gerade aktuelle Anlage im gerade aktuellen Bewertungsbereich der gewohnten Stornoroutine unterzogen.
  4. Es wird nun die restliche (normale) Initialisierung für die Abschreibung durchgeführt. Der weitere Verlauf verläuft nun bis zur Prozedur TAfaCalc.Start ohne weitere Programmblöcke.


Für einen späteren Anwendungsfall (FSecondCalcForSpecialMoves = true) existiert noch ein weiterer Block innerhalb BeforeStart, dieser sorgt bei xxx dafür, dass wenn mehrere Bewegungen gleichzeitig nachgeholt werden sollen, diese vom Datum her für die weitere Verarbeitung her vorbereitet werden, um in der korrekten Reihenfolge ausgeführt zu werden.
TAfaCalc.Start
Nachdem die Abschreibung unter den gewöhnlichen Bedingungen abgelaufen ist (nach der inneren Routine in TAfaCalc.Start), folgt der zweite Vorgangsblock. Dieser wird nur einmalig durchgeführt unabhängig jeglicher Varianten der Verarbeitung:

  1. Es wird wieder der ursprüngliche Periodenabschluss gesetzt und damit der BB geladen.
  2. Es erfolgt eine Zusammenführung von den zwei bestehenden Datenmengen: Der neu ermittelte Abschreibungsverlauf, bei dem die Periode für die Bewegung geöffnet wurde (folgend Datenmenge 1) UND die in Schritt 2b gesicherte Historie, die den ursprünglich gesicherten Abschreibungsverlauf enthält (folgend Datenmenge 2). Der Vorgang ist MergeDatasetsSpecial.
  3. Wenn die Abschreibung zu einem Fehler führt, wird hier der ursprüngliche Verlauf der preposting, die bereits zu Beginn gesichert wurde, wiederhergestellt.


TAfaCalc.MergeDataSetsSpecial

  1. Es werden jeweils die Korrekturdifferenzen für AfA, AfA Subvention und Zinsen ermittelt. Dabei werden die zeitgenauen Sätze aus Neuabschreibung (Datenmenge 1) und Historie (Datenmenge 2) miteinander verglichen. Pro Abschreibungsscheibe wird dabei die Differenz gebildet.
  2. Wenn alle notwendigen Korrekturdifferenzen ermittelt wurden, wird pro Abschreibungsscheibe und pro Art ein Satz in der Tabelle prepostingrecalc eingefügt.

  1. Es wird ermittelt, ob später auch für AfA Subvention und Zinsen ein Korrektursatz geschrieben werden muss (jeweils: Gibt es bisher solche Sätze und ergab sich durch die nachgeholte Bewegung eine Änderung im bisher berechneten Betrag?).
  2. Es werden nun alle Datensätze in Datenmenge 1 gelöscht, weil dieses Datenset dasjenige ist, das innerhalb der Abschreibungsroutine die Datensätze vermittelt bekommt.
  3. Das Dataset von Datenmenge 1 bekommt nun alle Datensätze (ursprüngliche Historie + AfA Korrektursatz) aus Datenmenge 2 überschrieben. Der letzte Satz ist nun der Korrektursatz.
  4. Es werden entsprechende Veränderungen an Feldern bezüglich AHK, RBW und AfA vorgenommen, die sich durch die Korrekturdifferenz ergeben und der Satz wird gespeichert.
  5. Die Anlage wird wieder in den stornierten Zustand versetzt, der bereits korrigierte Abschreibungsverlauf ist nun aber durch den Periodenabschluss geschützt. Außerdem wird an dieser Stelle die Variable FSecondCalcForSpecialMoves auf true gesetzt.
  6. Für den Fall, dass auf der Anlage nun auch AfA Subvention und/oder Zinsen gerechnet werden, werden nun für diese Arten Korrektursätze erzeugt und ebenfalls in ihrer Korrekturdifferenz auf die Abschreibungswerte verrechnet.Wenn mehrere verschiedene AfA Subventionen auf dem Anlagegut laufen, dann wird pro Subventionsart ein Korrektursatz erstellt.
  7. Es wird nun der Prozess TAfaCalc.Start erneut aufgerufen und eine normale Abschreibung auf die um die Korrekturdifferenzen manipulierte Historie ausgeführt. Dadurch wird später der Zustand erreicht, dass sich
    1. Die Korrekturen direkt an den letzten Satz des Periodenabschlusses setzen und
    2. Die nachgeholten Bewegungen direkt nach den Korrektursätzen in ihrem Betrag verarbeitet werden.
  8. Was nun noch folgt, ist dass die jeweiligen Korrektursätze in ihren Feldern postingdate, linenr und Nutzungsdauern angepasst werden, um im Verlauf wieder korrekt dargestellt zu werden.
  9. Die Methodik der Verarbeitung einer Bewegung für eine geschlossene Periode ist damit beendet und die Datenmenge 1 wird in die Tabelle preposting gespeichert.


Beispiel der Verwendung der Funktion (Beispiel aus dem Updatebrief 2016)
Mit dem Jahresupdate aus dem vergangenen Jahr (Version 7.9.70.0 oder Information im Updatebrief 2015) wurde eine neue Funktionalität implementiert, die es ermöglicht für ein Anlagegut eine Bewegung zu erfassen, deren Aktivierung in einer geschlossenen Periode liegt. Nun war die Umsetzung und Darstellung dieser Funktionalität in wenigen Fällen etwas unglücklich, weshalb in dieser Version eine bessere Variante dafür gewählt wurde. Anhand eines (simplen) Beispiels wird die neue Variante nun vorgestellt:
Es existiert in Ihrem Anlagevermögen ein Anlagegut, welches im November 2016 mit Anschaffungskosten in Höhe von 23.850,84€ angeschafft wurde und monatlich linear auf 10 Jahre (10% pro Jahr) und ohne Zinsen abgeschrieben wird. Zudem sind Sie bereits bis in 2017 mit dem Periodenabschluss voran, alle Sätze bis zum März 2017 sind versiegelt.

Pro Monat werden 198,75€ bzw. 198,76€ AfA je nach Rundungsermittlung abgeschrieben, zudem wird im Dezember kaufmännisch gerundet.
Nun tritt der Fall ein, dass für das Anlagegut im Dezember 2016 eigentlich ein Teilzugang über 4.000,00€ hätte aktiviert werden müssen. Dadurch stünden für das Anlagegut für die Zeiträume Dezember 2016 und Januar, Februar, März 2017 höhere AfA-Sätze zu buche.Jetzt kommen Sie als Anwender aber nicht mehr bis in 2016 hinein, um die Korrektur vornehmen zu können (ein Öffnen der Periode und Erfassen der Bewegung in 2016 führt dann zu Differenzbuchungen von abgeschlossenen Zeiträumen in der Finanzbuchhaltung und bringt Ihren Abschluss durcheinander). Mithilfe der Methodik Bewegungen für geschlossene Perioden nachholen können Sie aber die Bewegung zu ihrem jeweiligen Zeitpunkt erfassen und automatisch die Summe der Differenzen ermitteln und abziehen lassen. Dadurch erreichen Sie zur noch freien Periode den Zustand auf dem Anlagegut, der ursprünglicherweise gelten würde.
Es wird nun der versäumte Zugang im Dezember 2016 in Höhe von 4.000,00€ erfasst. Wenn alle sonstigen Voraussetzungen erfüllt sind (siehe Updatebrief 2015), erhalten Sie folgende Meldung:

Wenn die Bewegung gespeichert wurde, muss jetzt der AfA Lauf für das Anlagegut gestartet werden, dann wird alles miteinander verrechnet. Da diese Methodik sehr speziell funktioniert, dauert der AfA Lauf etwas länger als bei einer normalen Berechnung.
Der neue Abschreibungsverlauf sieht nun wie folgt aus:

Es wurde ein 210 AfA Plan Satz direkt zu Beginn der freien Periode gebildet. Seine Höhe setzt sich wie angemerkt aus der Summe der Differenzbeträge aller versäumten AfA Sätze zusammen. Anschließend wird die Bewegung selbst ausgeführt und dann folgt die normale Abschreibung.
Für ein besseres Verständnis ist als Nächstes der Verlauf der Anlage abgebildet, wenn die Bewegung tatsächlich bereits im Dezember 2016 ausgeführt worden wäre.

Buchungsdatum

AfA ohne Zugang

AfA inkl. Zugang

Differenz

Dez 16

199,08 €

232,08 €

33,00 €

Jan 17

198,75 €

232,37 €

33,62 €

Feb 17

198,75 €

232,37 €

33,62 €

Mrz 17

198,75 €

232,37 €

33,62 €




133,86 €


Die fehlende Differenz von 133,86€ AfA entspricht exakt der Höhe des Korrektursatzes. Ein Vergleich der Werte von AHK, Restbuchwerten und AfA Geschäftsjahr bestätigt, dass die Umsetzung erfolgreich durchgeführt wurde und der Abschreibungsverlauf dem eigentlich tatsächlichen Verlauf ab der freien Periode gleicht.
Löschen einer Bewegung, die für eine geschlossene Periode galt
Man kann eine Bewegung anlegen, im Datum verändern und wird nur mit einer Warnmeldung konfrontiert. Beim Löschen erhält man aber in jedem Fall eine Fehlermeldung, weil das Bewegungsdatum in einer geschlossenen Periode liegt (Löschschutz von gesperrten Daten).
Solange die Ausführung dieser Bewegung noch in einer freien Periode stattfindet, kann man das Bewegungsdatum ändern, sodass es außerhalb der geschlossenen Periode liegt. Nach dem Abspeichern lässt sich die Bewegung dann ohne Fehler löschen.
Wenn aber auch diese Bewegung dann durch die Periode geschützt wird, ist ein Löschen von dieser nicht mehr möglich. (Lösch-/Änderungsschutz von gesperrten Daten). Hier müsste dann ggf. erneut eine Bewegung für die geschlossene Periode erfasst werden, um den Abschreibungsverlauf zu korrigieren oder die Periode muss rückwärts geöffnet werden, um die Bewegung wieder frei zu legen und löschen zu können.
Hinweise
Anlagegüter, die Quelle oder Ziel von (Teil-)Umbuchungen sind, können keine Bewegungen in geschlossene Perioden nachholen. Das ist auch programmseitig ausgeschlossen. Ebenfalls betroffen sind Umsetzungen und Vollabgänge.
Jede Bewegung, die für eine geschlossene Bewegung verarbeitet wurde, blendet einen Hinweis im Verlauf ein, wenn man einen Teil des Bewegungssatzes mit dem Cursor selektiert hat.