En las siguientes lÃneas vamos a poder hacerlo.
*Declaración de variables
lf_formname TYPE tdsfname VALUE 'ZFIF_FORMATO_LIQER'.
*Función que devuelve el modulo de función del SmartForm
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
*Nombre del formulario SmartForm
formname = lf_formname
IMPORTING
fm_name = lf_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
*Traemos los valores del programa a las variables del smartforms que va imprimir el PDF
DATA: ls_ssfctrlop TYPE ssfctrlop. " Control Parameters
DATA: ls_output_options TYPE ssfcompop. " Output Options
DATA: ls_job_output_info TYPE ssfcrescl. " Job Output Info
DATA: ls_job_output_options TYPE ssfcresop. " Job Output Options
*Llama al modulo de función del SF
ls_ssfctrlop-no_dialog = 'X'.
ls_ssfctrlop-getotf = 'X'.
ls_ssfctrlop-preview = 'X'.
*No funciona, se debe asignar una impresora x default al usuario
ls_output_options-tddest = 'ZLOCAL'.
ls_output_options-tdnoprev = 'X'.
ls_output_options-tdtitle = sy-title.
ls_output_options-tdnewid = 'X'.
CALL FUNCTION lf_fm_name
EXPORTING
ip_vuser = lv_vuser "Aprobador
ip_aprob = lv_aprob "Aprobador
ip_feapr = lv_feapr "Fecha de Aprob. Liq.
ip_feren = lv_feren "Fecha de Liquidación
ip_name1 = lv_name1 "Nombre de Personal
ip_kostl = lv_kostl "Centro de Costo
ip_bktxt = lv_bktxt "Motivo de Solicitud
ip_fefin = lv_fefin "Duración Solicitud - Fec.Fin
ip_feini = lv_feini "Duración Solicitud - Fec.Inicio
ip_lifnr = lv_lifnr "Código de Personal
ip_stcd1 = lv_stcd1 "Identificación
ip_importe = lv_importe ""Importe de Solicitud
ip_wrbtr = lv_wrbtr "Importe de Solicitud
ip_dmbtr = lv_dmbtr "Importe de Solicitud
ip_mon_local = lv_mon_local "En Mon. Local
ip_mon_sgiro = lv_mon_sgiro "Monto sobregiro
ip_sociedad = lv_sociedad "Sociedad
ip_sobregiro = lv_sobregiro "Sobregiro
ip_statu_solicitud = lv_statu_txt "Estado de la solicitud
ip_belnr = lv_belnr "Nro de Solicitud
ip_aufnr = lv_aufnr "Orden Interna
ip_ttotal = lv_ttotal "Total - importe total
ip_tsoles = lv_tsoles "Total - importe soles
ip_tdolar = lv_tdolar "Total - importe dolar
control_parameters = ls_ssfctrlop
output_options = ls_output_options
*user_settings = ' '
IMPORTING
fm_name = lf_fm_name
job_output_info = ls_job_output_info
job_output_options = ls_job_output_options
TABLES
t_detail = lt_detail.
IF sy-subrc = 0.
DATA: lv_bytecount TYPE i.
DATA: lt_lines TYPE TABLE OF tline.
DATA: ls_line TYPE tline.
*Convierte a PDF
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = lv_bytecount
TABLES
otf = ls_job_output_info-otfdata
lines = lt_lines.
IF sy-subrc = 0.
DATA l_pdfstring TYPE xstring.
DATA lv_string TYPE string.
DATA lv_buffer TYPE xstring.
DATA l_xline TYPE xstring.
LOOP AT lt_lines INTO ls_line. "into l_line.
lv_string = ls_line.
EXPORT my_data = lv_string TO DATA BUFFER lv_buffer.
IMPORT my_data TO l_xline FROM DATA BUFFER lv_buffer IN CHAR-TO-HEX MODE.
CONCATENATE l_pdfstring l_xline INTO l_pdfstring IN BYTE MODE.
ENDLOOP.
DATA lv_filename TYPE string.
*Creo nombre a mi archivo PDF para este ejemplo colocamos 'er'
CONCATENATE 'formato_' 'er' '.pdf' INTO lv_filename.
*Genero a la impresión
cl_wd_runtime_services=>attach_file_to_response(
i_filename = lv_filename "'OC.pdf'
i_content = l_pdfstring
i_mime_type = 'application/pdf'
i_in_new_window = abap_false
i_inplace = abap_false
).
ENDIF.
ENDIF.
Listo con este ejemplo puedes imprimir los datos de tu smartforms a PDF


Hola. Tengo una salida de smartforms en un LOOP para obtener el OTF (cuenta por cobrar) pero la primera salida se pega con la siguiente ¿como puedo independizar cada salida ¿limpiar la memoria del SMARTFORMS para la siguiente?
ResponderBorrarExacto!! porque se queda en memoria los datos anteriores. Me avisas sino te paso un ejemplo
BorrarEstimado Luis. Gracias por la pronta respuesta, como te comente no he logrado solucionar el problema, entonces si tienes una ejemplo te lo agradecerÃa.
BorrarEstimado Luis. Gracias por la pronta respuesta, como te comente no he logrado solucionar el problema, entonces si tienes una ejemplo te lo agradecerÃa.
ResponderBorrar