Best Practises : Automatische PDF Ausgabe bei Druck
Martin Fürst
Hallo,habe versucht mit den schon im Forum befindlichen Lösungen eine automatische PDF Ausgabe bei Druck (Archivierung) einzurichten.
Lösung 1:
Generate Script
If Engine.IsDoublePass Then
LayoutOpener.OpenLayout(LayoutOpener.OpenLayoutModes.PDF,"139","DocEntry","1")
End If
Coresuite geht in eine Endlosschleife
Lösung 2:
Common Script
Private Sub LD_AfterPrint(company As SAPbobsCOM.Company , sendToPrintDriver As Boolean)
' Mache PDF direkt nach dem Druck
If GetData("LD.Par.PrintMode")="N" And GetData("LD.Par.Preview")="N" Then
LayoutHelper.LayoutOpener.OpenLayout(LayoutHelper.LayoutOpener.OpenLayoutModes.PDF,GetData("LD.Par.FormType").ToString(),"DocEntry",GetData("B1_Data.Document.DocEntry").ToString())
' hier könnte auch ein UDF Feld ala LD.QueryData("UPDATE TableName SET U_Test = Value") gemacht werden
End If
End Sub
Generate Script
' Handler für die Nach Print Aktion registireren
If Engine.IsDoublePass And Not handlerAdded Then
AddHandler LayoutHelper.LD.AfterPrint,AddressOf LD_AfterPrint
End If
Coresuite meldet bei Syntax Check im Formular:
doc1.Generate Script line: 10 Column: 0 Name 'handlerAdded' is not declared.
Finde leider keine Lösung, bitte um Hilfe.
Martin Fürst
Sascha Balke
Hallo Martin,gleich vorweg: welche FrameWork-Version setzt du ein?
Willst du nur den Auftrag (Sales Order), auf File-Ebene archivieren?
Bei deiner Lösung 2 beziehst du dich nicht auf eine Form - ist das beabsichtigt?
Bei beiden "Lösungen" fehlt meiner Meinung nach noch etwas. Wenn ich morgen im Büro bin, werde ich mir beide mal näher anschauen und melde mich dann noch mal.
Welches Archiv/DMS verwendest du? Für DokuWare haben wir eine Add-On zu 98% fertiggestellt. Bei Interesse einfach anfragen.
VG
Sascha
Martin Fürst
Hallo Sascha,verwendetes Framework ist 2.39.
Es sollen alle Belegarten archiviert werden.
Meinem Verständnis nach wird bei Lösung 2 mit
GetData("LD.Par.FormType").ToString(),"DocEntry",GetData("B1_Data.Document.DocEntry").ToString())
der aktuelle FormType mit aktuellem DocEntry geholt,
und sollte eigentlich mit allen Formtypes funktionieren.
Arbeite bei diesem Kundenprojekt nur als "Coresuite Ersteller", weiss gar nicht welches Archivsystem zum Einsatz kommen soll.
Soll jetzt die PDF Ausgabe machen, alles weitere ist "andere Baustelle". Werde aber nach dem DMS noch nachfragen.
Da ich kein Programmierer bin, fällt mir die Syntax Auflösung etwas schwer, und mit Handlern arbeite ich gar nie. Hier scheint mir die Zuordnung zum Handler nicht korrekt zu sein.
Danke
Martin
Andreas Schlingmann
Hallo,da ich selber vor dem Problem stand, hier die Lösung (falls noch von Interesse) :
1. Printdefinition : Unter dem "Reiter" Email / Fax einen Exportpfad angeben (sonst wird das PDF im Temp-Verzeichnis von Coresuite abgelegt)
Des weiteren auf dem Reiter "Erweiterte Definition" die Checkbox "Öffne Word/Excel/PDF" entfernen. Hat leider zur folge, das von nun an PDF's nicht mehr nach dem generieren (manuell) geöffnet werden.
2. Common-Script (Funktion definieren) :
Private Sub LD_AfterPrint(company As SAPbobsCOM.Company , sendToPrintDriver As Boolean)
' Erzeuge PDF nach dem Druck, nur wenn normale Ausgabe und keine Vorschau
If GetData("LD.Par.PrintMode")="N" And GetData("LD.Par.Preview")="N" Then
LayoutHelper.LayoutOpener.OpenLayout(LayoutHelper.LayoutOpener.OpenLayoutModes.PDF,GetData("LD.Par.FormType").ToString(),"DocEntry",GetData("B1_Data.Document.DocEntry").ToString())
' Wenn man möchte, hier ein UPDATE eines Feldes machen, in welchem man die Archivierung bestätigt
End If
End Sub
3. Generate Script (Funktion aufrufen)
' PDF Archivierung aufrufen, nur beim 2. Durchlauf
If Engine.IsDoublePass And Not handlerAdded Then
AddHandler LayoutHelper.LD.AfterPrint,AddressOf LD_AfterPrint
handlerAdded = True
End If
Gruß
Philipp Knecht
Hi alleVielen Dank für diese Lösung Andreas.
Mittels den neusten Möglichkeiten kann man es noch ein wenig vereinfachen.
Annahme: Die Exporteinstellungn (Pfad, etc.) werden auf derselben Printdefinition gemacht wie die Druckeinstellungen.
Fall 1: Generieren jedesmal wenn gerendert wird (Keine Garantie das das Layout zum Spooler gesendet wurde):
Generatescript:
LayoutHelper.LayoutOpener.ExecutePrintDef(GetData("LD.SysPar.PrintDefCode"),LayoutHelper.LayoutOpener.OpenLayoutModes.PDF, "DocEntry",GetData("B1_Data.Document.DocEntry"))
Fall 2: Mit Druckgarantie:
Commonscript:
Private Sub MyAfterPrintOrPreview()
' Falls der Printed Param was beeinhaltet dann wurde auch tatsächlich gedruckt
If GetData("LD.SysPar.Printed") <> "" Then
LayoutHelper.LayoutOpener.ExecutePrintDef(GetData("LD.SysPar.PrintDefCode"),LayoutHelper.LayoutOpener.OpenLayoutModes.PDF, "DocEntry",GetData("B1_Data.Document.DocEntry"))
End If
End Sub
Generatescript:
If Not Engine.IsDoublePass Then
AddHandler LD.AfterPrintOrPreview, AddressOf MyAfterPrintOrPreview
End If
Tipp:
In der Printdef unter Exportpath kann man auch dynamische Ausdrücke (Param oder SQL) einfügen-> automatische Ablage in den richtigen Ordnern.
hth
Felix Blum
Hallo Philipp,habe das bei uns auch ausprobiert und es funktioniert nicht regelmäßig bei uns. Sehr eigenarige Sache.
Der Exportpfad liegt auf einem Server wo die PDF Dateien dann von einem Archivierungsprogramm wegsortiert werden.
Steh damit grad ein wenig aufm Schlauch, da es vereinzelt ja auch funktioniert. Wenn jemand dazu eine Idee hat, dann immer raus damit! :)
Chi Fai Cheung
Can somebody translate this in English?Philipp Knecht
Hi Chi FaiHere the outcome of this post:
If you use AfterPrint Handlers you can check if an document really was sent to the spooler by checking this "Printed" Param.
Also it's always a good idea to use the LD.ExecutePrintDef(...) - Function to generate Emials/prints/PDFS/... by code.
hth
Philipp Knecht
Hallo FelixWir haben das in den neueren Betas adressiert.
Bitte updaten.
hth
Tobias Wissen
Hallo,ist ja schön, dass es für die Beta war, aber funktionieren tut es bei uns dennoch nicht. Er erzeugt einfach die Datei nicht.
Viele Grüße aus Lohne,
Tobias Wissen
Tobias Wissen
Hallo,ich habe nochmal zu dem Script eine Frage:
Wie verhält sich dieses denn beim Masse-Druck, also dem Belgdruck-Assistenten??
Philipp Knecht
Hi TobiasDa das Script im Layout - Generatescript wird es immer (je nach Bedingung halt...) ausgeführt also auch beim Massendruck...
hth
Tobias Wissen
Danke!
0
Please sign in to leave a comment.
Comments
0 comments