Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

report code with ALV

Former Member
0 Kudos

Hi

Can any body provide me the code for report with selection screen using ALV.

Thanks in advance

Prasanna Kumar

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi Prasanna,

Below is an example of ALV reporting.

*&---------------------------------------------------------------------*
*& Report  ZVVF_MR028_STOCKLEDGER                                      *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ZVVF_MR028_STOCKLEDGER                  .



**---------------------------------------------------------------------*
*       Tables
**---------------------------------------------------------------------*

TABLES:      EKKO,    "PURCHASING DOC. HEADER
             EKPO,    "PURCHASING DOC. ITEM
             MAKT,    "MATERIAL DISCRIPTION
             LFA1,    "VENDOR MASTER
             RSEG,    "DOC. ITEM - INCOMING INVOICE
             KONV,    "CONDITION (TRANSECTION DATA - CLUSTER TABLE)
             EKPA,    "Partner Roles in Purchasing
             MSEG,
             t247,
             mardh,
             mara.

**---------------------------------------------------------------------*
*       Types                    Begin with TY_
**---------------------------------------------------------------------*

TYPE-POOLS slis.

TYPES  :  BEGIN OF ty_head,

              p_date TYPE dats,
              matnr LIKE mseg-matnr,
              maktx LIKE makt-maktx,
              openbal LIKE mardh-labst,
              r_po LIKE mseg-menge,
              r_prodord LIKE mseg-menge,
              r_byprod LIKE mseg-menge,
              r_others LIKE mseg-menge,
              R_TOTAL TYPE mseg-menge,
              i_prod LIKE mseg-menge,
              i_cust LIKE mseg-menge,
              i_costcen LIKE mseg-menge,
              i_scrapping LIKE mseg-menge,
              i_subcontractor LIKE mseg-menge,
              i_sampling LIKE mseg-menge,
              purret LIKE mseg-menge,
              i_total like mseg-menge,
              stock_out LIKE mseg-menge,
              stock_in LIKE mseg-menge,
              stock_transit LIKE mseg-menge,
              m_to_m_transit  LIKE mseg-menge,
              phy_loss LIKE mseg-menge,
              phy_gain LIKE mseg-menge,
              closing_bal LIKE mseg-menge,
              current_bal LIKE mseg-menge,
              bwart like mseg-bwart,
              werks like mseg-werks,
          END OF ty_head.

types :  begin of ty_docs,
         matnr like mseg-matnr,  "Material
         budat like mkpf-budat,  "Posting date
         menge like mseg-menge,  "Qty
         xblnr like mkpf-xblnr,  "Ref doc
         end of ty_docs.

data : w_cnt type I.
data : w_chk type i.

TYPES: BEGIN OF TY_KONV,

             KNUMV LIKE KONV-KNUMV,
             KBETR LIKE KONV-KBETR,
             KSCHL LIKE KONV-KSCHL,
             KWERT LIKE KONV-KAWRT,

       END OF TY_KONV.


TYPES: BEGIN OF TY_KBETR,
*              KBETR LIKE KONV-KBETR,
              KWERT LIKE KONV-KWERT,
          END OF TY_KBETR.


TYPES: BEGIN OF TY_RSEG,
              EBELN LIKE RSEG-EBELN,
              MATNR LIKE RSEG-MATNR,
              WRBTR LIKE RSEG-WRBTR,
              KSCHL LIKE RSEG-KSCHL,
              LIFNR LIKE RSEG-LIFNR,

          END OF TY_RSEG.

TYPES: BEGIN OF TY_NAME1,
              NAME1 LIKE LFA1-NAME1,
       END OF TY_NAME1.

**-----------------------------------------------------------
** Each Condition and their values w.r.t different docu types
**-----------------------------------------------------------
*data: begin of temp_head occurs 0,
*        kschl  like  konv-kschl,  " Condition type
*        kwert  like  konv-kwert,  " Condition value
*      end of temp_head.
*

**---------------------------------------------------------------------*
*       Constants                Begin with C_
**---------------------------------------------------------------------*

CONSTANTS: st_formname_top_of_page TYPE slis_formname
                              VALUE 'TOP_OF_PAGE-ALV'.


**---------------------------------------------------------------------*
*       Data                     Begin with W_
**---------------------------------------------------------------------*

*-------- Declarations for ALV Grid.

DATA:   it_st_list_top_of_page TYPE slis_t_listheader,
        it_st_fieldcat TYPE slis_t_fieldcat_alv,
        it_st_events   TYPE slis_t_event,
        st_layout   TYPE slis_layout_alv,
        s_status TYPE slis_formname VALUE 'STANDARD_ST01',
        s_user_command TYPE slis_formname VALUE 'USER_COMMAND-ALV',
        s_repid LIKE sy-repid,
        s_save(1) TYPE c,
        s_variant LIKE disvariant,
        code LIKE disvariant-handle.


data : begin of it_stockclose occurs 0,
       werks like s031-werks,   "Plant
       matnr like mara-matnr,   "Material
       lgort like mard-lgort,   "Storage Loc
       labst like mardh-labst,  "Unrestricted Stock
       insme like mardh-insme,  "Inspection Stock
       speme like mardh-speme,  "Safety stock
       einme like mardh-einme,  "Total stock of rest batches
       retme like mardh-retme,  "Blocked stock returns
       end of it_stockclose.

data : begin of it_finalstock occurs 0,
       werks like mseg-werks,   "Plant
       matnr like mseg-matnr,   "Material code
       lgort like mard-lgort,   "Sto Loc
       menge like mseg-menge,   "Qty
*       budat like mkpf-budat,   "Posting Date
       end of it_finalstock.

data : begin of it_docs occurs 0,
       matnr like mseg-matnr,   "Material code
       budat like mkpf-budat,   "Posting date
       bwart like mseg-bwart,   "Movement type
       menge like mseg-menge,   "Quantity
       werks like mseg-werks,   "Plant
       shkzg like mseg-shkzg,   "Credit/debit
       lgort like mseg-lgort,   "Sto Loc
       maktx like makt-maktx,   "Material Discription
       end of it_docs.

data : begin of it_mkpf occurs 0,
       budat like mkpf-budat,   "Posting date

       mblnr like mkpf-mblnr,   "Material Doc
       xblnr like mkpf-xblnr,   "Delivery ref no
       mjahr like mkpf-mjahr,   "Fiscal yr
       cpudt like mkpf-cpudt,
       end of it_mkpf.

data : begin of it_mseg occurs 0,
       matnr like mseg-matnr,   "Material
       bwart like mseg-bwart,   "Movement type
       menge like mseg-menge,   "Qty
       werks like mseg-werks,   "Plant
       mjahr like mseg-mjahr,   "Fiscal yr
       shkzg like mseg-shkzg,   "Credit/Debit Indicator
       lgort like mard-lgort,   "Sto loc
       budat like mkpf-budat,   "Posting date
       xblnr like mkpf-xblnr,   "Delivery ref
       cpudt like mkpf-cpudt,
       end of it_mseg.

data : begin of it_matnr occurs 0,
       matnr like mara-matnr,   "Material
       end of it_matnr.

data : w_monat  type monat.    "Month number

data : w_gjahr like sy-datum,    "Date
       w_date_fiscal(4) type n,  "Year
       w_date like sy-datum,     "Date
       w_buper like t009b-poper, "Posting period
       w_year like t009b-bdatj,  "Posting date
       w_datum(2) type n.        "Date

**---------------------------------------------------------------------*
*       Internal tables          Begin with IT_
**---------------------------------------------------------------------*

DATA    :  IT_HEAD TYPE STANDARD TABLE OF TY_HEAD WITH HEADER LINE.

***Issues and receipts
data : it_issue type ty_docs occurs 0 with header line,
       it_receipt type ty_docs occurs 0 with header line,
       it_issue_date type ty_docs occurs 0 with header line,
       it_receipt_date type ty_docs occurs 0 with header line.
data:   w_dval like mseg-menge,
        w_opbal like mseg-menge.

**----------------------------------------------------------------------
**
**  WORK AREAS: Begin with WA_
**
**----------------------------------------------------------------------
**
*
*DATA: wa_HEAD type TY_HEAD.
*data: w_tkwert    type p decimals 2 value 0,
*      grmenge     like ekpo-menge,
*      w_tot_kwert type p decimals 2 value 0,
*      w_tmp_kwert type p decimals 2 value 0,
*      w_finalsum  type p decimals 2 value 0,                "#EC *
*      w_finalrate type p decimals 4 value 0.                "#EC *


**---------------------------------------------------------------------*
*       R A N G E S
**---------------------------------------------------------------------*

ranges: r_loekz  for  ekko-loekz.  " Deletion Indicator
ranges : r_movtype for mseg-bwart,   "Movement type
         r_date for sy-datum.        "Date


**---------------------------------------------------------------------*
*       Select Options          Begin with SO_
**---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK MAIN WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP 2.


*SELECT-OPTIONS : SO_LIFNR FOR EKKO-LIFNR.

*SELECT-OPTIONS : SO_EKORG FOR EKKO-EKORG .

*SELECT-OPTIONS : SO_WERKS FOR MSEG-WERKS .
*
*SELECT-OPTIONS : SO_EBELN FOR EKKO-EBELN.
*
*SELECT-OPTIONS : SO_DATE for sy-datum obligatory no-extension.
*
*SELECT-OPTIONS : SO_EKGRP FOR EKKO-EKGRP.
*
*SELECT-OPTIONS : SO_BSART FOR EKKO-BSART DEFAULT 'NB'.
*
*SELECT-OPTIONS : SO_MATKL FOR EKPO-MATKL.
*
*SELECT-OPTIONS : SO_MATNR FOR MSEG-MATNR.
*


select-options   : so_werks for mseg-werks default 'P001'. "Plant
select-options   : so_lgort for mseg-lgort. " Sto. Location
select-options   : so_matnr for mseg-matnr obligatory. "Material code
select-options   : so_mtart for mara-mtart. "Material type
SELECT-OPTIONS   : SO_MATKL FOR EKPO-MATKL. "Material Group
select-options   : so_date for sy-datum obligatory no-extension.

SELECTION-SCREEN SKIP 2.


selection-screen: skip,
                  begin of line,
                  comment (15) text-034.
parameters:     p_all    radiobutton group del.
selection-screen comment 25(9) for field p_all.
parameters:     p_del    radiobutton group del.
selection-screen comment 45(12) for field p_del.
parameters:     p_undel  radiobutton group del default 'X'.
selection-screen comment 65(14) for field p_undel.
selection-screen end of line.

SELECTION-SCREEN SKIP 2.


SELECTION-SCREEN END OF BLOCK MAIN.

**---------------------------------------------------------------------*
*       Parameters              Begin with PR_
**---------------------------------------------------------------------*


**---------------------------------------------------------------------*
*       Initialisation
**---------------------------------------------------------------------*

INITIALIZATION.
  s_repid = sy-repid.
  s_save = 'A'.


  perform f000_initialize_mov_type changing r_movtype[].

  PERFORM eventtab_build USING it_st_events[].
  PERFORM variant_init.


************************************************************************
*       S T A R T   O F   S E L E C T I O N
************************************************************************
START-OF-SELECTION.

  PERFORM initialize.

  perform f001_determine_fiscal_period.

  perform f002_determine_closing_stock changing it_stockclose[].


  if not so_date-low+6(2) eq '01'.

    perform f003_change_closing_stock changing  it_stockclose[].

  endif.

  perform f004_determine_mat_docs changing it_mkpf[]
                                             it_mseg[].


  perform f005_receipts_issues using    it_mseg[]
                                 changing it_issue[]
                                          it_receipt[]
                                          it_matnr[].


*---alv

  PERFORM comment_build USING it_st_list_top_of_page[].
  PERFORM fieldcat USING it_st_fieldcat[].
  PERFORM layout_build USING st_layout.
  PERFORM reuse_alv_list_display.


END-OF-SELECTION.

*---------------
form initialize.
*---------------
  clear:   r_loekz.
  refresh: r_loekz.
*--- Deleted PO's only
  if p_del = 'X'.
    r_loekz-sign   = 'I'.
    r_loekz-option = 'EQ'.
    r_loekz-low    = 'L'.
    append r_loekz.
  endif.
*--- UnDeleted PO's only
  if p_undel = 'X'.
    r_loekz-sign   = 'E'.
    r_loekz-option = 'EQ'.
    r_loekz-low    = ' '.
    append r_loekz.
  endif.
endform.                    "initialize


*&---------------------------------------------------------------------*
*&      Form  f000_initialize_mov_type
*&---------------------------------------------------------------------*
*       Desc : Initialization of movement types
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form f000_initialize_mov_type  changing p_r_movtype like r_movtype[].


  data : lwa_movtype like line of p_r_movtype.

  lwa_movtype-sign = 'I'.
  lwa_movtype-option = 'EQ'.
  lwa_movtype-low = '101'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '102'.
  append lwa_movtype to p_r_movtype.
***********
* Additional changes done for other movement types--> by deepak

  lwa_movtype-low = '103'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '104'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '105'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '106'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '122'.
  append lwa_movtype to p_r_movtype.


  lwa_movtype-low = '123'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '161'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '162'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '201'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '202'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '261'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '262'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '301'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '302'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '303'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '304'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '305'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '306'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '309'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '310'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '331'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '332'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '333'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '334'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '335'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '336'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '511'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '512'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '531'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '532'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '541'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '542'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '561'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '562'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '601'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '602'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '641'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '642'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '643'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '644'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '701'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '702'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '909'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '910'.
  append lwa_movtype to p_r_movtype.


endform.                    " f000_initialize_mov_type


*&---------------------------------------------------------------------*
*&      Form  f001_determine_fiscal_period
*&---------------------------------------------------------------------*
*       Desc  Determination of fiscal period
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form f001_determine_fiscal_period .


  clear : w_monat,
          w_gjahr,
          w_date,
          w_buper,
          w_year.

  w_monat = so_date-low+4(2).

  if w_monat = '01'.

    w_monat = '12'.
    w_gjahr = so_date-low+0(4).
    w_date_fiscal = w_gjahr+0(4) - 1.
    w_gjahr = w_date_fiscal.

  else.
    w_monat = w_monat - 1.
    w_gjahr = so_date-low+0(4).

  endif.
  concatenate w_gjahr w_monat '01'  into w_gjahr.


*****Determines Fiscal yr and period
  call function 'DATE_TO_PERIOD_CONVERT'
    EXPORTING
      i_date  = w_gjahr
      i_periv = 'V3'
    IMPORTING
      e_buper = w_buper
      e_gjahr = w_year.
  if sy-subrc <> 0.
  endif.

  w_datum = w_buper+1(2).


**Month text
  select single ltx from t247 into t247-ltx
         where spras = 'E'
         and   mnr   = so_date-low+4(2).

endform.                    " f001_determine_fiscal_period

*&---------------------------------------------------------------------*
*&      Form  f001_determine_closing_stock
*&---------------------------------------------------------------------*
*       Desc : Determination of closing stock
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form f002_determine_closing_stock
                   changing p_it_stockclose like it_stockclose[].

  data : lw_recs type i,
         w_dval like mseg-menge,
         w_opbal like mseg-menge.

  data : begin of lit_stockclose occurs 0,
         lfgja like mardh-lfgja,   "Fiscal yr
         lfmon like mardh-lfmon,   "Period
         werks like s031-werks,   "Plant
         matnr like mara-matnr,   "Material
         lgort like mseg-lgort,   "Storage Loc
         labst like mardh-labst,  "Unrestricted Stock
       end of lit_stockclose.

  data : begin of lit_mard occurs 0,
         matnr like mara-matnr,
         werks like mseg-werks,
         lgort like mseg-lgort,
         end of lit_mard.

  data : lwa_stockclose like line of p_it_stockclose.

  select matnr werks lgort from mard
  into corresponding fields of table lit_mard
  where matnr in so_matnr
  and werks in so_werks.



  refresh it_stockclose.
  clear   it_stockclose.


*****Fetch Closing stock

*If the entry is found in MARD then consider the same
*else fetch the closing stock from MARDH.

  loop at lit_mard.

    refresh lit_stockclose.
    clear   lit_stockclose.


    select werks matnr lgort labst
          insme speme einme retme
          lfgja lfmon
           into corresponding fields of
            table lit_stockclose
           from mard
    where   lfmon = w_datum
    and     lfgja = w_year
    and     werks = lit_mard-werks
    and     matnr = lit_mard-matnr
    and     lgort = lit_mard-lgort.

    clear lw_recs.
    describe table lit_stockclose lines lw_recs.

*If no entry in MARD fetch from MARDH.
    if lw_recs = 0.

      select werks matnr lgort labst
            insme speme einme retme
            lfgja lfmon
             into corresponding fields of
            table lit_stockclose
            from mardh
     where   lfmon = w_datum
     and     lfgja = w_year
     and     werks = lit_mard-werks
     and     matnr = lit_mard-matnr
     and     lgort = lit_mard-lgort.


    endif.

    sort lit_stockclose by lfgja lfmon descending.

    read table lit_stockclose index 1.
    if sy-subrc eq 0.
      move-corresponding lit_stockclose to lwa_stockclose.
      append  lwa_stockclose to p_it_stockclose.



      clear  lwa_stockclose.

    endif.

  endloop.

endform.                    " f001_determine_closing_stock

*&---------------------------------------------------------------------*
*&      Form   f003_change_closing_stock
*&---------------------------------------------------------------------*
*       Desc : Selection of the mat docs for the intermediate
*              days if the selection begin date is not from
*              first date of the corresponding month.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form f003_change_closing_stock changing
                                   p_it_stockclose like it_stockclose[].

  data : lwa_stockclose like line of p_it_stockclose[].



  refresh : r_date,
            it_docs,
            it_finalstock.

  clear : r_date,
          lwa_stockclose.

  r_date-sign = 'I'.
  r_date-option = 'BT'.

  concatenate so_date-low+0(4)
              so_date-low+4(2)
              '01'
              into r_date-low.

  r_date-high = so_date-low - 1.
  append r_date.
  clear r_date.

read table r_loekz index 1.

  select mkpf~budat
         mseg~matnr
         mseg~bwart
         mseg~menge
         mseg~werks
         mseg~shkzg
         mseg~lgort
         makt~maktx
         into corresponding
         fields of
         table it_docs
         from mkpf as mkpf inner join mseg as mseg
         on mkpf~mandt = mseg~mandt and
            mkpf~mblnr = mseg~mblnr and
            mkpf~mjahr = mseg~mjahr
         inner join makt as makt
           on mseg~matnr = makt~matnr
         where
            mseg~werks IN SO_WERKS and
            mseg~matnr in so_matnr and
            mkpf~budat in r_date and
            mseg~bwart in r_movtype.



  Clear it_docs.

  loop at it_docs.

    if it_docs-shkzg = 'H'.
      it_docs-menge = - ( it_docs-menge ).
      modify it_docs.
    endif.

    move-corresponding it_docs to it_finalstock.
    collect it_finalstock.
    clear   it_finalstock.

    move it_docs-maktx to it_head-maktx.

  endloop.

  loop at p_it_stockclose into lwa_stockclose.
    read table it_finalstock with key
                       matnr = lwa_stockclose-matnr
                       werks = lwa_stockclose-werks
                       lgort = lwa_stockclose-lgort.

    if sy-subrc eq 0.

      lwa_stockclose-labst = lwa_stockclose-labst +
                             it_finalstock-menge.
      modify p_it_stockclose from lwa_stockclose.


      read table p_it_stockclose into lwa_stockclose index 1.
      "with key matnr = wa_head-matnr.
      "budat = wa_head-p_date.

      if sy-subrc = 0.

        w_dval = lwa_stockclose-labst.



      ENDIF.



      clear lwa_stockclose.
    endif.

  endloop.

endform.                    " f003_change_closing_stock

*&---------------------------------------------------------------------*
*&      Form  f004_determine_mat_docs
*&---------------------------------------------------------------------*
*       DEsc : Determination of Receipts and Issues
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form f004_determine_mat_docs  changing p_it_mkpf like it_mkpf[]
                                       p_it_mseg like it_mseg[].


  data : lwa_mkpf like line of p_it_mkpf[],
         lwa_mseg like line of p_it_mseg[],
          ls_quantity   type mseg-menge,
          sum_issue type mseg-menge,
          sum_receipt type mseg-menge,
          sum_531 type mseg-menge,
          sum_541 type mseg-menge,
          sum_101  type mseg-menge,
          sum_511  type mseg-menge,
          sum_261  type mseg-menge,
          sum_601  type mseg-menge,
          sum_201 type mseg-menge,
          sum_641 type mseg-menge,
          sum_po  type mseg-menge,
          sum_551  type mseg-menge,
          sum_331  type mseg-menge,
          sum_161  type mseg-menge,
          sum_305  type mseg-menge,
          sum_309  type mseg-menge,
          sum_701  type mseg-menge,
          sum_702  type mseg-menge.


***Determination of Mat Docs

  select mblnr xblnr budat mjahr cpudt from mkpf
         into corresponding fields
         of table it_mkpf
         where budat in so_date.


***Determination of Receipts and issues

*  loop at p_it_mkpf into lwa_mkpf.
*
*    select mblnr matnr bwart menge werks mjahr shkzg lgort
*          from mseg into corresponding
*          fields of lwa_mseg
*          where mblnr = lwa_mkpf-mblnr
*          and   mjahr = lwa_mkpf-mjahr
*          and   werks in so_werks
*          and   matnr in so_matnr
*          and   bwart in r_movtype.
*
*      if lwa_mseg-shkzg = 'H'.
*        lwa_mseg-menge = - ( lwa_mseg-menge ).
*      endif.
*
*
*      move : lwa_mkpf-budat to lwa_mseg-budat,
*             lwa_mkpf-xblnr to lwa_mseg-xblnr,
*             lwa_mkpf-cpudt to lwa_mseg-cpudt.
*
*
*      append lwa_mseg to p_it_mseg.
*
*      move lwa_mseg-matnr to it_head-matnr.
*      move lwa_mseg-budat to it_head-p_date.
*      move lwa_mseg-bwart to it_head-bwart.
*      append it_head.
*      clear it_head.
*      clear lwa_mseg.
*
*
*    endselect.
*  endloop.


  sort it_mkpf by budat cpudt .
  loop at it_mkpf.
    at new budat.
      if w_opbal = SPACE.
        it_head-openbal = w_dval.
        w_chk = 1.
      else.
        it_head-openbal = w_opbal.
        w_chk = 2.
      endif.
    endat.

    if w_chk = 1.
      it_head-openbal = w_dval.
    elseif w_chk = 2.
      it_head-openbal = w_opbal.
    endif.
    select  Single *
          from mseg
          where mblnr = it_mkpf-mblnr
          and   mjahr = it_mkpf-mjahr
          and   werks in so_werks
          and   matnr in so_matnr
          and   bwart in r_movtype.

    if mseg-matnr ne SPACE.
      move mseg-mblnr to it_mseg-xblnr.
      move mseg-matnr to it_mseg-matnr.
      move mseg-bwart to IT_mseg-bwart.
      move mseg-menge to it_mseg-menge.
      move mseg-werks to it_mseg-werks.
      move mseg-mjahr to it_mseg-mjahr.
      move mseg-shkzg to it_mseg-shkzg.
      move mseg-lgort to it_mseg-lgort.


      if it_mseg-shkzg = 'H'.
        it_mseg-menge = - ( lwa_mseg-menge ).
      endif.



      move : it_mkpf-budat to it_mseg-budat,
             it_mkpf-xblnr to it_mseg-xblnr,
             it_mkpf-cpudt to it_mseg-cpudt.


*      append lwa_mseg to p_it_mseg.
      append it_mseg.

*  it_head-R_PO = it_head-r_po + ls_quantity.


      if ( it_mseg-bwart eq '101'
         or   it_mseg-bwart eq '102'
         or   it_mseg-bwart eq '103'
         or   it_mseg-bwart eq '104'
         or   it_mseg-bwart eq '105'
         or  it_mseg-bwart eq '106'
         or  it_mseg-bwart eq '161'
         or  it_mseg-bwart eq '162'
         or  it_mseg-bwart eq '122'
         or  it_mseg-bwart eq '123'
         or  it_mseg-bwart eq '511'
         or  it_mseg-bwart eq '512'
         or  it_mseg-bwart eq '531'
         or  it_mseg-bwart eq '532'
         or  it_mseg-bwart eq '561'
         or  it_mseg-bwart eq '562'
         or  it_mseg-bwart eq '305'
         or  it_mseg-bwart eq '306'
         or  it_mseg-bwart eq '702') and it_mseg-shkzg = 'S'.


        move it_mseg-menge to ls_quantity.
        sum_receipt = sum_receipt + ls_quantity.

      elseif

       ( it_mseg-bwart eq '261'
         or   it_mseg-bwart eq '262'
         or   it_mseg-bwart eq '601'
         or   it_mseg-bwart eq '602'
         or   it_mseg-bwart eq '201'
         or  it_mseg-bwart eq '202'
         or  it_mseg-bwart eq '551'
         or  it_mseg-bwart eq '552'
         or  it_mseg-bwart eq '541'
         or  it_mseg-bwart eq '542'
         or  it_mseg-bwart eq '331'
         or  it_mseg-bwart eq '332'
         or  it_mseg-bwart eq '333'
         or  it_mseg-bwart eq '334'
         or  it_mseg-bwart eq '335'
         or  it_mseg-bwart eq '336'
         or  it_mseg-bwart eq '641'
         or  it_mseg-bwart eq '642'
         or  it_mseg-bwart eq '643'
         or  it_mseg-bwart eq '644'
         or  it_mseg-bwart eq '351'
         or  it_mseg-bwart eq '352'
         or  it_mseg-bwart eq '301'
         or  it_mseg-bwart eq '302'
         or  it_mseg-bwart eq '303'
         or  it_mseg-bwart eq '304'

         or  it_mseg-bwart eq '309'
         or  it_mseg-bwart eq '310'
         or  it_mseg-bwart eq '909'
         or  it_mseg-bwart eq '910'
         or  it_mseg-bwart eq '701')  and it_mseg-shkzg = 'S'.

         move it_mseg-menge to ls_quantity.
        sum_issue = sum_issue + ls_quantity.

      endif.


    if ( it_mseg-bwart eq '101' or it_mseg-bwart eq '102'
        or it_mseg-bwart eq '103' or it_mseg-bwart eq '104'
        or it_mseg-bwart eq '105' or it_mseg-bwart eq '106')
        And it_mseg-shkzg = 'S'.

        move it_mseg-menge to ls_quantity.
        sum_po = sum_po + ls_quantity.
      endif.


      if ( it_mseg-bwart eq '531'
         or it_mseg-bwart eq '532') and it_mseg-shkzg = 'S'.

        move it_mseg-menge to ls_quantity.
        sum_531 = sum_531 + ls_quantity.
      endif.

      if ( it_mseg-bwart eq '541' or it_mseg-bwart eq '542' ).
        move it_mseg-menge to ls_quantity.
        sum_541 = sum_541 + ls_quantity.
      endif.

      if ( it_mseg-bwart eq '102' or it_mseg-bwart eq '102' ).
        move it_mseg-menge to ls_quantity.
        sum_101 = sum_101 + ls_quantity.
      endif.

      if ( it_mseg-bwart eq '561' or it_mseg-bwart eq '562'
          OR IT_MSEG-BWART EQ '511' OR it_mseg-bwart eq '512').
        move it_mseg-menge to ls_quantity.
        sum_511 = sum_511 + ls_quantity.
      endif.


      if ( it_mseg-bwart eq '261' or it_mseg-bwart eq '262').
        move it_mseg-menge to ls_quantity.
        sum_261 = sum_261 + ls_quantity.
      endif.

      if ( it_mseg-bwart eq '601' or it_mseg-bwart eq '602').
        move it_mseg-menge to ls_quantity.
        sum_601 = sum_601 + ls_quantity.
      endif.


      if ( it_mseg-bwart eq '201' or it_mseg-bwart eq '202').
        move it_mseg-menge to ls_quantity.
        sum_201 = sum_201 + ls_quantity.
      endif.

    if ( it_mseg-bwart eq '551' or it_mseg-bwart eq '552').
        move it_mseg-menge to ls_quantity.
        sum_551 = sum_551 + ls_quantity.
      endif.

    if ( it_mseg-bwart eq '331' or it_mseg-bwart eq '332'
          or it_mseg-bwart eq '333' or it_mseg-bwart eq '334'
          or it_mseg-bwart eq '335' or it_mseg-bwart eq '336').
        move it_mseg-menge to ls_quantity.
        sum_331 = sum_331 + ls_quantity.
      endif.

    if ( it_mseg-bwart eq '161' or it_mseg-bwart eq '162'
          or it_mseg-bwart eq '123' or it_mseg-bwart eq '122').
        move it_mseg-menge to ls_quantity.
        sum_161 = sum_161 + ls_quantity.
      endif.


    if ( it_mseg-bwart eq '641' or it_mseg-bwart eq '642'
          or it_mseg-bwart eq '643' or it_mseg-bwart eq '644'
          or it_mseg-bwart eq '351' or it_mseg-bwart eq '352'
          or it_mseg-bwart eq '301' or it_mseg-bwart eq '302'
          or it_mseg-bwart eq '303' or it_mseg-bwart eq '304').
        move it_mseg-menge to ls_quantity.
        sum_641 = sum_641 + ls_quantity.
      endif.

  if ( it_mseg-bwart eq '305' or it_mseg-bwart eq '306').
        move it_mseg-menge to ls_quantity.
        sum_305 = sum_305 + ls_quantity.
      endif.

  if ( it_mseg-bwart eq '309' or it_mseg-bwart eq '310'
     or it_mseg-bwart eq '909' or it_mseg-bwart eq '910').
        move it_mseg-menge to ls_quantity.
        sum_309 = sum_309 + ls_quantity.
      endif.


if ( it_mseg-bwart eq '701').
        move it_mseg-menge to ls_quantity.
        sum_701 = sum_701 + ls_quantity.
      endif.


if ( it_mseg-bwart eq '702').
        move it_mseg-menge to ls_quantity.
        sum_702 = sum_702 + ls_quantity.
      endif.


      at end of budat.

    it_head-closing_bal = ( it_head-openbal + sum_receipt ) - sum_issue.
        w_opbal = it_head-closing_bal.
        move it_mseg-matnr to it_head-matnr.
        move it_mseg-budat to it_head-p_date.
        move it_mseg-bwart to it_head-bwart.
        move sum_po  to it_head-R_po.
        move sum_101  to it_head-R_ProdOrd.
        move sum_531 to it_head-R_ByProd.
        move sum_511  to it_head-R_OTHERS.
        move sum_receipt to it_head-r_total.
        move sum_261  to it_head-I_Prod.
        move sum_601  to it_head-I_cust.
        move sum_201  to it_head-I_CostCen.
        move sum_551  to it_head-I_Scrapping.
        move sum_541 to it_head-I_subcontractor.
        move sum_331  to it_head-I_Sampling.
        move sum_issue   to it_head-i_total.
        move sum_161  to it_head-PurRet.
        move sum_641  to it_head-stock_out.
        move sum_305  to it_head-stock_in.
        move sum_309  to it_head-M_to_M_transit.
        move sum_701  to it_head-phy_loss.
        move sum_702  to it_head-phy_gain.



        append it_head.
        w_chk = 0.
        sum_issue = 0.
        sum_receipt = 0.
        sum_531 = 0.
        sum_541 = 0.
        sum_101 = 0.
        SUM_511 = 0.
        sum_261 = 0.
        sum_601 = 0.
        sum_201 = 0.
        sum_po = 0.
        sum_551 = 0.
        sum_641 = 0.
        sum_701 = 0.
        sum_702 = 0.


      endat.


      clear it_head.
      clear it_mseg.


    endif.


endloop.


  sort it_mseg by matnr budat bwart.
  sort it_head by matnr p_date bwart.
  delete ADJACENT duplicates from it_head.

endform.                    " f004_determine_mat_docs


*&---------------------------------------------------------------------*
*&      Form  f005_receipts_issues
*&---------------------------------------------------------------------*
*       Desc
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form f005_receipts_issues  using    p_it_mseg  like it_mseg[]
                           changing p_it_issue like it_issue[]
                                    p_it_receipt like it_receipt[]
                                    p_it_matnr like it_matnr[].

  data : lwa_mseg like line of p_it_mseg[],
         lwa_issue like line of p_it_issue[],
         lwa_receipt like line of p_it_receipt[],
         lwa_matnr like line of p_it_matnr[],
         ls_quantity   type mseg-menge,
         wa_head type ty_head,
         lwa_stockclose like line of it_stockclose[].



*  sort it_head by bwart p_date matnr.
*  loop at it_head into wa_head.
*
*    read table p_it_mseg into lwa_mseg with key bwart = wa_head-bwart.
*    if sy-subrc = 0.
*      if ( lwa_mseg-bwart eq '101'
*          or   lwa_mseg-bwart eq '102'
*          or   lwa_mseg-bwart eq '103'
*          or   lwa_mseg-bwart eq '104'
*          or   lwa_mseg-bwart eq '105'
*          or  lwa_mseg-bwart eq '106') and lwa_mseg-shkzg = 'S'.
*        .
*        loop at p_it_mseg into lwa_mseg where matnr = wa_head-matnr
*                                        and   budat = wa_head-p_date
*                                        and   bwart = wa_head-bwart.
*
*          move lwa_mseg-menge to ls_quantity.
*          wa_head-R_PO = ls_quantity + wa_head-R_PO.
*          modify it_head from wa_head.
*        endloop.
*        clear ls_quantity .
*      endif.
*
*
*      if ( lwa_mseg-bwart eq '641'
*       and lwa_mseg-shkzg = 'S' ).
*        loop at p_it_mseg into lwa_mseg where matnr = wa_head-matnr
*                                        and   budat = wa_head-p_date
*                                        and   bwart = wa_head-bwart.
*          IF SY-SUBRC = 0 .
*            move lwa_mseg-menge to ls_quantity.
*            wa_head-stock_out = ls_quantity + wa_head-stock_out.
*            modify it_head from wa_head.
*          ENDIF.
*        endloop.
*        clear ls_quantity .
*      endif.
*
*      read table it_stockclose into lwa_stockclose
*         with key matnr = wa_head-matnr.
*                  "budat = wa_head-p_date.
*
*      if sy-subrc = 0.
*
*        wa_head-openbal = lwa_stockclose-labst.
*
*        modify it_head from wa_head.
*
*      ENDIF.
*
*    endif.
*  endloop.

*  sort it_head by bwart p_date matnr.
*  loop at it_head into wa_head.
*
*    read table it_mseg into lwa_mseg with key bwart = wa_head-bwart.
*    if sy-subrc = 0.
*      if ( lwa_mseg-bwart eq '101'
*          or   lwa_mseg-bwart eq '102'
*          or   lwa_mseg-bwart eq '103'
*          or   lwa_mseg-bwart eq '104'
*          or   lwa_mseg-bwart eq '105'
*          or  lwa_mseg-bwart eq '106') and lwa_mseg-shkzg = 'S'.
*        .
*        loop at it_mseg into lwa_mseg where matnr = wa_head-matnr
*                                        and   budat = wa_head-p_date
*                                        and   bwart = wa_head-bwart.
*
*          move lwa_mseg-menge to ls_quantity.
*          wa_head-R_PO = ls_quantity + wa_head-R_PO.
*          modify it_head from wa_head.
*        endloop.
*        clear ls_quantity .
*      endif.
*
*
*      if ( lwa_mseg-bwart eq '641'
*       and lwa_mseg-shkzg = 'S' ).
*        loop at it_mseg into lwa_mseg where matnr = wa_head-matnr
*                                        and   budat = wa_head-p_date
*                                        and   bwart = wa_head-bwart.
*          IF SY-SUBRC = 0 .
*            move lwa_mseg-menge to ls_quantity.
*            wa_head-stock_out = ls_quantity + wa_head-stock_out.
*            modify it_head from wa_head.
*          ENDIF.
*        endloop.
*        clear ls_quantity .
*      endif.
*
*      read table it_stockclose into lwa_stockclose
*         with key matnr = wa_head-matnr.
*                  "budat = wa_head-p_date.
*
*      if sy-subrc = 0.
*
*        wa_head-openbal = lwa_stockclose-labst.
*
*        modify it_head from wa_head.
*
*      ENDIF.
*
*    endif.
*  endloop.


endform.                    " f005_receipts_issues

*&---------------------------------------------------------------------*
*&      Form  COMMENT_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM comment_build USING p_it_st_list_top_of_page TYPE slis_t_listheader
.

  DATA: ls_line TYPE slis_listheader.

  REFRESH p_it_st_list_top_of_page.
  CLEAR ls_line.
  ls_line-typ  = 'H'.
  ls_line-info  = 'Details of Stock Ledger'.
  APPEND ls_line TO p_it_st_list_top_of_page.

ENDFORM.                    " COMMENT_BUILD

*&--------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE-ALV
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM top_of_page-alv.
*
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = it_st_list_top_of_page.

ENDFORM.                    "TOP_OF_PAGE-ALV
*&---------------------------------------------------------------------*
*&      Form  FIELDCAT
*&---------------------------------------------------------------------*
*      -->P_IT_ST_FIELDCAT[]  text
*----------------------------------------------------------------------*
FORM fieldcat  USING p_it_st_fieldcat TYPE slis_t_fieldcat_alv.
  DATA: ls_fieldcat TYPE slis_fieldcat_alv.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname  = 'P_DATE'.
  ls_fieldcat-datatype   = 'P_DATE'.
  ls_fieldcat-outputlen  = 18.
  ls_fieldcat-seltext_m  = text-002 .
*  ls_fieldcat-rollname   = 'MATNR'.
  ls_fieldcat-key         = 'X'.
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'MATNR'.
  ls_fieldcat-rollname    = 'MATNR'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-outputlen  = 18.
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'MAKTX'.
  ls_fieldcat-rollname    = 'MAKTX'.
  ls_fieldcat-ddictxt     = 'L'.
    ls_fieldcat-outputlen  = 40.
  APPEND ls_fieldcat TO p_it_st_fieldcat.

*  CLEAR ls_fieldcat.
*  ls_fieldcat-fieldname   = 'BWART'.
*  ls_fieldcat-rollname    = 'BWART'.
*  ls_fieldcat-ddictxt     = 'L'.
*  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'OPENBAL'.
  ls_fieldcat-rollname    = 'OPENBAL'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-003 .

  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'R_PO'.
  ls_fieldcat-rollname    = 'R_PO'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-004 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'R_PRODORD'.
  ls_fieldcat-rollname    = 'R_PRODORD'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-005 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'R_BYPROD'.
  ls_fieldcat-rollname    = 'R_BYPROD'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-006 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'R_OTHERS'.
  ls_fieldcat-rollname    = 'R_OTHERS'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-007 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'R_TOTAL'.
  ls_fieldcat-rollname    = 'R_TOTAL'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-008 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_PROD'.
  ls_fieldcat-rollname    = 'I_PROD'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-009 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_CUST'.
  ls_fieldcat-rollname    = 'I_CUST'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-010 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_COSTCEN'.
  ls_fieldcat-rollname    = 'I_COSTCEN'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-011 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_SCRAPPING'.
  ls_fieldcat-rollname    = 'I_SCRAPPING'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-012 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_SUBCONTRACTOR'.
  ls_fieldcat-rollname    = 'I_SUBCONTRACTOR'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-013 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_SAMPLING'.
  ls_fieldcat-rollname    = 'I_SAMPLING'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-014 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_TOTAL'.
  ls_fieldcat-rollname    = 'I_TOTAL'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-015 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'PURRET'.
  ls_fieldcat-rollname    = 'PURRET'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-016 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'STOCK_OUT'.
  ls_fieldcat-rollname    = 'STOCK_OUT'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-017 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'STOCK_IN'.
  ls_fieldcat-rollname    = 'STOCK_IN'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-018 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'STOCK_TRANSIT'.
  ls_fieldcat-rollname    = 'STOCK_TRANSIT'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-019 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'M_TO_M_TRANSIT'.
  ls_fieldcat-rollname    = 'M_TO_M_TRANSIT'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-020 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'PHY_LOSS'.
  ls_fieldcat-rollname    = 'PHY_LOSS'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-021 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.



  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'PHY_GAIN'.
  ls_fieldcat-rollname    = 'PHY_GAIN'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-022 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'CLOSING_BAL'.
  ls_fieldcat-rollname    = 'CLOSING_BAL'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-023 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


ENDFORM.                    " FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  LAYOUT_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ST_LAYOUT  text
*----------------------------------------------------------------------*
FORM layout_build  USING    p_st_layout TYPE slis_layout_alv.

  p_st_layout-box_fieldname       = 'SELK'.  " Checkbox
  p_st_layout-get_selinfos        = 'X'.
  p_st_layout-f2code              =  'PICK' .  " Doppelklickfunktion
  p_st_layout-confirmation_prompt = 'X'.       "Sicherheitsabfrage
  p_st_layout-key_hotspot         = 'X'.       "Schlüssel als Hotspot
  p_st_layout-info_fieldname      = 'COL'.     "Zeilenfarbe


ENDFORM.                    " LAYOUT_BUILD
*&---------------------------------------------------------------------*
*&      Form  REUSE_ALV_LIST_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM reuse_alv_list_display .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
             i_background_id          = 'ALV_BACKGROUND'
             i_callback_program       = s_repid
*            I_CALLBACK_PF_STATUS_SET = S_STATUS
*            I_CALLBACK_USER_COMMAND     = S_USER_COMMAND
*            I_STRUCTURE_NAME         = ''
*            IS_LAYOUT                = ST_LAYOUT
             it_fieldcat              = it_st_fieldcat[]
*            IT_EXCLUDING             =
*            IT_SPECIAL_GROUPS        = ST_SP_GROUP
*            IT_SORT                  =
*            IT_FILTER                =
*            IS_SEL_HIDE              =
*            I_DEFAULT                = 'X'
*            I_SAVE                   = S_SAVE
*            IS_VARIANT               = S_VARIANT
            IT_EVENTS                = IT_ST_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
*     IMPORTING
*           E_EXIT_CAUSED_BY_CALLER   =
*           ES_EXIT_CAUSED_BY_USER    =
       TABLES
            t_outtab                  =  it_head.

ENDFORM.                    " REUSE_ALV_LIST_DISPLAY

*&---------------------------------------------------------------------*
*&      Form  EVENTTAB_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_ST_EVENTS[]  text
*----------------------------------------------------------------------*
FORM eventtab_build  USING    p_st_events  TYPE slis_t_event .

  DATA: ls_event TYPE slis_alv_event.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = p_st_events.

  READ TABLE p_st_events WITH KEY name = slis_ev_top_of_page
                           INTO ls_event.
  IF sy-subrc = 0.
    MOVE st_formname_top_of_page TO ls_event-form.
    APPEND ls_event TO p_st_events.
  ENDIF.

  READ TABLE p_st_events WITH KEY name = slis_ev_user_command
                           INTO ls_event.
  IF sy-subrc = 0.
    MOVE s_user_command TO ls_event-form.
    APPEND ls_event TO p_st_events.
  ENDIF.
*  READ TABLE p_st_events WITH KEY name = slis_ev_pf_status_set
*                         INTO ls_event.
*
*  IF sy-subrc = 0.
*    MOVE s_status TO ls_event-form.
*    APPEND ls_event TO p_st_events.
*  ENDIF.

ENDFORM.                    " EVENTTAB_BUILD


*&---------------------------------------------------------------------*
*&      Form  VARIANT_INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM variant_init .
  CLEAR s_variant.
  s_variant-report = s_repid.
  s_variant-handle = code.

ENDFORM.                    " VARIANT_INIT

4 REPLIES 4

Former Member
0 Kudos

Hi Prasanna,

Below is an example of ALV reporting.

*&---------------------------------------------------------------------*
*& Report  ZVVF_MR028_STOCKLEDGER                                      *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ZVVF_MR028_STOCKLEDGER                  .



**---------------------------------------------------------------------*
*       Tables
**---------------------------------------------------------------------*

TABLES:      EKKO,    "PURCHASING DOC. HEADER
             EKPO,    "PURCHASING DOC. ITEM
             MAKT,    "MATERIAL DISCRIPTION
             LFA1,    "VENDOR MASTER
             RSEG,    "DOC. ITEM - INCOMING INVOICE
             KONV,    "CONDITION (TRANSECTION DATA - CLUSTER TABLE)
             EKPA,    "Partner Roles in Purchasing
             MSEG,
             t247,
             mardh,
             mara.

**---------------------------------------------------------------------*
*       Types                    Begin with TY_
**---------------------------------------------------------------------*

TYPE-POOLS slis.

TYPES  :  BEGIN OF ty_head,

              p_date TYPE dats,
              matnr LIKE mseg-matnr,
              maktx LIKE makt-maktx,
              openbal LIKE mardh-labst,
              r_po LIKE mseg-menge,
              r_prodord LIKE mseg-menge,
              r_byprod LIKE mseg-menge,
              r_others LIKE mseg-menge,
              R_TOTAL TYPE mseg-menge,
              i_prod LIKE mseg-menge,
              i_cust LIKE mseg-menge,
              i_costcen LIKE mseg-menge,
              i_scrapping LIKE mseg-menge,
              i_subcontractor LIKE mseg-menge,
              i_sampling LIKE mseg-menge,
              purret LIKE mseg-menge,
              i_total like mseg-menge,
              stock_out LIKE mseg-menge,
              stock_in LIKE mseg-menge,
              stock_transit LIKE mseg-menge,
              m_to_m_transit  LIKE mseg-menge,
              phy_loss LIKE mseg-menge,
              phy_gain LIKE mseg-menge,
              closing_bal LIKE mseg-menge,
              current_bal LIKE mseg-menge,
              bwart like mseg-bwart,
              werks like mseg-werks,
          END OF ty_head.

types :  begin of ty_docs,
         matnr like mseg-matnr,  "Material
         budat like mkpf-budat,  "Posting date
         menge like mseg-menge,  "Qty
         xblnr like mkpf-xblnr,  "Ref doc
         end of ty_docs.

data : w_cnt type I.
data : w_chk type i.

TYPES: BEGIN OF TY_KONV,

             KNUMV LIKE KONV-KNUMV,
             KBETR LIKE KONV-KBETR,
             KSCHL LIKE KONV-KSCHL,
             KWERT LIKE KONV-KAWRT,

       END OF TY_KONV.


TYPES: BEGIN OF TY_KBETR,
*              KBETR LIKE KONV-KBETR,
              KWERT LIKE KONV-KWERT,
          END OF TY_KBETR.


TYPES: BEGIN OF TY_RSEG,
              EBELN LIKE RSEG-EBELN,
              MATNR LIKE RSEG-MATNR,
              WRBTR LIKE RSEG-WRBTR,
              KSCHL LIKE RSEG-KSCHL,
              LIFNR LIKE RSEG-LIFNR,

          END OF TY_RSEG.

TYPES: BEGIN OF TY_NAME1,
              NAME1 LIKE LFA1-NAME1,
       END OF TY_NAME1.

**-----------------------------------------------------------
** Each Condition and their values w.r.t different docu types
**-----------------------------------------------------------
*data: begin of temp_head occurs 0,
*        kschl  like  konv-kschl,  " Condition type
*        kwert  like  konv-kwert,  " Condition value
*      end of temp_head.
*

**---------------------------------------------------------------------*
*       Constants                Begin with C_
**---------------------------------------------------------------------*

CONSTANTS: st_formname_top_of_page TYPE slis_formname
                              VALUE 'TOP_OF_PAGE-ALV'.


**---------------------------------------------------------------------*
*       Data                     Begin with W_
**---------------------------------------------------------------------*

*-------- Declarations for ALV Grid.

DATA:   it_st_list_top_of_page TYPE slis_t_listheader,
        it_st_fieldcat TYPE slis_t_fieldcat_alv,
        it_st_events   TYPE slis_t_event,
        st_layout   TYPE slis_layout_alv,
        s_status TYPE slis_formname VALUE 'STANDARD_ST01',
        s_user_command TYPE slis_formname VALUE 'USER_COMMAND-ALV',
        s_repid LIKE sy-repid,
        s_save(1) TYPE c,
        s_variant LIKE disvariant,
        code LIKE disvariant-handle.


data : begin of it_stockclose occurs 0,
       werks like s031-werks,   "Plant
       matnr like mara-matnr,   "Material
       lgort like mard-lgort,   "Storage Loc
       labst like mardh-labst,  "Unrestricted Stock
       insme like mardh-insme,  "Inspection Stock
       speme like mardh-speme,  "Safety stock
       einme like mardh-einme,  "Total stock of rest batches
       retme like mardh-retme,  "Blocked stock returns
       end of it_stockclose.

data : begin of it_finalstock occurs 0,
       werks like mseg-werks,   "Plant
       matnr like mseg-matnr,   "Material code
       lgort like mard-lgort,   "Sto Loc
       menge like mseg-menge,   "Qty
*       budat like mkpf-budat,   "Posting Date
       end of it_finalstock.

data : begin of it_docs occurs 0,
       matnr like mseg-matnr,   "Material code
       budat like mkpf-budat,   "Posting date
       bwart like mseg-bwart,   "Movement type
       menge like mseg-menge,   "Quantity
       werks like mseg-werks,   "Plant
       shkzg like mseg-shkzg,   "Credit/debit
       lgort like mseg-lgort,   "Sto Loc
       maktx like makt-maktx,   "Material Discription
       end of it_docs.

data : begin of it_mkpf occurs 0,
       budat like mkpf-budat,   "Posting date

       mblnr like mkpf-mblnr,   "Material Doc
       xblnr like mkpf-xblnr,   "Delivery ref no
       mjahr like mkpf-mjahr,   "Fiscal yr
       cpudt like mkpf-cpudt,
       end of it_mkpf.

data : begin of it_mseg occurs 0,
       matnr like mseg-matnr,   "Material
       bwart like mseg-bwart,   "Movement type
       menge like mseg-menge,   "Qty
       werks like mseg-werks,   "Plant
       mjahr like mseg-mjahr,   "Fiscal yr
       shkzg like mseg-shkzg,   "Credit/Debit Indicator
       lgort like mard-lgort,   "Sto loc
       budat like mkpf-budat,   "Posting date
       xblnr like mkpf-xblnr,   "Delivery ref
       cpudt like mkpf-cpudt,
       end of it_mseg.

data : begin of it_matnr occurs 0,
       matnr like mara-matnr,   "Material
       end of it_matnr.

data : w_monat  type monat.    "Month number

data : w_gjahr like sy-datum,    "Date
       w_date_fiscal(4) type n,  "Year
       w_date like sy-datum,     "Date
       w_buper like t009b-poper, "Posting period
       w_year like t009b-bdatj,  "Posting date
       w_datum(2) type n.        "Date

**---------------------------------------------------------------------*
*       Internal tables          Begin with IT_
**---------------------------------------------------------------------*

DATA    :  IT_HEAD TYPE STANDARD TABLE OF TY_HEAD WITH HEADER LINE.

***Issues and receipts
data : it_issue type ty_docs occurs 0 with header line,
       it_receipt type ty_docs occurs 0 with header line,
       it_issue_date type ty_docs occurs 0 with header line,
       it_receipt_date type ty_docs occurs 0 with header line.
data:   w_dval like mseg-menge,
        w_opbal like mseg-menge.

**----------------------------------------------------------------------
**
**  WORK AREAS: Begin with WA_
**
**----------------------------------------------------------------------
**
*
*DATA: wa_HEAD type TY_HEAD.
*data: w_tkwert    type p decimals 2 value 0,
*      grmenge     like ekpo-menge,
*      w_tot_kwert type p decimals 2 value 0,
*      w_tmp_kwert type p decimals 2 value 0,
*      w_finalsum  type p decimals 2 value 0,                "#EC *
*      w_finalrate type p decimals 4 value 0.                "#EC *


**---------------------------------------------------------------------*
*       R A N G E S
**---------------------------------------------------------------------*

ranges: r_loekz  for  ekko-loekz.  " Deletion Indicator
ranges : r_movtype for mseg-bwart,   "Movement type
         r_date for sy-datum.        "Date


**---------------------------------------------------------------------*
*       Select Options          Begin with SO_
**---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK MAIN WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP 2.


*SELECT-OPTIONS : SO_LIFNR FOR EKKO-LIFNR.

*SELECT-OPTIONS : SO_EKORG FOR EKKO-EKORG .

*SELECT-OPTIONS : SO_WERKS FOR MSEG-WERKS .
*
*SELECT-OPTIONS : SO_EBELN FOR EKKO-EBELN.
*
*SELECT-OPTIONS : SO_DATE for sy-datum obligatory no-extension.
*
*SELECT-OPTIONS : SO_EKGRP FOR EKKO-EKGRP.
*
*SELECT-OPTIONS : SO_BSART FOR EKKO-BSART DEFAULT 'NB'.
*
*SELECT-OPTIONS : SO_MATKL FOR EKPO-MATKL.
*
*SELECT-OPTIONS : SO_MATNR FOR MSEG-MATNR.
*


select-options   : so_werks for mseg-werks default 'P001'. "Plant
select-options   : so_lgort for mseg-lgort. " Sto. Location
select-options   : so_matnr for mseg-matnr obligatory. "Material code
select-options   : so_mtart for mara-mtart. "Material type
SELECT-OPTIONS   : SO_MATKL FOR EKPO-MATKL. "Material Group
select-options   : so_date for sy-datum obligatory no-extension.

SELECTION-SCREEN SKIP 2.


selection-screen: skip,
                  begin of line,
                  comment (15) text-034.
parameters:     p_all    radiobutton group del.
selection-screen comment 25(9) for field p_all.
parameters:     p_del    radiobutton group del.
selection-screen comment 45(12) for field p_del.
parameters:     p_undel  radiobutton group del default 'X'.
selection-screen comment 65(14) for field p_undel.
selection-screen end of line.

SELECTION-SCREEN SKIP 2.


SELECTION-SCREEN END OF BLOCK MAIN.

**---------------------------------------------------------------------*
*       Parameters              Begin with PR_
**---------------------------------------------------------------------*


**---------------------------------------------------------------------*
*       Initialisation
**---------------------------------------------------------------------*

INITIALIZATION.
  s_repid = sy-repid.
  s_save = 'A'.


  perform f000_initialize_mov_type changing r_movtype[].

  PERFORM eventtab_build USING it_st_events[].
  PERFORM variant_init.


************************************************************************
*       S T A R T   O F   S E L E C T I O N
************************************************************************
START-OF-SELECTION.

  PERFORM initialize.

  perform f001_determine_fiscal_period.

  perform f002_determine_closing_stock changing it_stockclose[].


  if not so_date-low+6(2) eq '01'.

    perform f003_change_closing_stock changing  it_stockclose[].

  endif.

  perform f004_determine_mat_docs changing it_mkpf[]
                                             it_mseg[].


  perform f005_receipts_issues using    it_mseg[]
                                 changing it_issue[]
                                          it_receipt[]
                                          it_matnr[].


*---alv

  PERFORM comment_build USING it_st_list_top_of_page[].
  PERFORM fieldcat USING it_st_fieldcat[].
  PERFORM layout_build USING st_layout.
  PERFORM reuse_alv_list_display.


END-OF-SELECTION.

*---------------
form initialize.
*---------------
  clear:   r_loekz.
  refresh: r_loekz.
*--- Deleted PO's only
  if p_del = 'X'.
    r_loekz-sign   = 'I'.
    r_loekz-option = 'EQ'.
    r_loekz-low    = 'L'.
    append r_loekz.
  endif.
*--- UnDeleted PO's only
  if p_undel = 'X'.
    r_loekz-sign   = 'E'.
    r_loekz-option = 'EQ'.
    r_loekz-low    = ' '.
    append r_loekz.
  endif.
endform.                    "initialize


*&---------------------------------------------------------------------*
*&      Form  f000_initialize_mov_type
*&---------------------------------------------------------------------*
*       Desc : Initialization of movement types
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form f000_initialize_mov_type  changing p_r_movtype like r_movtype[].


  data : lwa_movtype like line of p_r_movtype.

  lwa_movtype-sign = 'I'.
  lwa_movtype-option = 'EQ'.
  lwa_movtype-low = '101'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '102'.
  append lwa_movtype to p_r_movtype.
***********
* Additional changes done for other movement types--> by deepak

  lwa_movtype-low = '103'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '104'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '105'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '106'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '122'.
  append lwa_movtype to p_r_movtype.


  lwa_movtype-low = '123'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '161'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '162'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '201'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '202'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '261'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '262'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '301'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '302'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '303'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '304'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '305'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '306'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '309'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '310'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '331'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '332'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '333'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '334'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '335'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '336'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '511'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '512'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '531'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '532'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '541'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '542'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '561'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '562'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '601'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '602'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '641'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '642'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '643'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '644'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '701'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '702'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '909'.
  append lwa_movtype to p_r_movtype.

  lwa_movtype-low = '910'.
  append lwa_movtype to p_r_movtype.


endform.                    " f000_initialize_mov_type


*&---------------------------------------------------------------------*
*&      Form  f001_determine_fiscal_period
*&---------------------------------------------------------------------*
*       Desc  Determination of fiscal period
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form f001_determine_fiscal_period .


  clear : w_monat,
          w_gjahr,
          w_date,
          w_buper,
          w_year.

  w_monat = so_date-low+4(2).

  if w_monat = '01'.

    w_monat = '12'.
    w_gjahr = so_date-low+0(4).
    w_date_fiscal = w_gjahr+0(4) - 1.
    w_gjahr = w_date_fiscal.

  else.
    w_monat = w_monat - 1.
    w_gjahr = so_date-low+0(4).

  endif.
  concatenate w_gjahr w_monat '01'  into w_gjahr.


*****Determines Fiscal yr and period
  call function 'DATE_TO_PERIOD_CONVERT'
    EXPORTING
      i_date  = w_gjahr
      i_periv = 'V3'
    IMPORTING
      e_buper = w_buper
      e_gjahr = w_year.
  if sy-subrc <> 0.
  endif.

  w_datum = w_buper+1(2).


**Month text
  select single ltx from t247 into t247-ltx
         where spras = 'E'
         and   mnr   = so_date-low+4(2).

endform.                    " f001_determine_fiscal_period

*&---------------------------------------------------------------------*
*&      Form  f001_determine_closing_stock
*&---------------------------------------------------------------------*
*       Desc : Determination of closing stock
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form f002_determine_closing_stock
                   changing p_it_stockclose like it_stockclose[].

  data : lw_recs type i,
         w_dval like mseg-menge,
         w_opbal like mseg-menge.

  data : begin of lit_stockclose occurs 0,
         lfgja like mardh-lfgja,   "Fiscal yr
         lfmon like mardh-lfmon,   "Period
         werks like s031-werks,   "Plant
         matnr like mara-matnr,   "Material
         lgort like mseg-lgort,   "Storage Loc
         labst like mardh-labst,  "Unrestricted Stock
       end of lit_stockclose.

  data : begin of lit_mard occurs 0,
         matnr like mara-matnr,
         werks like mseg-werks,
         lgort like mseg-lgort,
         end of lit_mard.

  data : lwa_stockclose like line of p_it_stockclose.

  select matnr werks lgort from mard
  into corresponding fields of table lit_mard
  where matnr in so_matnr
  and werks in so_werks.



  refresh it_stockclose.
  clear   it_stockclose.


*****Fetch Closing stock

*If the entry is found in MARD then consider the same
*else fetch the closing stock from MARDH.

  loop at lit_mard.

    refresh lit_stockclose.
    clear   lit_stockclose.


    select werks matnr lgort labst
          insme speme einme retme
          lfgja lfmon
           into corresponding fields of
            table lit_stockclose
           from mard
    where   lfmon = w_datum
    and     lfgja = w_year
    and     werks = lit_mard-werks
    and     matnr = lit_mard-matnr
    and     lgort = lit_mard-lgort.

    clear lw_recs.
    describe table lit_stockclose lines lw_recs.

*If no entry in MARD fetch from MARDH.
    if lw_recs = 0.

      select werks matnr lgort labst
            insme speme einme retme
            lfgja lfmon
             into corresponding fields of
            table lit_stockclose
            from mardh
     where   lfmon = w_datum
     and     lfgja = w_year
     and     werks = lit_mard-werks
     and     matnr = lit_mard-matnr
     and     lgort = lit_mard-lgort.


    endif.

    sort lit_stockclose by lfgja lfmon descending.

    read table lit_stockclose index 1.
    if sy-subrc eq 0.
      move-corresponding lit_stockclose to lwa_stockclose.
      append  lwa_stockclose to p_it_stockclose.



      clear  lwa_stockclose.

    endif.

  endloop.

endform.                    " f001_determine_closing_stock

*&---------------------------------------------------------------------*
*&      Form   f003_change_closing_stock
*&---------------------------------------------------------------------*
*       Desc : Selection of the mat docs for the intermediate
*              days if the selection begin date is not from
*              first date of the corresponding month.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form f003_change_closing_stock changing
                                   p_it_stockclose like it_stockclose[].

  data : lwa_stockclose like line of p_it_stockclose[].



  refresh : r_date,
            it_docs,
            it_finalstock.

  clear : r_date,
          lwa_stockclose.

  r_date-sign = 'I'.
  r_date-option = 'BT'.

  concatenate so_date-low+0(4)
              so_date-low+4(2)
              '01'
              into r_date-low.

  r_date-high = so_date-low - 1.
  append r_date.
  clear r_date.

read table r_loekz index 1.

  select mkpf~budat
         mseg~matnr
         mseg~bwart
         mseg~menge
         mseg~werks
         mseg~shkzg
         mseg~lgort
         makt~maktx
         into corresponding
         fields of
         table it_docs
         from mkpf as mkpf inner join mseg as mseg
         on mkpf~mandt = mseg~mandt and
            mkpf~mblnr = mseg~mblnr and
            mkpf~mjahr = mseg~mjahr
         inner join makt as makt
           on mseg~matnr = makt~matnr
         where
            mseg~werks IN SO_WERKS and
            mseg~matnr in so_matnr and
            mkpf~budat in r_date and
            mseg~bwart in r_movtype.



  Clear it_docs.

  loop at it_docs.

    if it_docs-shkzg = 'H'.
      it_docs-menge = - ( it_docs-menge ).
      modify it_docs.
    endif.

    move-corresponding it_docs to it_finalstock.
    collect it_finalstock.
    clear   it_finalstock.

    move it_docs-maktx to it_head-maktx.

  endloop.

  loop at p_it_stockclose into lwa_stockclose.
    read table it_finalstock with key
                       matnr = lwa_stockclose-matnr
                       werks = lwa_stockclose-werks
                       lgort = lwa_stockclose-lgort.

    if sy-subrc eq 0.

      lwa_stockclose-labst = lwa_stockclose-labst +
                             it_finalstock-menge.
      modify p_it_stockclose from lwa_stockclose.


      read table p_it_stockclose into lwa_stockclose index 1.
      "with key matnr = wa_head-matnr.
      "budat = wa_head-p_date.

      if sy-subrc = 0.

        w_dval = lwa_stockclose-labst.



      ENDIF.



      clear lwa_stockclose.
    endif.

  endloop.

endform.                    " f003_change_closing_stock

*&---------------------------------------------------------------------*
*&      Form  f004_determine_mat_docs
*&---------------------------------------------------------------------*
*       DEsc : Determination of Receipts and Issues
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form f004_determine_mat_docs  changing p_it_mkpf like it_mkpf[]
                                       p_it_mseg like it_mseg[].


  data : lwa_mkpf like line of p_it_mkpf[],
         lwa_mseg like line of p_it_mseg[],
          ls_quantity   type mseg-menge,
          sum_issue type mseg-menge,
          sum_receipt type mseg-menge,
          sum_531 type mseg-menge,
          sum_541 type mseg-menge,
          sum_101  type mseg-menge,
          sum_511  type mseg-menge,
          sum_261  type mseg-menge,
          sum_601  type mseg-menge,
          sum_201 type mseg-menge,
          sum_641 type mseg-menge,
          sum_po  type mseg-menge,
          sum_551  type mseg-menge,
          sum_331  type mseg-menge,
          sum_161  type mseg-menge,
          sum_305  type mseg-menge,
          sum_309  type mseg-menge,
          sum_701  type mseg-menge,
          sum_702  type mseg-menge.


***Determination of Mat Docs

  select mblnr xblnr budat mjahr cpudt from mkpf
         into corresponding fields
         of table it_mkpf
         where budat in so_date.


***Determination of Receipts and issues

*  loop at p_it_mkpf into lwa_mkpf.
*
*    select mblnr matnr bwart menge werks mjahr shkzg lgort
*          from mseg into corresponding
*          fields of lwa_mseg
*          where mblnr = lwa_mkpf-mblnr
*          and   mjahr = lwa_mkpf-mjahr
*          and   werks in so_werks
*          and   matnr in so_matnr
*          and   bwart in r_movtype.
*
*      if lwa_mseg-shkzg = 'H'.
*        lwa_mseg-menge = - ( lwa_mseg-menge ).
*      endif.
*
*
*      move : lwa_mkpf-budat to lwa_mseg-budat,
*             lwa_mkpf-xblnr to lwa_mseg-xblnr,
*             lwa_mkpf-cpudt to lwa_mseg-cpudt.
*
*
*      append lwa_mseg to p_it_mseg.
*
*      move lwa_mseg-matnr to it_head-matnr.
*      move lwa_mseg-budat to it_head-p_date.
*      move lwa_mseg-bwart to it_head-bwart.
*      append it_head.
*      clear it_head.
*      clear lwa_mseg.
*
*
*    endselect.
*  endloop.


  sort it_mkpf by budat cpudt .
  loop at it_mkpf.
    at new budat.
      if w_opbal = SPACE.
        it_head-openbal = w_dval.
        w_chk = 1.
      else.
        it_head-openbal = w_opbal.
        w_chk = 2.
      endif.
    endat.

    if w_chk = 1.
      it_head-openbal = w_dval.
    elseif w_chk = 2.
      it_head-openbal = w_opbal.
    endif.
    select  Single *
          from mseg
          where mblnr = it_mkpf-mblnr
          and   mjahr = it_mkpf-mjahr
          and   werks in so_werks
          and   matnr in so_matnr
          and   bwart in r_movtype.

    if mseg-matnr ne SPACE.
      move mseg-mblnr to it_mseg-xblnr.
      move mseg-matnr to it_mseg-matnr.
      move mseg-bwart to IT_mseg-bwart.
      move mseg-menge to it_mseg-menge.
      move mseg-werks to it_mseg-werks.
      move mseg-mjahr to it_mseg-mjahr.
      move mseg-shkzg to it_mseg-shkzg.
      move mseg-lgort to it_mseg-lgort.


      if it_mseg-shkzg = 'H'.
        it_mseg-menge = - ( lwa_mseg-menge ).
      endif.



      move : it_mkpf-budat to it_mseg-budat,
             it_mkpf-xblnr to it_mseg-xblnr,
             it_mkpf-cpudt to it_mseg-cpudt.


*      append lwa_mseg to p_it_mseg.
      append it_mseg.

*  it_head-R_PO = it_head-r_po + ls_quantity.


      if ( it_mseg-bwart eq '101'
         or   it_mseg-bwart eq '102'
         or   it_mseg-bwart eq '103'
         or   it_mseg-bwart eq '104'
         or   it_mseg-bwart eq '105'
         or  it_mseg-bwart eq '106'
         or  it_mseg-bwart eq '161'
         or  it_mseg-bwart eq '162'
         or  it_mseg-bwart eq '122'
         or  it_mseg-bwart eq '123'
         or  it_mseg-bwart eq '511'
         or  it_mseg-bwart eq '512'
         or  it_mseg-bwart eq '531'
         or  it_mseg-bwart eq '532'
         or  it_mseg-bwart eq '561'
         or  it_mseg-bwart eq '562'
         or  it_mseg-bwart eq '305'
         or  it_mseg-bwart eq '306'
         or  it_mseg-bwart eq '702') and it_mseg-shkzg = 'S'.


        move it_mseg-menge to ls_quantity.
        sum_receipt = sum_receipt + ls_quantity.

      elseif

       ( it_mseg-bwart eq '261'
         or   it_mseg-bwart eq '262'
         or   it_mseg-bwart eq '601'
         or   it_mseg-bwart eq '602'
         or   it_mseg-bwart eq '201'
         or  it_mseg-bwart eq '202'
         or  it_mseg-bwart eq '551'
         or  it_mseg-bwart eq '552'
         or  it_mseg-bwart eq '541'
         or  it_mseg-bwart eq '542'
         or  it_mseg-bwart eq '331'
         or  it_mseg-bwart eq '332'
         or  it_mseg-bwart eq '333'
         or  it_mseg-bwart eq '334'
         or  it_mseg-bwart eq '335'
         or  it_mseg-bwart eq '336'
         or  it_mseg-bwart eq '641'
         or  it_mseg-bwart eq '642'
         or  it_mseg-bwart eq '643'
         or  it_mseg-bwart eq '644'
         or  it_mseg-bwart eq '351'
         or  it_mseg-bwart eq '352'
         or  it_mseg-bwart eq '301'
         or  it_mseg-bwart eq '302'
         or  it_mseg-bwart eq '303'
         or  it_mseg-bwart eq '304'

         or  it_mseg-bwart eq '309'
         or  it_mseg-bwart eq '310'
         or  it_mseg-bwart eq '909'
         or  it_mseg-bwart eq '910'
         or  it_mseg-bwart eq '701')  and it_mseg-shkzg = 'S'.

         move it_mseg-menge to ls_quantity.
        sum_issue = sum_issue + ls_quantity.

      endif.


    if ( it_mseg-bwart eq '101' or it_mseg-bwart eq '102'
        or it_mseg-bwart eq '103' or it_mseg-bwart eq '104'
        or it_mseg-bwart eq '105' or it_mseg-bwart eq '106')
        And it_mseg-shkzg = 'S'.

        move it_mseg-menge to ls_quantity.
        sum_po = sum_po + ls_quantity.
      endif.


      if ( it_mseg-bwart eq '531'
         or it_mseg-bwart eq '532') and it_mseg-shkzg = 'S'.

        move it_mseg-menge to ls_quantity.
        sum_531 = sum_531 + ls_quantity.
      endif.

      if ( it_mseg-bwart eq '541' or it_mseg-bwart eq '542' ).
        move it_mseg-menge to ls_quantity.
        sum_541 = sum_541 + ls_quantity.
      endif.

      if ( it_mseg-bwart eq '102' or it_mseg-bwart eq '102' ).
        move it_mseg-menge to ls_quantity.
        sum_101 = sum_101 + ls_quantity.
      endif.

      if ( it_mseg-bwart eq '561' or it_mseg-bwart eq '562'
          OR IT_MSEG-BWART EQ '511' OR it_mseg-bwart eq '512').
        move it_mseg-menge to ls_quantity.
        sum_511 = sum_511 + ls_quantity.
      endif.


      if ( it_mseg-bwart eq '261' or it_mseg-bwart eq '262').
        move it_mseg-menge to ls_quantity.
        sum_261 = sum_261 + ls_quantity.
      endif.

      if ( it_mseg-bwart eq '601' or it_mseg-bwart eq '602').
        move it_mseg-menge to ls_quantity.
        sum_601 = sum_601 + ls_quantity.
      endif.


      if ( it_mseg-bwart eq '201' or it_mseg-bwart eq '202').
        move it_mseg-menge to ls_quantity.
        sum_201 = sum_201 + ls_quantity.
      endif.

    if ( it_mseg-bwart eq '551' or it_mseg-bwart eq '552').
        move it_mseg-menge to ls_quantity.
        sum_551 = sum_551 + ls_quantity.
      endif.

    if ( it_mseg-bwart eq '331' or it_mseg-bwart eq '332'
          or it_mseg-bwart eq '333' or it_mseg-bwart eq '334'
          or it_mseg-bwart eq '335' or it_mseg-bwart eq '336').
        move it_mseg-menge to ls_quantity.
        sum_331 = sum_331 + ls_quantity.
      endif.

    if ( it_mseg-bwart eq '161' or it_mseg-bwart eq '162'
          or it_mseg-bwart eq '123' or it_mseg-bwart eq '122').
        move it_mseg-menge to ls_quantity.
        sum_161 = sum_161 + ls_quantity.
      endif.


    if ( it_mseg-bwart eq '641' or it_mseg-bwart eq '642'
          or it_mseg-bwart eq '643' or it_mseg-bwart eq '644'
          or it_mseg-bwart eq '351' or it_mseg-bwart eq '352'
          or it_mseg-bwart eq '301' or it_mseg-bwart eq '302'
          or it_mseg-bwart eq '303' or it_mseg-bwart eq '304').
        move it_mseg-menge to ls_quantity.
        sum_641 = sum_641 + ls_quantity.
      endif.

  if ( it_mseg-bwart eq '305' or it_mseg-bwart eq '306').
        move it_mseg-menge to ls_quantity.
        sum_305 = sum_305 + ls_quantity.
      endif.

  if ( it_mseg-bwart eq '309' or it_mseg-bwart eq '310'
     or it_mseg-bwart eq '909' or it_mseg-bwart eq '910').
        move it_mseg-menge to ls_quantity.
        sum_309 = sum_309 + ls_quantity.
      endif.


if ( it_mseg-bwart eq '701').
        move it_mseg-menge to ls_quantity.
        sum_701 = sum_701 + ls_quantity.
      endif.


if ( it_mseg-bwart eq '702').
        move it_mseg-menge to ls_quantity.
        sum_702 = sum_702 + ls_quantity.
      endif.


      at end of budat.

    it_head-closing_bal = ( it_head-openbal + sum_receipt ) - sum_issue.
        w_opbal = it_head-closing_bal.
        move it_mseg-matnr to it_head-matnr.
        move it_mseg-budat to it_head-p_date.
        move it_mseg-bwart to it_head-bwart.
        move sum_po  to it_head-R_po.
        move sum_101  to it_head-R_ProdOrd.
        move sum_531 to it_head-R_ByProd.
        move sum_511  to it_head-R_OTHERS.
        move sum_receipt to it_head-r_total.
        move sum_261  to it_head-I_Prod.
        move sum_601  to it_head-I_cust.
        move sum_201  to it_head-I_CostCen.
        move sum_551  to it_head-I_Scrapping.
        move sum_541 to it_head-I_subcontractor.
        move sum_331  to it_head-I_Sampling.
        move sum_issue   to it_head-i_total.
        move sum_161  to it_head-PurRet.
        move sum_641  to it_head-stock_out.
        move sum_305  to it_head-stock_in.
        move sum_309  to it_head-M_to_M_transit.
        move sum_701  to it_head-phy_loss.
        move sum_702  to it_head-phy_gain.



        append it_head.
        w_chk = 0.
        sum_issue = 0.
        sum_receipt = 0.
        sum_531 = 0.
        sum_541 = 0.
        sum_101 = 0.
        SUM_511 = 0.
        sum_261 = 0.
        sum_601 = 0.
        sum_201 = 0.
        sum_po = 0.
        sum_551 = 0.
        sum_641 = 0.
        sum_701 = 0.
        sum_702 = 0.


      endat.


      clear it_head.
      clear it_mseg.


    endif.


endloop.


  sort it_mseg by matnr budat bwart.
  sort it_head by matnr p_date bwart.
  delete ADJACENT duplicates from it_head.

endform.                    " f004_determine_mat_docs


*&---------------------------------------------------------------------*
*&      Form  f005_receipts_issues
*&---------------------------------------------------------------------*
*       Desc
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form f005_receipts_issues  using    p_it_mseg  like it_mseg[]
                           changing p_it_issue like it_issue[]
                                    p_it_receipt like it_receipt[]
                                    p_it_matnr like it_matnr[].

  data : lwa_mseg like line of p_it_mseg[],
         lwa_issue like line of p_it_issue[],
         lwa_receipt like line of p_it_receipt[],
         lwa_matnr like line of p_it_matnr[],
         ls_quantity   type mseg-menge,
         wa_head type ty_head,
         lwa_stockclose like line of it_stockclose[].



*  sort it_head by bwart p_date matnr.
*  loop at it_head into wa_head.
*
*    read table p_it_mseg into lwa_mseg with key bwart = wa_head-bwart.
*    if sy-subrc = 0.
*      if ( lwa_mseg-bwart eq '101'
*          or   lwa_mseg-bwart eq '102'
*          or   lwa_mseg-bwart eq '103'
*          or   lwa_mseg-bwart eq '104'
*          or   lwa_mseg-bwart eq '105'
*          or  lwa_mseg-bwart eq '106') and lwa_mseg-shkzg = 'S'.
*        .
*        loop at p_it_mseg into lwa_mseg where matnr = wa_head-matnr
*                                        and   budat = wa_head-p_date
*                                        and   bwart = wa_head-bwart.
*
*          move lwa_mseg-menge to ls_quantity.
*          wa_head-R_PO = ls_quantity + wa_head-R_PO.
*          modify it_head from wa_head.
*        endloop.
*        clear ls_quantity .
*      endif.
*
*
*      if ( lwa_mseg-bwart eq '641'
*       and lwa_mseg-shkzg = 'S' ).
*        loop at p_it_mseg into lwa_mseg where matnr = wa_head-matnr
*                                        and   budat = wa_head-p_date
*                                        and   bwart = wa_head-bwart.
*          IF SY-SUBRC = 0 .
*            move lwa_mseg-menge to ls_quantity.
*            wa_head-stock_out = ls_quantity + wa_head-stock_out.
*            modify it_head from wa_head.
*          ENDIF.
*        endloop.
*        clear ls_quantity .
*      endif.
*
*      read table it_stockclose into lwa_stockclose
*         with key matnr = wa_head-matnr.
*                  "budat = wa_head-p_date.
*
*      if sy-subrc = 0.
*
*        wa_head-openbal = lwa_stockclose-labst.
*
*        modify it_head from wa_head.
*
*      ENDIF.
*
*    endif.
*  endloop.

*  sort it_head by bwart p_date matnr.
*  loop at it_head into wa_head.
*
*    read table it_mseg into lwa_mseg with key bwart = wa_head-bwart.
*    if sy-subrc = 0.
*      if ( lwa_mseg-bwart eq '101'
*          or   lwa_mseg-bwart eq '102'
*          or   lwa_mseg-bwart eq '103'
*          or   lwa_mseg-bwart eq '104'
*          or   lwa_mseg-bwart eq '105'
*          or  lwa_mseg-bwart eq '106') and lwa_mseg-shkzg = 'S'.
*        .
*        loop at it_mseg into lwa_mseg where matnr = wa_head-matnr
*                                        and   budat = wa_head-p_date
*                                        and   bwart = wa_head-bwart.
*
*          move lwa_mseg-menge to ls_quantity.
*          wa_head-R_PO = ls_quantity + wa_head-R_PO.
*          modify it_head from wa_head.
*        endloop.
*        clear ls_quantity .
*      endif.
*
*
*      if ( lwa_mseg-bwart eq '641'
*       and lwa_mseg-shkzg = 'S' ).
*        loop at it_mseg into lwa_mseg where matnr = wa_head-matnr
*                                        and   budat = wa_head-p_date
*                                        and   bwart = wa_head-bwart.
*          IF SY-SUBRC = 0 .
*            move lwa_mseg-menge to ls_quantity.
*            wa_head-stock_out = ls_quantity + wa_head-stock_out.
*            modify it_head from wa_head.
*          ENDIF.
*        endloop.
*        clear ls_quantity .
*      endif.
*
*      read table it_stockclose into lwa_stockclose
*         with key matnr = wa_head-matnr.
*                  "budat = wa_head-p_date.
*
*      if sy-subrc = 0.
*
*        wa_head-openbal = lwa_stockclose-labst.
*
*        modify it_head from wa_head.
*
*      ENDIF.
*
*    endif.
*  endloop.


endform.                    " f005_receipts_issues

*&---------------------------------------------------------------------*
*&      Form  COMMENT_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM comment_build USING p_it_st_list_top_of_page TYPE slis_t_listheader
.

  DATA: ls_line TYPE slis_listheader.

  REFRESH p_it_st_list_top_of_page.
  CLEAR ls_line.
  ls_line-typ  = 'H'.
  ls_line-info  = 'Details of Stock Ledger'.
  APPEND ls_line TO p_it_st_list_top_of_page.

ENDFORM.                    " COMMENT_BUILD

*&--------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE-ALV
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM top_of_page-alv.
*
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = it_st_list_top_of_page.

ENDFORM.                    "TOP_OF_PAGE-ALV
*&---------------------------------------------------------------------*
*&      Form  FIELDCAT
*&---------------------------------------------------------------------*
*      -->P_IT_ST_FIELDCAT[]  text
*----------------------------------------------------------------------*
FORM fieldcat  USING p_it_st_fieldcat TYPE slis_t_fieldcat_alv.
  DATA: ls_fieldcat TYPE slis_fieldcat_alv.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname  = 'P_DATE'.
  ls_fieldcat-datatype   = 'P_DATE'.
  ls_fieldcat-outputlen  = 18.
  ls_fieldcat-seltext_m  = text-002 .
*  ls_fieldcat-rollname   = 'MATNR'.
  ls_fieldcat-key         = 'X'.
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'MATNR'.
  ls_fieldcat-rollname    = 'MATNR'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-outputlen  = 18.
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'MAKTX'.
  ls_fieldcat-rollname    = 'MAKTX'.
  ls_fieldcat-ddictxt     = 'L'.
    ls_fieldcat-outputlen  = 40.
  APPEND ls_fieldcat TO p_it_st_fieldcat.

*  CLEAR ls_fieldcat.
*  ls_fieldcat-fieldname   = 'BWART'.
*  ls_fieldcat-rollname    = 'BWART'.
*  ls_fieldcat-ddictxt     = 'L'.
*  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'OPENBAL'.
  ls_fieldcat-rollname    = 'OPENBAL'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-003 .

  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'R_PO'.
  ls_fieldcat-rollname    = 'R_PO'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-004 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'R_PRODORD'.
  ls_fieldcat-rollname    = 'R_PRODORD'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-005 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'R_BYPROD'.
  ls_fieldcat-rollname    = 'R_BYPROD'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-006 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'R_OTHERS'.
  ls_fieldcat-rollname    = 'R_OTHERS'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-007 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'R_TOTAL'.
  ls_fieldcat-rollname    = 'R_TOTAL'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-008 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_PROD'.
  ls_fieldcat-rollname    = 'I_PROD'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-009 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_CUST'.
  ls_fieldcat-rollname    = 'I_CUST'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-010 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_COSTCEN'.
  ls_fieldcat-rollname    = 'I_COSTCEN'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-011 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_SCRAPPING'.
  ls_fieldcat-rollname    = 'I_SCRAPPING'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-012 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_SUBCONTRACTOR'.
  ls_fieldcat-rollname    = 'I_SUBCONTRACTOR'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-013 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_SAMPLING'.
  ls_fieldcat-rollname    = 'I_SAMPLING'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-014 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'I_TOTAL'.
  ls_fieldcat-rollname    = 'I_TOTAL'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-015 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'PURRET'.
  ls_fieldcat-rollname    = 'PURRET'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-016 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'STOCK_OUT'.
  ls_fieldcat-rollname    = 'STOCK_OUT'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-017 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'STOCK_IN'.
  ls_fieldcat-rollname    = 'STOCK_IN'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-018 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'STOCK_TRANSIT'.
  ls_fieldcat-rollname    = 'STOCK_TRANSIT'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-019 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'M_TO_M_TRANSIT'.
  ls_fieldcat-rollname    = 'M_TO_M_TRANSIT'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-020 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'PHY_LOSS'.
  ls_fieldcat-rollname    = 'PHY_LOSS'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-021 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.



  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'PHY_GAIN'.
  ls_fieldcat-rollname    = 'PHY_GAIN'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-022 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'CLOSING_BAL'.
  ls_fieldcat-rollname    = 'CLOSING_BAL'.
  ls_fieldcat-ddictxt     = 'L'.
  ls_fieldcat-seltext_m  = text-023 .
  APPEND ls_fieldcat TO p_it_st_fieldcat.


ENDFORM.                    " FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  LAYOUT_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ST_LAYOUT  text
*----------------------------------------------------------------------*
FORM layout_build  USING    p_st_layout TYPE slis_layout_alv.

  p_st_layout-box_fieldname       = 'SELK'.  " Checkbox
  p_st_layout-get_selinfos        = 'X'.
  p_st_layout-f2code              =  'PICK' .  " Doppelklickfunktion
  p_st_layout-confirmation_prompt = 'X'.       "Sicherheitsabfrage
  p_st_layout-key_hotspot         = 'X'.       "Schlüssel als Hotspot
  p_st_layout-info_fieldname      = 'COL'.     "Zeilenfarbe


ENDFORM.                    " LAYOUT_BUILD
*&---------------------------------------------------------------------*
*&      Form  REUSE_ALV_LIST_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM reuse_alv_list_display .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
             i_background_id          = 'ALV_BACKGROUND'
             i_callback_program       = s_repid
*            I_CALLBACK_PF_STATUS_SET = S_STATUS
*            I_CALLBACK_USER_COMMAND     = S_USER_COMMAND
*            I_STRUCTURE_NAME         = ''
*            IS_LAYOUT                = ST_LAYOUT
             it_fieldcat              = it_st_fieldcat[]
*            IT_EXCLUDING             =
*            IT_SPECIAL_GROUPS        = ST_SP_GROUP
*            IT_SORT                  =
*            IT_FILTER                =
*            IS_SEL_HIDE              =
*            I_DEFAULT                = 'X'
*            I_SAVE                   = S_SAVE
*            IS_VARIANT               = S_VARIANT
            IT_EVENTS                = IT_ST_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
*     IMPORTING
*           E_EXIT_CAUSED_BY_CALLER   =
*           ES_EXIT_CAUSED_BY_USER    =
       TABLES
            t_outtab                  =  it_head.

ENDFORM.                    " REUSE_ALV_LIST_DISPLAY

*&---------------------------------------------------------------------*
*&      Form  EVENTTAB_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_ST_EVENTS[]  text
*----------------------------------------------------------------------*
FORM eventtab_build  USING    p_st_events  TYPE slis_t_event .

  DATA: ls_event TYPE slis_alv_event.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = p_st_events.

  READ TABLE p_st_events WITH KEY name = slis_ev_top_of_page
                           INTO ls_event.
  IF sy-subrc = 0.
    MOVE st_formname_top_of_page TO ls_event-form.
    APPEND ls_event TO p_st_events.
  ENDIF.

  READ TABLE p_st_events WITH KEY name = slis_ev_user_command
                           INTO ls_event.
  IF sy-subrc = 0.
    MOVE s_user_command TO ls_event-form.
    APPEND ls_event TO p_st_events.
  ENDIF.
*  READ TABLE p_st_events WITH KEY name = slis_ev_pf_status_set
*                         INTO ls_event.
*
*  IF sy-subrc = 0.
*    MOVE s_status TO ls_event-form.
*    APPEND ls_event TO p_st_events.
*  ENDIF.

ENDFORM.                    " EVENTTAB_BUILD


*&---------------------------------------------------------------------*
*&      Form  VARIANT_INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM variant_init .
  CLEAR s_variant.
  s_variant-report = s_repid.
  s_variant-handle = code.

ENDFORM.                    " VARIANT_INIT

Former Member
0 Kudos

there are lot of examples in sap see se38 with Balv* and take f4 you will get lot of reports

Former Member
0 Kudos

Hi,

Have a look at the programs starting with BALV* in SE38 transaction, this might help,

Rgds,

Former Member
0 Kudos

Take a look at the program BCALV_GRID_VERIFY in your system.

There are quite a few example programs. Search using BCALV*

Regards,

Ravi