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.
* 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
*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
Este comentario ha sido eliminado por un administrador del blog.
ResponderEliminar