✒️ABAP La conversión de un Smartform a PDF
ABAP La conversión de un Smartform a PDF
CONVERSION DE UN SMARTFORM A PDF
Para ello modificarmeos el programa impresor del formulario smartform, con una serie de pasos muy faciles de realizar. cabe destacar que este requerimiento es muy solicitado en los entornos de trabajo de SAP debido a la gran protabilidad de los documentos PDF.
Pasos
1. Ir al programa impresor zprueba_smartforms y declaramos las variables estructuras y tablas internas,
2. dentro de la subrutina invocar smartform ejecutamos la funcion ssf_function_name con el nombre del formulario smartform y nos devolvera la funcion del smartform
3. Configurar la salida setenado tres parametros de la misma que son:
getotf obtenr la salida en formato otf
no_dialog para que no se tenga dialogo
tdnoprev visualizacion de impresion no permitida
4. ejecucion de la funcion del smartform utilizando las estructuras de configuracion de la salida que completamos antes y la estructura wa_return almacenara la salida del smartform en formato otf
5. Completamos la tabla otfdata con la salida en otf del smartform
otfdata[] = wa_return-otfdata[].
6. Completamos la tabla intab
loop at otfdata
........
endloop
7. ejecucion de la funcion SX_OBJECT_CONVERT_OTF_PDF
convertir otf a pdf el resultado se alamcena en la tabla objbin[]
ejecutamos y da los bytes transferidos code page 0000 que significa ok
Existe otra forma de convertir a pdf, consiste en enviar al spool la impresion del formualrio smartform asi generamos un numero de orden de spool luego ejecutamos el programa estandar RSTXPDFT4 introducimos en la pantalla de seleccion el numero de la orden de spool luego tildamos la opcion hacer download del fichero pdf e introducios la ruta y el nombre del archivo pdf que generaremos luego de introducir estos datos obtenemos el archivo en formato pdf.
*&---------------------------------------------------------------------* *& Report ZPRUEBA_SMARTFORMS_PDF *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT zprueba_smartforms_pdf. * Nombre del modulo de funciones del formulario. DATA: v_nombre_form(30) TYPE c. DATA: ti_usuarios TYPE STANDARD TABLE OF zusuarios. *Previamente creamos en el Diccionario de datos la estructura ZUSUARIOS *con los mismos campos de ZTABLA_USUARIOS a excepción del Mandante DATA: wa_control_parameters TYPE ssfctrlop, wa_output_options TYPE ssfcompop, wa_return TYPE ssfcrescl, otfdata LIKE itcoo OCCURS 0 WITH HEADER LINE, intab TYPE soli_tab, objbin TYPE solix_tab, wa_intab TYPE LINE OF soli_tab, wa_objbin TYPE LINE OF solix_tab, objpack TYPE STANDARD TABLE OF sopcklsti1 WITH HEADER LINE. * ---------------------------------------------------------------------* START-OF-SELECTION. * ---------------------------------------------------------------------* * Seleccionamos los datos de la tabla de usuarios PERFORM cargar_datos. * Llamada al formulario Smartform PERFORM invocar_smartform. *&---------------------------------------------------------------------* *& Form CARGAR_DATOS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM cargar_datos . CLEAR ti_usuarios. REFRESH ti_usuarios. SELECT dni nombre_ape estado_usu direccion codigo_postal f_nacimiento estado_civil FROM ztabla_usuarios INTO CORRESPONDING FIELDS OF TABLE ti_usuarios. ENDFORM. " CARGAR_DATOS *&---------------------------------------------------------------------* *& Form INVOCAR_SMARTFORM *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM invocar_smartform . IF NOT ti_usuarios[] IS INITIAL. * Inicializar el formulario. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = 'ZFORMULARIO_PRUEBA' IMPORTING fm_name = v_nombre_form EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. * Configuramos la generación del formulario Smartform wa_control_parameters-getotf = 'X'. "Retorno tab.OTF. Sin imprimir, visualizar o enviar por fax wa_control_parameters-no_dialog = 'X'. "Sin diálogo wa_output_options-tdnoprev = 'X'. "Visualización de impresión no permitida * Ejecutamos la función que imprime el formulario smartform CALL FUNCTION v_nombre_form EXPORTING output_options = wa_output_options control_parameters = wa_control_parameters IMPORTING job_output_info = wa_return TABLES ti_usuarios = ti_usuarios EXCEPTIONS formatting_error = 1 internal_error = 2 send_error = 3 user_canceled = 4 OTHERS = 5. IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. otfdata[] = wa_return-otfdata[]. ENDIF. * En la tabla otfdata nos queda guardado el formulario en formato OTF, * sólo resta convertir el OTF en PDF LOOP AT otfdata. wa_intab = otfdata. APPEND wa_intab TO intab. CLEAR wa_intab. ENDLOOP. * Convertimos el OTF en PDF CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF' EXPORTING format_src = 'OTF' format_dst = 'PDF' devtype = 'LOCL' CHANGING transfer_bin = objpack-transf_bin content_txt = intab content_bin = objbin objhead = intab len = objpack-doc_size EXCEPTIONS err_conv_failed = 1 OTHERS = 2. * En la tabla objbin nos queda guardado el PDF, para salvarlo en una archivo local * de la PC, utilizamos el método GUI_DOWNLOAD CALL METHOD cl_gui_frontend_services=>gui_download EXPORTING filename = 'E: ARCHIVO_SALIDA9.pdf' filetype = 'BIN' CHANGING data_tab = objbin[] EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 not_supported_by_gui = 22 error_no_gui = 23 OTHERS = 24. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF. ENDFORM. " INVOCAR_SMARTFORM
 
 
 
Sobre el autor
Publicación académica de Carlos Alberto Carreira, en su ámbito de estudios para la Carrera Consultor ABAP.
Carlos Alberto Carreira
Profesión: Consultor Técnico en Jde W.s. - Argentina - Legajo: KC15G
✒️Autor de: 92 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Inicial
🎓Egresado de los módulos:
Certificación Académica de Carlos Carreira