En este post os voy a hablar de un programa que he descrubierto para generar listados de forma rápida en SAP. Podeis consultarlo en el SCN de SAP si quereis.
Voy a comentarlo con un ejemplo y finalmente dejaré el código de la transacción. Esta herramienta permite crear informes en 2 minutos. La pantalla de selección, los textos de selección y el código se genera automáticamente.
Lo primero de todo es descargarse el código de la transacción
ZQ2R.
Una vez lo hayamos descargado y creado ejecutaremos ZQ2R. Pulsamos el botón QuickViewer
Como ejemplo vamos a crear la típica query en la que consultaremos los vuelos desde uns ciudad.
Después de introducir el nombre de la consulta (FlightsFrom_NY) pulsamos el botón
Crear.
En este ejemplo vamos a utilizar la fuente de datos "Table Join", con la que podremos enlazar varias tablas.
Pulse el botón insertar tabla para agregar las siguientes tablas: SPFLI (horarios de vuelos), SFLIGHT (Vuelos) y SCARR (aerolíneas).
Una vez seleccionadas las tabla volvemos hacia atrás (F3).
Seleccionamos los campos que se mostrarán en el listado, y los campos que formarán parte de la pantalla de selección.
Podemos seleccionar la forma de ordenación de las columnas.
Finalmente grabamos la query y damos un nombre al report.
Tras realizar estos pasos volvemos a la pantalla inicial de la transacción ZQ2R y copiamos el código que hemos asignado al report (AQ01SYSTQV000001FLIGHTSFROM_NY) y Ejecutamos.
Podemos definir diferentes características de los parámetros de selección.
Incluso marcar valores por defecto si es necesario
Podemos definir los Textos de selección para los diferentes campos.
Finalmente presionamos volver y ya tenemos generado el programa que ejecutará el report.
Si lo ejecutamos desde la transacción
SE38 veremos que el programa se ha generado correctamente.
Y para mi lo mas interensate, el código del programa generado está muy bien estructurado. A partir de este código podemos meter al report mucha mas funcionalidad y nos habremos ahorrado un bien tiempo de programación. Os dejo el código de ejemplo.
*&-----------------------------------------------------------------*
*& Report ZQ2R_FLIGHTSFROM_NY
*&-----------------------------------------------------------------*
REPORT zq2r_flightsfrom_ny.
*&-----------------------------------------------------------------*
*& Include ZQ2R_FLIGHTSFROM_NY_TOP
*&-----------------------------------------------------------------*
CONSTANTS:
c_cityfr TYPE spfli-cityfrom VALUE 'NEW YORK'.
TABLES:
spfli,
sflight.
TYPES:
tyr_carrid TYPE RANGE OF spfli-carrid,
tyr_fldate TYPE RANGE OF sflight-fldate,
BEGIN OF ty_data,
cityfrom TYPE spfli-cityfrom,
cityto TYPE spfli-cityto,
carrname TYPE scarr-carrname,
fldate TYPE sflight-fldate,
END OF ty_data,
tyt_data TYPE STANDARD TABLE OF ty_data.
DATA t_data TYPE STANDARD TABLE OF ty_data.
*&-----------------------------------------------------------------*
*& Include ZQ2R_FLIGHTSFROM_NY_SEL
*&-----------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME.
PARAMETER p_cityfr TYPE spfli-cityfrom DEFAULT c_cityfr.
SELECT-OPTIONS s_carrid FOR spfli-carrid MEMORY ID car.
SELECT-OPTIONS s_fldate FOR sflight-fldate MEMORY ID day OBLIGATORY.
SELECTION-SCREEN END OF BLOCK a.
*&-----------------------------------------------------------------*
*& Include ZQ2R_FLIGHTSFROM_NY_F01
*&-----------------------------------------------------------------*
*&-----------------------------------------------------------------*
*& Form SET_SELECTION_FIELD_DISABLED
*&-----------------------------------------------------------------*
FORM set_selection_field_disabled USING p_spname TYPE aqs_spname.
DATA lv_spname_length TYPE i.
lv_spname_length = strlen( p_spname ).
LOOP AT SCREEN.
IF screen-name(lv_spname_length) = p_spname.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM. " SET_SELECTION_FIELD_DISABLED
*&-----------------------------------------------------------------*
*& Form GET_DATA
*&-----------------------------------------------------------------*
FORM get_data USING p_cityfr TYPE spfli-cityfrom
s_carrid TYPE tyr_carrid
s_fldate TYPE tyr_fldate
CHANGING t_data TYPE tyt_data.
SELECT spfli~cityfrom
spfli~cityto
scarr~carrname
sflight~fldate
FROM ( spfli
INNER JOIN sflight
ON sflight~carrid = spfli~carrid
AND sflight~connid = spfli~connid
INNER JOIN scarr
ON scarr~carrid = sflight~carrid )
INTO TABLE t_data
WHERE spfli~cityfrom = p_cityfr
AND spfli~carrid IN s_carrid
AND sflight~fldate IN s_fldate .
ENDFORM. " GET_DATA
*&-----------------------------------------------------------------*
*& Form ALV
*&-----------------------------------------------------------------*
FORM alv USING t_data TYPE tyt_data.
DATA:
o_sorts TYPE REF TO cl_salv_sorts,
o_columns TYPE REF TO cl_salv_columns,
o_display TYPE REF TO cl_salv_display_settings,
o_functions TYPE REF TO cl_salv_functions_list,
o_layout TYPE REF TO cl_salv_layout,
ls_key TYPE salv_s_layout_key,
o_alv TYPE REF TO cl_salv_table.
* Gel ALV object
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = o_alv
CHANGING
t_table = t_data ).
CATCH cx_salv_msg.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDTRY.
* ALV Sort
o_sorts = o_alv->get_sorts( ).
TRY.
o_sorts->add_sort( 'CITYFROM' ).
o_sorts->add_sort( 'CITYTO' ).
o_sorts->add_sort( 'CARRNAME' ).
CALL METHOD o_sorts->add_sort
EXPORTING
columnname = 'FLDATE'
sequence = if_salv_c_sort=>sort_down.
CATCH cx_salv_not_found
cx_salv_existing
cx_salv_data_error.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDTRY.
* Get columns
o_columns = o_alv->get_columns( ).
* Set the column optimization
o_columns->set_optimize( ).
o_display = o_alv->get_display_settings( ).
o_display->set_striped_pattern( abap_true ).
* Generic ALV functions
o_functions = o_alv->get_functions( ).
o_functions->set_all( ).
* Layout
o_layout = o_alv->get_layout( ).
ls_key-report = sy-repid.
o_layout->set_key( ls_key ).
o_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
o_alv->display( ).
ENDFORM. " ALV
AT SELECTION-SCREEN OUTPUT.
PERFORM set_selection_field_disabled: USING 'P_CITYFR'.
START-OF-SELECTION.
PERFORM get_data USING p_cityfr
s_carrid[]
s_fldate[]
CHANGING t_data.
END-OF-SELECTION.
PERFORM alv USING t_data.