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.

TabelleRolle
invoice_blockKreisdefinition: Unternehmen, Name, Präfix, Suffix, Trennzeichen, Stellen, Jahr, Status
invoice_block_counterjährlicher Laufnummernzähler je Kreis (getLastSeq)
invoice_client_counterZähler auf Mandantenebene (generateClientNumber)
invoicelesend: Zahl ausgestellter Rechnungen, Präfixprüfung

Ablauf und Regeln

  1. 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.
  2. 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).
  3. Status: Kreise außerhalb des Bereichs werden stillschweigend übersprungen.
  4. 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: edit und add; Speichern canSave(); Status edit; delete; debug.
  • Inhaltsbereich: das Unternehmen des Kreises. Unternehmensauswahl: companiesByGroup (Recht list).

Bekannte Einschränkungen

  • form() prüft nur den Bereich, kein Funktionsrecht.
  • statusdelete ist als BASE klassifiziert, aber nicht umgesetzt.