Currently below program works for single invoice. So the requirement is if we pass multiple invoices then i single pdf needs to be generated in single URL.
Please help.
perform log_line using 'Z_DP_OUTPUT_TO_PDF: IN_OBJKY: ' in_objky.
perform log_line using 'Z_DP_OUTPUT_TO_PDF: IN_KSCHL: ' in_kschl.
perform log_line using 'Z_DP_OUTPUT_TO_PDF: IN_LDEST: ' in_ldest.
perform log_line using 'Z_DP_OUTPUT_TO_PDF: IN_SPRAS: ' in_spras.
perform log_line using 'Z_DP_OUTPUT_TO_PDF: IN_PARVW: ' in_parvw.
perform log_line using 'Z_DP_OUTPUT_TO_PDF: IN_PARNR: ' in_parnr.
TABLES: nast, " Message Status
cmfp. " Storage Structure for Errors Collected
DATA: BEGIN OF xnast OCCURS 0.
INCLUDE STRUCTURE vnast.
DATA: END OF xnast.
DATA: BEGIN OF ynast OCCURS 0.
INCLUDE STRUCTURE nast.
DATA: END OF ynast.
DATA: BEGIN OF list_tab OCCURS 0.
INCLUDE STRUCTURE abaplist.
DATA: END OF list_tab.
DATA: objtype LIKE rststype-type,
type LIKE rststype-type.
DATA: BEGIN OF datafile OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF datafile.
DATA: numbytes TYPE i,
pdfspoolid LIKE tsp01-rqident,
jobname LIKE tbtcjob-jobname,
jobcount LIKE tbtcjob-jobcount.
DATA: fname(128) TYPE c,
unixcom LIKE rlgrap-filename.
DATA: print_parameters TYPE pri_params.
IF in_ldest IS INITIAL.
in_ldest = 'WD26'. " A non-physical printer
ENDIF.
CLEAR nast.
"if this statement is true, use the old code
SELECT * FROM nast
WHERE kappl = in_kappl
AND objky = in_objky
AND nacha = '1'
ORDER BY parnr DESCENDING.
CHECK NOT nast-kschl IS INITIAL.
IF NOT in_kschl IS INITIAL.
CHECK nast-kschl = in_kschl.
EXIT.
ELSE.
EXIT.
ENDIF.
ENDSELECT.
* IF nast-objky IS INITIAL.
** RAISE kschl_not_determined.
* ENDIF.
REFRESH xnast.
CLEAR xnast.
REFRESH ynast.
CLEAR ynast.
IF in_spras IS INITIAL.
IF nast-spras IS INITIAL.
xnast-spras = sy-langu.
ELSE.
xnast-spras = nast-spras.
ENDIF.
ELSE.
xnast-spras = in_spras.
ENDIF.
IF in_parnr IS INITIAL.
in_parnr = nast-parnr.
ENDIF.
IF in_parvw IS INITIAL.
in_parvw = nast-parvw.
ENDIF.
IF in_kschl IS INITIAL.
in_kschl = nast-kschl.
ENDIF.
xnast-parnr = in_parnr.
xnast-parvw = in_parvw.
xnast-kschl = in_kschl.
xnast-mandt = sy-mandt.
xnast-kappl = in_kappl.
xnast-objky = in_objky.
xnast-erdat = sy-datum.
xnast-eruhr = sy-uzeit.
xnast-nacha = '1'.
xnast-anzal = '0'.
xnast-vsztp = '1'.
xnast-manue = 'X'.
xnast-datvr = sy-datum.
xnast-uhrvr = sy-uzeit.
xnast-usnam = sy-uname.
xnast-vstat = '0'.
xnast-ldest = in_ldest.
xnast-dimme = '1'.
xnast-nauto = 'X'.
xnast-tdreceiver = sy-uname.
APPEND xnast.
CALL FUNCTION 'RV_MESSAGE_UPDATE'
EXPORTING
msg_kappl = in_kappl " 'V7'
TABLES
msg_xnast = xnast
msg_ynast = ynast
EXCEPTIONS
no_update = 1
OTHERS = 2.
IF sy-subrc <> 0.
RAISE nast_insert_failed. " ERROR
ELSE.
DATA: number TYPE tbtcjob-jobcount,
name TYPE tbtcjob-jobname VALUE 'PRINT_OUTPUT',
print_parameters2 TYPE pri_params.
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING
DESTINATION = in_ldest
NO_DIALOG = 'X'
IMPORTING
OUT_PARAMETERS = print_parameters2
* EXCEPTIONS
* ARCHIVE_INFO_NOT_FOUND = 1
* INVALID_PRINT_PARAMS = 2
* INVALID_ARCHIVE_PARAMS = 3
* OTHERS = 4
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = name
IMPORTING
jobcount = number
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc = 0.
perform log_line using 'Z_DP_OUTPUT_TO_PDF: Job Number:' number.
SUBMIT rsnast00 WITH s_kappl = in_kappl " 'V7'
WITH s_objky = in_objky
WITH s_kschl = in_kschl
WITH p_print = in_ldest
TO SAP-SPOOL
SPOOL PARAMETERS print_parameters2
WITHOUT SPOOL DYNPRO
VIA JOB name NUMBER number
AND RETURN.
IF sy-subrc = 0.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = number
jobname = name
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
ENDIF.
ENDIF.
"Wait 5 seconds to let the changes take effect in NAST
WAIT UP TO 5 SECONDS.
"DPO-15 Changes
"if ZD00 don't change anything
IF in_kschl = 'ZD00'.
SELECT * FROM nast
WHERE kappl = in_kappl
AND objky = in_objky
AND nacha = '1'
ORDER BY erdat DESCENDING eruhr DESCENDING.
SELECT SINGLE * FROM cmfp
WHERE nr EQ nast-cmfpnr
AND aplid EQ 'WFMC'
AND msgnr EQ '342'.
IF sy-subrc = 0.
out_spool = cmfp-msgv1.
EXIT.
ENDIF.
ENDSELECT.
ELSE."another entry other than ZD00 was provided, use othe method.
DATA: it_tsp01 TYPE STANDARD TABLE OF tsp01.
DATA: st_tsp01 TYPE tsp01.
DATA: spool_item TYPE tsp01-rqo1name.
SELECT *
FROM tsp01
INTO CORRESPONDING FIELDS OF TABLE it_tsp01
WHERE rqowner = sy-uname
AND rqdest = 'WD26'.
IF sy-subrc = 0.
SORT it_tsp01 BY rqident DESCENDING.
LOOP AT it_tsp01 INTO st_tsp01.
spool_item = st_tsp01-rqo1name.
EXIT.
ENDLOOP.
REPLACE ALL OCCURRENCES OF 'SPOOL' IN spool_item WITH '0'.
SHIFT spool_item LEFT DELETING LEADING '0'.
out_spool = spool_item.
ENDIF.
ENDIF.
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = out_spool
no_dialog = 'X'
IMPORTING
btc_jobname = jobname
btc_jobcount = jobcount
TABLES
pdf = datafile
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.
IF sy-subrc <> 0.
RAISE conversion_error.
ENDIF.
DATA: spool_del TYPE tsp01_sp0r-rqid_char.
spool_del = out_spool.
CONDENSE spool_del.
* "empties the spool after the data has been stored within the intertable (datafile)
* CALL FUNCTION 'RSPO_R_RDELETE_SPOOLREQ'
* EXPORTING
* spoolid = spool_del.
CALL FUNCTION 'RANDOM_C'
EXPORTING
len_min = 128
len_max = 128
char_min = 1
char_max = 50
IMPORTING
rnd_value = fname.
concatenate sy-sysid in_kappl in_kschl in_objky fname into fname separated by '_'.
CONDENSE fname NO-GAPS.
fname = fname(25).
CONCATENATE 'http://sapwr.hcg.ad.harman.com/pdf/' fname '.pdf' INTO out_url.
CONCATENATE '/reports/pdf/' fname '.pdf' INTO fname.
OPEN DATASET fname FOR OUTPUT IN BINARY MODE.
if sy-subrc ne 0.
WAIT UP TO 1 SECONDS.
perform log_line using 'Z_DP_OUTPUT_TO_PDF: Could not open file: ' ''.
perform log_line using '1: ' fname.
OPEN DATASET fname FOR OUTPUT IN BINARY MODE.
if sy-subrc ne 0.
WAIT UP TO 2 SECONDS.
perform log_line using 'Z_DP_OUTPUT_TO_PDF: Could not open file: ' ''.
perform log_line using '2: ' fname.
OPEN DATASET fname FOR OUTPUT IN BINARY MODE.
endif.
endif.
LOOP AT datafile.
TRANSFER datafile TO fname.
ENDLOOP.
CLOSE DATASET fname.
CONCATENATE 'chmod 644' fname INTO unixcom SEPARATED BY space.
CALL 'SYSTEM' ID 'COMMAND' FIELD unixcom.
perform log_line using 'Z_DP_OUTPUT_TO_PDF: OUT_URL: ' ''.
perform log_line using OUT_URL ''.
perform log_line using 'Z_DP_OUTPUT_TO_PDF: OUT_SPOOL: ' ''.
perform log_line using ' - ' out_spool.
endif.
ENDFUNCTION.