miércoles, 23 de noviembre de 2011

Varios Smartforms en un unico spool


En esta oportunidad les mostrare la solución a un caso bien común, que es la impresión de documentos en un único spool, es este caso se debe imprimir un certificado smartforms en función de un programa que lee la base de datos lógica PNP.
Para ello utilizo las siguientes variables globales:
*Globales
data: g_docu type i.
data: g_fm_name type  rs38l_fnam.
data: g_control type ssfctrlop,
      g_output  type ssfcompop.
data: g_output_options     type  ssfcompop,
      g_control_parameters type  ssfctrlop.

Dentro del loop de la base de datos lógica, una vez llenado los datos requeridos por el smartform llamo al form que genera el documento, esto también podría ser dentro de un loop a una tabla.
*----------------------------------------------------------------------*
* Open BDL open DB PNP
*----------------------------------------------------------------------*
get pernr.
... llenado las tablas internas llamo al form
 perform genera_salida using 'G'."creo el spool
...
Una vez finalizado el loop de la base de datos lógica, ejecuto el form para cerrar el spool
...
*------------------------.----------------------------------------------*
*END-OF-SELECTION. after Close DB PNP
*----------------------------------------------------------------------*
end-of-selection.
  
perform genera_salida using 'C'."cierro el spool
...

El form que utilizo tiene la siguiente lógica
form genera_salida using p_accion type char1.
  data:   r_document_output_info type ssfcrespd,
          r_job_output_info type ssfcrescl,
          r_job_output_options type ssfcresop.
*
  if ( g_docu eq 0 ) ." primera ejecucion
* Identificacion de SmartForm
    call function 'SSF_FUNCTION_MODULE_NAME'
      exporting
        formname           = 'ZHR_RE_RV_01'
      importing
        fm_name            = g_fm_name
      exceptions
        no_form            = 1
        no_function_module = 2
        others             = 3.
* creo el Spool para la impresion
    call function 'SSF_OPEN'
      exporting
        output_options     = g_output_options
        control_parameters = g_control_parameters
      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.
    endif.
*
    g_control_parameters-no_open  = 'X'.
    g_control_parameters-no_close = 'X'.
  endif.
* Imprimo el Documento
  if ( p_accion eq 'G' ).
* Ejecucion de Smartform.
    g_docu = g_docu  + 1.
    call function g_fm_name
      exporting
        control_parameters   = g_control_parameters
        output_options       = g_output_options
*          user_settings        = ''
        deta_tt01            = resu_tt_01
        deta_tt02            = resu_tt_02
        deta_tt03            = resu_tt_cl
      importing                                       
        document_output_info = r_document_output_info 
        job_output_info      = r_job_output_info      
        job_output_options   = r_job_output_options   
      tables
        persona              = it_perso
        detalle01            = resumen_01
        detalle02            = resumen_02
        detalle03            = resumen_cl
      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.
    endif.
  endif.
* Cierro el Spool
  if ( p_accion eq 'C' ).
    call function 'SSF_CLOSE'
*     IMPORTING
*       JOB_OUTPUT_INFO        =
     exceptions
       formatting_error       = 1
       internal_error         = 2
       send_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.
  endif.
endform.                    "genera_salida

 como en todos los casos, si existe una forma mas facil me cuentan.
desarrollado en version SAP ECC 6.0

1 comentario: