MS-Tech
23rd January 2017, 13:42
Hallo Zusammen,

ich drucke einen Report und möchte nachdem dieser Report gedruckt ist noch 2 weitere Reports auf dem gleichen Drucker drucken.

Ich habe folgende Code in das ReportScript eingefügt.


after.program:

long brp_id
long spooler1
long spooler2

spooler1 = spool.open("", spool.device, 1)
brp_id = brp.open("reportId1", spool.device, 0)
brp.ready(brp_id)
brp.close(brp_id)
spool.close()

brp_id = 0
spooler2 = spool.open("", spool.device, 1)
brp_id = brp.open("reportId2", spool.device, 0)
brp.ready(brp_id)
brp.close(brp_id)
spool.close()



Ist das denn so okay? Wenn ich z.B. in HiDOX keinen eigenen Spooler für jeden Report öffne, dann erhalte ich nur den Hauptreport. So erhalte ich 3 PDF-Dokumente.

Wenn ich die beiden neuen geöffneten Spooler wieder schließe, werden dann auch nur diese Spooler geschlossen? Was ist mit dem Spooler des Hauptreports?

Gibt es eine andere Möglichkeit Reports nach einem Report zu drucken?

Grüße
MS-Tech

bdittmar
23rd January 2017, 14:28
Hallo,

im Sessionscript laesst es sich so realisierem:

declaration:

extern Long brp_id1, brp_id2, brp_id3

choice.print.data:
on.choice:

brp_id1 = brp.open("Report1", spool.device, 0)
function(A)
brp.close(brp_id1)

brp_id2 = brp.open("Report2", spool.device, 0)
function(B)
brp.close(brp_id2)

............................>

In function(A) :
brp.ready(brp_id1)

In function(B) :
brp.ready(brp_id2)
...........................>


Alternativ ist das/ein UserExit zu verwenden.
Habe ich realisiert mit HiDox in "Auftragsdokumente drucken" (tisfc001ue)
Hier wird zu den Produktionsdokumenten eine weitere Drucksession angesteuert, die einen zus. Hidox-Report auf den gleichen Spooler druckt.
(Das ist eine aufwendigere Entwicklung)
Regards

MS-Tech
23rd January 2017, 14:58
Hallo,

danke für deine Antwort.

Ich habe auf das Sessionskript leider keinen Zugriff. Ich kann das nur über das Reportskript oder auch über eine UserExit bauen. Wie sieht das dann in einer UserExit aus? Wo ist hier der Einsprungspunkt beim Druck? Hier gibts ja nur die Sections... vor dem Speichern, nach dem Speichern etc.

Gruß
MS-Tech

bdittmar
23rd January 2017, 15:08
Hallo,

das kann so aussehen :
(Bitte Kommentare ausblenden !)

function extern long ue.after.after.save.object(long mode)
{
on case mode
case DAL_NEW:
...............................
activate("odhsfc0201s100", tisfc001.pdno) | Dokumente drucken und freigeben
break
case DAL_UPDATE:
|BD20141022 added logic gor MAC, iPLC and Assembly-Plan

mpdebug = 10
check.mplan.exclude.parameter()
check.mplan.printed()

if (tisfc001.srnl = tisfc.pdst.doc.printed and (tisfc001.osta = tcosta.in.prod or tisfc001.osta = tcosta.active or tisfc001.osta = tcosta.closed)) then
set.zoom.variables()

count.id.present()
if tisfc001.qrdr = id.count then
check.for.mac.and.test()

|Run sessions for MAC, PLC, TEST
if mac.need = true then
read.id.number.from.timfc010(prod.pdno, prod.item, prod.cprj)

endif |mac.need

|BD20100930
check.and.built.plc.crc()

|Run sessions for PLC-CRC
if plc.crc.need = true then

read.id.numbers.for.plc(prod.pdno, prod.item, prod.cprj)

else
|Reset variables
plc.bom.level = ""
crc.value = ""
endif |PLC = true

|BD20150421 Customer serial numbers in FP9
check.for.customer.serial.numbers()

if valid.item.cuno = true then
read.id.numbers.for.cuno.clot(prod.pdno, prod.item, prod.cprj)
endif |Customers serials

|BD20141029 Here testerdata is checked and processed
if tdata = true then
check.testerfile.is.created(prod.pdno)
if tfile.created = false then
|Call the function for testerdata
dhexc0010.built.data.for.testequipment(prod.cprj,
prod.item,
prod.pdno)

|Comming back from function
write.testerfile.created.to.dhexc110(prod.pdno)

endif

endif

|BD20101208 Handled in SUB

|BD20110527 Assembly Plan
|!! Spooler is already open !! ----<<

mpdebug = 50
|BD20141114 Montageplan nur wenn noch kein Testerfile erzeugt ist !
|ansonsten wird 2x gedruckt !
|BD20150702 new logic
if (tfile.created = false and mplan.need = true) then
print.assembly.plan()
write.mplan.printed() |+BD20150707
endif
else
suspend(5000)
count.id.present()
endif |Quantity identical to ID-Numbers
else
|BD20101015 Meldungen im UE !
|dal.set.warning.message("dhsfc00100001")
|show.dal.messages(MSG.ALL)

|BD20150702 Print MPlan for non ID items if needed
|BD20150710 No output at releasepoint
mpdebug = 30
check.mplan.printed()
if (mplan.need = true and mplan.printed = false) then |+BD20150710
set.zoom.variables()
|BD20151222 default printer for job process
if isspace(curr.printer) then
curr.printer = "LDL-079-2P" |--> default printer
else
curr.printer = spool.device
endif
|BD20151222 default printer for job process
before.zoom:
export("curr.printer", curr.printer)
get.var(pid, "prog.name$", sessioncode) |+BD20150710

if sessioncode = "tisfc0204m000" then |+BD20150710
start.session(0, "dhsfc0408m0bd", "zoom.pdno", "")
write.mplan.printed()
endif |sessioncode
endif

endif

break
endcase
return(0)
}


Die Verriegelung und Trigger erfolgt zum Teil ueber separate Parametertabellen, in denen abgeprueft wird, ob bestimmte Funktionalitaeten bereits erfolgt sind, wenn nicht, werden die Funktionen abgearbeitet und deren Status dann in die zustaendige Parametertabelle zurueckgeschrieben.

MFG

MS-Tech
9th February 2017, 16:02
Hallo.

Ich habe es soweit angepasst und funktioniert auch soweit.

Danke und Grüße