Externe PDf mit SelectGrid drucken
Steffen Jaiser
Hallo Forum,ich stehe vor folgendem Problem:
Unsere Angebote sind recht umfangreich und bestehen aus mehreren einzelnen Dokumenten:
-Deckblatt
-Anschreiben
-SAP-Beleg
-Detailbeschreibung zu jeder Angebotsposition
-AGB
Bisher wurde alles separat erstellt und nacheinander ausgedruckt (umständlich und zeitaufwendig). Meine Idee war es jetzt das alles über einen SelectGrid zu vereinfachen. Dazu habe ich das Deckblatt, das Anschreiben in Coresuite Designer abgebildet.
Die AGB und die Detailbeschreibung liegen als externe PDF vor.
Nun meine Frage, wie kann ich über ein SelectGrid eine externe PDf mitdrucken, denn es soll nicht immer die AGB mitausgegeben werden. Ich stelle mir das Ganze so vor, dass das SG eine Position AGB und eine Position Detailbeschreibung hat die man anwählen kann.
Danke für Eure Tips im Voraus!!!
Gruss S. Jaiser
Manuel Marhold
Hi Steffen,erstelle dir doch eine layoutdef AGB in der du ein leeres Formulat packst. Beim Drucken diese formulars wird das GenerateScript ausgeführt. Hier pakcst du das Drucken der pdf-Datei rein und machst dann ein Engine.CancelRender.
Das Gleiche für die Detaislbeschreibung. Da musst du nat. noch die Artikelnr. übergeben. Aber du hast ja die Docnum. sollte also auch gehen.
Eine Query in die Layoutdef, die die Positionen des Dokumentes zurückgibt und das in ein advanceddataband. pro position: drucken
dann Engine.Cancelrender.
in das selectgrid, fertig
Steffen Jaiser
Hallo Manuel,danke für die schnelle Antwort. Also die AGBs hab ich hinbekommen. Nur bei den Detailbeschreibungen da hab ich so meine Probleme.
Zum Aufbau:
Der Dateiname der Langbeschreibung wird in einer benutzerdefinierten Spalte pro Zeile hinterlegt (Drittsystem).
Ich habe in einem leeren Layout ein Advanced Data Band hinterlegt (Datenquelle: Row). Dort habe ich im GetDataScript folgendes Script hinterlegt:
If advancedDataBand1("U_Name_LB")<> "" Then
Dim MyProcess As New Process
Dim Path As String = ""
If GetData("LD.Par.FormType")= "149" Then
Path = "\ServervertriebAngebote"
Else If GetData("LD.Par.FormType")= "139" Then
Path = "\ServervertriebKundenaufträge"
End If
MyProcess.StartInfo.CreateNoWindow = False
MyProcess.StartInfo.Verb = "print"
MyProcess.StartInfo.FileName = Path & GetData("B1_Data.Document.DocNum")& "" & GetData("B1_Data.Row.U_Name_LB")& ".pdf"
MyProcess.Start()
MyProcess.WaitForExit(10000)
MyProcess.CloseMainWindow()
MyProcess.Close()
Engine.CancelRender
End If
Engine.CancelRender
Jetzt ist es aber so, dass beim Drucken trotzdem das Vorschaufenster mit dem leeren Beleg aufgeht. Eigentlich sollte doch das mit der Engine.CancelRender verhindert werden.
Ich habe versucht das im GenerateScript des Advanced Databand zu hinterlegen, da stürzt aber CoreSuite ab.
Was mache ich falsche?
Ach so, wie kann ich die Container für Quelltext verwenden?
Gruss Steffen
Manuel Marhold
Hi Steffen,hat das Dokument DoublePass aktiv? wenn ja: deaktvieren
Einfach auf die Buttons oben draufklicken, dann öffnet sich der Tag. bei nochmaligem klicken schließt er sich (immer am Ende der textbox)
Wo hast du denn bei den AGBs das CancelRender?
Steffen Jaiser
Hallo Manuel,bei den AGBs habe ich das Engine.CancelRender im GenerateScript des Dokuments untergebracht (oberste Ebene). In der Langbeschreibung habe ich es im Advanded DataBand untergebracht, denn bringe ich es in der obersten Ebene unter dann passiert gar nix mehr.
Steffen Jaiser
Ach ja, DoublePass ist auf 'False'Gruss Steffen
Manuel Marhold
Hi Steffen,ich weiß nicht genau, ob das CancelRender nach dem GerateScript geht (nach dem, was du sagst, nicht..), also ein anderer Vorschlag:
Query in der Layoutdef entfernen
Dim MyProcess As Process
Dim DR As Data.SqlClient.SqlDataReader
Dim Path As String = ""
Dim TableName As String = ""
If GetData("LD.Par.FormType")= "149" Then
Path = "\ServervertriebAngebote"
TableName ="QUT1"
Else If GetData("LD.Par.FormType")= "139" Then
Path = "\ServervertriebKundenaufträge"
TableName ="RDR1"
End If
Using DA As New Data.SqlClient.SqlDataAdapter("SELECT U_Name_LB FROM " & TableName & " WHERE IsNull(U_Name_LB,'')<>'' ",SwiassAddOnFrameWork.B1Connector....)
DR = DA.SelectCommand.ExecuteReader()
While DR.Read
MyProcess = New Process
MyProcess.StartInfo.CreateNoWindow = False
MyProcess.StartInfo.Verb = "print"
MyProcess.StartInfo.FileName = Path & GetData("B1_Data.Document.DocNum")& "" & DR.GereString(0) & ".pdf"
MyProcess.Start()
MyProcess.WaitForExit(10000)
MyProcess.CloseMainWindow()
MyProcess.Close()
End While
End Using
Engine.CancelRender
die QSl-Connection musst du noch richtig ziehen, kenne den Befehl nicht auswendig
das ganze ins generatescript
Manuel Marhold
achja: Dr.Dispose nicht vergessenund evtl. ein Try drumbauen!
Steffen Jaiser
Oh mein Gott....das ist jetzt etwas zu hoch...geht das wirklich gar ned einfacher?Manuel Marhold
ich meine nicht...aber der Code ist ja fast fertig.. ;)
Steffen Jaiser
Okay ich werd nochmal mein Glück versuchen :DDanke schon mal für die Mühe...ich melde mich sobald ich ein Ergebnis hab...
Philipp Knecht
HalloJa verfrachte alles in das generatescript vom Dokument.
Dort klappt es mit dem CancelRender.
hth
0
Please sign in to leave a comment.
Comments
0 comments