attgroup und pdf --> coresuite stürzt ab
Markus Rewak
Hallo,beim Drucken eines Beleges (Lieferschein, Rechnung) soll zusätzlich ein PDF-Druck angestossen werden. Das funktioniert auch ganz gut, wenn man jeden Beleg alleine druckt.
Doch wenn ich von der Rechnung ausgehend beide Dokumente(Rechnung und Lieferschein) drucken möchte mittels Grid und attgroup im sql statement, dann hängt sich der coresuite designer auf. Bzw. die Rechnung wird noch als pdf erzeugt, zum Lieferschein reicht es aber nicht mehr. Dann hilft nur noch ein Neustart von SAP Business One.
Weis jemand was da nicht stimmt?
grüsse Markus
Lieferschein:
1 Printdefinition allg.,
1 Printdefinition inaktiv nur für pdf-Druck (U0000053)
Rechnung:
1 Printdefinition allg.,
1 Printdefinition inaktiv nur für pdf-Druck(U0000052)
1 Printdefintion Gruppierung --> Layoutdefinition Gruppierung (=Grid)
common script:
##############
Dim depth As Integer
Dim footerStartPage As Integer = 0
Dim isFC,FTRendered As Boolean
Dim scontoAmount As Double
Dim billToAdr,shipToAdr As String
Dim sSql As String
Dim stemp As String
Dim dvat As Double
Dim handlerAdded As Boolean = False
Dim sPath As String
Dim sFile As String
Dim sDocnum As String
Dim sPrintDef As String
Dim sFormType As String
Private Sub LD_AfterPrint(company As SAPbobsCOM.Company , sendToPrintDriver As Boolean)
If GetData("LD.Par.PrintMode")="N" And GetData("LD.Par.Preview")="N" Then
sFormType=GetData("LD.Par.FormType").ToString()
Select Case sFormType
Case "149"
'Angebot
sPrintDef="U0000033"
Case "139"
'Auftrag
sPrintDef="U0000034"
Case "140"
'Lieferschein
sPrintDef="U0000053"
Case "180"
'Retoure
sPrintDef="U0000035"
Case "133"
'Ausgangsrechnung
sPrintDef="U0000052"
Case "179"
'Ausgangsrechnung
sPrintDef="U0000037"
Case "142"
'Bestellung
sPrintDef="U0000038"
End Select
LayoutHelper.LayoutOpener.ExecutePrintDef(sPrintDef, LayoutHelper.LayoutOpener.OpenLayoutModes.PDF,"DocEntry",GetData("LD.Par.DocEntry"), "ObjectId", GetData("LD.Par.ObjectId"), "DocNum",GetData("LD.Par.DocNum"))
End If
If GetData("LD.Par.PrintMode")="P" Then
msgbox("ExportPath:" & GetData("LD.Par.ExportPath"))
'sPath=System.IO.Path.GetDirectoryName (GetData("LD.Par.ExportPath"))
'sFile=System.IO.Path.GetFileName (GetData("LD.Par.ExportPath"))
'sDocnum = GetData("LD.Par.DocNum")
End If
End Sub
Generate script:
##############
'Definition of Currency
isFC = Data("B1_Data.Document.DocCur") <> Data("B1_Data.Company.MainCurncy")
' Reset FirstLineText Flag
FTRendered = False
' Handler für die Nach Print Aktion registrieren
If Engine.IsDoublePass And Not handlerAdded Then
AddHandler LayoutHelper.LD.AfterPrint,AddressOf LD_AfterPrint
handlerAdded = True
End If
Abfrage für Gruppierung:
###################
/* Deliveries of the specific cardcode */
select '133' as FormType_ldi, 'T0000004' as PrintDef_ldi, T0.DocEntry as DocEntry_ldi,
'Rechnung' as Type, T0.DocNum, T0.DocEntry as AttGroup
INTO #Tmp1 FROM OINV T0 Where T0.docnum=403244
/* All related orders */
UNION SELECT ALL
'140' as FormType_ldi, 'T0000006' as PrintDef_ldi, T2.DocEntry as DocEntry_ldi,
'Lieferschein' as Type, T2.DocNum, T0.DocEntry as AttGroup
FROM OINV T0
inner join DLN1 T1 on t0.DocEntry=T1.TrgetEntry
INNER JOIN ODLN T2 on t1.docentry=t2.docentry
where t0.docnum=403244
and t1.TargetType=13
/* group and sort the result */
select FormType_ldi, PrintDef_ldi, DocEntry_ldi, Type, DocNum, AttGroup FROM #Tmp1
group by FormType_ldi, PrintDef_ldi, DocEntry_ldi, Type, DocNum, AttGroup
order by attgroup, Type desc
Philipp Knecht
Hi MarkusDanke für die ausführliche Anleitung. habs hier nachgebaut und den Fehler auch festgestellt.
Der AfterPrint Event ist hier nicht optimal weil er auch nach dem PDF erzeugen aufgerufen wird (Ohne das der Handler deregstriert wurde)
Diese Problematik haben wir seit der 1.72 Version mit dem AfterPrintOrPreview - Event erschlagen.
Nimm einfach diesen dann dürfte es klappen
hth
Markus Rewak
funktioniert prima, DANKEMarkus
Markus Rewak
Hallo Philipp,jetzt hab ich ein ganz anderes Problem. Durch dieses AfterPrintOrPreview springt er nicht mehr in die Bedinung im Common Script:
If GetData("LD.Par.PrintMode")="P" Then
msgbox("ExportPath:" & GetData("LD.Par.ExportPath"))
'sPath=System.IO.Path.GetDirectoryName (GetData("LD.Par.ExportPath"))
'sFile=System.IO.Path.GetFileName (GetData("LD.Par.ExportPath"))
'sDocnum = GetData("LD.Par.DocNum")
End If
Ich will folgendes erreichen:
Direktdruck eines Beleges --> Dokument als pdf schreiben
Drucken über Vorschau --> Dokument als pdf schreiben
Nachdem das Pdf gedruckt wurde will ich es archivieren.
Durch dieses neue Event gelangt er aber nun nicht mehr in den PrintMode="P"
Folgendes ist dadurch der Fall:
Drucken Beleg 1 --> nichts passiert, weil PrintMode=N
danach nur Vorschau Beleg1 oder eines anderen Beleges --> erzeugt direkt pdf des zuvor gedruckten Dokuments, weil PrintMode=P
Mit dem AfterPrint Event hat das funktioniert aber da gab es Probleme mit dem Attgroup.
Hast du hierfür eine Lösung.
viele Grüsse
Markus
Philipp Knecht
Hi MarkusDu must zusätzlich den AfterExport - Event registrieren.
Der ist neu und wird nur angestossen falls es sich um einen Export handelt (pdf, rtf, ...)
hth
0
Please sign in to leave a comment.
Comments
0 comments