Friday, 9 November 2012

JOINING USING ALV REPORT


*&---------------------------------------------------------------------*
*& Report  ZRA_ALV_001
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zra_alv_001.

INCLUDE zra_alv_001_data.                   "DATA DECLARATION
INCLUDE zra_alv_001_sel.                   "SELECTION SCREEN
INCLUDE zra_alv_001_form.                  "SUBROUTINE

INITIALIZATION.

  PERFORM clear.               "CLEARING WORK AREAS AND INTERNAL TABLES

AT SELECTION-SCREEN.

  PERFORM validation.          "VALIDATE VBELN FROM VBAK

START-OF-SELECTION.

  PERFORM fetch_vbak_vbap_final_join.
  PERFORM prepare_fieldcat.
  PERFORM optimize_display.

END-OF-SELECTION.

  PERFORM display.

*&---------------------------------------------------------------------*
*&  Include           ZRA_ALV_001_DATA
*&---------------------------------------------------------------------*
TYPE-POOLS: slis.
TYPES: BEGIN OF ty_vbak,
         vbeln TYPE vbeln_va, "Sales Document
         erdat TYPE erdat,    "Date on Which Record Was Created
         erzet TYPE erzet,    "Entry time
        END OF ty_vbak,
        BEGIN OF ty_vbap,
         vbeln TYPE vbeln_va, "Sales Document
         posnr TYPE posnr_va, "Sales Document Item
         matnr TYPE matnr,    "Material Number
        END OF ty_vbap,
        BEGIN OF ty_final,
         vbeln TYPE vbeln_va, "Sales Document
         erdat TYPE erdat,    "Date on Which Record Was Created
         erzet TYPE erzet,    "Entry time
         posnr TYPE posnr_va, "Sales Document Item
         matnr TYPE matnr,    "Material Number
        END OF ty_final.

DATA:it_vbak TYPE STANDARD TABLE OF ty_vbak INITIAL SIZE 0,
     wa_vbak TYPE ty_vbak,
     it_vbap TYPE STANDARD TABLE OF ty_vbap INITIAL SIZE 0,
     wa_vbap TYPE ty_vbap,
     it_final TYPE STANDARD TABLE OF ty_final INITIAL SIZE 0,
     it_fcat TYPE slis_t_fieldcat_alv,
     wa_fcat TYPE slis_fieldcat_alv,
     wa_layo TYPE slis_layout_alv,
     wa_final TYPE ty_final,
     lv_vbeln TYPE vbak-vbeln,
     lv_index TYPE sytabix,
     lv_repid TYPE syrepid.

CONSTANTS: wc_x TYPE char1 VALUE 'X'.

*&---------------------------------------------------------------------*
*&  Include           ZRA_ALV_001_SEL
*&---------------------------------------------------------------------*
TABLES: vbak.
SELECT-OPTIONS:s_vbeln FOR vbak-vbeln.
PARAMETERS: r1 RADIOBUTTON GROUP g1 DEFAULT 'X',
            r2 RADIOBUTTON GROUP g1.

*&---------------------------------------------------------------------*
*&  Include           ZRA_ALV_001_FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  CLEAR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM clear .

  CLEAR: wa_vbak, wa_vbap, wa_final.
  REFRESH: it_vbak, it_vbap, it_final.

ENDFORM.                    " CLEAR
*&---------------------------------------------------------------------*
*&      Form  VALIDATION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM validation .

  IF s_vbeln IS NOT INITIAL.
    SELECT SINGLE vbeln
    FROM vbak
    INTO lv_vbeln
    WHERE vbeln IN s_vbeln.
    IF sy-subrc NE 0.
      MESSAGE:'Sales Document Number does not exist' TYPE'E'.


    ENDIF.
  ENDIF.

ENDFORM.                    " VALIDATION
*&---------------------------------------------------------------------*
*&      Form  FETCH_VBAK_VBAP_FINAL_JOIN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fetch_vbak_vbap_final_join .

  SELECT vbeln
         erdat
         erzet

  FROM vbak
  INTO TABLE it_vbak
  WHERE vbeln IN s_vbeln.
  IF sy-subrc EQ 0.
    SORT it_vbak BY vbeln.
  ENDIF.
  IF it_vbak IS NOT INITIAL.
    SELECT vbeln
           posnr
           matnr
    FROM  vbap
    INTO TABLE it_vbap
    FOR ALL ENTRIES IN it_vbak
    WHERE vbeln = it_vbak-vbeln.
    IF sy-subrc EQ 0.
      SORT it_vbap BY vbeln posnr.
    ENDIF.

    LOOP AT it_vbak INTO wa_vbak.
      CLEAR:wa_final.

      wa_final-vbeln = wa_vbak-vbeln.
      wa_final-erdat = wa_vbak-erdat.
      wa_final-erzet = wa_vbak-erzet.



      LOOP AT it_vbap INTO wa_vbap FROM lv_index.
        IF wa_vbap-vbeln NE wa_vbak-vbeln.
          lv_index = sy-tabix.
          EXIT.
        ELSE.
          wa_final-posnr = wa_vbap-posnr.
          wa_final-matnr = wa_vbap-matnr.

        ENDIF.
        APPEND wa_final TO it_final.
      ENDLOOP.


    ENDLOOP.

    SORT it_final BY vbeln.
  ENDIF.

ENDFORM.                    " FETCH_VBAK_VBAP_FINAL_JOIN
*&---------------------------------------------------------------------*
*&      Form  PREPARE_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM prepare_fieldcat .

  REFRESH: it_fcat.
  CLEAR wa_fcat.
  wa_fcat-tabname = 'IT_FINAL'.
  wa_fcat-fieldname = 'VBELN'.
  wa_fcat-col_pos = '1'.
  wa_fcat-seltext_m = 'SALES ORDER NUMBER'.
  APPEND wa_fcat TO it_fcat.

  CLEAR wa_fcat.
  wa_fcat-tabname = 'IT_FINAL'.
  wa_fcat-fieldname = 'ERDAT'.
  wa_fcat-col_pos = '2'.
  wa_fcat-seltext_m = 'CREATION DATE'.
  APPEND wa_fcat TO it_fcat.

  CLEAR wa_fcat.
  wa_fcat-tabname = 'IT_FINAL'.
  wa_fcat-fieldname = 'ERZET'.
  wa_fcat-col_pos = '3'.
  wa_fcat-seltext_m = 'CREATION TIME'.
  APPEND wa_fcat TO it_fcat.

  CLEAR wa_fcat.
  wa_fcat-tabname = 'IT_FINAL'.
  wa_fcat-fieldname = 'POSNR'.
  wa_fcat-col_pos = '4'.
  wa_fcat-seltext_m = 'ITEM NUMBER'.
  APPEND wa_fcat TO it_fcat.

  CLEAR wa_fcat.
  wa_fcat-tabname = 'IT_FINAL'.
  wa_fcat-fieldname = 'MATNR'.
  wa_fcat-col_pos = '5'.
  wa_fcat-seltext_m = 'MATERIAL NUMBER'.
  APPEND wa_fcat TO it_fcat.



ENDFORM.                    " PREPARE_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  OPTIMIZE_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM optimize_display .

  wa_layo-colwidth_optimize = wc_x.
  wa_layo-zebra = wc_x.


ENDFORM.                    " OPTIMIZE_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display .

  lv_repid = sy-repid.
  IF r1 = 'X'.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '
       i_callback_program                = lv_repid
*   I_CALLBACK_PF_STATUS_SET          = ' '
*   I_CALLBACK_USER_COMMAND           = ' '
*   I_CALLBACK_TOP_OF_PAGE            = ' '
*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*   I_CALLBACK_HTML_END_OF_LIST       = ' '
*   I_STRUCTURE_NAME                  =
*   I_BACKGROUND_ID                   = ' '
*   I_GRID_TITLE                      =
*   I_GRID_SETTINGS                   =
       is_layout                         = wa_layo
       it_fieldcat                       = it_fcat
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
*   IT_SORT                           =
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
*   I_DEFAULT                         = 'X'
*   I_SAVE                            = ' '
*   IS_VARIANT                        =
*   IT_EVENTS                         =
*   IT_EVENT_EXIT                     =
*   IS_PRINT                          =
*   IS_REPREP_ID                      =
*   I_SCREEN_START_COLUMN             = 0
*   I_SCREEN_START_LINE               = 0
*   I_SCREEN_END_COLUMN               = 0
*   I_SCREEN_END_LINE                 = 0
*   I_HTML_HEIGHT_TOP                 = 0
*   I_HTML_HEIGHT_END                 = 0
*   IT_ALV_GRAPHICS                   =
*   IT_HYPERLINK                      =
*   IT_ADD_FIELDCAT                   =
*   IT_EXCEPT_QINFO                   =
*   IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER           =
*   ES_EXIT_CAUSED_BY_USER            =
      TABLES
        t_outtab                          = it_final
* 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.

  ELSEIF r2 = 'X'.
    CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
     EXPORTING
*   I_INTERFACE_CHECK              = ' '
*   I_BYPASSING_BUFFER             =
*   I_BUFFER_ACTIVE                = ' '
     i_callback_program             = lv_repid
*   I_CALLBACK_PF_STATUS_SET       = ' '
*   I_CALLBACK_USER_COMMAND        = ' '
*   I_STRUCTURE_NAME               =
     is_layout                      = wa_layo
     it_fieldcat                    = it_fcat
*   IT_EXCLUDING                   =
*   IT_SPECIAL_GROUPS              =
*   IT_SORT                        =
*   IT_FILTER                      =
*   IS_SEL_HIDE                    =
*   I_DEFAULT                      = 'X'
*   I_SAVE                         = ' '
*   IS_VARIANT                     =
*   IT_EVENTS                      =
*   IT_EVENT_EXIT                  =
*   IS_PRINT                       =
*   IS_REPREP_ID                   =
*   I_SCREEN_START_COLUMN          = 0
*   I_SCREEN_START_LINE            = 0
*   I_SCREEN_END_COLUMN            = 0
*   I_SCREEN_END_LINE              = 0
*   IR_SALV_LIST_ADAPTER           =
*   IT_EXCEPT_QINFO                =
*   I_SUPPRESS_EMPTY_DATA          = ABAP_FALSE
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER        =
*   ES_EXIT_CAUSED_BY_USER         =
      TABLES
        t_outtab                       = it_final
* 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.
  ENDIF.

ENDFORM.                    " DISPLAY

No comments: