Friday, 30 December 2016

OOPS ALV INTERACTIVE REPORT

oops   alv  interactive  report.
This is the sample alv interactive.
Creare 3 screens
Screen 100.
Create a custom control with name ‘CST1’.
Screen 200.
Create a custom control with name ‘CST2’.
Screen 300.
Create a custom control with name ‘CST3’.
Note :  here you can mention custom container name for all the screens as ‘CST’ also. Because each screen have separate custom container.

REPORT  zrk_oop_alv02.

TYPES : BEGIN OF ty_kna1,
             kunnr TYPE kna1-kunnr,
             land1 TYPE kna1-land1,
             name1 TYPE kna1-name1,
        END OF ty_kna1.
DATA : lt_kna1 TYPE TABLE OF ty_kna1,
       ls_kna1 TYPE ty_kna1.
TYPES : BEGIN OF ty_vbak,
             vbeln TYPE vbak-vbeln,
             erdat TYPE vbak-erdat,
             erzet TYPE vbak-erzet,
             ernam TYPE vbak-ernam,
             cellstyles TYPE lvc_t_styl,
         END OF ty_vbak.
DATA : lt_vbak TYPE TABLE OF ty_vbak,
       ls_vbak TYPE ty_vbak.
TYPES : BEGIN OF ty_vbap,
             vbeln TYPE vbap-vbeln,
             posnr TYPE vbap-posnr,
             matnr TYPE vbap-matnr,
       END OF ty_vbap.
DATA : lt_vbap TYPE TABLE OF ty_vbap,
       ls_vbap TYPE ty_vbap.
DATA lv_kunnr TYPE kunnr.
DATA lv_vbeln TYPE vbeln.
DATA ls_styl TYPE lvc_s_styl.
SELECT-OPTIONS so_kunnr FOR lv_kunnr.
DATA : kna1_cont TYPE REF TO cl_gui_custom_container,
       kna1_grid TYPE REF TO cl_gui_alv_grid.
DATA : vbak_cont TYPE REF TO cl_gui_custom_container,
       vbak_grid TYPE REF TO cl_gui_alv_grid.
DATA : vbap_cont TYPE REF TO cl_gui_custom_container,
      vbap_grid TYPE REF TO cl_gui_alv_grid.
DATA : lt_fcat TYPE lvc_t_fcat,
       ls_fcat TYPE lvc_s_fcat.
DATA ls_layo TYPE lvc_s_layo.
CLASS lcl_eventreceiver DEFINITION.
  PUBLIC SECTION.
    METHODS handle_hotspot_click FOR EVENT hotspot_click OF
               cl_gui_alv_grid
               IMPORTING e_row_id.
    METHODS handle_button_click FOR EVENT button_click
            OF cl_gui_alv_grid IMPORTING es_row_no.
    METHODS handle_double_click FOR EVENT double_click
            OF cl_gui_alv_grid IMPORTING e_row e_column.
ENDCLASS.                    "lcl_eventreceiver DEFINITION
CLASS lcl_eventreceiver IMPLEMENTATION.
  METHOD handle_hotspot_click.
    CLEAR ls_kna1.
    READ TABLE lt_kna1 INTO ls_kna1
            INDEX e_row_id-index TRANSPORTING kunnr.
    IF sy-subrc EQ 0.
      CLEAR lv_kunnr.
      lv_kunnr = ls_kna1-kunnr.
      IF lv_kunnr IS NOT INITIAL.
*        MESSAGE 'kUNNR VALUE RECEIVED' TYPE 'I'.
        PERFORM getsalesorders.
        IF lt_vbak[] IS NOT INITIAL.
          CALL SCREEN 200.
        ELSE.
          MESSAGE 'No sales orders' TYPE 'I'.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDMETHOD.                    "handle_hotspot_click
  METHOD handle_button_click.
    READ TABLE lt_vbak INTO ls_vbak
       INDEX es_row_no-row_id TRANSPORTING vbeln.
    IF sy-subrc EQ 0.
      CLEAR lv_vbeln.
      lv_vbeln = ls_vbak-vbeln.
      IF lv_vbeln IS NOT INITIAL.
        PERFORM getsalesitems.
        IF lt_vbap[] IS NOT INITIAL.
          CALL SCREEN 300.
        ELSE.
          MESSAGE 'No sales items' TYPE 'I'.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDMETHOD.                    "handle_button_click
  METHOD handle_double_click.
    CASE e_column-fieldname.
      WHEN 'MATNR'.
        READ TABLE lt_vbap INTO ls_vbap
                 INDEX e_row-index TRANSPORTING matnr.
        IF sy-subrc EQ 0.
          SET PARAMETER ID 'MAT' FIELD ls_vbap-matnr.
        ENDIF.
        CALL TRANSACTION 'MM03'.
      WHEN OTHERS.
        MESSAGE 'Please click on material' TYPE 'I'.
    ENDCASE.
  ENDMETHOD.                    "handle_double_click
ENDCLASS.                    "lcl_eventreceiver IMPLEMENTATION
DATA ob TYPE REF TO lcl_eventreceiver.
INITIALIZATION.
  so_kunnr-low = '1000'.
  so_kunnr-high = '1020'.
  APPEND so_kunnr.
START-OF-SELECTION.
 CALL SCREEN 100.
MODULE status_0100 OUTPUT.
  IF kna1_cont IS INITIAL.
    SET PF-STATUS 'ABC'.
    CREATE OBJECT kna1_cont
      EXPORTING
        container_name              = 'CST1'.
    CREATE OBJECT kna1_grid
      EXPORTING
        i_parent          = kna1_cont.
    PERFORM getcustomers.
    IF lt_kna1[] IS NOT INITIAL.
      PERFORM fldcatkna1.
      PERFORM layoutkna1.
      PERFORM registerhandlers.
      PERFORM displaykna1.
    ENDIF.
  ENDIF.
ENDMODULE.                 " STATUS_0100  OUTPUT
MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                    "USER_COMMAND_0100 INPUT
FORM displaykna1 .
  CALL METHOD kna1_grid->set_table_for_first_display
    EXPORTING
      is_layout       = ls_layo
    CHANGING
      it_outtab       = lt_kna1[]
      it_fieldcatalog = lt_fcat[].
ENDFORM.                    " displaykna1
FORM fldcatkna1 .
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'KUNNR'.
  ls_fcat-col_pos = 1.
  ls_fcat-coltext = 'Customer No'.
  ls_fcat-hotspot = 'X'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'LAND1'.
  ls_fcat-col_pos = 2.
  ls_fcat-coltext = 'Country'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'NAME1'.
  ls_fcat-col_pos = 3.
  ls_fcat-coltext = 'Customer Name'.
  ls_fcat-outputlen = 20.
  APPEND ls_fcat TO lt_fcat.
ENDFORM.                    " fldcatkna1
FORM getcustomers .
  SELECT kunnr land1 name1 FROM kna1
       INTO TABLE lt_kna1
       WHERE kunnr IN so_kunnr.
ENDFORM.                    " getcustomers
FORM layoutkna1 .
  CLEAR ls_layo.
  ls_layo-grid_title = 'CUSTOMER MASTER DATA'.
ENDFORM.                    " layoutkna1
FORM getsalesorders .
  SELECT vbeln erdat erzet ernam FROM vbak
            INTO CORRESPONDING FIELDS OF TABLE lt_vbak
            WHERE kunnr = lv_kunnr.

ENDFORM.                    " getsalesorders
MODULE status_0200 OUTPUT.
  IF vbak_cont IS INITIAL.
    SET PF-STATUS 'XYZ'.
    CREATE OBJECT vbak_cont
      EXPORTING
        container_name              = 'CST2'.
    CREATE OBJECT vbak_grid
      EXPORTING
        i_parent          = vbak_cont.
    PERFORM fldcatvbak.
    PERFORM layoutvbak.
    PERFORM cellstyles.
    PERFORM reghandlers.
    PERFORM displayvbak.
  ENDIF.
ENDMODULE.                 " STATUS_0200  OUTPUT
MODULE user_command_0200 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0200  INPUT
FORM displayvbak .
  CALL METHOD vbak_grid->set_table_for_first_display
    EXPORTING
      is_layout       = ls_layo
    CHANGING
      it_outtab       = lt_vbak[]
      it_fieldcatalog = lt_fcat[].
ENDFORM.                    " displayvbak
FORM fldcatvbak .
  REFRESH lt_fcat.
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'VBELN'.
  ls_fcat-col_pos = 1.
  ls_fcat-coltext = 'Sales Doc'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'ERDAT'.
  ls_fcat-col_pos = 2.
  ls_fcat-coltext = 'Date'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'ERZET'.
  ls_fcat-col_pos = 3.
  ls_fcat-coltext = 'Time'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'ERNAM'.
  ls_fcat-col_pos = 4.
  ls_fcat-coltext = 'Person'.
  APPEND ls_fcat TO lt_fcat.
ENDFORM.                    " fldcatvbak
FORM layoutvbak .
  CLEAR ls_layo.
  ls_layo-grid_title = 'SALES DOCUMENT HEADER DATA'.
  ls_layo-stylefname = 'CELLSTYLES'.
ENDFORM.                    " layoutvbak
FORM cellstyles .
  DATA lv_date TYPE d.
  CLEAR ls_vbak.
  LOOP AT lt_vbak INTO ls_vbak.
    lv_date = ls_vbak-erdat+0(4).
    IF lv_date >= '2000'.
      ls_styl-fieldname = 'VBELN'.
      ls_styl-style = cl_gui_alv_grid=>mc_style_button.
      INSERT ls_styl INTO TABLE ls_vbak-cellstyles.
      MODIFY lt_vbak FROM ls_vbak
                    TRANSPORTING cellstyles.
    ENDIF.
    CLEAR ls_vbak.
  ENDLOOP.
ENDFORM.                    " cellstyles
FORM getsalesitems .
  SELECT vbeln posnr matnr FROM vbap
         INTO TABLE lt_vbap
         WHERE vbeln = lv_vbeln.
ENDFORM.                    " getsalesitems
MODULE status_0300 OUTPUT.
  IF vbap_cont IS INITIAL.
    SET PF-STATUS 'PQR'.
    CREATE OBJECT vbap_cont
      EXPORTING
        container_name              = 'CST3'.
    CREATE OBJECT vbap_grid
      EXPORTING
        i_parent          =  vbap_cont.

    PERFORM fldcatvbap.
    PERFORM layoutvbap.
    PERFORM reg_handlers.
    PERFORM displayvbap.
  ENDIF.
ENDMODULE.                 " STATUS_0300  OUTPUT
MODULE user_command_0300 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK'.
      LEAVE TO SCREEN 200.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0300  INPUT
FORM reghandlers .
  create object ob.
  set handler ob->handle_button_click for vbak_grid.
ENDFORM.                    " reghandlers
FORM registerhandlers .
  CREATE OBJECT ob.
  SET HANDLER ob->handle_hotspot_click FOR kna1_grid.
ENDFORM.                    " registerhandlers
FORM fldcatvbap .
  REFRESH lt_fcat.
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'VBELN'.
  ls_fcat-col_pos = 1.
  ls_fcat-coltext = 'Sales Doc'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'POSNR'.
  ls_fcat-col_pos = 2.
  ls_fcat-coltext = 'Item no'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'MATNR'.
  ls_fcat-col_pos = 3.
  ls_fcat-coltext = 'Material'.
  APPEND ls_fcat TO lt_fcat.
ENDFORM.                    " fldcatvbap
FORM layoutvbap .
  CLEAR ls_layo.
  ls_layo-grid_title = 'SALES DOCUMENT ITEM DATA'.
ENDFORM.                    " layoutvbap
FORM reg_handlers .
  CREATE OBJECT ob.
  SET HANDLER ob->handle_double_click FOR vbap_grid.
ENDFORM.                    " reg_handlers
FORM displayvbap .
  CALL METHOD vbap_grid->set_table_for_first_display
    EXPORTING
      is_layout       = ls_layo
    CHANGING
      it_outtab       = lt_vbap[]
      it_fieldcatalog = lt_fcat[].
ENDFORM.                    " displayvbap..




No comments:

Post a Comment