Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

TYPE-POOLS: slis.

TABLES: spfli, sflight.

DATA: it_spfli LIKE TABLE OF spfli WITH HEADER LINE,


it_sflight LIKE TABLE OF sflight WITH HEADER LINE.

TYPES: BEGIN OF wa_salida,


carrid LIKE spfli-carrid,
connid LIKE spfli-connid,
cant_vue TYPE i,
tot_dist LIKE spfli-distance,
um_dist LIKE spfli-distid,
tipo_vue LIKE spfli-fltime,
fecha_pri LIKE sflight-fldate,
fecha_ult LIKE sflight-fldate,
tdias_pro TYPE i,
END OF wa_salida.

DATA: it_salida TYPE TABLE OF wa_salida WITH HEADER LINE.

"Variables para el ALV.


DATA: o_grid TYPE REF TO cl_salv_table.

PARAMETERS: p_carrid LIKE spfli-carrid.


SELECT-OPTIONS s_fldate FOR sflight-fldate OBLIGATORY.

START-OF-SELECTION.

SELECT * FROM sflight INTO TABLE it_sflight


WHERE fldate IN s_fldate.

IF p_carrid IS NOT INITIAL.


DELETE it_sflight WHERE carrid NE p_carrid.
ENDIF.

IF it_sflight[] IS INITIAL.
MESSAGE 'No existen vuelos en el periodo' TYPE 'I'.
STOP.
ENDIF.

SELECT * FROM spfli


INTO TABLE it_spfli
FOR ALL ENTRIES IN it_sflight
WHERE carrid = it_sflight-carrid
AND connid = it_sflight-connid.

PERFORM armar_salida.

END-OF-SELECTION.

IF NOT it_salida[] IS INITIAL.


PERFORM create_alv.
ENDIF.

*&---------------------------------------------------------------------*
*& Form ARMAR_SALIDA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM armar_salida .

DATA: v_primer_registro TYPE c.


SORT it_sflight BY carrid connid fldate.

LOOP AT it_sflight.
CLEAR v_primer_registro.

AT NEW connid.
CLEAR it_salida.
it_salida-connid = it_sflight-connid.
it_salida-carrid = it_sflight-carrid.
v_primer_registro = 'X'.
ENDAT.
IF v_primer_registro = 'X'.
it_salida-fecha_pri = it_sflight-fldate.
ENDIF.
it_salida-fecha_ult = it_sflight-fldate.

READ TABLE it_spfli WITH KEY carrid = it_sflight-carrid


connid = it_sflight-connid.

CHECK sy-subrc EQ 0.
ADD it_spfli-fltime TO it_salida-tipo_vue.
ADD 1 TO it_salida-cant_vue.

IF it_spfli-distid NE 'KM'.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
EXPORTING
input = it_spfli-distance
no_type_check = 'X'
* ROUND_SIGN = ' '
unit_in = it_spfli-distid
unit_out = 'KM'
IMPORTING
* ADD_CONST =
* DECIMALS =
* DENOMINATOR =
* NUMERATOR =
output = it_spfli-distance
* EXCEPTIONS
* CONVERSION_NOT_FOUND = 1
* DIVISION_BY_ZERO = 2
* INPUT_INVALID = 3
* OUTPUT_INVALID = 4
* OVERFLOW = 5
* TYPE_INVALID = 6
* UNITS_MISSING = 7
* UNIT_IN_NOT_FOUND = 8
* UNIT_OUT_NOT_FOUND = 9
* OTHERS = 10
.
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.
ADD it_spfli-distance TO it_salida-tot_dist.
AT END OF connid.
it_salida-tdias_pro = it_salida-fecha_ult - it_salida-fecha_pri.
APPEND it_salida.
ENDAT.
ENDLOOP.

ENDFORM. " ARMAR_SALIDA


*&---------------------------------------------------------------------*
*& Form CREATE_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_alv .
DATA: lo_functions TYPE REF TO cl_salv_functions_list.

IF o_grid IS INITIAL.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = o_grid
CHANGING
t_table = it_salida[].
CATCH cx_salv_msg.
RETURN.
ENDTRY.
ENDIF.

" Funciones
lo_functions = o_grid->get_functions( ).
"Habilitar Todas
lo_functions->set_all( abap_true ).

DATA: lo_columns TYPE REF TO cl_salv_columns.

"Referencio las Columnas del ALV en un objeto aparte dedicado a


" manejar estas columnas.
lo_columns = o_grid->get_columns( ).
" optimizo el tamaño de las columnas de acuerdo al valor contenido.
lo_columns->set_optimize( ).

"Seteo el nombre de los 2 campos que no están en el DDIC


DATA: lo_column TYPE REF TO cl_Salv_column_table.

TRY.
lo_column ?= lo_columns->get_column( 'CANT_VUE' ).
CATCH cx_salv_not_found.
RETURN.
ENDTRY.
CHECK sy-subrc EQ 0.
lo_column->set_long_text( 'Cantidad de vuelos').
lo_column->set_short_text( 'Cant. vue').
lo_column->set_medium_text( 'Cant. de vuelos').

TRY.
lo_column ?= lo_columns->get_column( 'TDIAS_PRO' ).
CATCH cx_salv_not_found.
RETURN.
ENDTRY.
CHECK sy-subrc EQ 0.
lo_column->set_long_text( 'Total días de producción').
lo_column->set_short_text( 'Tot. dias').
lo_column->set_medium_text( 'Total días prod.').
"Muestro el alv.
o_grid->display( ).
ENDFORM. " CREATE_ALV

You might also like