TBeIndiPrintData - Individual-Belegdruck
Dient zum Druck eines Individual-Belegs, welcher dann im Belegarchiv abgelegt werden kann
HINWEIS:
Es handelt sich hier um die "erweiterte" Umsetzung des Belegdruckes, eine "einfache" Möglichkeiten zum Belegdruck (z.B. Einzelbelegdruck) bietet die neu im Codeblock verfügbare Funktion "DocumentPrint()" (siehe entsprechendes Memo)
Eigenschaften
|
Eigenschaft |
Beschreibung |
|---|---|
|
DocType |
Archiv-Beleg-ID, 900-999, muss als Druckeinstellung definiert sein! |
|
Tables |
Array mit Tabellen, welche im Belegdruck bzw. -Layout zur Verfügung stehen |
|
DocNo |
Beleg-Nr, frei zu vergeben |
|
PersNo |
Pers.Nr, frei zu vergeben |
|
PrintDate |
Druck-Datum (default = Buchungsdatum) |
|
PrintDepart |
Drucklayout für Abteilung n verwenden (default = aktuelle Abteilung) |
|
PrintLang |
Drucklayout für Sprache n verwenden (default = 0) |
|
PrintReportNo |
Ab 7.1
|
|
PrintConnect |
ADS-Connection auf der die Druckendatenverarbeitung läuft |
|
TestPrint |
Test-Druck (Readonly) |
|
ProcessDataOnly |
Verarbeitung ohne Druck (default = False) |
|
LayoutAction |
Ab 7.1
|
Events
|
Event |
Beschreibung |
|---|---|
|
OnInitFirstPrint |
Initialisierung erster Beleg im Stapeldruck-Modus |
|
OnInitNextPrint |
Initialisierung nächster Beleg im Stapeldruck-Modus |
|
OnSetLocks |
Record-Locks für die Verarbeitung setzen |
|
OnReSetLocks |
Record-Locks der Verarbeitung aufheben (Gegenstück zu SetLocks) |
|
OnProcDataBefore |
Belegdruck-Datenverarbeitung VOR der Druckausgabe |
|
OnProcDataAfter |
Belegdruck-Datenverarbeitung NACH der Druckausgabe |
Aktive Eigenschaften
|
Eigenschaft |
Beschreibung |
|---|---|
|
ExecLayout |
Layout-Designer aufrufen |
|
ExecPrint |
Einzeldruck starten |
|
ExecPrintAll |
Stapeldruck startem |
Hinweise
Die Verwendung der Klasse an Stelle der Funktion DocumentPrint() bietet erweiterte Steuerungsmöglichkeit des Belegdruck, hierzu zählen insbesondere
-
Stapeldruckfunktion
-
Setzen/Prüfen von Satzsperren unmittelbar vor der Verarbeitung (wichtig im Stapeldruck)
-
Festlegen von Druck-Abteiltung und -Sprache
-
Verarbeitung eines Beleges ohne Druck
Siehe dazu auch
-
"Individual-Belege mit Archivierung"
-
"DocumentPrint()"
-
"DocumentDelete()"
-
"Event vor Eintrag Beleghistorie"
-
"DBGetTable(), DBGetLookup(), DBGetMemTable()"
Beispiel
| oDab010, oConnect, oDM, arrArt, nDocNo |
// In diesem Beispiel wird ein *Stapel*Druck ausgeführt, der für jedes Element
// in arrArt ein Scope auf die DAB010 setzt und daraufhin einen entsprechenden
// Beleg druckt
// Events ----------------------------------------------------------------------
// Events zur Initialisierung des (nächsten) Belegdruckes ######################
function InitNextPrint( aSender, aContinue:R )
// (nur im Stapeldruck!)
// Für jedes Element in arrArt einen eigenen Beleg drucken,
// bis alle Belege gedruckt...
// Wird aContinue auf FALSE gesetzt, wird der Stapeldruck beendet
Meld('InitNextPrint'),
nDocNo++,
oDM.DocNo := 5000 + nDocNo, // Nr. des Beleges setzen (5001, 5002, ...)
aContinue := nDocNo <= Len(arrArt), // True = weiteren Beleg drucken
if aContinue then
DbScope( {arrArt[nDocNo]}, {arrArt[nDocNo]}, oDab010 ),
endif,
end,
function InitFirstPrint( aSender, aContinue:R )
// (nur im Stapeldruck!, beim Druck des ersten Beleges)
Meld('InitFirstPrint'),
aContinue := True, // True = es gibt einen Beleg zu drucken
// In diesem Fall ist die Initialisierung für alle Belege gleich ...
InitNextPrint( aSender, aContinue ),
end,
// Events zum Setzen/Prüfen bzw. Aufheben von Datzsperren ######################
function SetLocks( aSender, aContinue:R )
// Alle für die Verarbeitung des Beleges benötigten Satzsperren setzen
// aContinue = FALSE, Sperren konnten nicht (vollständig) gesetzt werden,
// Es wird in diesem Fall mit dem Druck des nächsten Beleges fortgefahren !!
Meld('SetLocks'),
end,
function ResetLocks( aSender )
// Alle für die Verarbeitung des Beleges gesetzten Satzsperren (in SetLocks)
// wieder aufheben
Meld('ResetLocks'),
end,
// Events zur Datenverarbeitung des Beleges ####################################
function ProcessDataBefore( aSender )
// Verarbeitung der Belegdaten (VOR dem Druck)
// Achtung ! Transaktion auf oConnect und somit oDab010 ist aktiv !
Meld('ProcessDataBefore'),
end,
function ProcessDataAfter( aSender )
// Verarbeitung der Belegdaten (NACH dem Druck)
// Achtung ! Transaktion auf oConnect und somit oDab010 ist aktiv !
Meld('ProcessDataAfter'),
end,
// Hauptprogramm ---------------------------------------------------------------
arrArt := {"A","B","C"},
nDocNo := 0,
oDM := CreateObject("TBeIndiPrintData", "BeIndiPrintData" ),
// WICHTIG: Folgende Zeile erstellt eine Tabelle welche auf der Connection des Druckmoduls läuft
// und somit in den ProcessData-Events transaktionsgestützt eingesetzt werden kann !!
oDab010 := DbGetTable( oDM, waDAB010 ),
startseq
// Beleg initialisieren
oDM.DocType := 901,
oDM.DocNo := 5000, // ist hier eigentlich überflüssig, weil das Setzen in InitNextPrint() erfolgt
oDM.PersNo := 4711,
oDM.PrintDate := Date(), // wäre hier das Druckdatum für ALLE Belege im Stapel
oDM.PrintDepart := 1,
oDM.PrintLang := 2,
oDM.Tables := {oDab010},
// Recordlock-Routinen (Events) setzen
AssignEvent( oDM, "OnSetLocks", "SetLocks" ),
AssignEvent( oDM, "OnResetLocks", "ResetLocks" ),
// Stapel-Druck-Routinen (Events) setzen
AssignEvent( oDM, "OnInitFirstPrint", "InitFirstPrint" ),
AssignEvent( oDM, "OnInitNextPrint", "InitNextPrint" ),
// Verarbeitungs-Routinen (Events) setzen
AssignEvent( oDM, "OnProcDataBefore", "ProcessDataBefore" ),
AssignEvent( oDM, "OnProcDataAfter", "ProcessDataAfter" ),
// Layout designen oder Beleg drucken
//oDM.ExecLayout, // Layout
oDM.ExecPrintAll, // Stapel-Druck !
always
DestroyObject(oDab010),
DestroyObject(oConnect),
DestroyObject(oDM),
stopseq,