Monday, September 25, 2023

OOPS concept in ALV using container.

 *&---------------------------------------------------------------------*
*& Report Z_OOPS_CONTINER
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_oops_continer.
INCLUDE z_oops_continer_top.
INCLUDE z_oops_continer_imp.
AT SELECTION-SCREEN.
  PERFORM validation.

START-OF-SELECTION.
  PERFORM get_data.
  PERFORM field_cat.
  CALL SCREEN 9001.

END-OF-SELECTION.


*&---------------------------------------------------------------------*
*&      Module  STATUS_9001  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  " STATUS_9001  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  INILIZATION  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE inilization OUTPUT.
*----------------------------------------------------------------------*
*      -->P_FNAM     text
*      -->P_FVAL     text
*----------------------------------------------------------------------*
  IF gr_cont IS INITIAL.
    CREATE OBJECT gr_cont
      EXPORTING
        container_name 'CNT'.
    IF gr_cont IS NOT INITIAL.
      CREATE OBJECT gr_split1
        EXPORTING
          parent  gr_cont
          rows    2
          columns 1.
      IF gr_split1 IS NOT INITIAL.
        CALL METHOD gr_split1->get_container
          EXPORTING
            row       1
            column    1
          RECEIVING
            container gr_cont_kna1.

        CALL METHOD gr_split1->get_container
          EXPORTING
            row       2
            column    1
          RECEIVING
            container gr_cont_2.

        IF gr_cont_2 IS NOT INITIAL.
          CREATE OBJECT gr_split2
            EXPORTING
              parent  gr_cont_2
              rows    1
              columns 2.

          IF gr_split2 IS NOT INITIAL.
            CALL METHOD gr_split2->get_container
              EXPORTING
                row       1
                column    1
              RECEIVING
                container gr_cont_vbak.

            CALL METHOD gr_split2->get_container
              EXPORTING
                row       1
                column    2
              RECEIVING
                container gr_cont_vbap.

            IF gr_cont_kna1 IS NOT INITIAL.
              CREATE OBJECT gr_alv_kna1
                EXPORTING
                  i_parent gr_cont_kna1.
            ENDIF.
            IF gr_cont_vbak IS NOT INITIAL.
              CREATE OBJECT gr_alv_vbak
                EXPORTING
                  i_parent gr_cont_vbak.
            ENDIF.
            IF gr_cont_vbap IS NOT INITIAL.
              CREATE OBJECT gr_alv_vbap
                EXPORTING
                  i_parent gr_cont_vbap.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
  IF gr_alv_kna1 IS NOT INITIAL.
    is_lay-zebra 'X'.
    is_lay-cwidth_opt 'X'.

    CALL METHOD gr_alv_kna1->set_table_for_first_display
      EXPORTING
        is_layout                     is_lay
      CHANGING
        it_outtab                     t_kna1
        it_fieldcatalog               t_fcat
      EXCEPTIONS
        invalid_parameter_combination 1
        program_error                 2
        too_many_lines                3
        OTHERS                        4.
    IF sy-subrc <> 0.
*     Implement suitable error handling here
    ENDIF.
  ENDIF.

  IF gr_alv_vbak IS NOT INITIAL.
    is_lay-zebra 'X'.
    is_lay-cwidth_opt 'X'.
    CALL METHOD gr_alv_vbak->set_table_for_first_display
      EXPORTING
        is_layout                     is_lay
      CHANGING
        it_outtab                     t_vbak
        it_fieldcatalog               t_fcat2
      EXCEPTIONS
        invalid_parameter_combination 1
        program_error                 2
        too_many_lines                3
        OTHERS                        4.
    IF sy-subrc <> 0.
*     Implement suitable error handling here
    ENDIF.
  ENDIF.

  IF gr_alv_vbap IS NOT INITIAL.
    is_lay-zebra 'X'.
    is_lay-cwidth_opt 'X'.
    CALL METHOD gr_alv_vbap->set_table_for_first_display
      EXPORTING
        is_layout                     is_lay
      CHANGING
        it_outtab                     t_vbap
        it_fieldcatalog               t_fcat3
      EXCEPTIONS
        invalid_parameter_combination 1
        program_error                 2
        too_many_lines                3
        OTHERS                        4.
    IF sy-subrc <> 0.
*     Implement suitable error handling here
    ENDIF.
  ENDIF.
ENDMODULE.                 " INILIZATION  OUTPUT


*&---------------------------------------------------------------------*
*&  Include           Z_OOPS_CONTINER_TOP
*&---------------------------------------------------------------------*
TABLES kna1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS s_kunnr FOR kna1-kunnr.
SELECT-OPTIONS s_land1 FOR kna1-land1.
SELECT-OPTIONS s_ort01 FOR kna1-ort01.
SELECTION-SCREEN END OF BLOCK b1.
TYPES BEGIN OF ty_vbak,
          vbeln TYPE vbeln,
          audat TYPE audat,
          vkorg TYPE vkorg,
          netwr TYPE netwr,
          kunnr TYPE kunnr,
        END OF ty_vbak,
        BEGIN OF ty_kna1,
          kunnr TYPE kunnr,
          name1 TYPE name1,
          ort01 TYPE ort01,
          pstlz TYPE pstlz,
        END OF ty_kna1,
        BEGIN OF ty_vbap,
          vbeln  TYPE vbeln,
          posnr  TYPE posnr,
          matnr  TYPE matnr,
          netwr  TYPE netwr,
          kwmeng TYPE kwmeng,
        END OF ty_vbap.
DATA t_vbak      TYPE STANDARD TABLE OF ty_vbak INITIAL SIZE 1,
       t_vbak_temp TYPE STANDARD TABLE OF ty_vbak INITIAL SIZE 1,
       t_kna1      TYPE STANDARD TABLE OF ty_kna1 INITIAL SIZE 1,
       t_kna1_temp TYPE STANDARD TABLE OF ty_kna1 INITIAL SIZE 1,
       t_vbap      TYPE STANDARD TABLE OF ty_vbap INITIAL SIZE 1,
       t_fcat      TYPE lvc_t_fcat,
       w_fcat      TYPE lvc_s_fcat,
       t_fcat2     TYPE lvc_t_fcat,
       w_fcat2     TYPE lvc_s_fcat,
       t_fcat3     TYPE lvc_t_fcat,
       w_fcat3     TYPE lvc_s_fcat,
       w_vbak      TYPE ty_vbak,
       w_kna1      TYPE ty_kna1,
       w_vbap      TYPE ty_vbap.
DATA v_kunnr TYPE kunnr,
       v_land1 TYPE land1,
       v_ort01 TYPE ort01.
DATA is_lay  TYPE lvc_s_layo.
DATA gr_alv_kna1 TYPE REF TO cl_gui_alv_grid.
DATA gr_alv_vbak TYPE REF TO cl_gui_alv_grid.
DATA gr_alv_vbap TYPE REF TO cl_gui_alv_grid.

DATA gr_cont TYPE REF TO cl_gui_custom_container.

DATA gr_cont_kna1 TYPE REF TO cl_gui_container.
DATA gr_cont_2 TYPE REF TO cl_gui_container.
DATA gr_cont_vbak TYPE REF TO cl_gui_container.
DATA gr_cont_vbap TYPE REF TO cl_gui_container.

DATA gr_split1 TYPE REF TO  cl_gui_splitter_container.
DATA gr_split2 TYPE REF TO  cl_gui_splitter_container.


*&---------------------------------------------------------------------*
*&  Include           Z_OOPS_CONTINER_IMP
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  VALIDATION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM validation .
  IF s_kunnr IS NOT INITIAL.
    SELECT SINGLE kunnr FROM kna1 INTO v_kunnr WHERE kunnr IN s_kunnr.
    IF sy-subrc <> 0.
      MESSAGE 'Customer is invalid' TYPE 'E'.
    ENDIF.
  ENDIF.
  IF s_land1 IS NOT INITIAL.
    SELECT SINGLE land1 FROM t005 INTO v_land1 WHERE land1 IN s_land1.
    IF sy-subrc <> 0.
      MESSAGE 'Country is invalid' TYPE 'E'.
    ENDIF.
  ENDIF.
  IF s_ort01 IS NOT INITIAL.
    SELECT SINGLE ort01 FROM kna1 INTO v_ort01 WHERE ort01 IN s_ort01.
    IF sy-subrc <> 0.
      MESSAGE 'City is invalid' TYPE 'E'.
    ENDIF.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .
  SELECT kunnr name1 ort01 pstlz FROM kna1 INTO TABLE t_kna1 WHERE kunnr IN s_kunnr AND land1 IN s_land1 AND ort01 IN s_ort01.
  IF sy-subrc <> 0.
    MESSAGE 'NO RECORDS FOUND FOR THIS COMBINATION' TYPE 'I'.
    LEAVE LIST-PROCESSING.
  ELSE.
    SORT t_kna1 BY kunnr.
  ENDIF.
  IF t_kna1 IS NOT INITIAL.
    t_kna1_temp t_kna1.
    SORT t_kna1_temp BY kunnr.
    DELETE ADJACENT DUPLICATES FROM t_kna1_temp COMPARING kunnr.
    SELECT vbeln audat vkorg netwr kunnr FROM vbak INTO TABLE t_vbak FOR ALL ENTRIES IN t_kna1_temp WHERE kunnr t_kna1_temp-kunnr.
    IF sy-subrc 0.
      SORT t_vbak BY vbeln.
    ENDIF.
    IF t_vbak IS NOT INITIAL.
      t_vbak_temp t_vbak.
      SORT t_vbak_temp BY vbeln kunnr.
      DELETE ADJACENT DUPLICATES FROM t_vbak_temp COMPARING vbeln kunnr.
      SELECT vbeln posnr matnr netwr kwmeng FROM vbap INTO TABLE t_vbap FOR ALL ENTRIES IN t_vbak_temp WHERE vbeln t_vbak_temp-vbeln.
      IF sy-subrc 0.
        SORT t_vbap BY vbeln.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.

*----------------------------------------------------------------------*
*  MODULE STATUS_9001 OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE status_9001 OUTPUT.
  SET PF-STATUS 'ZMYSTATUS_9001'.
  SET TITLEBAR 'ZTITLE_9001'.

ENDMODULE.                    "STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&      Form  FIELD_CAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM field_cat .
  PERFORM fill_fcat USING 'KUNNR' 'CUSTOMER NAME',
                             'NAME1' 'NAME',
                             'ORT01' 'CITY',
                             'PSTLZ' 'POSTALCODE'.
  PERFORM fill_fcat2 USING :  'VBELN' 'SALES ID',
                              'KUNNR' 'CUSTOMER NAME',
                             'AUDAT' 'DATE',
                             'VKORG' 'SALES ORG.',
                             'NETWR' 'PRICE'.

  PERFORM fill_fcat3 USING 'VBELN' 'SALES ID',
                             'POSNR' 'SL NO.',
                             'MATNR' 'MATERIAL',
                             'KWMENG' 'QUANTITY',
                             'NETWR'  'PRICE'.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_9001  INPUT

*&---------------------------------------------------------------------*
*&      Form  fill_fcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_FNAM     text
*      -->P_FVAL     text
*----------------------------------------------------------------------*
FORM fill_fcat USING p_fnam p_fval.
  CLEAR w_fcat.
  w_fcat-col_pos '4'.
  w_fcat-fieldname p_fnam.
  w_fcat-scrtext_m p_fval.
  APPEND w_fcat TO t_fcat.
ENDFORM.                    "fill_fcat


*&---------------------------------------------------------------------*
*&      Form  FILL_FCAT2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0404   text
*      -->P_0405   text
*----------------------------------------------------------------------*
FORM fill_fcat2  USING  p_fnam p_fval.
  CLEAR w_fcat2.
  w_fcat2-col_pos '4'.
  w_fcat2-fieldname p_fnam.
  w_fcat2-scrtext_m p_fval.
  APPEND w_fcat2 TO t_fcat2.
ENDFORM.                    " FILL_FCAT2
*&---------------------------------------------------------------------*
*&      Form  FILL_FCAT3
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0432   text
*      -->P_0433   text
*----------------------------------------------------------------------*
FORM fill_fcat3  USING p_fnam p_fval.
  CLEAR w_fcat3.
  w_fcat3-col_pos '4'.
  w_fcat3-fieldname p_fnam.
  w_fcat3-scrtext_m p_fval.
  APPEND w_fcat3 TO t_fcat3.
ENDFORM.                    " FILL_FCAT3


SCREEN9001:
PROCESS BEFORE OUTPUT.
  MODULE status_9001.
  MODULE inilization .

PROCESS AFTER INPUT.
  MODULE user_command_9001.
INPUT SCREEN:


OUTPUT:



No comments:

Post a Comment

Translation of language in Smart Forms.

  Step by Step process to Translate English language to Spanish language in smart form. 1. Go to T-Code SE63 in command bar and then enter. ...