Untitled

 avatar
Coder2828
plain_text
a month ago
44 kB
6
Indexable
*&---------------------------------------------------------------------*
*& Report  ZTR_TRANSPORT_INFO
*& Transport Number / Description / TOC (Object Count) Display
*&---------------------------------------------------------------------*
REPORT ztr_transport_info.

TABLES: e070.

*----------------------------------------------------------------------*
* Types
*----------------------------------------------------------------------*
TYPES: BEGIN OF ty_output,
         trkorr  TYPE e070-trkorr,
                  as4text TYPE e07t-as4text,
                           obj_cnt TYPE i,
                                  END OF ty_output.

                                  *----------------------------------------------------------------------*
                                  * Data Declarations
                                  *----------------------------------------------------------------------*
                                  DATA: lt_output   TYPE TABLE OF ty_output,
                                        lo_alv      TYPE REF TO cl_salv_table,
                                              lo_columns  TYPE REF TO cl_salv_columns_table,
                                                    lo_column   TYPE REF TO cl_salv_column_table,
                                                          lo_functions TYPE REF TO cl_salv_functions_list,
                                                                lo_display  TYPE REF TO cl_salv_display_settings,
                                                                      lo_layout   TYPE REF TO cl_salv_layout,
                                                                            ls_layout   TYPE salv_s_layout_inf.

                                                                            *----------------------------------------------------------------------*
                                                                            * Selection Screen
                                                                            *----------------------------------------------------------------------*
                                                                            SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
                                                                              SELECT-OPTIONS: s_trkorr FOR e070-trkorr
                                                                                                OBLIGATORY
                                                                                                                  VISIBLE LENGTH 20.
                                                                                                                  SELECTION-SCREEN END OF BLOCK b1.

                                                                                                                  *----------------------------------------------------------------------*
                                                                                                                  * Initialization
                                                                                                                  *----------------------------------------------------------------------*
                                                                                                                  INITIALIZATION.
                                                                                                                    TEXT-001 = 'Transport Selection'.

                                                                                                                    *----------------------------------------------------------------------*
                                                                                                                    * Start of Selection
                                                                                                                    *----------------------------------------------------------------------*
                                                                                                                    START-OF-SELECTION.

                                                                                                                      DATA: lt_e070   TYPE TABLE OF e070,
                                                                                                                              lt_e07t   TYPE TABLE OF e07t,
                                                                                                                                      ls_output TYPE ty_output.

                                                                                                                                        " --- Fetch transport headers ---
                                                                                                                                          SELECT trkorr
                                                                                                                                              FROM e070
                                                                                                                                                  INTO TABLE @lt_e070
                                                                                                                                                      WHERE trkorr IN @s_trkorr.

                                                                                                                                                        IF lt_e070 IS INITIAL.
                                                                                                                                                            MESSAGE 'No transports found for the given selection.' TYPE 'I' DISPLAY LIKE 'W'.
                                                                                                                                                                RETURN.
                                                                                                                                                                  ENDIF.

                                                                                                                                                                    " --- Fetch transport descriptions (logon language, fallback EN) ---
                                                                                                                                                                      SELECT trkorr, as4text
                                                                                                                                                                          FROM e07t
                                                                                                                                                                              INTO TABLE @lt_e07t
                                                                                                                                                                                  WHERE trkorr IN @s_trkorr
                                                                                                                                                                                        AND langu  = @sy-langu.

                                                                                                                                                                                          IF lt_e07t IS INITIAL.
                                                                                                                                                                                              SELECT trkorr, as4text
                                                                                                                                                                                                    FROM e07t
                                                                                                                                                                                                          INTO TABLE @lt_e07t
                                                                                                                                                                                                                WHERE trkorr IN @s_trkorr
                                                                                                                                                                                                                        AND langu  = 'E'.
                                                                                                                                                                                                                          ENDIF.

                                                                                                                                                                                                                            " --- Build output table ---
                                                                                                                                                                                                                              LOOP AT lt_e070 INTO DATA(ls_e070).
                                                                                                                                                                                                                                  CLEAR ls_output.
                                                                                                                                                                                                                                      ls_output-trkorr = ls_e070-trkorr.

                                                                                                                                                                                                                                          " Transport description
                                                                                                                                                                                                                                              READ TABLE lt_e07t INTO DATA(ls_e07t)
                                                                                                                                                                                                                                                    WITH KEY trkorr = ls_e070-trkorr.
                                                                                                                                                                                                                                                        IF sy-subrc = 0.
                                                                                                                                                                                                                                                              ls_output-as4text = ls_e07t-as4text.
                                                                                                                                                                                                                                                                  ELSE.
                                                                                                                                                                                                                                                                        ls_output-as4text = '(No description found)'.
                                                                                                                                                                                                                                                                            ENDIF.

                                                                                                                                                                                                                                                                                " TOC: Count of transport objects from E071
                                                                                                                                                                                                                                                                                    SELECT COUNT(*)
                                                                                                                                                                                                                                                                                          FROM e071
                                                                                                                                                                                                                                                                                                INTO @ls_output-obj_cnt
                                                                                                                                                                                                                                                                                                      WHERE trkorr = @ls_e070-trkorr.

                                                                                                                                                                                                                                                                                                          APPEND ls_output TO lt_output.
                                                                                                                                                                                                                                                                                                            ENDLOOP.

                                                                                                                                                                                                                                                                                                              IF lt_output IS INITIAL.
                                                                                                                                                                                                                                                                                                                  MESSAGE 'No data to display.' TYPE 'I'.
                                                                                                                                                                                                                                                                                                                      RETURN.
                                                                                                                                                                                                                                                                                                                        ENDIF.

                                                                                                                                                                                                                                                                                                                          PERFORM f_display_alv.

                                                                                                                                                                                                                                                                                                                          *----------------------------------------------------------------------*
                                                                                                                                                                                                                                                                                                                          * Form: Display ALV
                                                                                                                                                                                                                                                                                                                          *----------------------------------------------------------------------*
                                                                                                                                                                                                                                                                                                                          FORM f_display_alv.

                                                                                                                                                                                                                                                                                                                            TRY.
                                                                                                                                                                                                                                                                                                                                  " --- Create ALV instance ---
                                                                                                                                                                                                                                                                                                                                        cl_salv_table=>factory(
                                                                                                                                                                                                                                                                                                                                                    IMPORTING
                                                                                                                                                                                                                                                                                                                                                              r_salv_table = lo_alv
                                                                                                                                                                                                                                                                                                                                                                      CHANGING
                                                                                                                                                                                                                                                                                                                                                                                t_table      = lt_output ).

                                                                                                                                                                                                                                                                                                                                                                                      " --- Functions (toolbar buttons) ---
                                                                                                                                                                                                                                                                                                                                                                                            lo_functions = lo_alv->get_functions( ).
                                                                                                                                                                                                                                                                                                                                                                                                  lo_functions->set_all( abap_true ).

                                                                                                                                                                                                                                                                                                                                                                                                        " --- Display settings ---
                                                                                                                                                                                                                                                                                                                                                                                                              lo_display = lo_alv->get_display_settings( ).
                                                                                                                                                                                                                                                                                                                                                                                                                    lo_display->set_list_header( 'Transport Information Overview' ).
                                                                                                                                                                                                                                                                                                                                                                                                                          lo_display->set_striped_pattern( cl_salv_display_settings=>true ).

                                                                                                                                                                                                                                                                                                                                                                                                                                " --- Layout (save/restore) ---
                                                                                                                                                                                                                                                                                                                                                                                                                                      lo_layout = lo_alv->get_layout( ).
                                                                                                                                                                                                                                                                                                                                                                                                                                            ls_layout-report = sy-repid.
                                                                                                                                                                                                                                                                                                                                                                                                                                                  lo_layout->set_key( ls_layout ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                        lo_layout->set_save_restriction( cl_salv_layout=>restrict_none ).

                                                                                                                                                                                                                                                                                                                                                                                                                                                              " --- Column settings ---
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    lo_columns = lo_alv->get_columns( ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          lo_columns->set_optimize( abap_true ).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " Transport Number column
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      lo_column ?= lo_columns->get_column( 'TRKORR' ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            lo_column->set_long_text(   'Transport Number' ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  lo_column->set_medium_text( 'Transport No.'   ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        lo_column->set_short_text(  'Tr. No.'         ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              lo_column->set_key( abap_true ).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " Description column
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          lo_column ?= lo_columns->get_column( 'AS4TEXT' ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                lo_column->set_long_text(   'Transport Description' ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      lo_column->set_medium_text( 'Description'          ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            lo_column->set_short_text(  'Desc.'                ).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  " TOC (Object Count) column
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        lo_column ?= lo_columns->get_column( 'OBJ_CNT' ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              lo_column->set_long_text(   'TOC - Total Object Count' ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    lo_column->set_medium_text( 'Object Count'            ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          lo_column->set_short_text(  'TOC'                     ).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " --- Sort by transport number ascending ---
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      DATA(lo_sorts) = lo_alv->get_sorts( ).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            lo_sorts->add_sort( columnname = 'TRKORR' ).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  " --- Render ---
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        lo_alv->display( ).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          CATCH cx_salv_msg        INTO DATA(lx_msg).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              MESSAGE lx_msg->get_text( ) TYPE 'E'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                CATCH cx_salv_not_found  INTO DATA(lx_nf).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    MESSAGE lx_nf->get_text( ) TYPE 'E'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      CATCH cx_salv_data_error INTO DATA(lx_de).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          MESSAGE lx_de->get_text( ) TYPE 'E'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ENDTRY.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ENDFORM.
                                                                                                                                                                                                                                                                                                                                        )
Editor is loading...
Leave a Comment