PRINT+PLUS
  • Einleitung
  • Einrichtung
    • Installation
  • Aktualisierung
    • Aktualisierungseinführung
  • Lizenzierung
    • Lizenzierungseinführung
  • Funktionsweise von PRINT+PLUS
    • Einführung Funktionsweise
  • Gestalten von Vorlagen
    • Intro Vorlagen
    • Beispiel mit Rechnung
    • Formatierung
    • Spezielle Platzhalter für Datum, Ja/Nein-Felder, Bilder und HTML
    • Platzhalter für die Benutzerattribute von cobra CRM
    • Eigene Platzhalter
  • Einrichtung von Ausgabeformaten
    • Intro
    • Alle Einstellungen eines Ausgabeformats im Detail
    • Register "Allgemeine Konfiguration"
    • Register "Ausgangstabelle (Current)"
    • Register "Ausgangs-Vorlage"
    • Register "Übergeordnete Tabellen (Parent)"
    • Register "Untergeordnete Tabellen (Children)"
    • Register "Dokumente speichern"
    • Register "Filter-Dialog"
    • Register "Ergebnis-Verhalten"
    • Register "Skripte"
  • Ausgabe ausführen
    • Intro Ausgabe ausführen
  • AUSGABEN PER TASK AUSFÜHREN
    • Aufgaben dem Task zuweisen
    • Windows Aufgabenplanung für den Task einrichten
    • Besonderheiten in Skripten
  • Eingabemasken Steuerelement
  • Intro Eingabemasken Steuerelement
    • Steuerelement hinzufügen
  • Einbindung von Print+Plus in cobra Kampagnen
  • Intro Einbindung von Print+Plus in cobra Kampagnen
  • Grundlagen Skripting
    • C#
    • Skript-Events
    • Kontexte
    • Geladene Daten verwenden
    • Geladene Daten verändern
    • Datensätze anlegen
    • Eingabemaske öffnen
    • Eigene Werte ergänzen (Custom Values)
  • Beispielskripte
    • Nummer vergeben
    • PDF-Formulare füllen
    • PDF-Dokumente zusammenfügen
    • Generiertes Dokument via SMTP versenden
    • Weitere Ausgabe starten
    • Vorlage aus DMS-Feld holen
    • Felder für CRYPTO+PLUS verschlüsseln
    • Benutzerabhängige Drucker verwenden
    • Bilder in E-Mails einbinden
    • Zahlen in Worten ausschreiben
    • Datensatz-Bilder aus cobra einbetten
    • Ergebnisdokumente kopieren
    • Regionsspezifische Ausgabeformate
    • Andere Datenquelle-Objekte nutzen
    • DocuSign Integration
  • FAQs
    • Fehlermeldung Template konnte nicht geöffnet werden
    • DevExpress-Word-Exporter
      • Bilder in Vorlage
      • Bekannte Einschränkungen
      • Hinweise für Entwickler
  • Zusätzliches Tool im Zusammenhang mit PRINT+PLUS
    • Intro Zusätzliches Tool
Powered by GitBook
On this page
  • Konfiguration
  • Ideen
  • Skript
  1. Beispielskripte

Nummer vergeben

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 5
namespace Ruthardt.PrintPlus.Skripting
{
	using System;
	using System.Data;
	using System.IO;
	using System.Linq;
	using System.Windows.Forms;
	using Ruthardt.CobraBase.Functions.Access.Ado;
	using Ruthardt.CobraFramework.Ado;
	
	using Ruthardt.PrintPlus.Model.Interfaces;

	/// <summary>
	/// Diese Klasse enthält die Funktionalität, die vor der Erstellung des Belegs ausgeführt wird.
	/// </summary>
	public class BelegnummerVergeben : IScriptAction
	{
		/// <summary>
		/// PrintPlus ruft ein Script über diese Execute-Methode auf und übergibt dabei den aktuellen <see cref="ICurrentContext"/>
		/// vgl. <see cref="IScriptAction"/>.<see cref="IScriptAction.Execute"/>
		/// </summary>
		/// <param name="context">Der <see cref="ICurrentContext"/> des aktuellen Export-Vorgangs</param>
		public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
		{
			// Zugriff auf den aktuellen Datensatz
			var beleg = currentContext.Data;
			
			// aktuelle Belegnummer abprüfen
			var belegnummer = beleg.GetStringValue("Belegnummer");

			// wenn aktuell keine Belegnummer vergeben wurde, dann neue vergeben
			if (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 speichern
				try
				{
					belegnummer = GeneriereNummer(printContext.AdoAccess, nummernkreis);
					beleg.SetValue("Belegnummer", belegnummer);

					// Anweisung dass PrintPlus die Daten speichern soll
					currentContext.SaveChanges = true;
				}
				catch
				{
					printContext.WaitFormManager.ShowMessageBox("Fehler bei Nummernvergabe '" + nummernkreis + "'");				
				}
			}
		}

		private string GeneriereNummer(AdoAccess adoAccess, string nummernkreis)
		{
			// Nummernkreis laden
			var tableNummernkreis = adoAccess.GetAdapterTable(
				"SELECT * FROM [#Nummernkreise#] WHERE [#Nummernkreise.Nummernkreis#] = @nummernkreis",
				new SqlParameter("@nummernkreis", nummernkreis));

			var viewNummernkreis = new AdoView(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öhen
			viewNummernkreis.SetValue("Nächste Nummer", viewNummernkreis.GetIntValue("Nächste Nummer") + 1);

			// Nummernkreis speichern
			tableNummernkreis.Update();

			// vergebene Nummer zurückgeben
			return nummer;
		}
	}
}
PreviousEigene Werte ergänzen (Custom Values)NextPDF-Formulare füllen

Last updated 10 months ago