Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
Juri
also soweit habe ich das hinbekommen 😵PeterPaletti hat geschrieben: ↑08.12.2021 15:04Du könntest RSTXPDFT4 kopieren und für deine Zwecke anpassen. Bei mir hat der Report 260 Zeilen das ist recht überschaubar. Im Wesentlichen bestimmt der RSTXPDFT4 ob der Spool im Typ OTF vorliegt oder nicht. Je nachdem ruft er den Baustein CONVERT_OTFSPOOLJOB_2_PDF oder CONVERT_ABAPSPOOLJOB_2_PDF auf, um einen PDF-Strom zu erzeugen und diesen dann in der gewünschten Datei abzuspeichern.
Wenn du mehrere Spoolaufträge hast, brauchst du für die Spoolaufträge ein SELECT-OPTIONS, und selektierst dir die Aufträge aus der Tabelle TSP01. Dann solltest du einen Eingabeparameter verwenden um das Verzeichnis zu bestimmen, in dem die Dateien auf dem Frontend gespeichert werden sollen.
Dann machst du einen LOOP über deinen Arbeitsvorrat und speicherst den jeweiligen PDF-Strom in dein Verzeichnis mit einem sprechenden Dateinamen.
Sinniger Weise schaltet man für das Verzeichnis die Sicherheitsabfrage zum Speichern aus, sonst erhältst du bei jedem Schleifendurchlauf die Abfrage: "SAP will in das Verzeichnis abspeichern, wollen Sie das zulassen?".
Code: Alles auswählen.
*kopie vom Programm RSTXPDFT4
TABLES: TSP01.
SELECT-OPTIONS:
SPOOLNO for TSP01-RQIDENT.
PARAMETERS:
DOWNLOAD AS CHECKBOX DEFAULT 'X',
P_FILE LIKE RLGRAP-FILENAME DEFAULT 'C:\temp\file.pdf'. "#EC NOTEXT
selection-SCREEN SKIP 1.
selection-SCREEN BEGIN OF BLOCK list_width WITH FRAME TITLE TEXT-010.
PARAMETERS: real RADIOBUTTON GROUP g1 DEFAULT 'X',
FORMAT RADIOBUTTON GROUP g1 .
selection-SCREEN END OF BLOCK list_width.
DATA otf LIKE itcoo OCCURS 100 WITH HEADER LINE.
DATA CANCEL.
DATA PDF LIKE TLINE OCCURS 100 WITH HEADER LINE.
DATA: g_filesize TYPE i.
DATA i_tsp01 like table of tsp01 with header line.
DATA i_tsp01ges TYPE TABLE OF tsp01 with header line.
DATA DOCTAB LIKE DOCS OCCURS 1 WITH HEADER LINE.
DATA: NUMBYTES TYPE I,
ARC_IDX LIKE TOA_DARA,
pdfspoolid LIKE tsp01-rqident,
jobname LIKE tbtcjob-jobname,
jobcount LIKE tbtcjob-jobcount,
is_otf.
DATA: CLIENT LIKE tst01-dclient,
name LIKE tst01-dname,
objtype LIKE rststype-TYPE,
TYPE LIKE rststype-TYPE.
DATA: GET_SIZE_FROM_FORMAT.
SELECT * FROM tsp01 INTO i_tsp01
WHERE rqident in spoolno.
APPEND i_tsp01.
ENDSELECT.
IF sy-subrc <> 0.
PERFORM bd_textbox_err(rstxpdft) USING 80
'Spoolauftrag existiert nicht'(003).
EXIT.
ENDIF.
CLIENT = tsp01-rqclient.
name = tsp01-rqo1name.
CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
EXPORTING
AUTHORITY = 'SP01'
CLIENT = CLIENT
NAME = name
PART = 1
IMPORTING
* CHARCO =
* CREATER =
* CREDATE =
* DELDATE =
* MAX_CREDATE =
* MAX_DELDATE =
* NON_UNIQ =
* NOOF_PARTS =
* RECTYP =
* SIZE =
* STOTYP =
TYPE = TYPE
OBJTYPE = objtype
EXCEPTIONS
FB_ERROR = 1
FB_RSTS_OTHER = 2
NO_OBJECT = 3
NO_PERMISSION = 4.
Loop AT I_tsp01.
IF objtype(3) = 'OTF'.
is_otf = 'X'.
ELSE.
is_otf = space.
ENDIF.
IF is_otf = 'X'.
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
SRC_SPOOLID = I_tsp01-RQIDENT
NO_DIALOG = ' '
* DST_DEVICE =
* PDF_DESTINATION =
IMPORTING
PDF_BYTECOUNT = numbytes
PDF_SPOOLID = pdfspoolid
* OTF_PAGECOUNT =
BTC_JOBNAME = jobname
BTC_JOBCOUNT = jobcount
TABLES
PDF = pdf
EXCEPTIONS
ERR_NO_OTF_SPOOLJOB = 1
ERR_NO_SPOOLJOB = 2
ERR_NO_PERMISSION = 3
ERR_CONV_NOT_POSSIBLE = 4
ERR_BAD_DSTDEVICE = 5
USER_CANCELLED = 6
ERR_SPOOLERROR = 7
ERR_TEMSEERROR = 8
ERR_BTCJOB_OPEN_FAILED = 9
ERR_BTCJOB_SUBMIT_FAILED = 10
ERR_BTCJOB_CLOSE_FAILED = 11.
CASE sy-subrc.
WHEN 0.
PERFORM bd_textbox_msg(rstxpdft) USING 80
'Funktion CONVERT_OTFSPOOLJOB_2_PDF erfolgreich'(001).
WHEN 1.
PERFORM bd_textbox_err(rstxpdft) USING 80
'Kein OTF- und kein ABAP-Spoolauftrag'(002).
EXIT.
WHEN 2.
PERFORM bd_textbox_err(rstxpdft) USING 80
'Spoolauftrag existiert nicht'(003).
EXIT.
WHEN 3.
PERFORM bd_textbox_err(rstxpdft) USING 80
'Keine Berechtigung zum Lesen Spoolauftrag'(004).
EXIT.
WHEN OTHERS.
PERFORM bd_textbox_err(rstxpdft) USING 80
'Fehler bei Funktion CONVERT_OTFSPOOLJOB_2_PDF'(005).
EXIT.
ENDCASE.
ELSE.
IF real IS INITIAL.
GET_SIZE_FROM_FORMAT = 'X'.
ENDIF.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
SRC_SPOOLID = I_tsp01-RQIDENT
NO_DIALOG = ' '
* DST_DEVICE =
* PDF_DESTINATION =
GET_SIZE_FROM_FORMAT = GET_SIZE_FROM_FORMAT
IMPORTING
PDF_BYTECOUNT = numbytes
PDF_SPOOLID = pdfspoolid
* LIST_PAGECOUNT =
BTC_JOBNAME = jobname
BTC_JOBCOUNT = jobcount
TABLES
PDF = pdf
EXCEPTIONS
ERR_NO_ABAP_SPOOLJOB = 1
ERR_NO_SPOOLJOB = 2
ERR_NO_PERMISSION = 3
ERR_CONV_NOT_POSSIBLE = 4
ERR_BAD_DESTDEVICE = 5
USER_CANCELLED = 6
ERR_SPOOLERROR = 7
ERR_TEMSEERROR = 8
ERR_BTCJOB_OPEN_FAILED = 9
ERR_BTCJOB_SUBMIT_FAILED = 10
ERR_BTCJOB_CLOSE_FAILED = 11.
CASE sy-subrc.
WHEN 0.
PERFORM bd_textbox_msg(rstxpdft) USING 80
'Funktion CONVERT_ABAPSPOOLJOB_2_PDF erfolgreich'(006).
WHEN 1.
PERFORM bd_textbox_err(rstxpdft) USING 80
'Kein OTF- und kein ABAP-Spoolauftrag'(002).
EXIT.
WHEN 2.
PERFORM bd_textbox_err(rstxpdft) USING 80
'Spoolauftrag existiert nicht'(003).
EXIT.
WHEN 3.
PERFORM bd_textbox_err(rstxpdft) USING 80
'Keine Berechtigung zum Lesen Spoolauftrag'(004).
EXIT.
WHEN OTHERS.
PERFORM bd_textbox_err(rstxpdft) USING 80
'Fehler bei Funktion CONVERT_ABAPSPOOLJOB_2_PDF'(007).
EXIT.
ENDCASE.
ENDIF.
ENDLOOP.
*************** download PDF file ***********
CHECK download = 'X'.
IF NOT ( jobname IS INITIAL ).
PERFORM bd_textbox_var2_msg(rstxpdft) USING 80
'Konvertierung per Hintergrundjob'(008)
jobname
jobcount.
EXIT.
ENDIF.
PERFORM download_w_ext(RSTXPDFT) TABLES pdf
USING p_file
'.pdf'
'BIN'
numbytes
cancel.
IF cancel = space.
DATA: s(80).
s = numbytes. CONDENSE s.
CONCATENATE s 'Bytes heruntergeladen in Datei'(009)
INTO s SEPARATED BY space.
PERFORM bd_textbox_var1_msg(RSTXPDFT) USING 80
s
p_file.
ENDIF.
Code: Alles auswählen.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid =
* NO_DIALOG =
* DST_DEVICE =
* PDF_DESTINATION =
* NO_BACKGROUND =
* GET_SIZE_FROM_FORMAT =
* USE_CASCADING = ' '
* IMPORTING
* PDF_BYTECOUNT =
* PDF_SPOOLID =
* LIST_PAGECOUNT =
* BTC_JOBNAME =
* BTC_JOBCOUNT =
* BIN_FILE =
* TABLES
* PDF =
* EXCEPTIONS
* ERR_NO_ABAP_SPOOLJOB = 1
* ERR_NO_SPOOLJOB = 2
* ERR_NO_PERMISSION = 3
* ERR_CONV_NOT_POSSIBLE = 4
* ERR_BAD_DESTDEVICE = 5
* USER_CANCELLED = 6
* ERR_SPOOLERROR = 7
* ERR_TEMSEERROR = 8
* ERR_BTCJOB_OPEN_FAILED = 9
* ERR_BTCJOB_SUBMIT_FAILED = 10
* ERR_BTCJOB_CLOSE_FAILED = 11
* OTHERS = 12