{"id":28,"date":"2023-04-27T16:10:03","date_gmt":"2023-04-27T16:10:03","guid":{"rendered":"https:\/\/sapabap.dwimansolution.com\/?p=28"},"modified":"2024-07-11T07:21:33","modified_gmt":"2024-07-11T07:21:33","slug":"alv-using-lcl_alv_grid","status":"publish","type":"post","link":"https:\/\/sapabap.dwimansolution.com\/index.php\/2023\/04\/27\/alv-using-lcl_alv_grid\/","title":{"rendered":"ALV using lcl_alv_grid"},"content":{"rendered":"\n<p>Berikut contoh program report ALV dengan menggunakan lcl_alv_grid<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FUNCTION zcm_get_fcat_from_itab.\n*\"----------------------------------------------------------------------\n\"\"Local Interface:\n*\"  EXPORTING\n*\"     VALUE(ET_FCAT) TYPE  LVC_T_FCAT\n*\"  TABLES\n*\"      PT_DATA\n*\"----------------------------------------------------------------------\n  CONSTANTS:\n    lc_x       TYPE c LENGTH 01 VALUE 'X',\n    lc_c500    TYPE c LENGTH 04 VALUE 'C500',\n    lc_zicon_l TYPE c LENGTH 30 VALUE 'Status',\n    lc_zicon_s TYPE c LENGTH 30 VALUE 'St.',\n    lc_yicon_l TYPE c LENGTH 30 VALUE 'Detail',\n    lc_yicon_s TYPE c LENGTH 30 VALUE 'De.',\n    lc_zitem   TYPE c LENGTH 30 VALUE 'Item.'.\n  FIELD-SYMBOLS:\n    &lt;wa> TYPE any,\n    &lt;cp> TYPE any.\n  DATA: lv_sref      TYPE REF TO data,\n        lc_stru_ref  TYPE REF TO cl_abap_structdescr,\n        lc_clss_ref  TYPE REF TO cl_abap_classdescr,\n        lc_elem_ref  TYPE REF TO cl_abap_elemdescr,\n        lc_tab_ref   TYPE REF TO cl_abap_tabledescr,\n        lt_comp      TYPE cl_abap_structdescr=>component_table,\n        lt_comp_     LIKE lt_comp,\n        ls_comp      LIKE LINE OF lt_comp,\n        lv_size      TYPE i,\n        lv_index     TYPE i,\n        lv_hlpid     TYPE string,\n        lv_sname     TYPE string,\n        ls_fcat      TYPE lvc_s_fcat,\n        ls_dfies     TYPE dfies,\n        lt_tab       TYPE TABLE OF string,\n        lv_refstruct TYPE swcontdef-refstruct,\n        lv_reffield  TYPE swcontdef-reffield,\n        ls_dd04v     TYPE dd04v,\n        lv_len       TYPE i,\n        lv_append    TYPE c,\n        lv_txtab     TYPE tabname,\n        lv_txfid     TYPE fieldname.\n--------------------------------------------------------------------\n  REFRESH et_fcat.\n  lc_tab_ref  ?= cl_abap_typedescr=>describe_by_data( pt_data&#91;] ).\n  lc_stru_ref ?= lc_tab_ref->get_table_line_type( ).\n*-- Check Reference\n  lc_clss_ref ?= cl_abap_typedescr=>describe_by_object_ref( lc_stru_ref ).\n  IF lc_clss_ref->get_relative_name( ) &lt;> 'CL_ABAP_STRUCTDESCR'.\n    RAISE not_a_structure.\n  ENDIF.\n*-- Recursive Search for Include.\n  lt_comp_ = lc_stru_ref->get_components( ).\n* Table Type ##\n  LOOP AT lt_comp_ INTO ls_comp.\n    lc_clss_ref ?= cl_abap_typedescr=>describe_by_object_ref( ls_comp-type ).\n    IF lc_clss_ref->get_relative_name( ) = 'CL_ABAP_TABLEDESCR'.\n      DELETE lt_comp_.\n    ENDIF.\n  ENDLOOP.\n  PERFORM cm_get_elements TABLES lt_comp_ lt_comp.\n  lv_size  = lines( lt_comp ).\n  lv_sname = lc_stru_ref->absolute_name.\"get_relative_name( ).\n*-- get memebers\n  CREATE DATA lv_sref TYPE (lv_sname).\n  ASSIGN lv_sref->* TO &lt;wa>.\n  DO lv_size TIMES.\n    lv_index = lv_index + 1.\n    ASSIGN COMPONENT lv_index OF STRUCTURE &lt;wa> TO &lt;cp>.\n    DESCRIBE FIELD &lt;cp> HELP-ID lv_hlpid.\n    \" XXX-VVV, VVV, SPACE\n    SPLIT lv_hlpid AT '-' INTO TABLE lt_tab.\n    lv_len = lines( lt_tab ).\n    READ TABLE lt_comp INTO ls_comp INDEX lv_index.\n    IF lv_len EQ 2.     \"struct + field\n      READ TABLE lt_tab INTO lv_refstruct INDEX 1.\n      READ TABLE lt_tab INTO lv_reffield  INDEX 2.\n      CALL FUNCTION 'SWP_DDIC_FIELD_INFO_GET'\n        EXPORTING\n          refstruct        = lv_refstruct\n          reffield         = lv_reffield\n          language         = sy-langu\n        IMPORTING\n          field_attributes = ls_dfies.\n      IF sy-subrc EQ 0.\n        MOVE-CORRESPONDING ls_dfies TO ls_fcat.\n        CASE ls_dfies-datatype.\n          WHEN 'CURR' OR 'QUAN'.\n            READ TABLE lt_comp WITH KEY name = ls_dfies-reffield\n                 TRANSPORTING NO FIELDS.\n            IF sy-subrc = 0.\n              CASE ls_dfies-datatype.\n                WHEN 'CURR' .\n                  ls_fcat-cfieldname = ls_dfies-reffield.\n                WHEN 'QUAN'.\n                  ls_fcat-qfieldname = ls_dfies-reffield.\n              ENDCASE.\n            ENDIF.\n        ENDCASE.\n        ls_fcat-ref_table = lv_refstruct.\n        ls_fcat-ref_field = lv_reffield.\n        ls_fcat-tabname   = space.\n        IF ls_fcat-reptext IS INITIAL.\n          ls_fcat-reptext = ls_dfies-fieldtext.\n        ENDIF.\n        IF ls_fcat-scrtext_l IS INITIAL.\n          ls_fcat-scrtext_l = ls_dfies-fieldtext.\n        ENDIF.\n        IF ls_fcat-scrtext_m IS INITIAL.\n          ls_fcat-scrtext_m = ls_dfies-fieldtext.\n        ENDIF.\n        IF ls_fcat-scrtext_s IS INITIAL.\n          ls_fcat-scrtext_s = ls_dfies-fieldtext.\n        ENDIF.\n        ls_fcat-fieldname = ls_comp-name.\n***        IF ls_fcat-checktable IS NOT INITIAL.\n***          ls_fcat-emphasize = lc_c500.\n***        ENDIF.\n        lv_append = lc_x.\n        CALL FUNCTION 'DDIF_DTEL_GET'\n          EXPORTING\n            name     = ls_dfies-rollname\n            langu    = sy-langu\n          IMPORTING\n            dd04v_wa = ls_dd04v.\n      ENDIF.\n    ELSEIF lv_len = 1.   \"DataElement\n      READ TABLE lt_tab INTO lv_reffield INDEX 1.\n      CALL FUNCTION 'DDIF_DTEL_GET'\n        EXPORTING\n          name     = lv_reffield\n          langu    = sy-langu\n        IMPORTING\n          dd04v_wa = ls_dd04v.\n      IF sy-subrc EQ 0.\n        MOVE-CORRESPONDING ls_dd04v TO ls_fcat.\n        ls_fcat-ref_table = space.\n        ls_fcat-tabname   = space.\n        \"&#91;Add]\n        IF ls_fcat-reptext IS INITIAL.\n          ls_fcat-reptext = ls_dfies-fieldtext.\n        ENDIF.\n        IF ls_fcat-scrtext_l IS INITIAL.\n          ls_fcat-scrtext_l = ls_dfies-fieldtext.\n        ENDIF.\n        IF ls_fcat-scrtext_m IS INITIAL.\n          ls_fcat-scrtext_m = ls_dfies-fieldtext.\n        ENDIF.\n        IF ls_fcat-scrtext_s IS INITIAL.\n          ls_fcat-scrtext_s = ls_dfies-fieldtext.\n        ENDIF.\n        IF lv_reffield &lt;> ls_comp-name.\n          ls_fcat-ref_field = lv_reffield.\n        ENDIF.\n        ls_fcat-fieldname = ls_comp-name.\n        APPEND ls_fcat TO et_fcat.\n      ELSE.\n        RAISE no_ddic.\n      ENDIF.\n    ELSEIF lv_len EQ 0.\n      lc_elem_ref ?= ls_comp-type.\n      ls_fcat-fieldname = ls_comp-name.\n      ls_fcat-inttype   = lc_elem_ref->type_kind.\n      ls_fcat-intlen    = lc_elem_ref->length.\n      ls_fcat-decimals  = ls_fcat-decimals_o = lc_elem_ref->decimals.\n      ls_fcat-outputlen = lc_elem_ref->output_length.\n      lv_append = lc_x.\n    ENDIF.\n    IF lv_append EQ lc_x.\n      IF ls_dd04v-entitytab IS NOT INITIAL.\n        CALL FUNCTION 'DDUT_TEXTTABLE_GET'\n          EXPORTING\n            tabname    = ls_dd04v-entitytab\n          IMPORTING\n            texttable  = lv_txtab\n            checkfield = lv_txfid.\n        ls_fcat-parameter0 = lv_txtab.\n        ls_fcat-parameter1 = lv_txfid.\n      ENDIF.\n      APPEND ls_fcat TO et_fcat.\n    ENDIF.\n    CLEAR: ls_fcat, ls_comp, lv_reffield, lv_refstruct,\n           ls_dd04v, ls_dfies, lc_elem_ref, lt_tab&#91;],\n           lv_append, lv_txtab, lv_txfid.\n  ENDDO.\n--------------------------------------------------------------------\n  LOOP AT et_fcat INTO ls_fcat.\n    CASE ls_fcat-fieldname.\n      WHEN 'MANDT'.\n        ls_fcat-tech = lc_x.\n      WHEN 'ZICON'.\n        ls_fcat-key = lc_x.\n        ls_fcat-hotspot = lc_x.\n        ls_fcat-icon = lc_x.\n        ls_fcat-reptext = ls_fcat-scrtext_l  = lc_zicon_l.\n        ls_fcat-scrtext_m = ls_fcat-scrtext_s  = lc_zicon_s.\n      WHEN 'YICON'.\n        ls_fcat-key = lc_x.\n        ls_fcat-hotspot = lc_x.\n        ls_fcat-icon = lc_x.\n        ls_fcat-reptext = ls_fcat-scrtext_l  = lc_yicon_l.\n        ls_fcat-scrtext_m = ls_fcat-scrtext_s  = lc_yicon_s.\n      WHEN 'ZITEM'.\n        ls_fcat-icon = lc_x.\n        ls_fcat-coltext = lc_zitem.\n        ls_fcat-hotspot = lc_x.\n      WHEN 'ERNAM' OR 'AENAM'.\n        ls_fcat-no_out = lc_x.\n      WHEN 'ERDAT' OR 'ERZET' OR 'AEDAT' OR 'AEZET'.\n        ls_fcat-no_zero = lc_x.\n        ls_fcat-no_out = lc_x.\n      WHEN 'DEL'.\n        ls_fcat-checkbox = lc_x.\n        ls_fcat-no_out = lc_x.\n      WHEN 'MSGTA' OR 'LINE_STATUS' OR 'LINE_INDEX' OR 'LINE_FILT'\n        OR 'LINE_CHECK' OR 'LINE_DEL'.\n        ls_fcat-tech = lc_x.\n    ENDCASE.\n    MODIFY et_fcat FROM ls_fcat.\n  ENDLOOP.\nENDFUNCTION.\n<\/code><\/pre>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text\/html&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;no&quot;,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}\">************************************************************************\n* Modules\/Sub Module :                                                 *\n* ---------------------------------------------------------------------*\n* T_CODE       :                                                       *\n* CREATOR      :                                                       *\n* FUNCTIONAL   :                                                       *\n* CREATE DATE  :                                                       *\n* TYPE         :                                                       *\n* Description  :                                                       *\n************************************************************************\n*                      Change history                                  *\n* ------------  ----------  ------------  -----------------------------*\n*   Number         Date         Name      Description                  *\n* ------------  ----------  ------------  -----------------------------*\n*                                                                      *\n************************************************************************\n\nREPORT ztemplate_alv MESSAGE-ID zcmm01 NO STANDARD PAGE HEADING.\n\n*--------------------------------------------------------------------*\n* INCLUDE                                                            *\n*--------------------------------------------------------------------*\nINCLUDE ztemplate_alv_c01. &quot; Class\nINCLUDE ztemplate_alv_top. &quot; Global Declarations\nINCLUDE ztemplate_alv_s01. &quot; Selection-screen\nINCLUDE ztemplate_alv_f01. &quot; Subroutines\nINCLUDE ztemplate_alv_f02. &quot; ALV\nINCLUDE ztemplate_alv_o01. &quot; PBO\nINCLUDE ztemplate_alv_i01. &quot; PAI\n\n\n*--------------------------------------------------------------------*\n* INITIALIZATION                                                     *\n*--------------------------------------------------------------------*\nINITIALIZATION.\n  PERFORM f_initialization.\n\n\n*--------------------------------------------------------------------*\n* START-OF-SELECTION                                                 *\n*--------------------------------------------------------------------*\nSTART-OF-SELECTION.\n  PERFORM f_input_validation.\n  PERFORM f_get_data.\n  PERFORM f_build_data.\n\n\n*--------------------------------------------------------------------*\n* END-OF-SELECTION                                                   *\n*--------------------------------------------------------------------*\nEND-OF-SELECTION.\n  PERFORM f_show_data.<\/pre><\/div>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text\/html&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;no&quot;,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}\">*---------------------------------------------------------------------*\n*  Include           ZTEMPLATE_C01\n*---------------------------------------------------------------------*\n\n****************************************************************\n* LOCAL CLASS: LCL_AVL_GRID\n****************************************************************\nCLASS lcl_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid.\n  PUBLIC SECTION.\n    METHODS:\n      lcl_optimize_all_cols,\n      lcl_set_delta_table\n        IMPORTING\n          modified    TYPE c DEFAULT 'X'\n        CHANGING\n          delta_table TYPE lvc_t_moce.\nENDCLASS.                    &quot; lcl_alv_grid DEFINITION\n****************************************************************\nCLASS lcl_alv_grid IMPLEMENTATION.\n*===============================================================\n  METHOD lcl_optimize_all_cols.\n    CALL METHOD me-&gt;optimize_all_cols\n      EXPORTING\n        include_header = 1.\n  ENDMETHOD.                    &quot;redefine_optimize_all_cols\n*===============================================================\n  METHOD lcl_set_delta_table.\n    CHECK delta_table IS NOT INITIAL.\n    CALL METHOD me-&gt;set_delta_table\n      EXPORTING\n        modified    = modified\n      CHANGING\n        delta_table = delta_table\n      EXCEPTIONS\n        error       = 1\n        OTHERS      = 2.\n    CALL METHOD me-&gt;check_changed_data.\n  ENDMETHOD.                    &quot;redefine_optimize_all_cols\n*===============================================================\nENDCLASS.                    &quot; lcl_alv_grid IMPLEMENTATION\n\n****************************************************************\n* LOCAL CLASS: LCL_EVENT_RECEIVER\n****************************************************************\nCLASS lcl_event_receiver DEFINITION.\n*  PUBLIC SECTION.\n*    DATA: mv_grid TYPE c LENGTH 30.\n\n*    dg_dyndoc_id = e_dyndoc_id.\n*    METHODS:\n*      constructor\n*        IMPORTING e_grid_text TYPE char30,\n*      handle_double_click\n*                    FOR EVENT double_click OF cl_gui_alv_grid\n*        IMPORTING e_row e_column es_row_no,\n*      handle_hotspot_click\n*                    FOR EVENT hotspot_click OF cl_gui_alv_grid\n*        IMPORTING e_row_id e_column_id es_row_no,\n*      handle_toolbar\n*                    FOR EVENT toolbar OF cl_gui_alv_grid\n*        IMPORTING e_object e_interactive,\n*      handle_menu_button\n*                    FOR EVENT menu_button OF cl_gui_alv_grid\n*        IMPORTING e_object e_ucomm,\n*      handle_data_changed\n*                    FOR EVENT data_changed OF cl_gui_alv_grid\n*        IMPORTING er_data_changed,\n*      handle_user_command\n*                    FOR EVENT user_command OF cl_gui_alv_grid\n*        IMPORTING e_ucomm,\n*      handle_data_changed_finished        &quot; DATA_CHANGED_FINISHED\n*                    FOR EVENT data_changed_finished OF cl_gui_alv_grid\n*        IMPORTING e_modified et_good_cells,\n*\n*      handle_top_of_page                         &quot; TOP OF PAGE\n*                    FOR EVENT top_of_page OF cl_gui_alv_grid\n*        IMPORTING e_dyndoc_id.\n*\n*      handle_close\n*                    FOR EVENT close OF cl_gui_dialogbox_container\n*        IMPORTING sender.\n*\n*\n*\n  PRIVATE SECTION.\n\n    DATA: dialogbox_status TYPE c.  &quot;'X': does exist, SPACE: does not ex.\nENDCLASS.                    &quot;lcl_event_receiver DEFINITION\n\n****************************************************************\nCLASS lcl_event_receiver IMPLEMENTATION.\n**===============================================================\n*  METHOD constructor.\n*    CALL METHOD super-&gt;constructor.\n*    mv_grid = e_grid_text.\n*  ENDMETHOD.                    &quot;construcctor\n**===============================================================\n*  METHOD handle_double_click.\n**    PERFORM f_double_click USING mv_grid e_row e_column.\n*  ENDMETHOD.                    &quot;handle_double_click\n*===============================================================\n*  METHOD handle_hotspot_click.\n*    PERFORM f_hotspot_click USING mv_grid e_row_id e_column_id CHANGING dialogbox_status.\n*  ENDMETHOD.                    &quot;handle_hotspot_click\n**===============================================================\n*  METHOD handle_toolbar.\n*\n*  ENDMETHOD.                    &quot;handle_toolbar\n**===============================================================\n*  METHOD handle_data_changed.\n**    PERFORM f_data_changed USING mv_grid er_data_changed.\n*  ENDMETHOD.\n**===============================================================\n*  METHOD handle_menu_button.\n**    PERFORM f_menu_button USING mv_grid e_ucomm\n**                        CHANGING e_object.\n*  ENDMETHOD.                    &quot;handle_toolbar\n**===============================================================\n*  METHOD handle_user_command.\n**    PERFORM f_user_command USING mv_grid e_ucomm.\n*  ENDMETHOD.                    &quot;handle_user_command\n**===============================================================\n*  METHOD handle_data_changed_finished.\n**    PERFORM f_after_handle_data_changed USING mv_grid e_modified et_good_cells.\n*  ENDMETHOD.                    &quot;handle_user_command\n*===============================================================\n*  METHOD handle_top_of_page.                   &quot;implementation\n** Top-of-page event\n*\n*    PERFORM f_event_top_of_page USING e_dyndoc_id.\n*  ENDMETHOD.                            &quot;top_of_page\n\n**--------------------------------------------------------*\n*  METHOD handle_close.\n** \u00a76.Handle the CLOSE-button of the dialogbox\n*\n** set dialogbox invisible\n** (the dialogbox is destroyed outomatically when the user\n** switches to another dynpro).\n*    CALL METHOD sender-&gt;set_visible\n*      EXPORTING\n*        visible = space.\n** In this example closing the dialogbox leads\n** to make it invisible. It is also conceivable to destroy it\n** and recreate it if the user doubleclicks a line again.\n** Displaying a great amount of data has a greater impact on performance.\n*  ENDMETHOD.\nENDCLASS.                    &quot;lcl_event_receiver IMPLEMENTATION<\/pre><\/div>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text\/html&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;no&quot;,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}\">*---------------------------------------------------------------------*\n*  Include           ZTEMPLATE_TOP\n*---------------------------------------------------------------------*\n\n*---------------------------------------------------------------------*\n* TABLES                                                              *\n*---------------------------------------------------------------------*\n*TABLES:\n\n*---------------------------------------------------------------------*\n* TYPES\n*---------------------------------------------------------------------*\nTYPES: BEGIN OF gty_s_grid,\n*         name      TYPE c LENGTH 4,\n*         salv      TYPE REF TO cl_salv_table,\n*         cust         TYPE REF TO cl_gui_custom_container,\n*         dock         TYPE REF TO cl_gui_docking_container,\n         spli         TYPE REF TO cl_gui_splitter_container,\n*         cont         TYPE REF TO cl_gui_container,\n         grid         TYPE REF TO lcl_alv_grid,\n         html         TYPE REF TO cl_gui_html_viewer,\n         event        TYPE REF TO lcl_event_receiver,\n*         dialogbox TYPE REF TO cl_gui_dialogbox_container,\n*         tabix     TYPE i,\n*         edit      TYPE i, &quot;0 = Display, 1 = Edit\n*         refresh      TYPE c,\n*         save      TYPE c, &quot;'X' = Global, 'U' = User specific, 'A' = All\n*         view      TYPE c, &quot;Space = Text, 'X' = Fieldname,\n*         vari      TYPE disvariant,\n         layo         TYPE lvc_s_layo,\n         fcat         TYPE lvc_t_fcat,\n         sort         TYPE lvc_t_sort,\n         tool         TYPE ui_functions,\n*         styl      TYPE lvc_t_styl,\n*         modi      TYPE lvc_t_modi,\n*         filt         TYPE lvc_t_filt,\n*         f4        TYPE lvc_t_f4,\n*         dral      TYPE lvc_t_dral,\n         dyndoc       TYPE REF TO cl_dd_document,\n         dyndoc_table TYPE REF TO cl_dd_table_element,\n         dyndoc_left  TYPE REF TO cl_dd_area,\n         dyndoc_right TYPE REF TO cl_dd_area,\n         par_html     TYPE REF TO cl_gui_container,\n         par_grid     TYPE REF TO cl_gui_container,\n       END OF gty_s_grid.\n\nTYPES: gty_0100 TYPE sflight, &quot;CHANGE THE TYPE\n       gtt_0100 TYPE TABLE OF gty_0100.\n\n*---------------------------------------------------------------------*\n*  DATA                                                               *\n*---------------------------------------------------------------------*\nDATA: gt_0100 TYPE gtt_0100.\n\nDATA: gs_grid_0100   TYPE gty_s_grid,\n      go_alv_details TYPE REF TO cl_salv_table,\n      ok_code        LIKE sy-ucomm.\n\n*---------------------------------------------------------------------*\n*  CONSTANTS                                                          *\n*---------------------------------------------------------------------*\nCONSTANTS:\n  gc_grid_0100 TYPE c LENGTH 30 VALUE 'GRID_0100'.\n\nCONSTANTS:\n  gc_true  TYPE sap_bool VALUE 'X',\n  gc_x     TYPE sap_bool VALUE 'X',\n  gc_false TYPE sap_bool VALUE ''.<\/pre><\/div>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text\/html&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;no&quot;,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}\">*---------------------------------------------------------------------*\n*  Include           ZTEMPLATE_S01\n*---------------------------------------------------------------------*\n*---------------------------------------------------------------------*\n* SELECTION SCREEN                                                    *\n*---------------------------------------------------------------------*\n\n*SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE TEXT-001.\n*SELECT-OPTIONS: so_bukrs FOR bkpf-bukrs.\n*SELECTION-SCREEN END OF BLOCK b0.\n*\n*AT SELECTION-SCREEN OUTPUT.\n*  PERFORM f_screen_output.\n\n\n**---------------------------------------------------------------------*\n**      Form  F_SCREEN_OUTPUT\n**---------------------------------------------------------------------*\n**       text\n**----------------------------------------------------------------------*\n*FORM f_screen_output .\n*  LOOP AT SCREEN.\n*    CASE screen-name.\n*      WHEN 'SO_BUKRS-LOW'.\n*        screen-required = 2.\n*    ENDCASE.\n*    MODIFY SCREEN.\n*  ENDLOOP.\n*ENDFORM.\n\n*---------------------------------------------------------------------*\n*      Form  F_INPUT_VALIDATION\n*---------------------------------------------------------------------*\n*       Input Validation\n*----------------------------------------------------------------------*\nFORM f_input_validation .\n*  &quot; mandatory check\n*  IF so_bukrs IS INITIAL.\n*    MESSAGE s035 DISPLAY LIKE 'E'. &quot; Please fill all required fields.\n*    LEAVE LIST-PROCESSING.\n*  ENDIF.\nENDFORM.<\/pre><\/div>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text\/html&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;no&quot;,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}\">*----------------------------------------------------------------------*\n***INCLUDE ZTEMPLATE_F01.\n*----------------------------------------------------------------------*\n\n\n*---------------------------------------------------------------------*\n*      Form  F_INITIALIZATION\n*---------------------------------------------------------------------*\nFORM f_initialization .\n  sy-title = 'TEMPLATE TITLE'.\nENDFORM.\n\n\n*---------------------------------------------------------------------*\n*      Form  F_GET_DATA\n*---------------------------------------------------------------------*\nFORM f_get_data .\n\nENDFORM.\n\n\n*---------------------------------------------------------------------*\n*      Form  F_BUILD_DATA\n*---------------------------------------------------------------------*\nFORM f_build_data .\n\nENDFORM.<\/pre><\/div>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text\/html&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;no&quot;,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}\">*---------------------------------------------------------------------*\n*  Include           ZTEMPLATE_F02\n*---------------------------------------------------------------------*\n\n\n*---------------------------------------------------------------------*\n*      Form  F_COUNT_DATA\n*---------------------------------------------------------------------*\n*      Count itab lines and give return message\n*---------------------------------------------------------------------*\nFORM f_count_data  TABLES   pt_data  CHANGING pc_count.\n  DATA: lv_char TYPE c LENGTH 10.\n*--------------------------------------------------------------------*\n  CLEAR: pc_count.\n  IF pt_data[] IS INITIAL.\n    MESSAGE s000(zcmm01) DISPLAY LIKE 'E'.\n  ELSE.\n    DESCRIBE TABLE pt_data[] LINES pc_count.\n    WRITE pc_count TO lv_char LEFT-JUSTIFIED.\n    MESSAGE s001(zcmm01) WITH lv_char.\n  ENDIF.\nENDFORM.\n\n*---------------------------------------------------------------------*\n*      Form  F_SET_GRID_0100\n*---------------------------------------------------------------------*\n*      Grid ALV Main Subroutine\n*---------------------------------------------------------------------*\nFORM f_set_grid_0100  TABLES pt_data\n                       USING p_grid\n                      CHANGING pcs_grid TYPE gty_s_grid.\n\n  DATA: lv_string TYPE string.\n  DATA: ls_print TYPE slis_print_alv.\n\n* Create ALV Grid\n  IF pcs_grid-grid IS INITIAL.\n    PERFORM f_init_grid USING p_grid CHANGING pcs_grid.\n    PERFORM f_set_layo_0100 CHANGING pcs_grid.\n    PERFORM f_set_fcat TABLES pt_data[] CHANGING pcs_grid.\n    PERFORM f_set_sort_0100 CHANGING pcs_grid.\n    PERFORM f_set_tool_0100 CHANGING pcs_grid.\n    PERFORM f_set_even_0100 USING p_grid CHANGING pcs_grid.\n    PERFORM f_display_grid USING pcs_grid pt_data[].\n  ENDIF.\nENDFORM.\n\n*---------------------------------------------------------------------*\n*      Form  F_SHOW_DATA\n*---------------------------------------------------------------------*\nFORM f_show_data .\n\n  DATA: lv_count TYPE i.\n\n*  PERFORM f_count_data TABLES gt_0100 CHANGING lv_count.\n\n  IF sy-batch IS INITIAL. &quot;AND lv_count &gt; 0.\n    CALL SCREEN 0100.\n  ENDIF.\nENDFORM.\n\n\n*---------------------------------------------------------------------*\n*      Form  F_INIT_GRID\n*---------------------------------------------------------------------*\n*       Initializing Grid ALV\n*----------------------------------------------------------------------*\nFORM f_init_grid USING p_grid CHANGING pcs_grid TYPE gty_s_grid.\n  DATA: lv_grid_name TYPE string.\n\n  lv_grid_name = p_grid.\n\n  CREATE OBJECT pcs_grid-grid\n    EXPORTING\n      i_parent = cl_gui_container=&gt;screen0\n      i_name   = lv_grid_name.\n\nENDFORM.\n\nFORM f_set_layo_0100 CHANGING pcs_grid TYPE gty_s_grid.\n  pcs_grid-layo-zebra      = 'X'.\n  pcs_grid-layo-cwidth_opt = 'X'.\n  pcs_grid-layo-col_opt    = 'X'.\n  pcs_grid-layo-sel_mode   = 'A'.\nENDFORM.\n\n\n*---------------------------------------------------------------------*\n*      Form  f_set_fcat_0100\n*---------------------------------------------------------------------*\n*       Set FieldCatalog\n*----------------------------------------------------------------------*\nFORM f_set_fcat TABLES pt_data CHANGING pcs_grid TYPE gty_s_grid.\n\n*--------------------------------------------------------------------*\n  REFRESH: pcs_grid-fcat.\n*--------------------------------------------------------------------*\n  PERFORM f_get_fcat TABLES pt_data USING pcs_grid-fcat.\n*--------------------------------------------------------------------*\n\n  PERFORM f_set_fcat_att CHANGING pcs_grid.\n\nENDFORM.\n\n*---------------------------------------------------------------------*\n*     Form  F_GET_FCAT\n*---------------------------------------------------------------------*\n*      Get fieldcat from itab attribute\n*---------------------------------------------------------------------*\nFORM f_get_fcat  TABLES pt_data\n                  USING pt_fcat TYPE lvc_t_fcat.\n  CALL FUNCTION 'ZCM_GET_FCAT_FROM_ITAB'\n    IMPORTING\n      et_fcat = pt_fcat\n    TABLES\n      pt_data = pt_data[].\nENDFORM.                    &quot; f_get_fcat\n\n\n*---------------------------------------------------------------------*\n*      Form  F_SET_FCAT_ATT\n*---------------------------------------------------------------------*\n*       Set fieldcat atttibutes\n*----------------------------------------------------------------------*\nFORM f_set_fcat_att  CHANGING pcs_grid TYPE gty_s_grid.\n\n  DEFINE __set_text.\n    ls_fcat-coltext = &amp;1.\n    ls_fcat-reptext = &amp;1.\n  END-OF-DEFINITION.\n\n  DATA: ls_fcat  TYPE lvc_s_fcat.\n  LOOP AT pcs_grid-fcat INTO ls_fcat.\n*    CASE ls_fcat-fieldname.\n*      WHEN 'BUKRS'.\n*        __set_text 'Comp'.\n*    ENDCASE.\n    MODIFY pcs_grid-fcat FROM ls_fcat.\n  ENDLOOP.\n\nENDFORM.\n\n\n*---------------------------------------------------------------------*\n*      Form  f_set_sort_0100\n*---------------------------------------------------------------------*\n*       Set Sort\n*----------------------------------------------------------------------*\nFORM f_set_sort_0100 CHANGING pcs_grid TYPE gty_s_grid.\n*  PERFORM f_set_sort USING pcs_grid-fcat pcs_grid-sort:\n*    'X' 'BUKRS' 'X' ' ',\n*    '' 'CUSTOMER' 'X' ' ',\nENDFORM.\n\n\n*---------------------------------------------------------------------*\n*      Form  F_SET_SORT\n*---------------------------------------------------------------------*\nFORM f_set_sort USING pt_fcat TYPE lvc_t_fcat\n                       pt_sort TYPE lvc_t_sort\n                       p_start p_field p_up p_subtot.\n  STATICS: lv_spos TYPE lvc_s_sort-spos,\n           lt_fcat TYPE lvc_t_fcat.\n  DATA   : ls_sort TYPE lvc_s_sort,\n           ls_fcat TYPE lvc_s_fcat.\n*--------------------------------------------------------------------*\n  IF p_start EQ 'X'.\n    lv_spos = 1.\n    CLEAR lt_fcat.\n    lt_fcat = pt_fcat[].\n    SORT lt_fcat BY fieldname.\n  ENDIF.\n  READ TABLE lt_fcat INTO ls_fcat\n    WITH KEY fieldname = p_field BINARY SEARCH.\n  CHECK sy-subrc EQ 0.\n*--------------------------------------------------------------------*\n  IF p_start EQ 'X'.\n    lv_spos = 1.\n  ELSE.\n    lv_spos = lv_spos + 1.\n  ENDIF.\n*--------------------------------------------------------------------*\n  ls_sort-spos      = lv_spos.\n  ls_sort-fieldname = p_field.\n  ls_sort-up        = p_up.\n  ls_sort-subtot    = p_subtot.\n  APPEND ls_sort TO pt_sort.\nENDFORM.                    &quot; F_SET_SORT\n\n\n*---------------------------------------------------------------------*\n*      Form  f_set_tool_0100\n*---------------------------------------------------------------------*\n*       Excluding Toolbar\n*----------------------------------------------------------------------*\nFORM f_set_tool_0100 CHANGING pcs_grid TYPE gty_s_grid.\n*  APPEND: cl_gui_alv_grid=&gt;mc_mb_view         TO pcs_grid-tool.\n*          cl_gui_alv_grid=&gt;mc_fc_info         TO pcs_grid-tool.\nENDFORM.                    &quot;f_set_tool_0100\n\n\n*---------------------------------------------------------------------*\n*      Form  f_set_even_0100\n*---------------------------------------------------------------------*\n*       Set Event Info.\n*----------------------------------------------------------------------*\nFORM f_set_even_0100 USING p_grid\n                CHANGING pcs_grid TYPE gty_s_grid.\n  CHECK pcs_grid-event IS INITIAL.\n*\n*  CREATE OBJECT pcs_grid-event\n*    EXPORTING\n*      e_grid_text = p_grid.\n*\n*  SET HANDLER:\n*    pcs_grid-event-&gt;handle_hotspot_click  FOR pcs_grid-grid.\n*    pcs_grid-event-&gt;handle_top_of_page    FOR pcs_grid-grid.\n\nENDFORM.\n\n\n*---------------------------------------------------------------------*\n*      Form  F_DISPLAY_GRID\n*---------------------------------------------------------------------*\n*       Display ALV Grid\n*----------------------------------------------------------------------*\nFORM f_display_grid  USING ps_grid TYPE gty_s_grid\n                           pt_data.\n\n  DATA gs_variant TYPE disvariant.\n  gs_variant-report = sy-repid.\n\n  CALL METHOD ps_grid-grid-&gt;set_table_for_first_display\n    EXPORTING\n      is_layout            = ps_grid-layo\n      is_variant           = gs_variant\n      i_save               = 'A' &quot;'X' = Global, 'U' = User specific, 'A' = All\n      it_toolbar_excluding = ps_grid-tool\n    CHANGING\n      it_outtab            = pt_data\n      it_fieldcatalog      = ps_grid-fcat\n      it_sort              = ps_grid-sort.\n*      it_filter            = ps_grid-filt.\n\nENDFORM.<\/pre><\/div>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text\/html&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;no&quot;,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}\">*---------------------------------------------------------------------*\n* Include           ZTEMPLATE_O01\n*---------------------------------------------------------------------*\n\n*---------------------------------------------------------------------*\n*      Module  STATUS_0100  OUTPUT\n*---------------------------------------------------------------------*\n*       text\n*----------------------------------------------------------------------*\nMODULE status_0100 OUTPUT.\n  DATA: lv_title TYPE string.\n\n  lv_title = sy-title. &quot;  custom your ALV title here\n\n  SET PF-STATUS 'ST_0100'.\n  SET TITLEBAR 'TI_0100' WITH lv_title.\nENDMODULE.\n\n\n*---------------------------------------------------------------------*\n*      Module  INIT_0100  OUTPUT\n*---------------------------------------------------------------------*\n*       text\n*----------------------------------------------------------------------*\nMODULE init_0100 OUTPUT.\n  PERFORM f_set_grid_0100 TABLES gt_0100 USING gc_grid_0100\n          CHANGING gs_grid_0100.\nENDMODULE.<\/pre><\/div>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text\/html&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;showPanel&quot;:false,&quot;fileName&quot;:&quot;ZTEMPLATE_ALV_I01&quot;,&quot;language&quot;:&quot;HTML&quot;,&quot;modeName&quot;:&quot;html&quot;}\">*---------------------------------------------------------------------*\n*  Include           ZTEMPLATE_I01\n*---------------------------------------------------------------------*\n\n*---------------------------------------------------------------------*\n*      Module  EXIT_COMMAND  INPUT\n*---------------------------------------------------------------------*\nMODULE exit_command INPUT.\n  LEAVE TO SCREEN 0.\nENDMODULE.\n\n\n*---------------------------------------------------------------------*\n*      Module  USER_COMMAND_0100  INPUT\n*---------------------------------------------------------------------*\nMODULE user_command_0100 INPUT.\n\nENDMODULE.<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Berikut contoh program report ALV dengan menggunakan lcl_alv_grid<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts\/28"}],"collection":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/comments?post=28"}],"version-history":[{"count":5,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts\/28\/revisions"}],"predecessor-version":[{"id":267,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts\/28\/revisions\/267"}],"wp:attachment":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/media?parent=28"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/categories?post=28"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/tags?post=28"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}