Feb 8, 2011

ALV IN POPUP & DIALOG BOX


FOLLOWING CODE HELP YOU TO GET ALV REPORT IN POPUP & DIALOG WINDOW
*Type pools for ALV declarations
TYPE-POOLS : slis.
*Internal table and wa declarations for T582A.
DATA : it_t582a TYPE STANDARD TABLE OF t582a INITIAL SIZE 0,
       wa_t582a TYPE t582a.
*Internal table and wa declarations for T582S.
DATA : it_text TYPE STANDARD TABLE OF t582s,
       wa_text TYPE t582s.
*Structure declaration for output
TYPES : BEGIN OF ty_output,
        infty TYPE infty,
        zeitb TYPE dzeitb,
        itext TYPE intxt,
        pnnnn TYPE pnnnn_d,
        dname TYPE dianm,
        namst TYPE namst,
        edynr TYPE edynp,
        ldynr TYPE ldynp,
        stypt TYPE stypt,
        sytxt TYPE sytxt,
        zbtab TYPE dzbtab,
        checkbox(1),
        END OF ty_output.
*Internal table and work area declaration for output in pop up
DATA : it_output TYPE STANDARD TABLE OF ty_output INITIAL SIZE 0,
       wa_output TYPE ty_output.
*Internal table and workarea declaration for alv dialog display
DATA : it_display TYPE STANDARD TABLE OF ty_output INITIAL SIZE 0,
       wa_display TYPE ty_output.
*data declarations for ALV
DATA:ls_fieldcat TYPE slis_fieldcat_alv,
    lt_fieldcat TYPE slis_t_fieldcat_alv,
    ls_fieldcatlog TYPE slis_fieldcat_alv,
    lt_fieldcatlog TYPE slis_t_fieldcat_alv,
    lt_layout TYPE slis_layout_alv.
*Initialization event
INITIALIZATION.
*Start of selection event
START-OF-SELECTION.
*Select to fetch all the infotypes and details in sap system
  SELECT *
         FROM t582a
         INTO CORRESPONDING FIELDS OF TABLE it_t582a.
*Select to fetch the infotypes text
  IF it_t582a[] IS NOT INITIAL.
    SELECT * FROM t582s INTO CORRESPONDING FIELDS OF TABLE it_text
    FOR ALL ENTRIES IN it_t582a WHERE infty = it_t582a-infty
    AND sprsl = 'E'.
  ENDIF.
*Appending the selected values to the output table
  LOOP AT it_t582a INTO wa_t582a.
    wa_output-infty = wa_t582a-infty.
    wa_output-zeitb = wa_t582a-zeitb.
    wa_output-pnnnn = wa_t582a-pnnnn.
    wa_output-dname = wa_t582a-dname.
    wa_output-namst = wa_t582a-namst.
    wa_output-edynr = wa_t582a-edynr.
    wa_output-ldynr = wa_t582a-ldynr.
    wa_output-stypt = wa_t582a-stypt.
    wa_output-sytxt = wa_t582a-sytxt.
    wa_output-zbtab = wa_t582a-zbtab.
    READ TABLE it_text INTO wa_text WITH KEY infty = wa_t582a-infty.
    wa_output-itext = wa_text-itext.
    APPEND wa_output TO it_output.
    CLEAR wa_output.
  ENDLOOP.
*Subroutine to display the pop up values.
  PERFORM popup_display.
*Subroutine to display the ALV dialog display
  PERFORM alv_output.
*----------------------------------------------------------------*
*      Form  popup_display
*------------------------------------------------------------*
FORM popup_display.
*field catalogue for pop up
  CLEAR ls_fieldcat.
  ls_fieldcat-row_pos   = '1'.
  ls_fieldcat-col_pos   = '1'.
  ls_fieldcat-fieldname = 'CHECKBOX'.
  ls_fieldcat-tabname   = 'IT_OUTPUT'.
  ls_fieldcat-seltext_m = 'SELECT'.
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
  ls_fieldcat-row_pos   = '1'.
  ls_fieldcat-col_pos   = '2'.
  ls_fieldcat-fieldname = 'ITEXT'.
  ls_fieldcat-tabname   = 'IT_OUTPUT'.
  ls_fieldcat-seltext_m = 'DESCRIPTION'.
  ls_fieldcat-outputlen = 50.
  APPEND ls_fieldcat TO lt_fieldcat.
* Display data in a POPUP
  CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
    EXPORTING
      i_zebra              = 'X'
      it_fieldcat          = lt_fieldcat
      i_tabname            = 'IT_OUTPUT'
      i_checkbox_fieldname = 'CHECKBOX'
    TABLES
      t_outtab             = it_output.
*Appending the selected infotypes only to internal table
  LOOP AT it_output INTO wa_output WHERE checkbox = 'X'.
    wa_display-itext = wa_output-itext.
    wa_display-infty = wa_output-infty.
    wa_display-zeitb = wa_output-zeitb.
    wa_display-pnnnn = wa_output-pnnnn.
    wa_display-dname = wa_output-dname.
    wa_display-namst = wa_output-namst.
    wa_display-edynr = wa_output-edynr.
    wa_display-ldynr = wa_output-ldynr.
    wa_display-sytxt = wa_output-sytxt.
    wa_display-stypt = wa_output-stypt.
    wa_display-zbtab = wa_output-zbtab.
    APPEND wa_display TO it_display.
    CLEAR wa_display.
  ENDLOOP.
ENDFORM.                               " popup_display
*&-------------------------------------------------------------*
*&      Form  alv_output
*&-------------------------------------------------------------*
FORM alv_output .
*fieldcatalogue for ALV dialog
  PERFORM build_fieldcat.
*Layout for ALV dialog
  PERFORM build_layout.
**ALV dialog output
  PERFORM alv.
ENDFORM.                    " alv_output
*&------------------------------------------------------------*
*&      Form  build_fieldcat
*&------------------------------------------------------------*
FORM build_fieldcat .
*fieldcatalogue for alv dialog
  CLEAR ls_fieldcatlog.
  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '1'.
  ls_fieldcatlog-fieldname = 'INFTY'.
  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'Infotype'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
  CLEAR ls_fieldcatlog.
  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '2'.
  ls_fieldcatlog-fieldname = 'ITEXT'.
  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'Description'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
  CLEAR ls_fieldcatlog.
  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '3'.
  ls_fieldcatlog-fieldname = 'ZEITB'.
  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'TimeConstraint'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
  CLEAR ls_fieldcatlog.
  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '4'.
  ls_fieldcatlog-fieldname = 'PNNNN'.
  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'Structure'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
  CLEAR ls_fieldcatlog.
  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '5'.
  ls_fieldcatlog-fieldname = 'DNAME'.
  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'DialogModule'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
  CLEAR ls_fieldcatlog.
  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '6'.
  ls_fieldcatlog-fieldname = 'NAMST'.
  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'Subtypefield'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
  CLEAR ls_fieldcatlog.
  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '7'.
  ls_fieldcatlog-fieldname = 'EDYNR'.
  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'Singlescreenno'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
  CLEAR ls_fieldcatlog.
  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '8'.
  ls_fieldcatlog-fieldname = 'LDYNR'.
  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'Listscreenno'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
  CLEAR ls_fieldcatlog.
  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '9'.
  ls_fieldcatlog-fieldname = 'STYPT'.
  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'SubtypTable'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
  CLEAR ls_fieldcatlog.
  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '10'.
  ls_fieldcatlog-fieldname = 'SYTXT'.
  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'Subtyptexttable'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
  CLEAR ls_fieldcatlog.
  ls_fieldcatlog-row_pos   = '1'.
  ls_fieldcatlog-col_pos   = '11'.
  ls_fieldcatlog-fieldname = 'ZBTAB'.
  ls_fieldcatlog-tabname   = 'IT_DISPLAY'.
  ls_fieldcatlog-seltext_m = 'SubtypeTCTable'.
  APPEND ls_fieldcatlog TO lt_fieldcatlog.
ENDFORM.                    " build_fieldcat
*&----------------------------------------------------------*
*&      Form  build_layout
*&----------------------------------------------------------*
*Layout for ALV dialog
FORM build_layout .
  lt_layout-zebra = 'X'.
  lt_layout-colwidth_optimize = 'X'.
ENDFORM.                    " build_layout
*&---------------------------------------------------------------*
*&      Form  alv
*&---------------------------------------------------------------*
*Alv dialog output.
FORM alv .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program    = sy-repid
      i_grid_title          = 'INFOTYPE DETAILS'
      is_layout             = lt_layout
      it_fieldcat           = lt_fieldcatlog
      i_screen_start_column = 10
      i_screen_start_line   = 20
      i_screen_end_column   = 100
      i_screen_end_line     = 40
    TABLES
      t_outtab              = it_display
    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.
ENDFORM.                    " alv

CHECK BOX IN ALV


PASTE THIS CODE IN THE Z PROGRAM OF TYPE M
THIS CODE REQUIRE BASIC KNOWLEDGE OF SCREEN PROGRAMMING.
NO NEED TO BOTHER FRIEND WAIT FOR MY NEXT POST RELATED TO SCREEN PROGRAMMING IN REPORT
 
CODE :
CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.  "for event handling
DATA: OK_CODE LIKE SY-UCOMM,
      SAVE_OK LIKE SY-UCOMM,
      G_CONTAINER TYPE SCRFNAME VALUE 'BCALV_GRID_DEMO_0100_CONT1',
      G_GRID  TYPE REF TO CL_GUI_ALV_GRID,
      G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      G_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER,
      GT_FIELDCAT TYPE LVC_T_FCAT,
      GS_LAYOUT TYPE LVC_S_LAYO,
      G_MAX TYPE I VALUE 100.

TYPESBEGIN OF GS_OUTTAB.
TYPESCHECKBOX TYPE C.                "field for checkbox
TYPES: CELLTAB TYPE LVC_T_STYL.        "field to switch editability
        INCLUDE STRUCTURE SFLIGHT.
TYPESEND OF GS_OUTTAB.

DATA: GT_OUTTAB TYPE GS_OUTTAB OCCURS 0 WITH HEADER LINE.

***********************************************************************
* LOCAL CLASSES
***********************************************************************
*
* This local class only handles event DOUBLE_CLICK.
* WHen the user double clicks on a checkbox cell the status of
* this cell is switched from editable to not editable and vice versa.
*
CLASS LCL_EVENT_RECEIVER DEFINITION.

PUBLIC SECTION.
METHODS: CATCH_DOUBLECLICK
         FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
         IMPORTING
            E_COLUMN
            ES_ROW_NO
            SENDER.
ENDCLASS.

CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

METHOD CATCH_DOUBLECLICK.
  DATA: LS_OUTTAB TYPE GS_OUTTAB,
        LS_CELLTAB TYPE LVC_S_STYL.
*--
* Function:
*  Switch between 'editable' and 'not editable' checkbox.
*--

* If the user clicked on another column there is
* nothing to do.
  IF E_COLUMN-FIELDNAME NE 'CHECKBOX'.
    EXIT.
  ENDIF.

  READ TABLE GT_OUTTAB INTO LS_OUTTAB INDEX ES_ROW_NO-ROW_ID.

* The loop is only needed if there are other columns that
* use checkboxes. At this point the loop could be
* replaced by a READ of the first line of CELLTAB.
      LOOP AT LS_OUTTAB-CELLTAB INTO LS_CELLTAB.
        IF LS_CELLTAB-FIELDNAME EQ 'CHECKBOX'.
* §B4.Switch the style to dis- or enable a cell for input
         IF LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.
          LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
         ELSE.
          LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.
         ENDIF.
         MODIFY LS_OUTTAB-CELLTAB FROM LS_CELLTAB.
        ENDIF.
      ENDLOOP.
      MODIFY GT_OUTTAB FROM LS_OUTTAB INDEX ES_ROW_NO-ROW_ID.

    CALL METHOD SENDER->REFRESH_TABLE_DISPLAY.
ENDMETHOD.
ENDCLASS.
*
********************************************************************

*---------------------------------------------------------------------*
*       MAIN                                                          *
*---------------------------------------------------------------------*
END-OF-SELECTION.
  CALL SCREEN 100.

*---------------------------------------------------------------------*
*       MODULE PBO OUTPUT                                             *
*---------------------------------------------------------------------*
MODULE PBO OUTPUT.
  SET PF-STATUS 'MAIN100'.
  SET TITLEBAR 'MAIN100'.
  IF G_CUSTOM_CONTAINER IS INITIAL.
    PERFORM CREATE_AND_INIT_ALV.
  ENDIF.

ENDMODULE.
*---------------------------------------------------------------------*
*       MODULE PAI INPUT                                              *
*---------------------------------------------------------------------*
MODULE PAI INPUT.
  SAVE_OK = OK_CODE.
  CLEAR OK_CODE.
  CASE SAVE_OK.
    WHEN 'EXIT'.
      PERFORM EXIT_PROGRAM.
    WHEN 'SELECT'.
      PERFORM SELECT_ALL_ENTRIES CHANGING GT_OUTTAB[].
    WHEN 'DESELECT'.
      PERFORM DESELECT_ALL_ENTRIES CHANGING GT_OUTTAB[].
    WHEN 'RESET'.
      PERFORM RESET_SELECTED_ENTRIES CHANGING GT_OUTTAB[].
    WHEN 'SWITCH'.
      PERFORM SWITCH_ACTIVATION CHANGING GT_OUTTAB[].
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Form  CREATE_AND_INIT_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_OUTTAB  text
*      <--P_GT_FIELDCAT  text
*      <--P_GS_LAYOUT  text
*----------------------------------------------------------------------*
FORM CREATE_AND_INIT_ALV.

  DATA: LT_EXCLUDE TYPE UI_FUNCTIONS.

  CREATE OBJECT G_CUSTOM_CONTAINER
         EXPORTING CONTAINER_NAME = G_CONTAINER.
  CREATE OBJECT G_GRID
         EXPORTING I_PARENT = G_CUSTOM_CONTAINER.

  PERFORM BUILD_FIELDCAT CHANGING GT_FIELDCAT.

* Exclude all edit functions in this example since we do not need them:
  PERFORM EXCLUDE_TB_FUNCTIONS CHANGING LT_EXCLUDE.

  PERFORM BUILD_DATA.

*§ B3.Use the layout structure to aquaint additional field to ALV.

  GS_LAYOUT-STYLEFNAME = 'CELLTAB'.

  CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY
       EXPORTING IS_LAYOUT             = GS_LAYOUT
                 IT_TOOLBAR_EXCLUDING  = LT_EXCLUDE
       CHANGING  IT_FIELDCATALOG       = GT_FIELDCAT
                 IT_OUTTAB             = GT_OUTTAB[].

  CREATE OBJECT G_EVENT_RECEIVER.
  SET HANDLER G_EVENT_RECEIVER->CATCH_DOUBLECLICK FOR G_GRID.

* Set editable cells to ready for input initially
  CALL METHOD G_GRID->SET_READY_FOR_INPUT
   EXPORTING
    I_READY_FOR_INPUT = 1.


ENDFORM.                               "CREATE_AND_INIT_ALV
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_FIELDCAT  text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT CHANGING PT_FIELDCAT TYPE LVC_T_FCAT.

  DATA LS_FCAT TYPE LVC_S_FCAT.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
       EXPORTING
            I_STRUCTURE_NAME = 'SFLIGHT'
       CHANGING
            CT_FIELDCAT      = PT_FIELDCAT.

*§A2.Add an entry for the checkbox in the fieldcatalog
  CLEAR LS_FCAT.
  LS_FCAT-FIELDNAME = 'CHECKBOX'.
* Essential: declare field as checkbox and
*            mark it as editable field:
  LS_FCAT-CHECKBOX = 'X'.
  LS_FCAT-EDIT = 'X'.

* do not forget to provide texts for this extra field
  LS_FCAT-COLTEXT = TEXT-F01.
  LS_FCAT-TOOLTIP = TEXT-F02.
  LS_FCAT-SELTEXT = TEXT-F03.

* optional: set column width
  LS_FCAT-OUTPUTLEN = 10.
*
  APPEND LS_FCAT TO PT_FIELDCAT.

ENDFORM.
                            


*&---------------------------------------------------------------------*
*&      Form  EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_LT_EXCLUDE  text
*----------------------------------------------------------------------*
FORM EXCLUDE_TB_FUNCTIONS CHANGING PT_EXCLUDE TYPE UI_FUNCTIONS.

  DATA LS_EXCLUDE TYPE UI_FUNC.

  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.


ENDFORM.                               " EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*&      Form  build_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BUILD_DATA.

  DATA: LT_SFLIGHT TYPE TABLE OF SFLIGHT,
        LS_SFLIGHT TYPE SFLIGHT,
        LS_CELLTAB TYPE LVC_S_STYL,
        LT_CELLTAB TYPE LVC_T_STYL,
        L_INDEX TYPE I.

  SELECT * FROM SFLIGHT INTO TABLE LT_SFLIGHT UP TO G_MAX ROWS.
  IF SY-SUBRC NE 0.
* generate own entries if db-table is empty so that this example
* still works
    PERFORM GENERATE_ENTRIES CHANGING LT_SFLIGHT.
  ENDIF.

*§A3.Optionally, check checkboxes initially after selecting data.
* (Omitted in this example)
  LOOP AT LT_SFLIGHT INTO LS_SFLIGHT.
    MOVE-CORRESPONDING LS_SFLIGHT TO GT_OUTTAB.
*   if gt_outtab-connid eq '400'.
*     gt_outtab-checkbox = 'X'.
*   endif.
    APPEND GT_OUTTAB.
  ENDLOOP.

* §B2.After selecting data,
*    assign a style for each row of your checkbox column.
*
* Initially, set all checkbox cells editable.
  LS_CELLTAB-FIELDNAME = 'CHECKBOX'.
  LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.

  LOOP AT GT_OUTTAB.
    L_INDEX = SY-TABIX.
    REFRESH LT_CELLTAB.

    LS_CELLTAB-FIELDNAME = 'CHECKBOX'.
    LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.
    INSERT LS_CELLTAB INTO TABLE LT_CELLTAB.

    INSERT LINES OF LT_CELLTAB INTO TABLE GT_OUTTAB-CELLTAB.
    MODIFY GT_OUTTAB INDEX L_INDEX.
  ENDLOOP.

ENDFORM.                               " build_data
*---------------------------------------------------------------------*
*       FORM EXIT_PROGRAM                                             *
*---------------------------------------------------------------------*
FORM EXIT_PROGRAM.
  LEAVE PROGRAM.
ENDFORM
.

*&---------------------------------------------------------------------*
*&      Form  generate_entries
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_LT_SLFIGHT  text
*----------------------------------------------------------------------*
FORM GENERATE_ENTRIES CHANGING PT_SLFIGHT TYPE STANDARD TABLE.
*
* This form is only needed for the case that there is no
* data in database table SFLIGHT.
*
  DATA: LS_SFLIGHT TYPE SFLIGHT,
        L_MONTH(2TYPE C,
        L_DAY(2TYPE C,
        L_DATE(8TYPE C.


  LS_SFLIGHT-CARRID = 'LH'.
  LS_SFLIGHT-CONNID = '0400'.
  LS_SFLIGHT-CURRENCY = 'DEM'.
  LS_SFLIGHT-PLANETYPE = '747-400'.
  LS_SFLIGHT-SEATSMAX = 660.

  DO 110 TIMES.
    LS_SFLIGHT-PRICE = SY-INDEX * 100.
    LS_SFLIGHT-SEATSOCC = 660 - SY-INDEX * 6.
    LS_SFLIGHT-PAYMENTSUM = LS_SFLIGHT-SEATSOCC * LS_SFLIGHT-PRICE.

    L_MONTH = SY-INDEX / 10 + 1.
    DO 2 TIMES.
      L_DAY = L_MONTH + SY-INDEX * 2.
      L_DATE+0(4) = '2000'.
      L_DATE+4(2) = L_MONTH+0(2).
      L_DATE+6(2) = L_DAY+0(2).
      LS_SFLIGHT-FLDATE = L_DATE.
      APPEND LS_SFLIGHT TO PT_SLFIGHT.
    ENDDO.
  ENDDO.
ENDFORM.                               " generate_entries
*&---------------------------------------------------------------------*
*&      Form  select_all_entries
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_OUTTAB  text
*----------------------------------------------------------------------*
FORM SELECT_ALL_ENTRIES CHANGING PT_OUTTAB TYPE STANDARD TABLE.
  DATA: LS_OUTTAB TYPE GS_OUTTAB.
  DATA: L_VALID TYPE C,
        L_LOCKED TYPE C.

*§A4ad. Before you (a)set, reset or (d)evaluate checkboxes,
*       you must check the input cells.
*
* If all entries are ok, ALV transferes new values to the output
* table which you then can modify.

  CALL METHOD G_GRID->CHECK_CHANGED_DATA
              IMPORTING
                 E_VALID = L_VALID.

  IF L_VALID EQ 'X'.

    LOOP AT PT_OUTTAB INTO LS_OUTTAB.
      PERFORM CHECK_LOCK USING    LS_OUTTAB
                         CHANGING L_LOCKED.
      IF L_LOCKED IS INITIAL
         AND NOT LS_OUTTAB-CHECKBOX EQ '-'.
        LS_OUTTAB-CHECKBOX = 'X'.
      ENDIF.
      MODIFY PT_OUTTAB FROM LS_OUTTAB.
    ENDLOOP.

    CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.

  ENDIF.

ENDFORM.                               " select_all_entries
*&---------------------------------------------------------------------*
*&      Form  deselect_all_entries
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_OUTTAB[]  text
*----------------------------------------------------------------------*
FORM DESELECT_ALL_ENTRIES CHANGING PT_OUTTAB TYPE STANDARD TABLE.
  DATA: LS_OUTTAB TYPE GS_OUTTAB.
  DATA: L_VALID TYPE C,
        L_LOCKED TYPE C.


*§A4ad. Before you (a)set, reset or (d)evaluate checkboxes,
*       you must check the input cells.
*
* If all entries are ok, ALV transferes new values to the output
* table which you then can modify.

  CALL METHOD G_GRID->CHECK_CHANGED_DATA
              IMPORTING
                 E_VALID = L_VALID.

  IF L_VALID EQ 'X'.

    LOOP AT PT_OUTTAB INTO LS_OUTTAB.
      PERFORM CHECK_LOCK USING    LS_OUTTAB
                       CHANGING L_LOCKED.
      IF L_LOCKED IS INITIAL
         AND NOT LS_OUTTAB-CHECKBOX EQ '-'.
        LS_OUTTAB-CHECKBOX = ' '.
      ENDIF.

      MODIFY PT_OUTTAB FROM LS_OUTTAB.
    ENDLOOP.

    CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.

  ENDIF.



ENDFORM.                               " deselect_all_entries
*&---------------------------------------------------------------------*
*&      Form  reset_selected_entries
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_OUTTAB[]  text
*----------------------------------------------------------------------*
FORM RESET_SELECTED_ENTRIES CHANGING PT_OUTTAB TYPE STANDARD TABLE.
  DATA: LS_OUTTAB TYPE GS_OUTTAB.
  DATA: L_VALID TYPE C.

*§A4b. Before you set, (b)reset or evaluate checkboxes,
*      you must check the input cells.
*
* If all entries are ok, ALV transferes new values to the output
* table which you then can modify.

  CALL METHOD G_GRID->CHECK_CHANGED_DATA
              IMPORTING
                 E_VALID = L_VALID.

  IF L_VALID EQ 'X'.

    LOOP AT PT_OUTTAB INTO LS_OUTTAB.
      IF     NOT LS_OUTTAB-CHECKBOX IS INITIAL
         AND NOT LS_OUTTAB-CHECKBOX EQ '-'.
        CLEAR LS_OUTTAB.
        MODIFY PT_OUTTAB FROM LS_OUTTAB.
      ENDIF.
    ENDLOOP.

    CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.

  ENDIF.

ENDFORM.                               " reset_selected_entries

*-----------------------------

FORM SWITCH_ACTIVATION CHANGING PT_OUTTAB TYPE STANDARD TABLE.
  DATA: LS_OUTTAB TYPE GS_OUTTAB.
  DATA: L_VALID TYPE C,
        LT_ROW_NO TYPE LVC_T_ROID WITH HEADER LINE.

*§A4c. Before you set, reset, (c)(de)activate 

*      or evaluate checkboxes, you must check the input cells.
*
* If all entries are ok, ALV transferes new values to the output
* table which you then can modify.

  CALL METHOD G_GRID->CHECK_CHANGED_DATA
              IMPORTING
                 E_VALID = L_VALID.

  IF L_VALID EQ 'X'.
    CALL METHOD G_GRID->GET_SELECTED_ROWS
      IMPORTING
         ET_ROW_NO     = LT_ROW_NO[].

    LOOP AT LT_ROW_NO.
       READ TABLE PT_OUTTAB INTO LS_OUTTAB INDEX LT_ROW_NO-ROW_ID.
       IF LS_OUTTAB-CHECKBOX NE '-'.
         LS_OUTTAB-CHECKBOX = '-'.
       ELSE.
         LS_OUTTAB-CHECKBOX = ' '.
       ENDIF.
       MODIFY PT_OUTTAB FROM LS_OUTTAB INDEX LT_ROW_NO-ROW_ID.

    ENDLOOP.

    CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.

  ENDIF.

ENDFORM.                               " switch_activation

*&---------------------------------------------------------------------*
*&      Form  check_lock
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LS_OUTTAB  text
*      <--P_L_LOCKED  text
*----------------------------------------------------------------------*
FORM CHECK_LOCK USING    PS_OUTTAB TYPE GS_OUTTAB
                CHANGING P_LOCKED.
  DATA LS_CELLTAB TYPE LVC_S_STYL.

  LOOP AT PS_OUTTAB-CELLTAB INTO LS_CELLTAB.
    IF LS_CELLTAB-FIELDNAME = 'CHECKBOX'.
      IF LS_CELLTAB-STYLE EQ CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
        P_LOCKED = 'X'.
      ELSE.
        P_LOCKED = SPACE.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.                               " check_lock