Para convertir el resultado de un ALV en un PDF hay que proceder de la siguiente forma.
En primer lugar se debe generar la orden de Spool a partir del ALV, eso se hace setenado el parámetro “IS_PRINT” en la llamada del ALV.
lv_print-print = ’X’.
lv_print-no_print_listinfos = ’X’. ” No muestra cabecera de informacion en el pdf
lv_print-no_change_print_params = ’X’. ” Deja por defecto los parametros de impresora.sy-batch = ’X’. “Se ejecuta de fondo el ALV, de esta forma no aparece el Popup para setear los parameotrs de impresora.
CALL FUNCTION‘REUSE_ALV_LIST_DISPLAY’
EXPORTING
is_layout = ls_layout
it_fieldcat = gt_fieldcat[]
is_print = lv_print
TABLES
t_outtab = lt_bkpf
EXCEPTIONS
program_error = 1
OTHERS = 2.
Esto generara una orden de Spool, debemos capturar el numero de orden de la siguiente manera.
DATA: it_tsp01 LIKE tsp01 OCCURS 0 WITH HEADER LINE,
ls_tsp01 TYPE tsp01.SELECT rqident
INTO CORRESPONDING FIELDS OF TABLE it_tsp01
FROM tsp01
WHERE rqowner EQ sy-uname
AND rqclient EQ sy-mandt.*Ordeno en forma descendente para quedarme con el último formulario *generado
SORT it_tsp01 DESCENDING BY rqident.READ TABLE it_tsp01 INTO ls_tsp01 INDEX 1.
f_rqident = ls_tsp01-rqident.
Para bajar la orden de Spool a formato PDF se usa la siguiente función.
DATA: gd_bytecount LIKE tst01-dsize.
DATA: x_rqid LIKE tsp01-rqident.
DATA: BEGIN OF gt_objaux OCCURS 0.
INCLUDE STRUCTURE tline.
DATA: END OF gt_objaux.CALL FUNCTION‘CONVERT_ABAPSPOOLJOB_2_PDF’
EXPORTING
src_spoolid = x_rqid
no_dialog = space
IMPORTING
pdf_bytecount = gd_bytecount
TABLES
pdf = gt_objaux.
Para poder bajarlo a un archivo PDF, habrá que hacer una conversión.
DATA: lines TYPE STANDARD TABLE OF hlpext WITH HEADER LINE.
LOOP AT gt_objaux.
lines-line+00(002) = gt_objaux-tdformat.
lines-line+02(132) = gt_objaux-tdline.
APPEND lines.
ENDLOOP.CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = p_file
filetype = ’BIN’
CHANGING
data_tab = lines[]….
Se adjunta un archivo con el ejemplo correspondiente.