jueves, 24 de octubre de 2013

Impresión de varios Smartforms en un SPOOL

El control de la salida de impresión permite que desde el código se puedan hacer varias llamadas a los smartforms, colocando todas las llamadas en un solo spool y limitando la salida de la ventana de impresión a una sola vez. A esto se le denomina Solicitud de Impresión.

Para esto, se utiliza la estructura de control del tipo de componente: SSFCTRLOP.




Esta estructura tiene distintos atributos que podremos ver en:

Pero en este caso, los parámetros que nos importan son: NO_OPEN y NO_CLOSE.


Veamos el siguiente PROCEDIMIENTO:



Llamamos al smartform enviándole el parámetro NO_CLOSE con el valor X .
Esto va a permitir que la solicitud de impresión no se cierre despues de ejecutar el Smartform permitiendo la inclusión de más. También se tiene que dejar vacío el otro parámetro: NO_OPEN.
NO_OPEN = ''.
NO_CLOSE = 'X'.

Para las demás llamadas a Smartforms que se piensan incluir (sin cerrar aun la solicitud de impresión), se tienen que enviar los parámetros:
NO_OPEN = 'X'.
NO_CLOSE = 'X'.

Y para cerrar la solicitud de impresión, lo único que tenemos que hacer es:
NO_OPEN = 'X'.
NO_CLOSE = ''.



Ahora un pequeño EJEMPLO muy básico:
Tenemos 2 smartforms con parámetros de diferentes nombres (que pueden ser iguales o distintos en el tipo, en este caso son char10 un parámetro para c/u ).

REPORT  ZZZZZZ001.

typesbegin of y_head,
       ejemplo(10type c,
       end   of y_head.

data t_head type standard table of y_head.
field-symbols <fs_head> type y_head.

dataw_output type ssfcompop,
      w_contrl type ssfctrlop.


************************************************
do times.
    insert initial line into table t_head assigning <fs_head>.
    <fs_head>-ejemplo sy-index.
enddo.

unassign <fs_head>.

loop at t_head assigning <fs_head>.

    w_contrl-no_open  'X'.
    w_contrl-no_close 'X'.

    at first.
      w_contrl-no_open  ''.
      w_contrl-no_close 'X'.
    endat.

    at last.
      w_contrl-no_open  'X'.
      w_contrl-no_close ''.
    endat.

    condense <fs_head>-ejemplo no-gaps.

    if <fs_head>-ejemplo eq '1'
    or <fs_head>-ejemplo eq '3'.

        call function '/1BCDWB/SF00000089'
            exporting
              control_parameters w_contrl
              output_options     w_output
              user_settings      ' '
              i_ejemplo          <fs_head>-ejemplo
            exceptions
              formatting_error   1
              internal_error     2
              send_error         3
              user_canceled      4
              others             5.

    elseif <fs_head>-ejemplo eq '2'
        or <fs_head>-ejemplo eq '4'.

        call function '/1BCDWB/SF00000090'
            exporting
              control_parameters w_contrl
              output_options     w_output
              user_settings      ' '
              i_ejemplo02        <fs_head>-ejemplo
            exceptions
              formatting_error   1
              internal_error     2
              send_error         3
              user_canceled      4
              others             5.

    endif.

endloop.

No hay comentarios:

Publicar un comentario