domingo, 22 de junio de 2014

ADOBE FORMS. Programa de impresión

Es este post vamos a destallar como podemos imprimir un formulario ADOBE en SAP desde código ABAP.

En el anterior post sobre Adobe Forms vimos como diseñarlo, sería conveniente revisar primero este post antes de continuar.

Para poder invocar al formulario desde un programa impresor ABAP se deberán seguir los siguientes pasos:

1) Llenar las tablas, estructuras, etc. que se pasarán cómo parámetros al formulario. En este ejemplo se llenaron la tabla pt_reserv y la estructura pa_header.

2) Abrir el formulario para impresión:

Invocar la siguiente función con los parámetros de impresión, entre ellos: indicar si se desea suprimir el diálogo pop-up de impresión (como en este ejemplo: l_outputparams-nodialog = ‘X’ ) e indicar que el archivo que retorne sea un PDF con el parámetro l_outputparams-getpdf = ‘X’.
DATA: l_outputparams TYPE sfpoutputparams.

* Output parameters and open spool job
l_outputparams-nodialog = ‘X’.
l_outputparams-getpdf = ‘X’.

* Open the form for printing

CALL FUNCTION 'FP_JOB_OPEN'
CHANGING

    ie_outputparams = l_outputparams
EXCEPTIONS
    cancel = 1
    usage_error = 2
    system_error = 3
    internal_error = 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.
ENDIF.

3) Obtener el nombre dinámico del formulario:

CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
EXPORTING
    i_name = 'ZFORM_VH'
IMPORTING
    e_funcname = p_func_name.

4) Llamar al formulario con el nombre obtenido, pasándole los parámetros con los datos ya cargados:

DATA: l_docparams TYPE sfpdocparams,
            l_formoutput TYPE fpformoutput.

l_docparams-langu = 'E'.
l_docparams-fillable = c_on.
 
CALL FUNCTION p_func_name
EXPORTING
   /1bcdwb/docparams = l_docparams
    i_gt_reserv = pt_reserv
    ga_header = pa_header

IMPORTING
    /1bcdwb/formoutput = l_formoutput
EXCEPTIONS
    usage_error = 1
    system_error = 2
    internal_error = 3
    OTHERS = 4.


5) Cerrar el procesamiento del formulario:

CALL FUNCTION 'FP_JOB_CLOSE'
EXCEPTIONS
usage_error = 1
system_error = 2
internal_error = 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.
 

No hay comentarios:

Publicar un comentario