Externe PDf mit SelectGrid drucken

<![CDATA[

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 vergessen
und 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 :D
Danke schon mal für die Mühe...ich melde mich sobald ich ein Ergebnis hab...

Philipp Knecht

Hallo

Ja verfrachte alles in das generatescript vom Dokument.
Dort klappt es mit dem CancelRender.

hth
0

Comments

0 comments

Please sign in to leave a comment.

Didn't find what you were looking for?

New post