El sistema utiliza una orden SPOOL para almacenar los datos de impresión temporalmente, y para acceder a ellos mientras esté disponible la orden de spool. Se puede acceder a un documento directamente, ya que el sistema asigna automáticamente un número de 10 dígitos que lo identifica.
Al diferenciar entre la petición de salida y orden de spool, el sistema proporciona un medio para almacenar los datos temporalmente, y gestionar su salida de forma independiente. Para administrar las salidas de datos, tanto órdenes de spool como órdenes de salida, usaremos la transacción SP01.
La sentencia NEW-PAGE PRINT permite generar un trabajo de impresión, creandose una nueva orden de spool, y usando la petición de salida configurada previamente mediante la estructura PRI_PARAMS.
DATA: print_parameters TYPE pri_params.
DATA: valid_flag TYPE c LENGTH 1.
DATA: vl_cadena TYPE syplist,
vl_num(2).
* Asignamos los parametros de impresión
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING
expiration = '1' " borrado en un día
immediately = space " no imprimir de forma inmediata
in_parameters = print_parameters " datos por defecto
new_list_id = 'X' " asigna un nuevo identificador de spool
no_dialog = 'X' " sin popup de impresión
IMPORTING
out_parameters = print_parameters
valid = valid_flag
EXCEPTIONS
OTHERS = 4.
CLEAR vl_cadena.
MOVE p_cont TO vl_num.
CONCATENATE 'SPOOL_' vl_num INTO vl_cadena.
* Cero impresiones con nombre SPOOL_01, ... (Ver en trans. SP01)
print_parameters-prcop = 0.
print_parameters-plist = vl_cadena.
Esto nos permitirá almacenar la orden de spool temporalmente, sin que salga por ningún dispositivo, ni genere un error de impresión.
* Generamos la spool del ALV sin imprimirla
NEW-PAGE PRINT ON PARAMETERS print_parameters NO DIALOG.
gr_table->display( ).
NEW-PAGE PRINT OFF.
* Almacenamos los datos de la spool generada
MOVE sy-spono TO wa_spools-id.
MOVE it_intervalos-inicio TO wa_spools-begda.
MOVE it_intervalos-fin TO wa_spools-endda.
APPEND wa_spools TO it_spools.
Si no indicamos en el campo print_parameters-prcop, que no deseamos ninguna impresión, al hacer la llamada a la sentencia NEW-PAGE PRINT ON, o NEW-PAGE PRINT ON NO DIALOG, tomará los parámetros de impresión por defecto, y se realizará una petición de salida automática.
En cambio, si le indicamos que no queremos ninguna copia se almacenará solamente la orden de spool, y podremos rescatar los datos almacenados a través de la función RSPO_DISPLAY_SPOOLJOB.
Ejemplo de la utilidad de este artículo: Ejemplo Práctico
En caso de que estemos trabajando con SMARTFORMS, también podremos generar órdenes de spool en lugar de visualizaciones por pantalla, y podremos evitar su impresión, de modo que almacenaremos distintos lanzamientos de documentos, y posteriormente gestionaremos su salida por impresora u otro dispositivo. Para ello deberemos parametrizar los siguientes atributos de salida y control:
DATA: output_options TYPE ssfcompop,
control_options TYPE ssfctrlop.
DATA: funcion TYPE rs38l_fnam.
* Parámetros para lanzar el smartform generando una spool
control_options-no_dialog = 'X'. " Quitar ventana de diálogo
output_options-tdnewid = 'X'. " Crear nueva spool
output_options-tdimmed = ' '. " Salida inmediata
output_options-tddest = 'LOCL'. " Impresora destino
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZSMARTFORM_NOMBRE'
variant = ' '
IMPORTING
fm_name = funcion.
CALL FUNCTION funcion
EXPORTING
control_parameters = control_options
output_options = output_options
user_settings = ' '
* IMPORTING
* DOCUMENT_OUTPUT_INFO =
* JOB_OUTPUT_INFO =
* JOB_OUTPUT_OPTIONS =
TABLES
tdatos = it_datos.
Posteriormente se puede enviar a impresión cualquier spool almacenada en el sistema, mediante la función RSPO_OUTPUT_SPOOL_REQUEST.