Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

put X into checkbox of alv when button select all entries.

Former Member
0 Kudos

Hello,

I have a alv where i had insert a checkbox to it. the problem is that i dont't have this field checkbox in a dictionary table or a structure, I created it in the program.

  
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = 'ZRFID'
    CHANGING
      ct_fieldcat      = lt_fct1.

  CLEAR ls_fcat.
  ls_fcat-checkbox = 'X'.
  ls_fcat-edit = 'X'.
  ls_fcat-outputlen = 2.
  APPEND ls_fcat TO lt_fct1.

  CALL METHOD grid1->set_table_for_first_display
    EXPORTING
      i_structure_name              = 'ZRFID'
      is_layout                     = gs_layout
      it_toolbar_excluding          = lt_exclude
    CHANGING
      it_outtab                     = lt_alv
      it_fieldcatalog               = lt_fct1
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.

now i want to set a 'X' in the field checkbox when I oush the button for it. Do someone know an coding where I have the checkbox only in the alv list?



case ok_code.

    WHEN 'SELECT'.

?????????????????????

endcase.

1 ACCEPTED SOLUTION

uwe_schieferstein
Active Contributor
0 Kudos

Hello Muhammet

Any CHAR1 field of your itab can be defines as checkbox (LVC_S_FCAT-CHECKBOX = 'X'). Using flag LVC_S_FCAT-NO_ROWMARK you may switch the row mark (at the left border of the ALV grid) on or off. Using this row mark I do not really see why you need a function to select all checkboxes. However, if you enter 'SELECT' into the command window then all checkboxes will be marked.


*&---------------------------------------------------------------------*
*& Report  ZUS_SDN_ALVGRID_EDITABLE_7
*&
*&---------------------------------------------------------------------*
*& Thread: put X into checkbox of alv when button select all entries.
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="1136016"></a>
*&---------------------------------------------------------------------*

REPORT  zus_sdn_alvgrid_editable_7.

DATA:
  gd_okcode        TYPE ui_func,
  gd_repid         TYPE syst-repid,
*
  gt_fcat          TYPE lvc_t_fcat,
  gs_layout        TYPE lvc_s_layo,
  go_docking       TYPE REF TO cl_gui_docking_container,
  go_grid1         TYPE REF TO cl_gui_alv_grid.


DATA:
  gt_outtab        TYPE STANDARD TABLE OF knb1.


PARAMETERS:
  p_bukrs      TYPE bukrs  DEFAULT '2000'  OBLIGATORY.

PARAMETERS:
  p_nomark     AS CHECKBOX  DEFAULT ' '.  " row mark: yes/no






START-OF-SELECTION.

  SELECT        * FROM  knb1 INTO TABLE gt_outtab UP TO 30 ROWS
         WHERE  bukrs  = p_bukrs.



* Create docking container
  CREATE OBJECT go_docking
    EXPORTING
      parent = cl_gui_container=>screen0
      ratio  = 90
    EXCEPTIONS
      OTHERS = 6.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* Create ALV grid
  CREATE OBJECT go_grid1
    EXPORTING
      i_parent = go_docking
    EXCEPTIONS
      OTHERS   = 5.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.




* Build fieldcatalog and set hotspot for field KUNNR
  PERFORM build_fieldcatalog_knb1.

  PERFORM set_layout_and_variant.



* Display data
  CALL METHOD go_grid1->set_table_for_first_display
    EXPORTING
      i_bypassing_buffer = abap_true
      is_layout          = gs_layout
    CHANGING
      it_outtab          = gt_outtab
      it_fieldcatalog    = gt_fcat
    EXCEPTIONS
      OTHERS             = 4.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.




* Link the docking container to the target dynpro
  gd_repid = syst-repid.
  CALL METHOD go_docking->link
    EXPORTING
      repid                       = gd_repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      OTHERS                      = 4.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* ok-code field = GD_OKCODE
  CALL SCREEN '0100'.


END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.
*  SET TITLEBAR 'xxx'.


ENDMODULE.                 " STATUS_0100  OUTPUT

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

  TRANSLATE gd_okcode TO UPPER CASE.

  CASE gd_okcode.
    WHEN 'BACK' OR
         'END'  OR
         'CANC'.
      SET SCREEN 0. LEAVE SCREEN.

    WHEN 'SELECT'.
      PERFORM select_all_checkboxes.


    WHEN OTHERS.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_structure_name = 'KNB1'
          i_grid_title     = 'before CHECK_DATA_CHANGED'
        TABLES
          t_outtab         = gt_outtab
        EXCEPTIONS
          program_error    = 1
          OTHERS           = 2.
      IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.


*     Transport of changes from ALV grid -> itab
      go_grid1->check_changed_data( ).

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_structure_name = 'KNB1'
          i_grid_title     = 'after CHECK_DATA_CHANGED'
        TABLES
          t_outtab         = gt_outtab
        EXCEPTIONS
          program_error    = 1
          OTHERS           = 2.
      IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.


  ENDCASE.

  CLEAR: gd_okcode.

ENDMODULE.                 " USER_COMMAND_0100  INPUT


*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG_KNB1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcatalog_knb1 .
* define local data
  DATA:
    ls_fcat        TYPE lvc_s_fcat.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
*     I_BUFFER_ACTIVE              =
      i_structure_name             = 'KNB1'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_BYPASSING_BUFFER           =
*     I_INTERNAL_TABNAME           =
    CHANGING
      ct_fieldcat                  = gt_fcat
    EXCEPTIONS
      inconsistent_interface       = 1
      program_error                = 2
      OTHERS                       = 3.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


  LOOP AT gt_fcat INTO ls_fcat
          WHERE ( fieldname = 'LOEVM' ).
    ls_fcat-checkbox = abap_true.
    ls_fcat-edit     = abap_true.
    ls_fcat-col_opt  = abap_true.
    MODIFY gt_fcat FROM ls_fcat.
  ENDLOOP.


ENDFORM.                    " BUILD_FIELDCATALOG_KNB1

*&---------------------------------------------------------------------*
*&      Form  SET_LAYOUT_AND_VARIANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_layout_and_variant .

  CLEAR: gs_layout.

  gs_layout-no_rowmark = p_nomark.


ENDFORM.                    " SET_LAYOUT_AND_VARIANT
*&---------------------------------------------------------------------*
*&      Form  SELECT_ALL_CHECKBOXES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM select_all_checkboxes .
* define local data
  DATA: ls_outtab   LIKE LINE OF gt_outtab,
        ls_stable   type lvc_s_stbl.

  ls_outtab-loevm = abap_true.
  MODIFY gt_outtab FROM ls_outtab
      TRANSPORTING loevm
      WHERE ( loevm EQ abap_false ).

  ls_stable-row = abap_true.
  ls_stable-col = abap_true.
  CALL METHOD go_grid1->refresh_table_display
    EXPORTING
      is_stable      = ls_stable
*      i_soft_refresh =
    EXCEPTIONS
      finished       = 1
      others         = 2.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " SELECT_ALL_CHECKBOXES

Regards

Uwe

6 REPLIES 6

Former Member
0 Kudos

Hi,

After creating Field cat insert one more field in fieldcat named checkbox and take for the further processing. As the Ztable will not have this type of name. no field cat will be created with checkbox.

Regards,

Nandha

uwe_schieferstein
Active Contributor
0 Kudos

Hello Muhammet

Any CHAR1 field of your itab can be defines as checkbox (LVC_S_FCAT-CHECKBOX = 'X'). Using flag LVC_S_FCAT-NO_ROWMARK you may switch the row mark (at the left border of the ALV grid) on or off. Using this row mark I do not really see why you need a function to select all checkboxes. However, if you enter 'SELECT' into the command window then all checkboxes will be marked.


*&---------------------------------------------------------------------*
*& Report  ZUS_SDN_ALVGRID_EDITABLE_7
*&
*&---------------------------------------------------------------------*
*& Thread: put X into checkbox of alv when button select all entries.
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="1136016"></a>
*&---------------------------------------------------------------------*

REPORT  zus_sdn_alvgrid_editable_7.

DATA:
  gd_okcode        TYPE ui_func,
  gd_repid         TYPE syst-repid,
*
  gt_fcat          TYPE lvc_t_fcat,
  gs_layout        TYPE lvc_s_layo,
  go_docking       TYPE REF TO cl_gui_docking_container,
  go_grid1         TYPE REF TO cl_gui_alv_grid.


DATA:
  gt_outtab        TYPE STANDARD TABLE OF knb1.


PARAMETERS:
  p_bukrs      TYPE bukrs  DEFAULT '2000'  OBLIGATORY.

PARAMETERS:
  p_nomark     AS CHECKBOX  DEFAULT ' '.  " row mark: yes/no






START-OF-SELECTION.

  SELECT        * FROM  knb1 INTO TABLE gt_outtab UP TO 30 ROWS
         WHERE  bukrs  = p_bukrs.



* Create docking container
  CREATE OBJECT go_docking
    EXPORTING
      parent = cl_gui_container=>screen0
      ratio  = 90
    EXCEPTIONS
      OTHERS = 6.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* Create ALV grid
  CREATE OBJECT go_grid1
    EXPORTING
      i_parent = go_docking
    EXCEPTIONS
      OTHERS   = 5.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.




* Build fieldcatalog and set hotspot for field KUNNR
  PERFORM build_fieldcatalog_knb1.

  PERFORM set_layout_and_variant.



* Display data
  CALL METHOD go_grid1->set_table_for_first_display
    EXPORTING
      i_bypassing_buffer = abap_true
      is_layout          = gs_layout
    CHANGING
      it_outtab          = gt_outtab
      it_fieldcatalog    = gt_fcat
    EXCEPTIONS
      OTHERS             = 4.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.




* Link the docking container to the target dynpro
  gd_repid = syst-repid.
  CALL METHOD go_docking->link
    EXPORTING
      repid                       = gd_repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      OTHERS                      = 4.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* ok-code field = GD_OKCODE
  CALL SCREEN '0100'.


END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.
*  SET TITLEBAR 'xxx'.


ENDMODULE.                 " STATUS_0100  OUTPUT

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

  TRANSLATE gd_okcode TO UPPER CASE.

  CASE gd_okcode.
    WHEN 'BACK' OR
         'END'  OR
         'CANC'.
      SET SCREEN 0. LEAVE SCREEN.

    WHEN 'SELECT'.
      PERFORM select_all_checkboxes.


    WHEN OTHERS.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_structure_name = 'KNB1'
          i_grid_title     = 'before CHECK_DATA_CHANGED'
        TABLES
          t_outtab         = gt_outtab
        EXCEPTIONS
          program_error    = 1
          OTHERS           = 2.
      IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.


*     Transport of changes from ALV grid -> itab
      go_grid1->check_changed_data( ).

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_structure_name = 'KNB1'
          i_grid_title     = 'after CHECK_DATA_CHANGED'
        TABLES
          t_outtab         = gt_outtab
        EXCEPTIONS
          program_error    = 1
          OTHERS           = 2.
      IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.


  ENDCASE.

  CLEAR: gd_okcode.

ENDMODULE.                 " USER_COMMAND_0100  INPUT


*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG_KNB1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcatalog_knb1 .
* define local data
  DATA:
    ls_fcat        TYPE lvc_s_fcat.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
*     I_BUFFER_ACTIVE              =
      i_structure_name             = 'KNB1'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_BYPASSING_BUFFER           =
*     I_INTERNAL_TABNAME           =
    CHANGING
      ct_fieldcat                  = gt_fcat
    EXCEPTIONS
      inconsistent_interface       = 1
      program_error                = 2
      OTHERS                       = 3.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


  LOOP AT gt_fcat INTO ls_fcat
          WHERE ( fieldname = 'LOEVM' ).
    ls_fcat-checkbox = abap_true.
    ls_fcat-edit     = abap_true.
    ls_fcat-col_opt  = abap_true.
    MODIFY gt_fcat FROM ls_fcat.
  ENDLOOP.


ENDFORM.                    " BUILD_FIELDCATALOG_KNB1

*&---------------------------------------------------------------------*
*&      Form  SET_LAYOUT_AND_VARIANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_layout_and_variant .

  CLEAR: gs_layout.

  gs_layout-no_rowmark = p_nomark.


ENDFORM.                    " SET_LAYOUT_AND_VARIANT
*&---------------------------------------------------------------------*
*&      Form  SELECT_ALL_CHECKBOXES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM select_all_checkboxes .
* define local data
  DATA: ls_outtab   LIKE LINE OF gt_outtab,
        ls_stable   type lvc_s_stbl.

  ls_outtab-loevm = abap_true.
  MODIFY gt_outtab FROM ls_outtab
      TRANSPORTING loevm
      WHERE ( loevm EQ abap_false ).

  ls_stable-row = abap_true.
  ls_stable-col = abap_true.
  CALL METHOD go_grid1->refresh_table_display
    EXPORTING
      is_stable      = ls_stable
*      i_soft_refresh =
    EXCEPTIONS
      finished       = 1
      others         = 2.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " SELECT_ALL_CHECKBOXES

Regards

Uwe

0 Kudos

Hello Uwe,

in your example you use an field in your internal alv table which is defined in the dictionary, in my internal alv table a create a seperate field at


  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = 'STRUCTURE'
    CHANGING
      ct_fieldcat      = lt_fct1.

  CLEAR ls_fcat.
  ls_fcat-checkbox = 'X'.
  ls_fcat-fieldname = 'CHECKBOX'.
  ls_fcat-edit = 'X'.
  ls_fcat-outputlen = 2.
  APPEND ls_fcat TO lt_fct1.

I have this field only in fct1 and not in my internal alv table, so the next question is how to use this field checkbox and put a 'X' in this field when I created this field only in the fieldcatalog?

0 Kudos

You need to declare a field in your internal table which you can use as check box and manipulations later.

types: begin of t_alv.
        include structure zrfid.
types:  chb type char1,
       end of t_alv.
       
data: i_alv type standard table of t_data.

After field catalog population via FM, you can add check box field to the field catalog.

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
  i_structure_name = 'ZRFID'
CHANGING
  ct_fieldcat      = lt_fct1.
 
CLEAR ls_fcat.
ls_fcat-fieldname = 'CHB'.
ls_fcat-CHECKBOX = 'X'.
ls_fcat-EDIT = 'X'.
ls_fcat-outputlen = 2.
APPEND ls_fcat TO lt_fct1.

Now display data w.r.t your field catalog:

CALL METHOD grid1->set_table_for_first_display
EXPORTING
*  i_structure_name              = 'ZRFID'
  is_layout                     = gs_layout
  it_toolbar_excluding          = lt_exclude
CHANGING
  it_outtab                     = lt_alv
  it_fieldcatalog               = lt_fct1
EXCEPTIONS
  invalid_parameter_combination = 1
  program_error                 = 2
  too_many_lines                = 3
  OTHERS                        = 4.

So later on when the function SELECT_ALL is selected you can set the value for CHB as 'X' and refresh display.

~Eswar

0 Kudos

Hello Muhammet

As Eswar already explained you just have to adjust your TYPES definition for the OUTTAB itab accordingly (see modified sample report ZUS_SDN_ALVGRID_EDITABLE_7 below):


*&---------------------------------------------------------------------*
*& Report  ZUS_SDN_ALVGRID_EDITABLE_7
*&
*&---------------------------------------------------------------------*
*& Thread: put X into checkbox of alv when button select all entries.
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="1136016"></a>
*&---------------------------------------------------------------------*
* Essential steps for separate CHECKBOX column (search for '§')
* ~~~~~~~~~~~~~~~
*-----------------------------------------------------------------
REPORT  zus_sdn_alvgrid_editable_7.

DATA:
  gd_okcode        TYPE ui_func,
  gd_repid         TYPE syst-repid,
*
  gt_fcat          TYPE lvc_t_fcat,
  gs_layout        TYPE lvc_s_layo,
  go_docking       TYPE REF TO cl_gui_docking_container,
  go_grid1         TYPE REF TO cl_gui_alv_grid.

"§(1) Add CHECKBOX field to TYPES definition
TYPES: BEGIN OF ty_s_outtab.
TYPES: checkbox(1) TYPE c.
INCLUDE TYPE knb1.
TYPES: END OF ty_s_outtab.
TYPES: ty_t_outtab  TYPE STANDARD TABLE OF ty_s_outtab
                    WITH DEFAULT KEY.

DATA:
  gt_outtab        TYPE ty_t_outtab.


PARAMETERS:
  p_bukrs      TYPE bukrs  DEFAULT '2000'  OBLIGATORY.

PARAMETERS:
  p_nomark     AS CHECKBOX  DEFAULT ' '.  " row mark: yes/no






START-OF-SELECTION.

  " §(2) Adjust SELECT statement because structure of GT_OUTTAB <> DB table
  SELECT        * FROM  knb1 INTO CORRESPONDING FIELDS OF TABLE gt_outtab
    UP TO 30 ROWS
         WHERE  bukrs  = p_bukrs.



* Create docking container
  CREATE OBJECT go_docking
    EXPORTING
      parent = cl_gui_container=>screen0
      ratio  = 90
    EXCEPTIONS
      OTHERS = 6.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* Create ALV grid
  CREATE OBJECT go_grid1
    EXPORTING
      i_parent = go_docking
    EXCEPTIONS
      OTHERS   = 5.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.




* Build fieldcatalog
  PERFORM build_fieldcatalog.

  PERFORM set_layout_and_variant.



* Display data
  CALL METHOD go_grid1->set_table_for_first_display
    EXPORTING
      i_bypassing_buffer = abap_true
      is_layout          = gs_layout
    CHANGING
      it_outtab          = gt_outtab
      it_fieldcatalog    = gt_fcat
    EXCEPTIONS
      OTHERS             = 4.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.




* Link the docking container to the target dynpro
  gd_repid = syst-repid.
  CALL METHOD go_docking->link
    EXPORTING
      repid                       = gd_repid
      dynnr                       = '0100'
*      CONTAINER                   =
    EXCEPTIONS
      OTHERS                      = 4.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* ok-code field = GD_OKCODE
  CALL SCREEN '0100'.


END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.
*  SET TITLEBAR 'xxx'.


ENDMODULE.                 " STATUS_0100  OUTPUT

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

  TRANSLATE gd_okcode TO UPPER CASE.

  CASE gd_okcode.
    WHEN 'BACK' OR
         'END'  OR
         'CANC'.
      SET SCREEN 0. LEAVE SCREEN.

    WHEN 'SELECT'.
      PERFORM select_all_checkboxes.


    WHEN OTHERS.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_structure_name = 'KNB1'
          i_grid_title     = 'before CHECK_DATA_CHANGED'
        TABLES
          t_outtab         = gt_outtab
        EXCEPTIONS
          program_error    = 1
          OTHERS           = 2.
      IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.


*     Transport of changes from ALV grid -> itab
      go_grid1->check_changed_data( ).

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_structure_name = 'KNB1'
          i_grid_title     = 'after CHECK_DATA_CHANGED'
        TABLES
          t_outtab         = gt_outtab
        EXCEPTIONS
          program_error    = 1
          OTHERS           = 2.
      IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.


  ENDCASE.

  CLEAR: gd_okcode.

ENDMODULE.                 " USER_COMMAND_0100  INPUT


*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fieldcatalog.
* define local data
  DATA:
    ls_fcat        TYPE lvc_s_fcat.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
*     I_BUFFER_ACTIVE              =
      i_structure_name             = 'KNB1'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_BYPASSING_BUFFER           =
*     I_INTERNAL_TABNAME           =
    CHANGING
      ct_fieldcat                  = gt_fcat
    EXCEPTIONS
      inconsistent_interface       = 1
      program_error                = 2
      OTHERS                       = 3.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


  LOOP AT gt_fcat INTO ls_fcat
          WHERE ( fieldname = 'LOEVM' ).
    ls_fcat-checkbox = abap_true.
    ls_fcat-edit     = abap_true.
    ls_fcat-col_opt  = abap_true.
    MODIFY gt_fcat FROM ls_fcat.
  ENDLOOP.

  " §(3) Add fieldcatalog record for additional CHECKBOX field
  ls_fcat-fieldname = 'CHECKBOX'.
  ls_fcat-scrtext_s = 'CHECKBOX'.
  ls_fcat-scrtext_m = 'CHECKBOX'.
  ls_fcat-scrtext_l = 'CHECKBOX'.
  ls_fcat-coltext = 'CHECKBOX'.
  INSERT ls_fcat INTO gt_fcat INDEX 1.

  LOOP AT gt_fcat INTO ls_fcat.
    ls_fcat-col_pos = syst-tabix.
    MODIFY gt_fcat FROM ls_fcat INDEX syst-tabix.
  ENDLOOP.



ENDFORM.                    " BUILD_FIELDCATALOG

*&---------------------------------------------------------------------*
*&      Form  SET_LAYOUT_AND_VARIANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_layout_and_variant .

  CLEAR: gs_layout.

  gs_layout-no_rowmark = p_nomark.


ENDFORM.                    " SET_LAYOUT_AND_VARIANT
*&---------------------------------------------------------------------*
*&      Form  SELECT_ALL_CHECKBOXES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM select_all_checkboxes .
* define local data
  DATA: ls_outtab   LIKE LINE OF gt_outtab,
        ls_stable   TYPE lvc_s_stbl.

  " §(4) Mark both CHECKBOX columns
  ls_outtab-checkbox = abap_true.
  ls_outtab-loevm    = abap_true.

  MODIFY gt_outtab FROM ls_outtab
      TRANSPORTING checkbox loevm
      WHERE ( loevm EQ abap_false ).

  ls_stable-row = abap_true.
  ls_stable-col = abap_true.
  CALL METHOD go_grid1->refresh_table_display
    EXPORTING
      is_stable      = ls_stable
*      i_soft_refresh =
    EXCEPTIONS
      finished       = 1
      OTHERS         = 2.
  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.                    " SELECT_ALL_CHECKBOXES

Regards

Uwe

0 Kudos

Thank oyu it works now.