Belegnummernkreise – Systembeschreibung
Datenmodell der Rechnungsnummernkreise, Präfix-Kollisionsprüfung, Laufnummernzähler und die von anderen Modulen aufgerufenen Nummerierungsoperationen.
Rechnungsnummernkreise je Mandant (Präfix, Suffix, Trennzeichen, Stellen, Jahr) mit Laufnummernzähler. Den Inhaltsbereich bestimmt das Unternehmen des Kreises; andere Module rufen die Nummernvergabe über das Modell des Kreises auf.
Datenmodell
Die Tabellennamen tragen in der Datenbank das eigene Präfix der Installation.
| Tabelle | Rolle |
|---|---|
invoice_block | Kreisdefinition: Unternehmen, Name, Präfix, Suffix, Trennzeichen, Stellen, Jahr, Status |
invoice_block_counter | jährlicher Laufnummernzähler je Kreis (getLastSeq) |
invoice_client_counter | Zähler auf Mandantenebene (generateClientNumber) |
invoice | lesend: Zahl ausgestellter Rechnungen, Präfixprüfung |
Ablauf und Regeln
- Liste: Filter nach Name, Präfix, Status und Unternehmensgruppe/Unternehmen in Schnittmenge mit dem Inhaltsrecht; je Zeile Mandant, Vorschaunummer, letzte Laufnummer des Jahres und ausgestellte Rechnungen.
- Speichern: Mandant Pflicht und im Bereich; Name 1–128, Präfix/Suffix max. 32, Stellen 1–20; das Präfix darf weder mit Rechnungen des Mandanten aus anderen Quellen (
finance/invoice::isNumberPrefixTaken) noch mit einem anderen Kreis (isPrefixUsedByOtherBlock) kollidieren; nach einer ausgestellten Rechnung ist der Mandant fest (error_company_locked). - Status: Kreise außerhalb des Bereichs werden stillschweigend übersprungen.
- Löschen: Kreise außerhalb des Bereichs oder mit ausgestellten Rechnungen bleiben (
error_block_has_invoices), die übrigen werden gelöscht.
Von anderen Modulen genutzte Operationen
generateNumber, generateClientNumber, peekNextNumber, peekClientNumber, lockSeries/unlockSeries, nextSeriesSeq/commitSeriesSeq, ensureDefaultBlock.
Berechtigungen
- Funktionsrechte:
list; Schaltfläche Hinzufügen im Kopf:editundadd; SpeicherncanSave(); Statusedit;delete;debug. - Inhaltsbereich: das Unternehmen des Kreises. Unternehmensauswahl:
companiesByGroup(Rechtlist).
Bekannte Einschränkungen
form()prüft nur den Bereich, kein Funktionsrecht.statusdeleteist als BASE klassifiziert, aber nicht umgesetzt.