Dieses Skript zeigt, wie man anhand einer Nummernkreistabelle automatisch bei der Dokument-Ausgabe generiert.
Die Vorteile im Vergleich zu einfachen Zählerfeldern in cobra besteht darin, dass hiermit eine lückenlose Nummerierung auch bei unterschiedlichen Dokument/Belegarten erreicht werden kann.
Konfiguration
Es gibt eine freie Tabelle Nummernkreise mit folgenden Feldern:
Nummernkreis, Text 50
NächsteNummer, Zahl
Format, Text 50
Präfix, Text 50
Suffix, Text 50
Es handelt sich um einen Skriptexporter
Ausgangstabelle ist die Tabelle, in der die Nummer vergeben wird
Das Skript wird als AfterLoadData ausgeführt
Ideen
Es wird zunächst geprüft ob der Datensatz bereits eine Nummer hat, nur falls leer wird die Nummer generiert.
Es wird in einer freien Tabelle geführt welches die nächste Nummer als nächstes Vergeben wird.
Skript
// Version 5namespaceRuthardt.PrintPlus.Skripting{usingSystem;usingSystem.Data;usingSystem.IO;usingSystem.Linq;usingSystem.Windows.Forms;usingRuthardt.CobraBase.Functions.Access.Ado;usingRuthardt.CobraFramework.Ado;usingRuthardt.PrintPlus.Model.Interfaces; /// <summary> /// Diese Klasse enthält die Funktionalität, die vor der Erstellung des Belegs ausgeführt wird. /// </summary>publicclassBelegnummerVergeben:IScriptAction { /// <summary> /// PrintPlus ruft ein Script über diese Execute-Methode auf und übergibt dabei den aktuellen <see cref="ICurrentContext"/>
/// vgl. <seecref="IScriptAction"/>.<seecref="IScriptAction.Execute"/> /// </summary> /// <paramname="context">Der <seecref="ICurrentContext"/> des aktuellen Export-Vorgangs</param>publicvoidExecute(IPrintContext printContext,ICurrentContext currentContext,IChildContext childContext) { // Zugriff auf den aktuellen Datensatzvar beleg =currentContext.Data; // aktuelle Belegnummer abprüfenvar belegnummer =beleg.GetStringValue("Belegnummer"); // wenn aktuell keine Belegnummer vergeben wurde, dann neue vergebenif (string.IsNullOrEmpty(belegnummer) &&printContext.WaitFormManager.ShowMessageBox("Soll eine Rechnungsnummer vergeben werden?","Nummer vergeben?",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button2) ==DialogResult.Yes) {var mandant =beleg.GetStringValue("Mandant");var belegart =beleg.GetStringValue("Belegart");var nummernkreis = belegart +" "+ mandant; // neue Belegnummer speicherntry { belegnummer =GeneriereNummer(printContext.AdoAccess, nummernkreis);beleg.SetValue("Belegnummer", belegnummer); // Anweisung dass PrintPlus die Daten speichern sollcurrentContext.SaveChanges=true; }catch {printContext.WaitFormManager.ShowMessageBox("Fehler bei Nummernvergabe '"+ nummernkreis +"'"); } } }privatestringGeneriereNummer(AdoAccess adoAccess,string nummernkreis) { // Nummernkreis ladenvar tableNummernkreis =adoAccess.GetAdapterTable("SELECT * FROM [#Nummernkreise#] WHERE [#Nummernkreise.Nummernkreis#] = @nummernkreis",newSqlParameter("@nummernkreis", nummernkreis));var viewNummernkreis =newAdoView(tableNummernkreis.Rows[0],"Nummernkreise", adoAccess); // Nächste Nummer ermitteln var nummer = viewNummernkreis.GetStringValue("Präfix") + viewNummernkreis.GetIntValue("Nächste Nummer").ToString(viewNummernkreis.GetStringValue("Format")) + viewNummernkreis.GetStringValue("Suffix");
// Nächste Nummer um 1 erhöhenviewNummernkreis.SetValue("Nächste Nummer",viewNummernkreis.GetIntValue("Nächste Nummer") +1); // Nummernkreis speicherntableNummernkreis.Update(); // vergebene Nummer zurückgebenreturn nummer; } }}