Leccion 8/9: El SPOOL: La cola de impresión en SAP
TRANSACCIÓN SP01
Esta transacción estándar es conocida como "El Spool" administremos todas las solicitudes de impresión que se generen en el sistema SAP.
El Sistema SAP distingue 2 partes en un trabajo de impresión :
%u25CF Orden de Spool: Es un documento para el que se ha seleccionado una función de impresión. Sin embargo, aún no ha salido por una impresora u otro dispositivo. Los datos de salida del documento se almacenan temporalmente hasta que se crea una petición de salida, es decir, hasta que se envía a un dispositivos de salida en particular.
%u25CF Petición de salida: Desde el punto de vista del sistema SAP, una petición de salida contiene los parámetros de impresión de una orden de spool. Pueden existir múltiples peticiones de salida para una única orden de spool. Cada una representa una instancia de la salida de la misma orden de spool, y cada una de estas peticiones de salida pueden tener diferentes atributos, como la impresora de destino o el número de copias.
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, creándose 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.
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.