Reihenfolge der zu buchenden Belege (Kopf, SubTransaktionen)
Folgendermaßen werden derzeit die Belege gebucht:
In der Tabelle wird abgebildet, wie gebucht wird, wenn die verschiedenen Belege (Programmteil) geändert werden (z.B. über das Makro UpdateObject). Die Zahlen zeigen die Reihenfolge.
| Programmteil | Modulname | Ausbuchen des Kopfes | Ausbuchen der Transaktionen | Einbuchen des Kopfes | Einbuchen der Transaktionen | Besonderheit |
|---|---|---|---|---|---|---|
| Lieferschein-Kopf | delinedt.mod | 1 | 2 | 3 | 4 | Einbuchung des Kopfes vor Einbuchung der Transaktion |
| Lieferschein-Pos. | delinedt.mod | 1 | 2 | Kopf wird nicht ausgebucht | ||
| Rechnungs-Kopf | billiedt.mod | 1 | 2 | Transaktionen werden nicht ausgebucht | ||
| Rechnungs-Pos. | invoiitm.mod | 1 | 2 | Kopf wird nicht ausgebucht | ||
| Bestell-Kopf | purcoedt.mod | 1 | 2 | 3 | 4 | STANDARD |
| Bestell-Pos. | puroiedt.mod | 1 | 2 | 3 | 4 | STANDARD |
Der Stand in den Bestellmodulen soll der Standard werden.
Erläuterung zum werdenden Standard:
Belegkopf:
Wird in einem Modul über das Makro UpdateObject der Kopf verändert, so wird am Anfang des Makros erst mal der Kopf und dann alle Positionen über die entsprechenden Messages ausgebucht:
purchaseOrder (-1) SendMsg(BOOK_PURCHASE_ORDER) ... um den Kopf auszubuchen und....
purchaseOrder (-1) SendMsg(BOOK_PURCHASE_ORDER_ITEM) ..... um alle Transaktionen auszubuchen.
Nach der Bearbeitung des Kopfes werden über die selben Messages die Belege wieder eingebucht. Anstatt der (-1) wird nun eine 1 auf den Stack gelegt.
Belegpositionen:
In allen Fällen, in denen die Belege geändert werden, muss zuerst einmal der Belegkopf ausgebucht werden. Dann wird gezielt die eine zu ändernde Transaktion über die entsprechende Message ausgebucht.
purchaseOrder (-1) SendMsg(BOOK_PURCHASE_ORDER) ... um den Kopf auszubuchen und....
purchaseOrderItem (-1) SendMsg(BOOK_PURCHASE_ORDER_ITEM) ..... um die aktuelle Position auszubuchen
Nach den Änderungen (DrainWindow und Co.) müssen die Belege über die gleiche Art eingebucht werden. Anstatt der (-1) wird nun eine 1 auf den Stack gelegt.
Allgemeines:
Messages:
Es ist in jedem Modul, welches Belege ein- oder ausbucht, eine Message nach dem Schema BOOK_XXXXXXX oder BOOK_XXXXXX_ITEM zu definieren. Diese Messages rufen dann ein Makro zum Ausbuchen (BookByEdit[Item]Back) auf, welches die Belege ausbucht und ein Makro (BookByEdit[Item]), welches die Belege wieder einbucht.
Transaktionsbeschreibungen:
In der Transaktionsbeschreibung des Kopfes ist ein Haken bei Subtransaktionen gesetzt und der Wert "false" im nebenstehenden Feld eingetragen. Dies verhindert, dass die Transaktionsbeschreibung durch alle Unterteile läuft, was sie im Normalfall machen würde. Dieser Haken ist natürlich bei den Transaktionsbeschreibungen der Positionen nicht gesetzt.
Transaktion mit Status (Workflow) verbinden und Status weiterschalten:
Transaktion in Vorgangsordner registrieren (über Transaktionsbeschreibungen):
- {last.itemPointer.ForceMonitor("CX_PROCEEDINGS");…….
Mit diesem Befehl wird der Vorgangsordner des Teils, welches über den Slot „last“ erreichbar ist, ermittelt. Besitzt dieses Teil noch keinen Vorgangsordner, dann wird über den Befehl „ForceMonitor“ dieser angelegt. Nun haben wir schon mal den Vorgangsordner, in dem wir das Objekt registrieren wollen.
- Im nächsten Schritt wird über den Befehl
... TopTransaction().Monitor("CX_STATE_MONITOR").owner};
Über die TopTransaction (in unserem Beispiel ist das der Auftrag (CX_SALES_ORDER)) wird der Besitzer (owner) des ersten Monitores der Klasse CX_STATE_MONITOR ermittelt. Dieser ist dann ein Workflow, in unserem Beispiel der Workflow SALES_ORDER.
Dieser hat in seinem Datenfeld mlDescription die Bezeichnung „Aufträge“ bekommen, mit der dieses Objekt dann im Vorgangsordner als Unterordner angezeigt wird. Nun wird die geschweifte Klammer geschlossen.
- Zuletzt wird noch da aktuelle Jahr der TopTransaction (CX_SALES_ORDER) durch folgenden Zugriffsausdruck auf den Stack gelegt:
TopTransaction().date.Year()
Wir haben also folgendes Ergebnis dieses Dimensionen Strings:
Vorgangsordner des Teils an „last.itemPointer“ der Transaktion, in diesem Vorgangsordner den Unterordner Aufträge und in diesem Unterordner einen weiteren Unterordner mit dem Kalenderjahr des Auftrages. Hier wird man dann die über diesen Weg registrierte Transaktion wiederfinden.