Pasar SmartForm a PDF

11 05 2011

Es común que nos pidan hacer un resguardo de un formulario. Y probablemente tengamos que hacer el backup a PDF.
Con las siguientes pocas líneas vamos a poder hacerlo.


*Declaraciones
DATA: w_ctrlop    TYPE ssfctrlop,
          w_compop TYPE ssfcompop,
          w_return    TYPE ssfcrescl,
          otfdata       LIKE itcoo OCCURS 0 WITH HEADER LINE,
          lc_name     TYPE rs38l_fnam,
          intab         TYPE  soli_tab,
          objbin       TYPE  solix_tab, 
          wa_intab   TYPE LINE OF soli_tab,
          wa_objbin TYPE LINE OF solix_tab,
          objpack    LIKE sopcklsti1 WITH HEADER LINE.

*Función que devuelve el modulo de función del SmartForm
CALL FUNCTION ‘SSF_FUNCTION_MODULE_NAME’
   EXPORTING
      formname           = ‘ZSMARTFORM’  “Nombre del formulario SmartForm
   IMPORTING
      fm_name            = lc_name
   EXCEPTIONS
      no_form                  = 1
      no_function_module = 2 
   OTHERS                     = 3.

*Llama al modulo de función del SF
    w_ctrlop-getotf          = ‘X’.
    w_ctrlop-no_dialog    = ‘X’.
    w_compop-tdnoprev  = ‘X’.

CALL FUNCTION lc_name
   EXPORTING
        output_options        = w_compop 
        control_parameters = w_ctrlop
   IMPORTING
        job_output_info       = w_return
   EXCEPTIONS
        formatting_error   = 1
        internal_error       = 2
        send_error           = 3
        user_canceled      = 4
   OTHERS                    = 5.
   IF sy-subrc <> 0.
     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
   ELSE.
      otfdata[] = w_return-otfdata[].
   ENDIF.

*En la tabla otfdata nos queda guardado el formulario en formtao OTF
*Ahora sólo resta convertir el OTF en PDF
LOOP AT otfdata.
    wa_intab = otfdata.
    APPEND wa_intab TO intab.
    CLEAR wa_intab.
ENDLOOP.

*Convertir el OTF en PDF
CALL FUNCTION ‘SX_OBJECT_CONVERT_OTF_PDF’
    EXPORTING
      format_src           = ‘OTF’
      format_dst          = ‘PDF’
*     ADDR_TYPE        =
      devtype               = ‘LP01′
*     FUNCPARA          =
    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.

*LISTO!!! En la tabla objbin nos queda guardado el PDF para salvarlo *en la PC con la función ‘GUI_DOWNLOAD’ o bien enviarlo por mail con *la función ‘SO_NEW_DOCUMENT_ATT_SEND_API1’


Technorati tags:


Acciones

Information

12 responses

9 06 2011
Mariano

Groso

24 08 2011
Ebelyn

Se puede bajar el PDF al servidor (AL11) y luego a la pc???
Porque lo bajo del servidor con la SGRY a la pc no funciona!..No me abre el pdf..

25 08 2011
Daniel Panaro

Sí, se puede guardar el PDF en el servidor y luego bajarlo a la PC con la transacción CG3Y.
Si no abre el PDF es porque hubo un error al generar el archivo en el servidor.

Saludos cordiales,
Daniel.

1 12 2011
Angel

Que tal!! El tuto es excelente.. Pero cuando me crea el archivo y lo veo este esta vacio.
Lo unico que hice fue poner:
-en el exporting de la funcion lc_name mi tabla, con la que lleno mi smartforms
-a lo ultimo llame a la funcion GUI_DOWNLOAD, en el exporting en
«FILENAME» le puse la ruta de mi archivo con extension pdf
y en TABLES en DATA_TAB le puse la tabla objbin, que debe ser asi.
y me lo crea vacio…..
Que esto haciendo mal?
Ah…debuguee para saber si carga datos en la tabla y lo hace…
tambien probe el smartform aparte, es decir, en otro report, y me lo muestra con datos.

Saludos.

14 11 2012
gadiel

estoy con la misma duda y no he dado en el caso es mas el pdf me indica que esta corrupto pero que en peso tiene 0 bytes ayuda por favor

17 12 2012
Anónimo

TIENES QUE COLOCAR LA FUNCION DE ESTA MANERA
CALL FUNCTION ‘GUI_DOWNLOAD’
EXPORTING
* bin_filesize =
filename = ‘C:\prueba.pdf’
filetype = ‘BIN’
TABLES
data_tab = objbin
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6.

3 06 2013
Edward Zuleta

Hola, tengo un smartforms con una imagen (sello de la empresa) y al momento de generar el PDF me aparece una pantalla indicando «CCD: Mensaje de sistema SAP: El proceso de trabajo ha sido reanudado -> Modo cancelado». Lo extraño es que si le quito la imagen al formulario NO me genera dicho error. Gracias por el apoyo.

4 06 2013
Daniel Panaro

Hola Edward,
Ese error nunca me paso. Pero se que varios tuvieron problemas con las imágenes en los PDF.
Te sugiero que busques en google por el nro de mensaje de error.
Y que también intente hacer un debug.

Por otro lado probaste crear la imagen en otro formato y subirla a SAP? (TIFF o BMP).

Saludos,
Daniel.

11 06 2013
Edward Zuleta

Hola, no puedo debugear, porque al darme el mensaje automaticamente termina con el modo que esta abierto en la ejection, y como te comente antes, no es un error que se puede localizar muy facil, ya que, no tiene un numero especifico. Te pregunto: Haz realizado la conversion de un smartforms con imagines a PDF? Gracias por el apoyo. Saludos.

12 06 2013
Daniel Panaro

Edward,
He realizado smartforms con imágenes a PDF. Pero, por suerte, no tuve problemas.
Probaste con otra imagen cualquiera? Así podes descartar si es algo general o es para tu imagen particular. También podrías probar subiendo la imagen en otro formato.

Saludos y a disposición,
Daniel Panaro.

9 07 2013
Carolina Martín

Hola,

tengo una clase de mensaje de ventas que genera un formulario smartform y se quiere enviar por email, pero además se quiere poner en el cuerpo del email una información adicional. Podrías ayudarme como añadir esta información adicional en el cuerpo del email ? y si es un sapscript dnd usamos la función open_form??

Muchas gracias.
Carolina

9 07 2013
Daniel Panaro

Hola Carolina,
La información en el cuerpo del mail, el asunto, los destinatarios, archivos adjuntos (PDF).
Todo se maneja desde la función SO_NEW_DOCUMENT_ATT_SEND_API1

Hay mucha documentación y ejemplos si googleas un poco.

En caso que fuese un sapscript, como bien decis hay que usar la función open_form

Pasar Sapscript a PDF

Saludos,
Daniel.

Deja un comentario