Die TIM-Webseite

paclogo.gif

against software patents!

Viewable With Any Browser

Die Kassenzentralisierung

Hier eine eher technische Beschreibung dessen, was beim Zentralisieren der Kassentransaktionen genau passiert.

Das Menü ruft TRACTL.ACT aufgerufen, die ein ein eventuelles Rollback vorbereitet, und dann aber letzten Endes vor allem die Funktion TraCentral(cIdJnl,lDoIt) aufruft. TraCentral() tut folgendes:

  1. Lauf durch TRA.DBF über alle Dokumente des betreffenden Journals. Evtl. Warnungen "Dokument ist nicht registriert." oder "ungültiger Status". Für jedes Dokument: Lauf durch alle Zeilen (TRL.DBF). Wenn TRL->Etat == NEW ist, dann wird diese Buchung «eingesammelt». Dieses Einsammeln funktioniert wie folgt.
    1. Das Sammel-Array hat folgende Felder:
      • Journal
      • Periode
      • Date2 (Ausführungsdatum. Wenn leer, dann bedeutet das "sofort", also ohne explizites Ausführungsdatum)
      • Liste der zu erstellenden IML-Buchungen
      • Indikator "SYSI"
      • Partner
      • Haushaltsartikel
      • IdDoc (erstelltes Dokument)
      • Indikator "Okay or not"

      Aus jedem Eintrag in diesem Sammel-Array wird später ein IMP-Dokument erstellt werden.

    2. Auf jeder TRL wird zunächst nachgeschaut, ob für deren Transaktionsart (TRL->IdTrt) ein SysI-Journal existiert. (Das ist für GUTHA und GUTHE der Fall.) Wenn ja, dann wird zunächst die Sys-I-Buchung angelegt:

      1. Als erstes wird ermittelt, ob schon ein zuständiger Eintrag im Sammel-Array existiert:
        1. dessen Journal das Sys-I-Journal ist,
        2. dessen Periode mit TRL->Periode übereinstimmt,
        3. und dessen Date2 mit TRL->Date2 übereinstimmt.
      2. Falls kein Sammeleintrag existiert, dann wird ein leerer neuer erstellt.
      3. Daraufhin wird die Liste der zu erstellenden IML-Buchungen in diesem Eintrag aktualisiert:

        1. Falls schon eine Buchung mit dem gleichen Partner (IML->IdPar) und einem leeren Zahlungsampfänger (IML->IdPar2) besteht, dann wird die vorliegende TRL zu dieser IML-Buchung addiert.

        2. Ansonsten wird eine neue IML-Buchung erstellt.

      4. Der EA-Match der erstellten (oder wiederverwendeten) System-I-Buchung wird in die folgende, eigentliche, Buchung übernommen.

    3. Jetzt wird die eigentliche IML-Buchung erstellt:

      1. Wie zuvor wird nach einem existierenden Eintrag im Sammel-Array gesucht, dessen Journal mit TRL->IdJnl2 übereinstimmt (sowie Periode und Date2 wie bei SysI). TRL->IdJnl2 muss jetzt obligatorisch existieren. Normalerweise (wenn JNLATTR_B dieses Journals gesetzt ist) muss jetzt außerdem der Haushaltsartikel übereinstimmen, sowie (wenn JNLATTR_P gesetzt ist) auch der Partner.

      2. Falls kein Eintrag existiert, wird wiederum ein neuer erstellt.

      3. Daraufhin wird wiederum die Liste der zu erstellenden IML-Buchungen in diesem Eintrag aktualisiert. Im Gegensatz zu den System-I-Buchungen wird hier für jede TRL immer eine IML erzeugt.

  2. Nach dem Vorlauf wird das Sammel-Array alphabetisch nach Journal sortiert.

  3. Wenn "definitiver Ausdruck" angekreuzt ist, dann geht jetzt das Erzeugen der IMP-Dokumente los:
    1. Zuerst werden alle Nicht-System-I-Einträge verarbeitet, dann alle System-I-Einträge.

    2. Für jeden Eintrag wird wird ImpAppend() gerufen, um das Dokument zu erstellen. Wenn Date2 leer ist, wird hier UserDate() eingetragen.

  4. Dann wird die die Liste der zentralisierten TRA-Dokumente gedruckt (bzw. falls kein definitiver Ausdruck, die der Dokumente, die zentralisiert worden wären). Während dieses Ausdrucks wird auch TRL->Etat auf "closed" und TRL->IdImp gesetzt. (...)

  5. Dann kommt noch die Kontroll-Liste (...)