Skip to content
Skip to content
Menu
SAP ABAP DWIMAN
  • About
SAP ABAP DWIMAN

ALV using lcl_alv_grid

By Setyoko Yudho Baskoro on April 27, 2023July 11, 2024

Berikut contoh program report ALV dengan menggunakan lcl_alv_grid

FUNCTION zcm_get_fcat_from_itab.
*"----------------------------------------------------------------------
""Local Interface:
*"  EXPORTING
*"     VALUE(ET_FCAT) TYPE  LVC_T_FCAT
*"  TABLES
*"      PT_DATA
*"----------------------------------------------------------------------
  CONSTANTS:
    lc_x       TYPE c LENGTH 01 VALUE 'X',
    lc_c500    TYPE c LENGTH 04 VALUE 'C500',
    lc_zicon_l TYPE c LENGTH 30 VALUE 'Status',
    lc_zicon_s TYPE c LENGTH 30 VALUE 'St.',
    lc_yicon_l TYPE c LENGTH 30 VALUE 'Detail',
    lc_yicon_s TYPE c LENGTH 30 VALUE 'De.',
    lc_zitem   TYPE c LENGTH 30 VALUE 'Item.'.
  FIELD-SYMBOLS:
    <wa> TYPE any,
    <cp> TYPE any.
  DATA: lv_sref      TYPE REF TO data,
        lc_stru_ref  TYPE REF TO cl_abap_structdescr,
        lc_clss_ref  TYPE REF TO cl_abap_classdescr,
        lc_elem_ref  TYPE REF TO cl_abap_elemdescr,
        lc_tab_ref   TYPE REF TO cl_abap_tabledescr,
        lt_comp      TYPE cl_abap_structdescr=>component_table,
        lt_comp_     LIKE lt_comp,
        ls_comp      LIKE LINE OF lt_comp,
        lv_size      TYPE i,
        lv_index     TYPE i,
        lv_hlpid     TYPE string,
        lv_sname     TYPE string,
        ls_fcat      TYPE lvc_s_fcat,
        ls_dfies     TYPE dfies,
        lt_tab       TYPE TABLE OF string,
        lv_refstruct TYPE swcontdef-refstruct,
        lv_reffield  TYPE swcontdef-reffield,
        ls_dd04v     TYPE dd04v,
        lv_len       TYPE i,
        lv_append    TYPE c,
        lv_txtab     TYPE tabname,
        lv_txfid     TYPE fieldname.
--------------------------------------------------------------------
  REFRESH et_fcat.
  lc_tab_ref  ?= cl_abap_typedescr=>describe_by_data( pt_data[] ).
  lc_stru_ref ?= lc_tab_ref->get_table_line_type( ).
*-- Check Reference
  lc_clss_ref ?= cl_abap_typedescr=>describe_by_object_ref( lc_stru_ref ).
  IF lc_clss_ref->get_relative_name( ) <> 'CL_ABAP_STRUCTDESCR'.
    RAISE not_a_structure.
  ENDIF.
*-- Recursive Search for Include.
  lt_comp_ = lc_stru_ref->get_components( ).
* Table Type ##
  LOOP AT lt_comp_ INTO ls_comp.
    lc_clss_ref ?= cl_abap_typedescr=>describe_by_object_ref( ls_comp-type ).
    IF lc_clss_ref->get_relative_name( ) = 'CL_ABAP_TABLEDESCR'.
      DELETE lt_comp_.
    ENDIF.
  ENDLOOP.
  PERFORM cm_get_elements TABLES lt_comp_ lt_comp.
  lv_size  = lines( lt_comp ).
  lv_sname = lc_stru_ref->absolute_name."get_relative_name( ).
*-- get memebers
  CREATE DATA lv_sref TYPE (lv_sname).
  ASSIGN lv_sref->* TO <wa>.
  DO lv_size TIMES.
    lv_index = lv_index + 1.
    ASSIGN COMPONENT lv_index OF STRUCTURE <wa> TO <cp>.
    DESCRIBE FIELD <cp> HELP-ID lv_hlpid.
    " XXX-VVV, VVV, SPACE
    SPLIT lv_hlpid AT '-' INTO TABLE lt_tab.
    lv_len = lines( lt_tab ).
    READ TABLE lt_comp INTO ls_comp INDEX lv_index.
    IF lv_len EQ 2.     "struct + field
      READ TABLE lt_tab INTO lv_refstruct INDEX 1.
      READ TABLE lt_tab INTO lv_reffield  INDEX 2.
      CALL FUNCTION 'SWP_DDIC_FIELD_INFO_GET'
        EXPORTING
          refstruct        = lv_refstruct
          reffield         = lv_reffield
          language         = sy-langu
        IMPORTING
          field_attributes = ls_dfies.
      IF sy-subrc EQ 0.
        MOVE-CORRESPONDING ls_dfies TO ls_fcat.
        CASE ls_dfies-datatype.
          WHEN 'CURR' OR 'QUAN'.
            READ TABLE lt_comp WITH KEY name = ls_dfies-reffield
                 TRANSPORTING NO FIELDS.
            IF sy-subrc = 0.
              CASE ls_dfies-datatype.
                WHEN 'CURR' .
                  ls_fcat-cfieldname = ls_dfies-reffield.
                WHEN 'QUAN'.
                  ls_fcat-qfieldname = ls_dfies-reffield.
              ENDCASE.
            ENDIF.
        ENDCASE.
        ls_fcat-ref_table = lv_refstruct.
        ls_fcat-ref_field = lv_reffield.
        ls_fcat-tabname   = space.
        IF ls_fcat-reptext IS INITIAL.
          ls_fcat-reptext = ls_dfies-fieldtext.
        ENDIF.
        IF ls_fcat-scrtext_l IS INITIAL.
          ls_fcat-scrtext_l = ls_dfies-fieldtext.
        ENDIF.
        IF ls_fcat-scrtext_m IS INITIAL.
          ls_fcat-scrtext_m = ls_dfies-fieldtext.
        ENDIF.
        IF ls_fcat-scrtext_s IS INITIAL.
          ls_fcat-scrtext_s = ls_dfies-fieldtext.
        ENDIF.
        ls_fcat-fieldname = ls_comp-name.
***        IF ls_fcat-checktable IS NOT INITIAL.
***          ls_fcat-emphasize = lc_c500.
***        ENDIF.
        lv_append = lc_x.
        CALL FUNCTION 'DDIF_DTEL_GET'
          EXPORTING
            name     = ls_dfies-rollname
            langu    = sy-langu
          IMPORTING
            dd04v_wa = ls_dd04v.
      ENDIF.
    ELSEIF lv_len = 1.   "DataElement
      READ TABLE lt_tab INTO lv_reffield INDEX 1.
      CALL FUNCTION 'DDIF_DTEL_GET'
        EXPORTING
          name     = lv_reffield
          langu    = sy-langu
        IMPORTING
          dd04v_wa = ls_dd04v.
      IF sy-subrc EQ 0.
        MOVE-CORRESPONDING ls_dd04v TO ls_fcat.
        ls_fcat-ref_table = space.
        ls_fcat-tabname   = space.
        "[Add]
        IF ls_fcat-reptext IS INITIAL.
          ls_fcat-reptext = ls_dfies-fieldtext.
        ENDIF.
        IF ls_fcat-scrtext_l IS INITIAL.
          ls_fcat-scrtext_l = ls_dfies-fieldtext.
        ENDIF.
        IF ls_fcat-scrtext_m IS INITIAL.
          ls_fcat-scrtext_m = ls_dfies-fieldtext.
        ENDIF.
        IF ls_fcat-scrtext_s IS INITIAL.
          ls_fcat-scrtext_s = ls_dfies-fieldtext.
        ENDIF.
        IF lv_reffield <> ls_comp-name.
          ls_fcat-ref_field = lv_reffield.
        ENDIF.
        ls_fcat-fieldname = ls_comp-name.
        APPEND ls_fcat TO et_fcat.
      ELSE.
        RAISE no_ddic.
      ENDIF.
    ELSEIF lv_len EQ 0.
      lc_elem_ref ?= ls_comp-type.
      ls_fcat-fieldname = ls_comp-name.
      ls_fcat-inttype   = lc_elem_ref->type_kind.
      ls_fcat-intlen    = lc_elem_ref->length.
      ls_fcat-decimals  = ls_fcat-decimals_o = lc_elem_ref->decimals.
      ls_fcat-outputlen = lc_elem_ref->output_length.
      lv_append = lc_x.
    ENDIF.
    IF lv_append EQ lc_x.
      IF ls_dd04v-entitytab IS NOT INITIAL.
        CALL FUNCTION 'DDUT_TEXTTABLE_GET'
          EXPORTING
            tabname    = ls_dd04v-entitytab
          IMPORTING
            texttable  = lv_txtab
            checkfield = lv_txfid.
        ls_fcat-parameter0 = lv_txtab.
        ls_fcat-parameter1 = lv_txfid.
      ENDIF.
      APPEND ls_fcat TO et_fcat.
    ENDIF.
    CLEAR: ls_fcat, ls_comp, lv_reffield, lv_refstruct,
           ls_dd04v, ls_dfies, lc_elem_ref, lt_tab[],
           lv_append, lv_txtab, lv_txfid.
  ENDDO.
--------------------------------------------------------------------
  LOOP AT et_fcat INTO ls_fcat.
    CASE ls_fcat-fieldname.
      WHEN 'MANDT'.
        ls_fcat-tech = lc_x.
      WHEN 'ZICON'.
        ls_fcat-key = lc_x.
        ls_fcat-hotspot = lc_x.
        ls_fcat-icon = lc_x.
        ls_fcat-reptext = ls_fcat-scrtext_l  = lc_zicon_l.
        ls_fcat-scrtext_m = ls_fcat-scrtext_s  = lc_zicon_s.
      WHEN 'YICON'.
        ls_fcat-key = lc_x.
        ls_fcat-hotspot = lc_x.
        ls_fcat-icon = lc_x.
        ls_fcat-reptext = ls_fcat-scrtext_l  = lc_yicon_l.
        ls_fcat-scrtext_m = ls_fcat-scrtext_s  = lc_yicon_s.
      WHEN 'ZITEM'.
        ls_fcat-icon = lc_x.
        ls_fcat-coltext = lc_zitem.
        ls_fcat-hotspot = lc_x.
      WHEN 'ERNAM' OR 'AENAM'.
        ls_fcat-no_out = lc_x.
      WHEN 'ERDAT' OR 'ERZET' OR 'AEDAT' OR 'AEZET'.
        ls_fcat-no_zero = lc_x.
        ls_fcat-no_out = lc_x.
      WHEN 'DEL'.
        ls_fcat-checkbox = lc_x.
        ls_fcat-no_out = lc_x.
      WHEN 'MSGTA' OR 'LINE_STATUS' OR 'LINE_INDEX' OR 'LINE_FILT'
        OR 'LINE_CHECK' OR 'LINE_DEL'.
        ls_fcat-tech = lc_x.
    ENDCASE.
    MODIFY et_fcat FROM ls_fcat.
  ENDLOOP.
ENDFUNCTION.
************************************************************************
* Modules/Sub Module :                                                 *
* ---------------------------------------------------------------------*
* T_CODE       :                                                       *
* CREATOR      :                                                       *
* FUNCTIONAL   :                                                       *
* CREATE DATE  :                                                       *
* TYPE         :                                                       *
* Description  :                                                       *
************************************************************************
*                      Change history                                  *
* ------------  ----------  ------------  -----------------------------*
*   Number         Date         Name      Description                  *
* ------------  ----------  ------------  -----------------------------*
*                                                                      *
************************************************************************

REPORT ztemplate_alv MESSAGE-ID zcmm01 NO STANDARD PAGE HEADING.

*--------------------------------------------------------------------*
* INCLUDE                                                            *
*--------------------------------------------------------------------*
INCLUDE ztemplate_alv_c01. " Class
INCLUDE ztemplate_alv_top. " Global Declarations
INCLUDE ztemplate_alv_s01. " Selection-screen
INCLUDE ztemplate_alv_f01. " Subroutines
INCLUDE ztemplate_alv_f02. " ALV
INCLUDE ztemplate_alv_o01. " PBO
INCLUDE ztemplate_alv_i01. " PAI


*--------------------------------------------------------------------*
* INITIALIZATION                                                     *
*--------------------------------------------------------------------*
INITIALIZATION.
  PERFORM f_initialization.


*--------------------------------------------------------------------*
* START-OF-SELECTION                                                 *
*--------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM f_input_validation.
  PERFORM f_get_data.
  PERFORM f_build_data.


*--------------------------------------------------------------------*
* END-OF-SELECTION                                                   *
*--------------------------------------------------------------------*
END-OF-SELECTION.
  PERFORM f_show_data.
*---------------------------------------------------------------------*
*  Include           ZTEMPLATE_C01
*---------------------------------------------------------------------*

****************************************************************
* LOCAL CLASS: LCL_AVL_GRID
****************************************************************
CLASS lcl_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid.
  PUBLIC SECTION.
    METHODS:
      lcl_optimize_all_cols,
      lcl_set_delta_table
        IMPORTING
          modified    TYPE c DEFAULT 'X'
        CHANGING
          delta_table TYPE lvc_t_moce.
ENDCLASS.                    " lcl_alv_grid DEFINITION
****************************************************************
CLASS lcl_alv_grid IMPLEMENTATION.
*===============================================================
  METHOD lcl_optimize_all_cols.
    CALL METHOD me->optimize_all_cols
      EXPORTING
        include_header = 1.
  ENDMETHOD.                    "redefine_optimize_all_cols
*===============================================================
  METHOD lcl_set_delta_table.
    CHECK delta_table IS NOT INITIAL.
    CALL METHOD me->set_delta_table
      EXPORTING
        modified    = modified
      CHANGING
        delta_table = delta_table
      EXCEPTIONS
        error       = 1
        OTHERS      = 2.
    CALL METHOD me->check_changed_data.
  ENDMETHOD.                    "redefine_optimize_all_cols
*===============================================================
ENDCLASS.                    " lcl_alv_grid IMPLEMENTATION

****************************************************************
* LOCAL CLASS: LCL_EVENT_RECEIVER
****************************************************************
CLASS lcl_event_receiver DEFINITION.
*  PUBLIC SECTION.
*    DATA: mv_grid TYPE c LENGTH 30.

*    dg_dyndoc_id = e_dyndoc_id.
*    METHODS:
*      constructor
*        IMPORTING e_grid_text TYPE char30,
*      handle_double_click
*                    FOR EVENT double_click OF cl_gui_alv_grid
*        IMPORTING e_row e_column es_row_no,
*      handle_hotspot_click
*                    FOR EVENT hotspot_click OF cl_gui_alv_grid
*        IMPORTING e_row_id e_column_id es_row_no,
*      handle_toolbar
*                    FOR EVENT toolbar OF cl_gui_alv_grid
*        IMPORTING e_object e_interactive,
*      handle_menu_button
*                    FOR EVENT menu_button OF cl_gui_alv_grid
*        IMPORTING e_object e_ucomm,
*      handle_data_changed
*                    FOR EVENT data_changed OF cl_gui_alv_grid
*        IMPORTING er_data_changed,
*      handle_user_command
*                    FOR EVENT user_command OF cl_gui_alv_grid
*        IMPORTING e_ucomm,
*      handle_data_changed_finished        " DATA_CHANGED_FINISHED
*                    FOR EVENT data_changed_finished OF cl_gui_alv_grid
*        IMPORTING e_modified et_good_cells,
*
*      handle_top_of_page                         " TOP OF PAGE
*                    FOR EVENT top_of_page OF cl_gui_alv_grid
*        IMPORTING e_dyndoc_id.
*
*      handle_close
*                    FOR EVENT close OF cl_gui_dialogbox_container
*        IMPORTING sender.
*
*
*
  PRIVATE SECTION.

    DATA: dialogbox_status TYPE c.  "'X': does exist, SPACE: does not ex.
ENDCLASS.                    "lcl_event_receiver DEFINITION

****************************************************************
CLASS lcl_event_receiver IMPLEMENTATION.
**===============================================================
*  METHOD constructor.
*    CALL METHOD super->constructor.
*    mv_grid = e_grid_text.
*  ENDMETHOD.                    "construcctor
**===============================================================
*  METHOD handle_double_click.
**    PERFORM f_double_click USING mv_grid e_row e_column.
*  ENDMETHOD.                    "handle_double_click
*===============================================================
*  METHOD handle_hotspot_click.
*    PERFORM f_hotspot_click USING mv_grid e_row_id e_column_id CHANGING dialogbox_status.
*  ENDMETHOD.                    "handle_hotspot_click
**===============================================================
*  METHOD handle_toolbar.
*
*  ENDMETHOD.                    "handle_toolbar
**===============================================================
*  METHOD handle_data_changed.
**    PERFORM f_data_changed USING mv_grid er_data_changed.
*  ENDMETHOD.
**===============================================================
*  METHOD handle_menu_button.
**    PERFORM f_menu_button USING mv_grid e_ucomm
**                        CHANGING e_object.
*  ENDMETHOD.                    "handle_toolbar
**===============================================================
*  METHOD handle_user_command.
**    PERFORM f_user_command USING mv_grid e_ucomm.
*  ENDMETHOD.                    "handle_user_command
**===============================================================
*  METHOD handle_data_changed_finished.
**    PERFORM f_after_handle_data_changed USING mv_grid e_modified et_good_cells.
*  ENDMETHOD.                    "handle_user_command
*===============================================================
*  METHOD handle_top_of_page.                   "implementation
** Top-of-page event
*
*    PERFORM f_event_top_of_page USING e_dyndoc_id.
*  ENDMETHOD.                            "top_of_page

**--------------------------------------------------------*
*  METHOD handle_close.
** ยง6.Handle the CLOSE-button of the dialogbox
*
** set dialogbox invisible
** (the dialogbox is destroyed outomatically when the user
** switches to another dynpro).
*    CALL METHOD sender->set_visible
*      EXPORTING
*        visible = space.
** In this example closing the dialogbox leads
** to make it invisible. It is also conceivable to destroy it
** and recreate it if the user doubleclicks a line again.
** Displaying a great amount of data has a greater impact on performance.
*  ENDMETHOD.
ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
*  Include           ZTEMPLATE_TOP
*---------------------------------------------------------------------*

*---------------------------------------------------------------------*
* TABLES                                                              *
*---------------------------------------------------------------------*
*TABLES:

*---------------------------------------------------------------------*
* TYPES
*---------------------------------------------------------------------*
TYPES: BEGIN OF gty_s_grid,
*         name      TYPE c LENGTH 4,
*         salv      TYPE REF TO cl_salv_table,
*         cust         TYPE REF TO cl_gui_custom_container,
*         dock         TYPE REF TO cl_gui_docking_container,
         spli         TYPE REF TO cl_gui_splitter_container,
*         cont         TYPE REF TO cl_gui_container,
         grid         TYPE REF TO lcl_alv_grid,
         html         TYPE REF TO cl_gui_html_viewer,
         event        TYPE REF TO lcl_event_receiver,
*         dialogbox TYPE REF TO cl_gui_dialogbox_container,
*         tabix     TYPE i,
*         edit      TYPE i, "0 = Display, 1 = Edit
*         refresh      TYPE c,
*         save      TYPE c, "'X' = Global, 'U' = User specific, 'A' = All
*         view      TYPE c, "Space = Text, 'X' = Fieldname,
*         vari      TYPE disvariant,
         layo         TYPE lvc_s_layo,
         fcat         TYPE lvc_t_fcat,
         sort         TYPE lvc_t_sort,
         tool         TYPE ui_functions,
*         styl      TYPE lvc_t_styl,
*         modi      TYPE lvc_t_modi,
*         filt         TYPE lvc_t_filt,
*         f4        TYPE lvc_t_f4,
*         dral      TYPE lvc_t_dral,
         dyndoc       TYPE REF TO cl_dd_document,
         dyndoc_table TYPE REF TO cl_dd_table_element,
         dyndoc_left  TYPE REF TO cl_dd_area,
         dyndoc_right TYPE REF TO cl_dd_area,
         par_html     TYPE REF TO cl_gui_container,
         par_grid     TYPE REF TO cl_gui_container,
       END OF gty_s_grid.

TYPES: gty_0100 TYPE sflight, "CHANGE THE TYPE
       gtt_0100 TYPE TABLE OF gty_0100.

*---------------------------------------------------------------------*
*  DATA                                                               *
*---------------------------------------------------------------------*
DATA: gt_0100 TYPE gtt_0100.

DATA: gs_grid_0100   TYPE gty_s_grid,
      go_alv_details TYPE REF TO cl_salv_table,
      ok_code        LIKE sy-ucomm.

*---------------------------------------------------------------------*
*  CONSTANTS                                                          *
*---------------------------------------------------------------------*
CONSTANTS:
  gc_grid_0100 TYPE c LENGTH 30 VALUE 'GRID_0100'.

CONSTANTS:
  gc_true  TYPE sap_bool VALUE 'X',
  gc_x     TYPE sap_bool VALUE 'X',
  gc_false TYPE sap_bool VALUE ''.
*---------------------------------------------------------------------*
*  Include           ZTEMPLATE_S01
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* SELECTION SCREEN                                                    *
*---------------------------------------------------------------------*

*SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE TEXT-001.
*SELECT-OPTIONS: so_bukrs FOR bkpf-bukrs.
*SELECTION-SCREEN END OF BLOCK b0.
*
*AT SELECTION-SCREEN OUTPUT.
*  PERFORM f_screen_output.


**---------------------------------------------------------------------*
**      Form  F_SCREEN_OUTPUT
**---------------------------------------------------------------------*
**       text
**----------------------------------------------------------------------*
*FORM f_screen_output .
*  LOOP AT SCREEN.
*    CASE screen-name.
*      WHEN 'SO_BUKRS-LOW'.
*        screen-required = 2.
*    ENDCASE.
*    MODIFY SCREEN.
*  ENDLOOP.
*ENDFORM.

*---------------------------------------------------------------------*
*      Form  F_INPUT_VALIDATION
*---------------------------------------------------------------------*
*       Input Validation
*----------------------------------------------------------------------*
FORM f_input_validation .
*  " mandatory check
*  IF so_bukrs IS INITIAL.
*    MESSAGE s035 DISPLAY LIKE 'E'. " Please fill all required fields.
*    LEAVE LIST-PROCESSING.
*  ENDIF.
ENDFORM.
*----------------------------------------------------------------------*
***INCLUDE ZTEMPLATE_F01.
*----------------------------------------------------------------------*


*---------------------------------------------------------------------*
*      Form  F_INITIALIZATION
*---------------------------------------------------------------------*
FORM f_initialization .
  sy-title = 'TEMPLATE TITLE'.
ENDFORM.


*---------------------------------------------------------------------*
*      Form  F_GET_DATA
*---------------------------------------------------------------------*
FORM f_get_data .

ENDFORM.


*---------------------------------------------------------------------*
*      Form  F_BUILD_DATA
*---------------------------------------------------------------------*
FORM f_build_data .

ENDFORM.
*---------------------------------------------------------------------*
*  Include           ZTEMPLATE_F02
*---------------------------------------------------------------------*


*---------------------------------------------------------------------*
*      Form  F_COUNT_DATA
*---------------------------------------------------------------------*
*      Count itab lines and give return message
*---------------------------------------------------------------------*
FORM f_count_data  TABLES   pt_data  CHANGING pc_count.
  DATA: lv_char TYPE c LENGTH 10.
*--------------------------------------------------------------------*
  CLEAR: pc_count.
  IF pt_data[] IS INITIAL.
    MESSAGE s000(zcmm01) DISPLAY LIKE 'E'.
  ELSE.
    DESCRIBE TABLE pt_data[] LINES pc_count.
    WRITE pc_count TO lv_char LEFT-JUSTIFIED.
    MESSAGE s001(zcmm01) WITH lv_char.
  ENDIF.
ENDFORM.

*---------------------------------------------------------------------*
*      Form  F_SET_GRID_0100
*---------------------------------------------------------------------*
*      Grid ALV Main Subroutine
*---------------------------------------------------------------------*
FORM f_set_grid_0100  TABLES pt_data
                       USING p_grid
                      CHANGING pcs_grid TYPE gty_s_grid.

  DATA: lv_string TYPE string.
  DATA: ls_print TYPE slis_print_alv.

* Create ALV Grid
  IF pcs_grid-grid IS INITIAL.
    PERFORM f_init_grid USING p_grid CHANGING pcs_grid.
    PERFORM f_set_layo_0100 CHANGING pcs_grid.
    PERFORM f_set_fcat TABLES pt_data[] CHANGING pcs_grid.
    PERFORM f_set_sort_0100 CHANGING pcs_grid.
    PERFORM f_set_tool_0100 CHANGING pcs_grid.
    PERFORM f_set_even_0100 USING p_grid CHANGING pcs_grid.
    PERFORM f_display_grid USING pcs_grid pt_data[].
  ENDIF.
ENDFORM.

*---------------------------------------------------------------------*
*      Form  F_SHOW_DATA
*---------------------------------------------------------------------*
FORM f_show_data .

  DATA: lv_count TYPE i.

*  PERFORM f_count_data TABLES gt_0100 CHANGING lv_count.

  IF sy-batch IS INITIAL. "AND lv_count > 0.
    CALL SCREEN 0100.
  ENDIF.
ENDFORM.


*---------------------------------------------------------------------*
*      Form  F_INIT_GRID
*---------------------------------------------------------------------*
*       Initializing Grid ALV
*----------------------------------------------------------------------*
FORM f_init_grid USING p_grid CHANGING pcs_grid TYPE gty_s_grid.
  DATA: lv_grid_name TYPE string.

  lv_grid_name = p_grid.

  CREATE OBJECT pcs_grid-grid
    EXPORTING
      i_parent = cl_gui_container=>screen0
      i_name   = lv_grid_name.

ENDFORM.

FORM f_set_layo_0100 CHANGING pcs_grid TYPE gty_s_grid.
  pcs_grid-layo-zebra      = 'X'.
  pcs_grid-layo-cwidth_opt = 'X'.
  pcs_grid-layo-col_opt    = 'X'.
  pcs_grid-layo-sel_mode   = 'A'.
ENDFORM.


*---------------------------------------------------------------------*
*      Form  f_set_fcat_0100
*---------------------------------------------------------------------*
*       Set FieldCatalog
*----------------------------------------------------------------------*
FORM f_set_fcat TABLES pt_data CHANGING pcs_grid TYPE gty_s_grid.

*--------------------------------------------------------------------*
  REFRESH: pcs_grid-fcat.
*--------------------------------------------------------------------*
  PERFORM f_get_fcat TABLES pt_data USING pcs_grid-fcat.
*--------------------------------------------------------------------*

  PERFORM f_set_fcat_att CHANGING pcs_grid.

ENDFORM.

*---------------------------------------------------------------------*
*     Form  F_GET_FCAT
*---------------------------------------------------------------------*
*      Get fieldcat from itab attribute
*---------------------------------------------------------------------*
FORM f_get_fcat  TABLES pt_data
                  USING pt_fcat TYPE lvc_t_fcat.
  CALL FUNCTION 'ZCM_GET_FCAT_FROM_ITAB'
    IMPORTING
      et_fcat = pt_fcat
    TABLES
      pt_data = pt_data[].
ENDFORM.                    " f_get_fcat


*---------------------------------------------------------------------*
*      Form  F_SET_FCAT_ATT
*---------------------------------------------------------------------*
*       Set fieldcat atttibutes
*----------------------------------------------------------------------*
FORM f_set_fcat_att  CHANGING pcs_grid TYPE gty_s_grid.

  DEFINE __set_text.
    ls_fcat-coltext = &1.
    ls_fcat-reptext = &1.
  END-OF-DEFINITION.

  DATA: ls_fcat  TYPE lvc_s_fcat.
  LOOP AT pcs_grid-fcat INTO ls_fcat.
*    CASE ls_fcat-fieldname.
*      WHEN 'BUKRS'.
*        __set_text 'Comp'.
*    ENDCASE.
    MODIFY pcs_grid-fcat FROM ls_fcat.
  ENDLOOP.

ENDFORM.


*---------------------------------------------------------------------*
*      Form  f_set_sort_0100
*---------------------------------------------------------------------*
*       Set Sort
*----------------------------------------------------------------------*
FORM f_set_sort_0100 CHANGING pcs_grid TYPE gty_s_grid.
*  PERFORM f_set_sort USING pcs_grid-fcat pcs_grid-sort:
*    'X' 'BUKRS' 'X' ' ',
*    '' 'CUSTOMER' 'X' ' ',
ENDFORM.


*---------------------------------------------------------------------*
*      Form  F_SET_SORT
*---------------------------------------------------------------------*
FORM f_set_sort USING pt_fcat TYPE lvc_t_fcat
                       pt_sort TYPE lvc_t_sort
                       p_start p_field p_up p_subtot.
  STATICS: lv_spos TYPE lvc_s_sort-spos,
           lt_fcat TYPE lvc_t_fcat.
  DATA   : ls_sort TYPE lvc_s_sort,
           ls_fcat TYPE lvc_s_fcat.
*--------------------------------------------------------------------*
  IF p_start EQ 'X'.
    lv_spos = 1.
    CLEAR lt_fcat.
    lt_fcat = pt_fcat[].
    SORT lt_fcat BY fieldname.
  ENDIF.
  READ TABLE lt_fcat INTO ls_fcat
    WITH KEY fieldname = p_field BINARY SEARCH.
  CHECK sy-subrc EQ 0.
*--------------------------------------------------------------------*
  IF p_start EQ 'X'.
    lv_spos = 1.
  ELSE.
    lv_spos = lv_spos + 1.
  ENDIF.
*--------------------------------------------------------------------*
  ls_sort-spos      = lv_spos.
  ls_sort-fieldname = p_field.
  ls_sort-up        = p_up.
  ls_sort-subtot    = p_subtot.
  APPEND ls_sort TO pt_sort.
ENDFORM.                    " F_SET_SORT


*---------------------------------------------------------------------*
*      Form  f_set_tool_0100
*---------------------------------------------------------------------*
*       Excluding Toolbar
*----------------------------------------------------------------------*
FORM f_set_tool_0100 CHANGING pcs_grid TYPE gty_s_grid.
*  APPEND: cl_gui_alv_grid=>mc_mb_view         TO pcs_grid-tool.
*          cl_gui_alv_grid=>mc_fc_info         TO pcs_grid-tool.
ENDFORM.                    "f_set_tool_0100


*---------------------------------------------------------------------*
*      Form  f_set_even_0100
*---------------------------------------------------------------------*
*       Set Event Info.
*----------------------------------------------------------------------*
FORM f_set_even_0100 USING p_grid
                CHANGING pcs_grid TYPE gty_s_grid.
  CHECK pcs_grid-event IS INITIAL.
*
*  CREATE OBJECT pcs_grid-event
*    EXPORTING
*      e_grid_text = p_grid.
*
*  SET HANDLER:
*    pcs_grid-event->handle_hotspot_click  FOR pcs_grid-grid.
*    pcs_grid-event->handle_top_of_page    FOR pcs_grid-grid.

ENDFORM.


*---------------------------------------------------------------------*
*      Form  F_DISPLAY_GRID
*---------------------------------------------------------------------*
*       Display ALV Grid
*----------------------------------------------------------------------*
FORM f_display_grid  USING ps_grid TYPE gty_s_grid
                           pt_data.

  DATA gs_variant TYPE disvariant.
  gs_variant-report = sy-repid.

  CALL METHOD ps_grid-grid->set_table_for_first_display
    EXPORTING
      is_layout            = ps_grid-layo
      is_variant           = gs_variant
      i_save               = 'A' "'X' = Global, 'U' = User specific, 'A' = All
      it_toolbar_excluding = ps_grid-tool
    CHANGING
      it_outtab            = pt_data
      it_fieldcatalog      = ps_grid-fcat
      it_sort              = ps_grid-sort.
*      it_filter            = ps_grid-filt.

ENDFORM.
*---------------------------------------------------------------------*
* Include           ZTEMPLATE_O01
*---------------------------------------------------------------------*

*---------------------------------------------------------------------*
*      Module  STATUS_0100  OUTPUT
*---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  DATA: lv_title TYPE string.

  lv_title = sy-title. "  custom your ALV title here

  SET PF-STATUS 'ST_0100'.
  SET TITLEBAR 'TI_0100' WITH lv_title.
ENDMODULE.


*---------------------------------------------------------------------*
*      Module  INIT_0100  OUTPUT
*---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE init_0100 OUTPUT.
  PERFORM f_set_grid_0100 TABLES gt_0100 USING gc_grid_0100
          CHANGING gs_grid_0100.
ENDMODULE.
*---------------------------------------------------------------------*
*  Include           ZTEMPLATE_I01
*---------------------------------------------------------------------*

*---------------------------------------------------------------------*
*      Module  EXIT_COMMAND  INPUT
*---------------------------------------------------------------------*
MODULE exit_command INPUT.
  LEAVE TO SCREEN 0.
ENDMODULE.


*---------------------------------------------------------------------*
*      Module  USER_COMMAND_0100  INPUT
*---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

ENDMODULE.

Post navigation

Upload Excel File to Internal Table ABAP
Read EXCEL File with Multi Sheet

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • SAP ABAP – Generate Fiori URL
  • SAP ABAP – Workflow Agents CDS
  • SAP ABAP – Workflow Level with Table Function
  • SAP ABAP – Download ALV to Excel with Total and Subtotal
  • SAP ABAP – BDC Template

Recent Comments

  1. SAP ABAP – Simple Interface FTP Inbound (SAP Consume File From FTP) – SAP ABAP DWIMAN on SAP ABAP – String Encode & Decode BASE64
  2. Upload file – SAP ABAP DWIMAN on F4 Search Help File

Archives

  • May 2025
  • August 2024
  • June 2024
  • May 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • May 2023
  • April 2023

Categories

  • Uncategorized
©2026 SAP ABAP DWIMAN | WordPress Theme by SuperbThemes.com