Thursday, 11 April 2013

MATERIAL SALES VIEW IN SAP ABAP


REPORT  ZRA_TEST_023 LINE-SIZE 140
                 LINE-COUNT 60(3)
                 MESSAGE-ID zsaki
                 NO STANDARD PAGE HEADING.
INCLUDE ZRA_TEST_023_data.           "Data Declaration
INCLUDE ZRA_TEST_023_sel.            "Selection Screen
INCLUDE ZRA_TEST_023_form.           "Subroutines

INITIALIZATION.

AT SELECTION-SCREEN OUTPUT.


  perform output.

START-OF-SELECTION.

  IF r1 = 'X'.
    PERFORM sales_data.
    PERFORM display_data.
  ENDIF.

  IF r2 = 'X'.
    PERFORM material_data.
    PERFORM display1_data.
  ENDIF.


*&---------------------------------------------------------------------*
*&  Include           ZRA_TEST_023_DATA
*&---------------------------------------------------------------------*

TYPES : BEGIN OF ty_vbak,
        vbeln TYPE vbeln_va,
        vkorg TYPE vkorg,
        erdat TYPE erdat,
        ernam TYPE ernam,
        vtweg TYPE vtweg,
        spart TYPE spart,
        END OF ty_vbak,

        BEGIN OF ty_vbap,
        vbeln TYPE vbeln_va,
        posnr TYPE posnr,
        matnr TYPE matnr,
        netwr TYPE netwr_ap,
        END OF ty_vbap,
        BEGIN OF ty_mara,
        matnr TYPE matnr,
        mbrsh TYPE mbrsh ,
        mtart TYPE mtart,
        matkl TYPE matkl,
        meins TYPE meins,
        END OF ty_mara,

        BEGIN OF ty_makt,
        matnr TYPE matnr,
        maktx TYPE maktx,
        maktg TYPE maktg,
        spras TYPE spras,
        END OF ty_makt,


        BEGIN OF ty_main,
        vbeln TYPE vbeln_va,
        vkorg TYPE vkorg,
        erdat TYPE erdat,
        ernam TYPE ernam,
        vtweg TYPE vtweg,
        spart TYPE spart,
        posnr TYPE posnr,
        matnr TYPE matnr,
        netwr TYPE netwr_ap,
        END OF ty_main,

        BEGIN OF ty_main1,
        matnr TYPE matnr,
        mbrsh TYPE mbrsh ,
        mtart TYPE mtart,
        matkl TYPE matkl,
        meins TYPE meins,
        maktx TYPE maktx,
        maktg TYPE maktg,
        spras TYPE spras,
        END OF ty_main1.

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_main TYPE STANDARD TABLE OF ty_main INITIAL SIZE 0,
        wa_main TYPE ty_main,


        it_mara TYPE STANDARD TABLE OF ty_mara INITIAL SIZE 0,
        wa_mara TYPE ty_mara,
        it_makt TYPE STANDARD TABLE OF ty_makt INITIAL SIZE 0,
        wa_makt TYPE ty_makt,

        it_main1 TYPE STANDARD TABLE OF ty_main1 INITIAL SIZE 0,
        wa_main1 TYPE ty_main1,

        v_vbeln TYPE vbeln_va,
        v_matnr TYPE matnr.
*&---------------------------------------------------------------------*
*&  Include           ZRA_TEST_023_SEL

*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE text-000.
PARAMETERS : r1 RADIOBUTTON GROUP gp1 DEFAULT 'X' USER-COMMAND aaa,
             r2 RADIOBUTTON GROUP gp1.
SELECTION-SCREEN END OF BLOCK b0.


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:  s_vbeln FOR v_vbeln MODIF ID bbb.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECT-OPTIONS:  s_matnr FOR v_matnr MODIF ID  ccc.
SELECTION-SCREEN END OF BLOCK b2.
*&---------------------------------------------------------------------*
*&  Include           ZRA_TEST_023_FORM
*&  Subroutines
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form Clear
*&---------------------------------------------------------------------*
* text
*&---------------------------------------------------------------------*
* -->p1           text
* -->p2           text
*&---------------------------------------------------------------------*


FORM clear.
  CLEAR: wa_vbak,
         wa_mara,
         wa_makt,
         wa_vbap,
         wa_main,
         wa_main1.
  REFRESH: it_vbak,
           it_mara,
           it_makt,
           it_vbap,
           it_main,
           it_main1.
ENDFORM.                  "Clear

*&---------------------------------------------------------------------*
*&  Include           ZRA_TEST_023_FORM
*&---------------------------------------------------------------------*
*& Form output
*&---------------------------------------------------------------------*
* text
*&---------------------------------------------------------------------*
* -->p1           text
* -->p2           text
*&---------------------------------------------------------------------*
FORM output.


  LOOP AT SCREEN.
    IF r1 = 'X'.
      IF screen-group1 = 'CCC'.
        screen-active = 0.
      ENDIF.
      MODIFY SCREEN.

    ENDIF.

    IF r2 = 'X'.
      IF screen-group1 = 'BBB'.
        screen-active = 0.
      ENDIF.
      MODIFY SCREEN.

    ENDIF.
  ENDLOOP.
  endform.



*&---------------------------------------------------------------------*
*&      Form  sales_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sales_data .

  SELECT vbeln
         vkorg
         erdat
         ernam
         vtweg
         spart
         FROM vbak
         INTO TABLE it_vbak
         WHERE vbeln IN s_vbeln.
  IF sy-subrc = 0.
    SORT it_vbak BY vbeln.
  ELSE.
    MESSAGE e000.
  ENDIF.

  IF NOT it_vbak[] IS INITIAL.
    SELECT vbeln
           posnr
           matnr
           netwr
           FROM vbap
           INTO TABLE it_vbap
           FOR ALL ENTRIES IN it_vbak
           WHERE vbeln = it_vbak-vbeln.

    IF sy-subrc = 0.
      DELETE ADJACENT DUPLICATES FROM it_vbap COMPARING vbeln.
    ELSE.
      MESSAGE e001.
    ENDIF.
  ENDIF.

  LOOP AT it_vbap INTO wa_vbap.
    wa_main-vbeln = wa_vbap-vbeln.
    wa_main-posnr = wa_vbap-posnr.
    wa_main-matnr = wa_vbap-matnr.
    wa_main-netwr = wa_vbap-netwr.
    READ TABLE it_vbak INTO wa_vbak WITH KEY vbeln = wa_vbap-vbeln BINARY SEARCH.
    IF sy-subrc EQ 0.
      wa_main-vkorg = wa_vbak-vkorg.
      wa_main-erdat = wa_vbak-erdat.
      wa_main-ernam = wa_vbak-ernam.
      wa_main-vtweg = wa_vbak-vtweg.
      wa_main-spart = wa_vbak-spart.
    ENDIF.
    APPEND wa_main TO it_main.
  ENDLOOP.

ENDFORM.                    " sales_data

*&---------------------------------------------------------------------*
*&      Form  material_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM material_data .

  SELECT matnr
        mbrsh
        mtart
        matkl
        meins
        FROM mara
         INTO TABLE it_mara
         WHERE matnr IN s_matnr.


  SELECT matnr
    maktx
    maktg
    spras
  FROM makt
       INTO TABLE it_makt
       FOR ALL ENTRIES IN it_mara
       WHERE matnr = it_mara-matnr.

  LOOP AT it_makt INTO wa_makt.
    wa_main1-matnr = wa_makt-matnr.
    wa_main1-maktx = wa_makt-maktx.
    wa_main1-maktg = wa_makt-maktg.
    wa_main1-spras = wa_makt-spras.
    READ TABLE it_mara INTO wa_mara WITH KEY matnr = wa_makt-matnr BINARY SEARCH.
    IF sy-subrc EQ  0.
      wa_main1-mbrsh = wa_mara-mbrsh.
      wa_main1-mtart = wa_mara-mtart.
      wa_main1-matkl = wa_mara-matkl.
      wa_main1-meins = wa_mara-meins.
    ENDIF.
    APPEND wa_main1 TO it_main1.
  ENDLOOP.

ENDFORM.                    " material_data

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  display_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*

FORM display_data .

  LOOP AT it_main INTO wa_main.
     WRITE:/ wa_main-vbeln,
             wa_main-vkorg,
             wa_main-erdat,
             wa_main-ernam,
             wa_main-vtweg,
             wa_main-spart,
             wa_main-posnr,
             wa_main-matnr,
             wa_main-netwr.
  ENDLOOP.

ENDFORM.                    " display_data

*&---------------------------------------------------------------------*
*&      Form  display1_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*

FORM display1_data .

  LOOP AT it_main1 INTO wa_main1.
    WRITE:/ wa_main1-matnr,
      wa_main1-mbrsh,
      wa_main1-mtart,
      wa_main1-matkl,
      wa_main1-meins,
      wa_main1-maktx,
wa_main1-maktg,
wa_main1-spras.

  ENDLOOP.

ENDFORM.                    " display1_data

Saturday, 10 November 2012

CLASSICAL INTERACTIVE AND ALV IN SINGLE REPORT


*&---------------------------------------------------------------------*
*& Report  ZRA_TEST_046
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zra_test_046.
TABLES: mara.
TYPE-POOLS:vrm,slis.
TYPES: BEGIN OF ty_mara,
         c1 TYPE char1,
         matnr TYPE matnr,
         ersda TYPE ersda,
        END OF ty_mara,
        BEGIN OF ty_marc,
          matnr TYPE matnr,
          werks TYPE werks_d,
          END OF ty_marc.
DATA: it_mara TYPE STANDARD TABLE OF ty_mara INITIAL SIZE 0,
      wa_mara TYPE ty_mara,
      it_marc TYPE STANDARD TABLE OF ty_marc INITIAL SIZE 0,
      wa_marc TYPE ty_marc,
      lv_matnr TYPE matnr,
      it_dlist TYPE vrm_values,
      wa_dlist TYPE vrm_value,
      i_fldcat TYPE slis_t_fieldcat_alv,
      wa_fldcat TYPE slis_fieldcat_alv,
      wa_layout TYPE slis_layout_alv.
PARAMETERS: p_dlist TYPE c AS LISTBOX VISIBLE LENGTH 15.
SELECT-OPTIONS: s_matnr FOR mara-matnr.

INITIALIZATION.
  REFRESH: it_dlist.
  CLEAR: wa_dlist.

  wa_dlist-key = '1'.
  wa_dlist-text = 'CLASSICAL'.
  APPEND wa_dlist TO it_dlist.

  CLEAR: wa_dlist.

  wa_dlist-key = '2'.
  wa_dlist-text = 'INTERACTIVE'.
  APPEND wa_dlist TO it_dlist.

  CLEAR: wa_dlist.

  wa_dlist-key = '3'.
  wa_dlist-text = 'ALV'.
  APPEND wa_dlist TO it_dlist.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id                    = 'P_DLIST'
      values                = it_dlist

            .
AT SELECTION-SCREEN OUTPUT .

  CASE p_dlist.
    WHEN '1'.
      s_matnr-low = '1'.
      s_matnr-high = '1000'.
      s_matnr-sign = 'I'.
      APPEND s_matnr.
    WHEN '2'.
      CLEAR s_matnr.
      REFRESH s_matnr.
      s_matnr-low = '1001'.
      s_matnr-high = '2000'.
      s_matnr-sign = 'I'.
      APPEND s_matnr.
    WHEN '3'.
      CLEAR s_matnr.
      REFRESH s_matnr.
      s_matnr-low = '1'.
      s_matnr-high = '2000'.
      s_matnr-sign = 'I'.
      APPEND s_matnr.

  ENDCASE.

START-OF-SELECTION.
  SELECT matnr
         ersda
   FROM mara
    INTO CORRESPONDING FIELDS OF TABLE it_mara
    WHERE matnr IN s_matnr.
  IF sy-subrc = 0.
    SORT it_mara BY matnr.
  ENDIF.

END-OF-SELECTION.
  IF p_dlist = '1'.
    PERFORM display_classical.
  ELSEIF p_dlist = '2'.
    PERFORM display_classical.
  ELSEIF p_dlist = '3'.
    PERFORM create_fieldcatalog.
    PERFORM create_layout.
    PERFORM create_display.
ENDIF.

AT LINE-SELECTION.
  IF p_dlist = '2'.
    REFRESH it_marc.
    SELECT matnr
           werks
     FROM marc
   INTO TABLE it_marc
      WHERE matnr = wa_mara-matnr.
    IF sy-subrc = 0.
      SORT it_marc BY matnr.
      LOOP AT it_marc INTO wa_marc.
        WRITE: / wa_marc-matnr,
                 wa_marc-werks.
      ENDLOOP.
    ELSE.
      MESSAGE 'NO ENTRIES IN MARC' TYPE 'E'.
    ENDIF.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  display_classical
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_classical .
  IF it_mara IS NOT INITIAL.
    LOOP AT it_mara INTO wa_mara.
      WRITE: / wa_mara-matnr,
               wa_mara-ersda.
      HIDE wa_mara-matnr.
    ENDLOOP.
  ENDIF.
ENDFORM.                    " display_classical
*&---------------------------------------------------------------------*
*&      Form  create_fieldcatalog
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_fieldcatalog .
  DATA: c_pos TYPE i VALUE 1,
        r_pos TYPE i VALUE 1.

  wa_fldcat-col_pos = c_pos.
  wa_fldcat-row_pos = r_pos.
  wa_fldcat-fieldname = 'C1'.
  wa_fldcat-seltext_l = 'SELECT'.
  wa_fldcat-tabname = 'IT_MARA'.
  wa_fldcat-checkbox = 'X'.
  wa_fldcat-edit = 'X'.
  APPEND wa_fldcat TO i_fldcat.
  CLEAR wa_fldcat.

  c_pos = c_pos + 1.
  wa_fldcat-col_pos = c_pos.
  wa_fldcat-row_pos = r_pos.
  wa_fldcat-fieldname = 'MATNR'.
  wa_fldcat-seltext_l = 'MATERIAL NO.'.
  wa_fldcat-tabname = 'IT_MARA'.
  wa_fldcat-no_zero = 'X'.
  APPEND wa_fldcat TO i_fldcat.
  CLEAR wa_fldcat.

  c_pos = c_pos + 1.
  wa_fldcat-col_pos = c_pos.
  wa_fldcat-row_pos = r_pos.
  wa_fldcat-fieldname = 'ERSDA'.
  wa_fldcat-seltext_l = 'CREATED ON'.
  wa_fldcat-tabname = 'IT_MARA'.
  APPEND wa_fldcat TO i_fldcat.
ENDFORM.                    " create_fieldcatalog
*&---------------------------------------------------------------------*
*&      Form  create_layout
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_layout .
  wa_layout-colwidth_optimize = 'X'.
  wa_layout-zebra = 'X'.
ENDFORM.                    " create_layout
*&---------------------------------------------------------------------*
*&      Form  create_display
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_display .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     i_callback_program                = sy-repid
     is_layout                         = wa_layout
     it_fieldcat                       = i_fldcat
TABLES
      t_outtab                          = it_mara.
ENDFORM.                    " create_display