Está en la página 1de 7

Cuando nosotros ejecutamos un smartform permitiendole al usuario que eliga entre

imprimir o visualizar el documento y tras ello realizar una actualizacin con lo impreso
(por ejemplo registrar en una tabla un flag que me indique que el documento ha sido
impreso) Cmo podemos reconocer que el usuario ha indicado imprimir y no
visualizar?. Para ello emplearemos el parmetro de importacin JOB_OUTPUT_OPTIONS,
el cual nos indicara la accin realizada por el usuario.
Para entender mejor lo antes mencionado se coloca el siguiente ejemplo:
Se busca que tras imprimir un smartform, en una tabla Z se actualice un campo que me
permita reconocer que el documento ya fue impreso. Para ello colocamos nuestro
cdigo de nuestro smartform, pero la parte que nos interesa es la inclusin del
parmetro de importacin JOB_OUTPUT_OPTIONS como se muestra a continuacin:
*Primero declaramos las variables empleadas:
DATA: ls_ctrlparameter TYPE ssfctrlop,
ls_outoptions

TYPE ssfcompop,

G_IMPRESION TYPE TABLE OF SSFCRESOP WITH HEADER LINE,


g_bet2 TYPE SSFCRESC,
ls_fmname

TYPE rs38l_fnam.

*Seguido lanzamos la ejecucin de nuestro Smartform


CALL FUNCTION SSF_FUNCTION_MODULE_NAME
EXPORTING
formname

= Z_NOMBRE

IMPORTING
fm_name

= ls_fmname

EXCEPTIONS
no_form

=1

no_function_module = 2
OTHERS

= 3.

CALL FUNCTION ls_fmname


EXPORTING
control_parameters = ls_ctrlparameter
output_options

= ls_outoptions

user_settings

bukrs = p_bukrs Parmetro de seleccin


IMPORTING
JOB_OUTPUT_INFO = g_bet2
JOB_OUTPUT_OPTIONS = G_IMPRESION
EXCEPTIONS
formatting_error = 1
internal_error

=2

send_error

=3

user_canceled
OTHERS

=4
= 5.

*Tras la ejecucin del smartform empleamos la lgica para saber si


*se visualizo o imprimio y guardarlo en una tabla.
IF sy-subrc <> 0.
MESSAGE No se puede imprimir el formulario TYPE E.
ELSE.
IF G_IMPRESION-TDPREVIEW EQ SPACE OR G_BET2-OUTPUTDONE EQ X.
LOOP AT GTD_ACTUALIZA INTO WA_ACTUALIZA.
WA_ACTUALIZA-STATUS = P.
UPDATE ZTABLA FROM WA_ACTUALIZA.
ENDLOOP.
ENDIF.
ENDIF.
Al ejecutar el cdigo al usuario le aparecer la siguiente ventana:

En esta ventana el usuario puede elegir el imprimir el documento o solo visualizarlo, en


el primer caso haremos que seleccione la visualizacin tal como se muestra:

Para reconocer lo obtenido tras la visualizacin se hizo un debug despus de la


ejecucin de la funcin que hemos colocado al inicio y verificamos el campo
G_IMPRESION, en donde notaremos que el valor TDPREVIEW tiene una X, con lo cual
podemos saber que la ejecucin antes realizada solo fue para previsualizar.

Ahora realizamos un caso mandando a imprimir el documento por medio de una orden
spool, e igual que el caso anterior hacemos un debug tras la ejecucin del smartform y
comprobamos los valores que se han importado en G_IMPRESION, en este caso
notaremos que el campo TDPREVIEW se encuentra vacio y que en cambio el campo
TDNEWID si presenta una X indicandonos que se ha creado una orden spool.

Con lo antes visto y sumado a la lgica necesaria segn el requerimiento esperado, se


realiza la codificacin teniendo en cuenta el valor de TDPREVIEW, si tiene una X quiere
decir que el documento solo fue previsualizado, caso contrario este en blanco nos indica
que se ha lanzado a impresin.

OJO:
No obstante el usuario podra colocar visualizacin pero imprimir dentro

Tras apretar el botn de impresin nos devuelve la orden spool creada:

Para reconocer si ha hecho una impresin desde la visualizacin emplearemos la tabla


G_BET2, en la cual se alojan los datos de la orden SPOOL, notando que el campo
OUTPUTDONE tiene X

Y si quisieramos obtener el nmero de spool, lo veremos en la estructura contenida en


SPOOLIDS

También podría gustarte