<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Reg:Display data using ALV in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/reg-display-data-using-alv/m-p/4626385#M1089718</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Venkar,&lt;/P&gt;&lt;P&gt;Check out the Sample code for your reference.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;
***********************************************************************
* Program Name      : Cost Center Rolling Trend Summary Report        *
*                                                                     *
* Request No.       : DEVK905041                                       *
* Requester         : Jocelyn Ordanza                                 *
* Program Type      : Report                                          *
* Programmer        : Aruna Pitla                                     *
* Date programmed   : 09/24/2002                                      *
* Transaction code  : ZF04                                            *
* Brief Description : This Summary Report will show a total of six    *
*                     quarters in two plan versions based on selected *
*                     periods and cost center/cost element combination
*                     and a grand total of all the costs
*---------------------------------------------------------------------*
* Mandatory field(s) - Fiscal year                                    *
*                      Plan/Fcst Version1                             *
*                      Plan/Fcst Version2                             *
*                      From Period                                    *
*                      To Period                                      *
*                                                                     *
* Optional field(s)  - Cost center group(if cost center not entered)  *
*                      Cost center(if cost center group not entered)  *
*                      Cost element group(if cost element not entered)*
*                      Cost element(if cost element group not entered)*
*---------------------------------------------------------------------*
* Remark:                                                             *
***********************************************************************
***********************************************************************
* Modification Log                                                    *
*---------------------------------------------------------------------*
* Date         Programmer   Change Request #                          *
* ----------   ----------   ----------------                          *

report zfi_costcntr_rolling_trend_smr
no standard page heading
       message-id zfi
       line-count 65(3) line-size 161.

************************************************************************
*              Declaration of Database tables
************************************************************************
tables : cosp,     " CO Object: Line Items (by Period)
         setleaf,  " Values in Sets
         cosr,     " CO Object: Statistical Key Figure Totals
         csks,     " Cost Center Master Data
         tkt03,    " Stat. key figure texts
         rksb1.    " Work fields line-item reports

************************************************************************
*              Declaration of Internal tables
************************************************************************
data : begin of it_output occurs 0,
         cst_ele like cosp-kstar,
         cost_ctr like csks-kostl,
         qt1_tot type p decimals 0,
         qt2_tot type p decimals 0,
         qt3_tot type p decimals 0,
         qt4_tot type p decimals 0,
         qt5_tot type p decimals 0,
         qt6_tot type p decimals 0,
         yr_tot1 type p decimals 0,
         yr_tot2 type p decimals 0,
         yr_tot3 type p decimals 0,
         highlevel1 like bapiset_hier-descript,
         highlevel2 like bapiset_hier-descript,
         highlevel3 like bapiset_hier-descript,
         highlevel4 like bapiset_hier-descript,
         descript like bapiset_hier-descript,
         key_desc  like bapiset_hier-descript,
         hierlevel like bapiset_hier-hierlevel,
         sortord   like sy-tabix,
         sortord1  like sy-tabix,
       end of it_output.

* Final internal table
data : begin of it_out occurs 0,
         highlevel1 like bapiset_hier-descript,
         highlevel2 like bapiset_hier-descript,
         highlevel3 like bapiset_hier-descript,
         highlevel4 like bapiset_hier-descript,
         descript like bapiset_hier-descript,
         cst_ele like cosp-kstar,
         cost_ctr like csks-kostl,
         qt1_tot type p decimals 0,
         qt2_tot type p decimals 0,
         qt3_tot type p decimals 0,
         qt4_tot type p decimals 0,
         qt5_tot type p decimals 0,
         qt6_tot type p decimals 0,
         yr_tot1 type p decimals 0,
         yr_tot2 type p decimals 0,
         yr_tot3 type p decimals 0,
       end of it_out.

data : begin of it_cntrnodes occurs 0.
        include structure bapiset_hier.
data : end of it_cntrnodes.

data : begin of it_cstnodes occurs 0.
        include structure bapiset_hier.
data : end of it_cstnodes.

data : begin of it_costcenters occurs 0.
        include structure bapi1112_values.
data : end of it_costcenters.

data : begin of it_costelements occurs 0.
        include structure bapi1112_values.
data : end of it_costelements.

data: begin of it_idynpfields occurs 0,
        fieldname like dpov-fldname,
        stepl like dynpread-stepl,
        fieldvalue like dynpread-fieldvalue,
        fieldinp like dynpread-fieldinp,
      end of it_idynpfields.

data: it_bdctab like bdcdata occurs 0 with header line.

data it_output1 like it_output occurs 0 with header line.

data : begin of it_node occurs 0,
         highlevel1 like bapiset_hier-descript,
         highlevel2 like bapiset_hier-descript,
         highlevel3 like bapiset_hier-descript,
         highlevel4 like bapiset_hier-descript,
         descript like it_cntrnodes-descript,
         valfrom  like bapi1113_values-valfrom ,
         valto    like bapi1113_values-valto,
         sortord1  like sy-tabix,
       end of it_node.

ranges : r_year   for cosp-gjahr.

************************************************************************
*                    Global variables
************************************************************************
data : v_toperiod(30),
       v_ncnt(3) type n,
       v_toprd like setleaf-valto,
       v_cnt type i,
       v_ver_start type i.

field-symbols &amp;lt;fs&amp;gt;.

data : v_qt1_tot like it_output-qt2_tot,
       v_qt2_tot like it_output-qt2_tot,
       v_qt3_tot like it_output-qt2_tot,
       v_qt4_tot like it_output-qt2_tot,
       v_qt5_tot like it_output-qt2_tot,
       v_qt6_tot like it_output-qt2_tot.

data : v_times type i.

data : v_title1(60),                           "report title1
       v_title2(60).                           "report title2

* Variables for totals
data : v_total1 type p decimals 0,
       v_total2 type p decimals 0,
       v_total3 type p decimals 0,
       v_total4 type p decimals 0,
       v_total5 type p decimals 0,
       v_total6 type p decimals 0,
       v_total7 type p decimals 0,
       v_total8 type p decimals 0,
       v_total9 type p decimals 0.

* Variables for Grand Total
data : v_gtotal1 type p decimals 0,
       v_gtotal2 type p decimals 0,
       v_gtotal3 type p decimals 0,
       v_gtotal4 type p decimals 0,
       v_gtotal5 type p decimals 0,
       v_gtotal6 type p decimals 0,
       v_gtotal7 type p decimals 0,
       v_gtotal8 type p decimals 0,
       v_gtotal9 type p decimals 0.


************************************************************************
*                     selection-screen
************************************************************************
selection-screen begin of block b1 with frame title text-020.
parameters : p_year like cosp-gjahr memory id gjr obligatory,
       " Fiscal year
             p_versn1 like cosp-versn obligatory,     " Plan/Fcst
                                                            " Version 1
             p_versn2 like coep-versn obligatory,     " Plan/Fcst
                                                            " Version 2
             p_frprd like coep-perio obligatory,      " From Period
             p_toprd like coep-perio obligatory.      " To Period

select-options : s_skey for cosr-stagr.       " Statistical key figure
select-options : s_wrttp for cosp-wrttp no-display.
selection-screen end of block b1.

selection-screen begin of block b2 with frame title text-021.

parameters : p_cntrgp like rksb1-ksgru memory id ksg.
" Cost Center Group
select-options : s_cntr for csks-kostl memory id kos.   " Cost Center
parameters : p_cstgp like rksb1-kagru.    " Cost Element Group
select-options : s_cstele for cosp-kstar. " Cost Element
selection-screen end of block b2.

data v_cost_element like  rksb1-kagru.
data v_cstcenter like  rksb1-ksgru.
* Include standard page heading
include z_std_heading.

************************************************************************
*                    Initialization
************************************************************************
initialization.
  v_title1 = 'Cost Center Rolling Trend Summary'(001).

************************************************************************
*                    at selection-screen
************************************************************************
* Validation for from period
at selection-screen on p_frprd.
  perform validate_period.

* Validation for to period
at selection-screen on p_toprd.
  perform validate_toperiod.

* Validation for version1
at selection-screen on p_versn1.
  perform validate_version1.

* Validation for version2
at selection-screen on p_versn2.
  perform validate_version2.

at selection-screen.
* Validation for cost center
  perform validate_costcenter.

* Validation for cost center group
  perform validate_costcentergp.

* Validation for cost element
  perform validate_costelement.

* Validation for cost element group
  perform validate_costelementgp.

at selection-screen on value-request for p_cntrgp.
* Search help for cost center group
  perform cost_cntr_gp_valuehelp.

at selection-screen on value-request for p_cstgp.
* Search help for cost element group
  perform cost_ele_gp_valuehelp.

************************************************************************
*                    Top-of-page
************************************************************************
top-of-page.
* Display standard page heading
  perform pgh_standard_heading using v_title1 v_title2.

* Display selection screen
  perform display_selection_screen.

* Display column headings
  perform display_heading.

************************************************************************
*                    start-of-selection
************************************************************************
start-of-selection.
* Extraction of Data.
  perform frm_extract_data.

************************************************************************
*                    end-of-selection
************************************************************************
end-of-selection.
  if not it_out[] is initial.
* Display report output
    perform display_report.

  else.
     message I005 with 'No record found for Selected Criteria'(034).
     exit.

  endif.
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  display_selection_screen
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form display_selection_screen.
  if not p_year is initial.
    write :/3  'Year'(023), 34 p_year.
  endif.
  if not p_versn1 is initial.
    write :/3  'Version 1'(024), 34 p_versn1.
  endif.
  if not p_versn2 is initial.
    write :/3  'Version 2'(025), 34 p_versn2.
  endif.


  if not p_frprd  is initial.
    write :/3  'From Period'(026), 34 p_frprd .
  endif.

  if not p_toprd  is initial.
    write :/3  'To Period'(027), 34 p_toprd .
  endif.

  if not s_skey[] is initial and p_cntrgp  eq space.
    write :/3 'Statistical key'(028),34 s_skey-low .
    if not s_skey-high is initial.
      write : 50 'to'(029), 53 s_skey-high.
    endif.
  endif.

  if not p_cntrgp  is initial.
    write :/3 'Cost Center Grp'(030),34 p_cntrgp.
  endif.

  if not s_cntr-low is initial and p_cntrgp eq space.
    write :/3 'Cost Center'(031),34 s_cntr-low .
    if not s_cntr-high is initial.
      write : 50 'to'(029), 53 s_cntr-high.
    endif.
  endif.

  if not p_cstgp  is initial.
    write :/3 'Cost Element Grp'(032),34 p_cstgp.
  endif.

  if not s_cstele-low is initial.
    write :/3 'Cost Element'(033),34 s_cstele-low .
    if not s_cstele-high is initial.
      write : 50 'to'(029), 53 s_cstele-high.
    endif.
  endif.
endform.                    " display_selection_screen
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  frm_extract_data
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form frm_extract_data.

  perform display_cst_element.

  if s_cntr[] is initial.
* Get Cost Center data
    perform get_cost_center.
  endif.

  if s_cstele[] is initial.
* Get Cost element data
    perform get_cost_element.
  endif.

* Get Object data
  perform get_obj_data.

* Transfer the data to the internal table it_out.
  perform transfer_data.
endform.                    " frm_extract_data
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  get_cost_center
*&amp;amp;---------------------------------------------------------------------*
*       Getting the details of cost center
*----------------------------------------------------------------------*
form get_cost_center.
  call function 'BAPI_COSTCENTERGROUP_GETDETAIL'
       exporting
            controllingarea = 'EGLS'
            groupname       = p_cntrgp
       tables
            hierarchynodes  = it_cntrnodes
            hierarchyvalues = it_costcenters.


  if sy-subrc = 0.
    loop at it_costcenters.
      s_cntr-low = it_costcenters-valfrom.
      s_cntr-high = it_costcenters-valto.
      s_cntr-sign = 'I'.
      s_cntr-option = 'EQ'.
      append s_cntr.
      clear s_cntr.
    endloop.
  endif.

endform.                    " get_cost_center
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  get_cost_element
*&amp;amp;---------------------------------------------------------------------*
*      Getting the details of cost element
*----------------------------------------------------------------------*
form get_cost_element.
  call function 'BAPI_COSTELEMENTGRP_GETDETAIL'
       exporting
            chartofaccounts = 'WWCA'
            groupname       = p_cstgp
       tables
            hierarchynodes  = it_cstnodes
            hierarchyvalues = it_costelements.

  if sy-subrc = 0.

    loop at it_costelements.
      s_cstele-low = it_costelements-valfrom.
      s_cstele-high = it_costelements-valto.
      s_cstele-sign = 'I'.

      s_cstele-option = 'BT'.
      append s_cstele.
      clear s_cstele.
    endloop.

    loop at it_cstnodes.
      if it_cstnodes-hierlevel = 0.
        it_node-highlevel1 = it_cstnodes-descript.
        if   it_cstnodes-valcount eq 0 .
          continue.
        else.
          perform append_records_to_node.
        endif.
      endif.


      if it_cstnodes-hierlevel = 1.
        it_node-highlevel2 = it_cstnodes-descript.
        if   it_cstnodes-valcount eq 0 .
          continue.
        else.
          perform append_records_to_node.
        endif.

      endif.

      if it_cstnodes-hierlevel = 2.
        it_node-highlevel3 = it_cstnodes-descript.
        if   it_cstnodes-valcount eq 0 .
          continue.
        else.
          perform append_records_to_node.
        endif.

      endif.

      if it_cstnodes-hierlevel = 3.
        it_node-highlevel4 = it_cstnodes-descript.
        if   it_cstnodes-valcount eq 0 .
          continue.
        else.
          perform append_records_to_node.
        endif.

      endif.
    endloop.

  endif.
endform.                    " get_cost_element
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  get_obj_data
*&amp;amp;---------------------------------------------------------------------
*       Getting the required data
*----------------------------------------------------------------------
form get_obj_data.
* Build the range for the period and the year
  perform build_the_range.

  if not s_skey[] is initial.
* Get the Headcount data
    perform get_the_headcount.
    perform add_headcount.
  endif.

*--Get the COSP data
  perform get_data_cosp.

* Get the Quarter totals for the respective years
  perform get_year_totals.

endform.                    " get_obj_data
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  build_the_range
*&amp;amp;---------------------------------------------------------------------
*      Builing the Quarters range
*----------------------------------------------------------------------
form build_the_range.
  data : l_period like coep-perio,
           l_year like cosp-gjahr.

* Build the range for the year
  r_year-low = p_year.
  r_year-sign = 'I'.
  r_year-option = 'BT'.

  l_period = p_toprd.
  l_year = p_year.

  do 15 times.
    l_period = l_period + 1.
    if l_period &amp;gt; 12.
      l_year = l_year + 1.
      l_period = 1.
    endif.
  enddo.

  r_year-high = l_year.

  append r_year.
  clear r_year.
endform.                    " build_the_range
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  get_the_headcount
*&amp;amp;---------------------------------------------------------------------
*       Getting the headcount data
*----------------------------------------------------------------------
form get_the_headcount.
  data : l_objnr like cosr-objnr,
          l_length type i,
          l_length1 type i.

  clear v_toperiod.
  refresh s_wrttp.
  if p_versn1 =  '000' .
    s_wrttp-low = '04'.
    s_wrttp-option = 'EQ'.
    s_wrttp-sign   = 'I'.
    append s_wrttp.
  else .
    refresh s_wrttp.
  endif.

*---Added
  select * from cosr
          where lednr = '00' and
                gjahr = p_year and
                wrttp in s_wrttp and
                versn = p_versn1 and
                stagr in s_skey.

   clear : v_qt2_tot, v_qt3_tot, v_qt4_tot, v_qt5_tot, v_qt6_tot, v_cnt
  .
    v_ncnt = v_toprd.
    l_objnr = cosr-objnr.
    l_length = strlen( l_objnr ).
    l_length1 = l_length - 10.
    v_times = p_toprd - p_frprd + 1.
    v_ncnt = p_frprd.

* validation of objnr last four characters with respect to the
* selection screen cost centers
    check cosr-objnr+l_length1(10) in  s_cntr.

    do v_times times.
      v_cnt = v_cnt + 1.
      concatenate 'cosr-sme' v_ncnt into v_toperiod.
      condense v_toperiod no-gaps.
      assign (v_toperiod) to &amp;lt;fs&amp;gt;.
      if v_cnt between 1 and 3.
        v_qt1_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 4 and 6.
        v_qt2_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 7 and 9.
        v_qt3_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 10 and 12.
        v_qt4_tot =  &amp;lt;fs&amp;gt;.
      endif.
      v_ncnt = v_ncnt + 1.
    enddo.
    read table it_output with key cst_ele = cosr-stagr
                                  cost_ctr = cosr-objnr+l_length1(10)
                                  binary search.
    if sy-subrc eq 0 .
      it_output-qt1_tot = it_output-qt1_tot + v_qt1_tot.
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      modify it_output index sy-tabix.
      clear it_output.
    else.
      clear tkt03.
      select single *  from tkt03 where kokrs eq 'EGLS'
                        and stagr eq cosr-stagr.
      it_output-descript = tkt03-bezei.
      it_output-key_desc = tkt03-bezei.
      it_output-cst_ele =  cosr-stagr.
      it_output-cost_ctr = cosr-objnr+l_length1(10).
      it_output-qt1_tot = it_output-qt1_tot + v_qt1_tot.
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      it_output-sortord = 900.
      it_output-sortord1 = 900.
      append it_output.
      clear it_output.
      sort it_output by cst_ele cost_ctr.
    endif.
  endselect.
*--End
  sort it_output by cst_ele cost_ctr.
* Headcount for the other Quarters
  perform headcount_other_quarts.
  loop at it_output.
    it_output-qt1_tot = it_output-qt1_tot * 1000.
    it_output-qt2_tot = it_output-qt2_tot * 1000.
    it_output-qt3_tot = it_output-qt3_tot * 1000.
    it_output-qt4_tot = it_output-qt4_tot * 1000.
    it_output-qt5_tot = it_output-qt5_tot * 1000.
    it_output-qt6_tot = it_output-qt6_tot * 1000.
    modify it_output.
  endloop.

endform.                    " get_the_headcount
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  GET_DATA_COSP
*&amp;amp;---------------------------------------------------------------------
*       Getting the cosp data
*----------------------------------------------------------------------
form get_data_cosp.
  data :        l_length type i,
           l_length1 type i.

  data : l_year like cosr-gjahr.

  refresh s_wrttp.
  if p_versn1 =  '000' .
    s_wrttp-low = '04'.
    s_wrttp-option = 'EQ'.
    s_wrttp-sign   = 'I'.
    append s_wrttp.
  else.
    refresh s_wrttp.
  endif.


  select * from cosp
            where lednr = '00' and
                  gjahr = p_year and
                  wrttp in s_wrttp and
                  versn = p_versn1 and
                  kstar in s_cstele.
*---Added
clear: v_qt1_tot, v_qt2_tot, v_qt3_tot, v_qt4_tot, v_qt5_tot, v_qt6_tot
        , v_cnt, it_output.

    v_ncnt = p_frprd.
    l_length = strlen( cosp-objnr ).
    l_length1 = l_length - 10.
    v_times = p_toprd - p_frprd + 1.
    v_toprd = p_toprd.

    check cosp-objnr+l_length1(10) in s_cntr.
    do v_times times.
      v_cnt = v_cnt + 1.
      concatenate 'cosp-wkg' v_ncnt into v_toperiod.
      condense v_toperiod no-gaps.
      assign (v_toperiod) to &amp;lt;fs&amp;gt;.
      if v_cnt between 1 and 3.
        v_qt1_tot = v_qt1_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 4 and 6.
        v_qt2_tot = v_qt2_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 7 and 9.
        v_qt3_tot = v_qt3_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 10 and 12.
        v_qt4_tot = v_qt4_tot + &amp;lt;fs&amp;gt;.
      endif.
      v_ncnt = v_ncnt + 1.
    enddo.

    read table it_output  with key cst_ele = cosp-kstar
                 cost_ctr = cosp-objnr+l_length1(10)
                 binary search.
    if sy-subrc eq 0 .
      it_output-qt1_tot = it_output-qt1_tot + v_qt1_tot.
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      modify it_output index sy-tabix.
      clear it_output.
    else.

      it_output-cost_ctr =  cosp-objnr+l_length1(10).
      it_output-cst_ele = cosp-kstar.
      it_output-qt1_tot = it_output-qt1_tot + v_qt1_tot.
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      it_output-key_desc = space.
      loop at it_node where valfrom le cosp-kstar
                        and valto   ge cosp-kstar.
        it_output-descript = it_node-descript.
        it_output-sortord  = sy-tabix.
        it_output-sortord1 = it_node-sortord1.
        it_output-highlevel1 = it_node-highlevel1.
        it_output-highlevel2    =  it_node-highlevel2.
        it_output-highlevel3 = it_node-highlevel3.
        it_output-highlevel4 = it_node-highlevel4.
      endloop.

      append it_output.
      clear it_output.
    endif.
  endselect.
*--End  Added
  sort it_output by  cst_ele cost_ctr.

  refresh s_wrttp.
  if p_versn2 =  '000' .
    s_wrttp-low = '04'.
    s_wrttp-option = 'EQ'.
    s_wrttp-sign   = 'I'.
    append s_wrttp.
  else .
    refresh s_wrttp.
  endif.

  v_ver_start  =  v_times.
  v_times = 18 - v_times."mmundhada 12/02

  select * from cosp
            where lednr = '00' and
*                gjahr = p_year and
                  wrttp in s_wrttp and
                  versn = p_versn2 and
                  kstar in s_cstele.
   clear : v_qt2_tot, v_qt3_tot, v_qt4_tot, v_qt5_tot, v_qt6_tot, v_cnt
  .

*     v_times = p_toprd - p_frprd + 1.  "mmundhada 12/02
    v_ncnt = v_toprd.
    l_year = p_year.
    l_length = strlen( cosp-objnr ).
    l_length1 = l_length - 10.

    check cosp-objnr+l_length1(10) in s_cntr.
    v_cnt = v_ver_start .
    do v_times times.
      v_ncnt = v_ncnt + 1.
      if v_ncnt &amp;gt; 12.
        l_year = l_year + 1.
        v_ncnt = 1.
*        v_cnt  = 12. "mmundhada 12/02
         perform calculate_v_cnt.
      endif.
      check cosp-gjahr = l_year.
      v_cnt =  v_cnt + 1.
      concatenate 'cosp-wkg' v_ncnt into v_toperiod.
      condense v_toperiod no-gaps.
      assign (v_toperiod) to &amp;lt;fs&amp;gt;.
      if v_cnt between 4 and 6.
        v_qt2_tot = v_qt2_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 7 and 9.
        v_qt3_tot = v_qt3_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 10 and 12.
        v_qt4_tot = v_qt4_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 13 and 15.
        v_qt5_tot = v_qt5_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 16 and 18.
        v_qt6_tot = v_qt6_tot + &amp;lt;fs&amp;gt;.
      endif.
*v_toprd = v_toprd + 1.
    enddo.

    read table it_output  with key cst_ele = cosp-kstar
                 cost_ctr = cosp-objnr+l_length1(10)
                 binary search.
    if sy-subrc eq 0 .
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      it_output-qt5_tot = it_output-qt5_tot + v_qt5_tot.
      it_output-qt6_tot = it_output-qt6_tot + v_qt6_tot.

      modify it_output index sy-tabix.
      clear it_output.
*---Added mgm 10/07 mmundhada
   else.

      it_output-cost_ctr =  cosp-objnr+l_length1(10).
      it_output-cst_ele = cosp-kstar.
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      it_output-qt5_tot = it_output-qt5_tot + v_qt5_tot.
      it_output-qt6_tot = it_output-qt6_tot + v_qt6_tot.
      it_output-key_desc = space.

      loop at it_node where valfrom le cosp-kstar
                        and valto   ge cosp-kstar.
        it_output-descript = it_node-descript.
        it_output-sortord  = sy-tabix.
        it_output-sortord1 = it_node-sortord1.
        it_output-highlevel1 = it_node-highlevel1.
        it_output-highlevel2 = it_node-highlevel2.
        it_output-highlevel3 = it_node-highlevel3.
        it_output-highlevel4 = it_node-highlevel4.
      endloop.

      append it_output.
      clear it_output.
      sort it_output by cst_ele cost_ctr.
*---End of Add 10/07
    endif.

  endselect.
  delete it_output where qt1_tot = 0
                          and qt2_tot = 0
                          and qt3_tot = 0
                          and qt4_tot = 0
                          and qt5_tot = 0
                          and qt6_tot = 0.

endform.                    " GET_DATA_COSP
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  get_year_totals
*&amp;amp;---------------------------------------------------------------------
*      Getting the respective year totals
*----------------------------------------------------------------------
form get_year_totals.
  loop at it_output.
    if p_frprd = 1.
      it_output-yr_tot1 = it_output-qt1_tot + it_output-qt2_tot +
                          it_output-qt3_tot + it_output-qt4_tot.
      it_output-yr_tot2 = it_output-qt5_tot + it_output-qt6_tot.
    elseif p_frprd = 4.
      it_output-yr_tot1 = it_output-qt1_tot + it_output-qt2_tot +
                          it_output-qt3_tot.
      it_output-yr_tot2 = it_output-qt4_tot + it_output-qt5_tot +
                          it_output-qt6_tot.
    elseif p_frprd = 7.
      it_output-yr_tot1 = it_output-qt1_tot + it_output-qt2_tot.
      it_output-yr_tot2 = it_output-qt3_tot + it_output-qt4_tot +
                          it_output-qt5_tot + it_output-qt6_tot.
    elseif p_frprd = 10.
      it_output-yr_tot1 = it_output-qt1_tot.
      it_output-yr_tot2 = it_output-qt2_tot + it_output-qt3_tot +
                          it_output-qt4_tot + it_output-qt5_tot.
      it_output-yr_tot3 = it_output-qt6_tot.
    endif.
    if not it_output-key_desc  is initial.
    clear :  it_output-yr_tot1, it_output-yr_tot2,it_output-yr_tot3.
    endif.
    modify it_output index sy-tabix.
    clear it_output.
  endloop.
endform.                    " get_year_totals
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  display_heading
*&amp;amp;---------------------------------------------------------------------
*       Display column headings
*----------------------------------------------------------------------
form display_heading.
  data l_tabix like sy-tabix.
  data : l_year2 like cosr-gjahr,
         l_year3 like cosr-gjahr.
  data : v_text1(35),
         v_text2(35),
         v_text3(35).

  l_year2 = p_year + 1.
  l_year3 = p_year + 2.

  v_text1(4) = p_year.
  v_text1+5(5)  = 'Total'(011).


  v_text2(4) = l_year2.
  v_text2+5(5)  = 'Total'(011).


  v_text3(4) = l_year3.
  v_text3+5(5)  = 'Total'(011).

  skip.
  uline.
  format color col_heading on.

  if p_frprd = 10.
    write: / 'Description'(002),
       45 sy-vline,
       46 'Cst Ctr'(004),
       61 sy-vline,
       62(10) 'Q4',p_year,
       72 sy-vline,
       73(10) v_text1,
       83 sy-vline,
       84(10) 'Q1',l_year2,
       94 sy-vline,
       95(10) 'Q2',l_year2,
      105 sy-vline,
      106(10) 'Q3',l_year2,
      116 sy-vline,
      117(10) 'Q4',l_year2,
      127 sy-vline,
      128(10) v_text2,
      138 sy-vline,
      139(10) 'Q1',l_year3,
      150 sy-vline,
      151(10) v_text3,
      161 sy-vline.

  elseif p_frprd = 7.
    write: / 'Description'(002),
       45 sy-vline,
       46 'Cst Ctr'(004),
       61 sy-vline,
       62(10) 'Q3',p_year,
       72 sy-vline,
       73(10) 'Q4',p_year,
       83 sy-vline,
       84(10) v_text1,
       94 sy-vline,
       95(10) 'Q1',l_year2,
      105 sy-vline,
      106(10) 'Q2',l_year2,
      116 sy-vline,
      117(10) 'Q3',l_year2,
      127 sy-vline,
      128(10) 'Q4',l_year2,
      138 sy-vline,
      139(10) v_text2,
      150 sy-vline.
  elseif p_frprd = 4.
    write: / 'Description'(002),
       45 sy-vline,
       46 'Cst Ctr'(004),
       61 sy-vline,
       62(10) 'Q2',p_year,
       72 sy-vline,
       73(10) 'Q3',p_year,
       83  sy-vline,
       84(10) 'Q4',p_year,
       94 sy-vline,
       95(10) v_text1,
      105 sy-vline,
      106(10) 'Q1',l_year2,
      116 sy-vline,
      117(10) 'Q2',l_year2,
      127 sy-vline,
      128(10) 'Q3',l_year2,
      138 sy-vline,
      139(10) v_text2,
      150 sy-vline.

  elseif p_frprd = 1.
    write: / 'Description'(002),
       45 sy-vline,
       46 'Cst Ctr'(004),
       61 sy-vline,
       62(10) 'Q1',p_year,
       72 sy-vline,
       73(10) 'Q2'(006),p_year,
       83 sy-vline,
       84(10) 'Q3'(007),p_year,
       94 sy-vline,
       95(10) 'Q4'(008),p_year,
      105 sy-vline,
      106(10) v_text1,
      116 sy-vline,
      117(10) 'Q1',l_year2,
      127 sy-vline,
      128(10) 'Q2',l_year2,
      138 sy-vline,
      139(10) v_text2,
      150 sy-vline.

  endif.
  format color col_heading off.
  uline.
endform.                    " display_heading
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_period
*&amp;amp;---------------------------------------------------------------------
*      Validate from period
*----------------------------------------------------------------------
form validate_period.
  if p_frprd = 1 or
     p_frprd = 4 or
     p_frprd = 7 or
     p_frprd = 10.
  else.
    message e005 with 'Enter a valid period'(012).
  endif.
endform.                    " validate_period
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_toperiod
*&amp;amp;---------------------------------------------------------------------
*     Validate to period
*----------------------------------------------------------------------
form validate_toperiod.
  if p_toprd = 3 or
    p_toprd = 6 or
    p_toprd = 9 or
    p_toprd = 12.
  else.
    message e005 with 'Enter a valid period'(013).
  endif.

endform.                    " validate_toperiod
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_version1
*&amp;amp;---------------------------------------------------------------------
*      Validate version1
*----------------------------------------------------------------------
form validate_version1.
* Local variable
  data l_versn1 like cosp-versn.                            " version1
  clear l_versn1.

  select versn
    into l_versn1
    from tka09 up to 1 rows
   where versn = p_versn1.
  endselect.

  if sy-subrc &amp;lt;&amp;gt; 0.
    message e005 with 'Check the version1 entry'(014).
  endif.
endform.                    " validate_version1
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_version2
*&amp;amp;---------------------------------------------------------------------
*       Validate version2
*----------------------------------------------------------------------
form validate_version2.
* Local variable
  data l_versn2 like cosp-versn.                            " version2
  clear l_versn2.

  select versn
    into l_versn2
    from tka09 up to 1 rows
   where versn = p_versn2.
  endselect.

  if sy-subrc &amp;lt;&amp;gt; 0.
    message e005 with 'Check the version2 entry'(015).
  endif.
endform.                    " validate_version2
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_costcenter
*&amp;amp;---------------------------------------------------------------------
*       Validate cost center
*----------------------------------------------------------------------
form validate_costcenter.
if s_cntr-low is initial and s_cntr-high is initial
     and p_cntrgp is initial.
    message e005 with 'Enter cost center or the cost center group'(016).
    endif.
if not  s_cntr-low is initial and not  p_cntrgp is initial.
  message e005 with 'Enter cost center or the cost center group'(016).
    endif.

endform.                    " validate_costcenter
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_costcentergp
*&amp;amp;---------------------------------------------------------------------
*      Validate cost center group
*----------------------------------------------------------------------
form validate_costcentergp.
  if p_cntrgp is initial.
    clear it_idynpfields.
    refresh it_idynpfields.
    it_idynpfields-fieldname = 'S_CNTR-LOW'.
    append it_idynpfields.

    call function 'DYNP_VALUES_READ'
         exporting
              dyname     = sy-cprog
              dynumb     = '1000'
         tables
              dynpfields = it_idynpfields.
*         exceptions
*              invalid_abapworkarea = 1
*              invalid_dynprofield  = 2
*              invalid_dynproname   = 3
*              invalid_dynpronummer = 4
*              invalid_request      = 5
*              no_fielddescription  = 6
*              invalid_parameter    = 7
*              undefind_error       = 8
*              double_conversion    = 9
*              stepl_not_found      = 10
*              others               = 11.

    read table it_idynpfields.
    if it_idynpfields-fieldvalue = ' '.
    message e005 with 'Enter cost center or the cost center group'(016)
    .
    endif.
  endif.
endform.                    " validate_costcentergp
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_costelement
*&amp;amp;---------------------------------------------------------------------
*       Validate cost element
*----------------------------------------------------------------------
form validate_costelement.
  if s_cstele-low is initial and p_cstgp is initial.
   message e005 with 'Enter cost element or the cost element group'(017)
        .
    endif.
if not s_cstele-low is initial  and not p_cstgp is initial.
 message e005 with 'Enter cost element or the cost element group'(017) .
    endif.

endform.                    " validate_costelement
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_costelementgp
*&amp;amp;---------------------------------------------------------------------
*      Validate cost element group
*----------------------------------------------------------------------
form validate_costelementgp.
  if s_cstele-low is initial.
    if p_cstgp is initial.
  message e005 with 'Enter cost element or the cost element group'(017)
        .
    endif.
  endif.

endform.                    " validate_costelementgp
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  cost_cntr_gp_valuehelp
*&amp;amp;---------------------------------------------------------------------
*      Search help for cost center group
*----------------------------------------------------------------------
form cost_cntr_gp_valuehelp.
  call function 'K_GROUP_SELECT'
     exporting
      class                    = '0101'
       field_name               ='KOSTL'
      table                    = 'CCSS'
    importing
      set_name                 = p_cntrgp
    exceptions
      no_set_picked            = 02.

  case sy-subrc.
    when 1.
      message s005 with 'An appropriate object was not found'(018).
    when 2.
      message s005 with 'No object was selected'(019).
  endcase.

endform.                    " cost_cntr_gp_valuehelp
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  cost_ele_gp_valuehelp
*&amp;amp;---------------------------------------------------------------------
*      Search help for cost element group
*----------------------------------------------------------------------
form cost_ele_gp_valuehelp.
  call function 'K_GROUP_SELECT'
       exporting
            class         = '0102'
            field_name    = 'KSTAR'
            table         = 'CCSS'
       importing
            set_name      = p_cstgp
       exceptions
            no_set_picked = 02.


  case sy-subrc.
    when 1.
      message s005 with 'An appropriate object was not found'(018).
    when 2.
      message s005 with 'No object was selected'(019).
  endcase.


endform.                    " cost_ele_gp_valuehelp
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  headcount_other_quarts
*&amp;amp;---------------------------------------------------------------------
*      Getting the head count data
*----------------------------------------------------------------------
form headcount_other_quarts.
  data : l_objnr like cosr-objnr,
         l_year like cosr-gjahr,
         l_toprd like coep-perio,
         l_rec_cnt type i,
         l_length type i,
         l_length1 type i.


  clear : v_toperiod,
          v_toprd,
          v_cnt,
          l_objnr,
          l_year,
          l_length,
          l_length1.
    v_times = p_toprd - p_frprd + 1.

  v_ver_start  =  v_times.
  v_times = 18 - v_times.
  v_toprd = p_toprd.
  l_year  = p_year.
  clear v_toperiod.

  refresh s_wrttp.
  if p_versn2 =  '000' .
    s_wrttp-low = '04'.
    s_wrttp-option = 'EQ'.
    s_wrttp-sign   = 'I'.
    append s_wrttp.
  else .
    refresh s_wrttp.
  endif.



  select * from cosr
           where lednr = '00' and
                 gjahr in r_year and
                 wrttp in s_wrttp and
                 versn = p_versn2 and
                 stagr in s_skey.
   clear : v_qt2_tot, v_qt3_tot, v_qt4_tot, v_qt5_tot, v_qt6_tot, v_cnt
  .
    v_ncnt = v_toprd.
    l_year = p_year.
    l_objnr = cosr-objnr.
    l_length = strlen( l_objnr ).
    l_length1 = l_length - 10.


* validation of objnr last four characters with respect to the
* selection screen cost centers
    check cosr-objnr+l_length1(10) in  s_cntr.
    v_cnt = v_ver_start .
    do v_times times.

      v_ncnt = v_ncnt + 1.
      if v_ncnt &amp;gt; 12.
        l_year = l_year + 1.
        v_ncnt = 1.
*        v_cnt  = 12. "mmundhada 12/02
        perform calculate_v_cnt.
      endif.

      check cosr-gjahr = l_year.
      v_cnt = v_cnt + 1.

      concatenate 'cosr-sme' v_ncnt into v_toperiod.
      condense v_toperiod no-gaps.
      assign (v_toperiod) to &amp;lt;fs&amp;gt;.
      if v_cnt between 4 and 6.
        v_qt2_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 7 and 9.
        v_qt3_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 10 and 12.
        v_qt4_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 13 and 15.
        v_qt5_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 16 and 18.
        v_qt6_tot =  &amp;lt;fs&amp;gt;.
      endif.
    enddo.

    read table it_output with key cst_ele = cosr-stagr
                                  cost_ctr = cosr-objnr+l_length1(10)
                                  binary search.
    if sy-subrc eq 0 .
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      it_output-qt5_tot = it_output-qt5_tot + v_qt5_tot.
      it_output-qt6_tot = it_output-qt6_tot + v_qt6_tot.
      modify it_output index sy-tabix.
      clear it_output.
    else.
      clear tkt03.
      select single *  from tkt03 where kokrs eq 'EGLS'
                        and stagr eq cosr-stagr.
      it_output-descript = tkt03-bezei.
      it_output-key_desc = tkt03-bezei.
      it_output-cst_ele =  cosr-stagr.
      it_output-cost_ctr = cosr-objnr+l_length1(10).
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      it_output-qt5_tot = it_output-qt5_tot + v_qt5_tot.
      it_output-qt6_tot = it_output-qt6_tot + v_qt6_tot.
      it_output-sortord = 900.
      it_output-sortord1 = 900.
      append it_output.
      clear it_output.
      sort it_output by cst_ele cost_ctr.
    endif.
    clear it_output.
  endselect.
*  clear it_output-cst_ele.
*  modify it_output transporting cst_ele where  cst_ele ne space.

endform.                    " headcount_other_quarts
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  display_report
*&amp;amp;---------------------------------------------------------------------
*     Display the report output
*----------------------------------------------------------------------
form display_report.
  data : fg_gtotal,        " flag for grand total display in case of
         fg_nodesc value 'X'.
  " headcount data
  data l_sytabix like sy-tabix.
  loop at it_out.
    l_sytabix = sy-tabix.
* Displaying the Grand total when there is headcount data
    at new highlevel1.

     read table it_out index l_sytabix.

      if it_out-highlevel1 is initial.

       if it_out-descript &amp;lt;&amp;gt; ' ' and l_sytabix &amp;lt;&amp;gt; 1.

       if fg_nodesc = 'X'.
        uline.
        format color col_total intensified on.
        it_out-cost_ctr = ' '.
        it_out-cst_ele = ' '.
        if p_frprd = 10.
          perform display_grand_total_4q.
        elseif p_frprd = 7.
          perform display_grand_total_3q.
        elseif p_frprd = 4.
          perform display_grand_total_2q.
        elseif p_frprd = 1.
          perform display_grand_total_1q.
        endif.
        format color col_total off.
        uline.

       clear fg_nodesc.
       endif.
        endif.

      endif.
    endat.


* Displaying the records corresponding to the cost element which have
* no description and the headcount data
      if it_out-highlevel1 is initial.
       if it_out-descript &amp;lt;&amp;gt; ' '.
        fg_gtotal = 'X'.
* Displaying the grand total when there is headcount data
* and records having no description
       if fg_nodesc = 'X'.
        uline.
        format color col_total intensified on.
        it_out-cost_ctr = ' '.
        it_out-cst_ele = ' '.
        if p_frprd = 10.
          perform display_grand_total_4q.
        elseif p_frprd = 7.
          perform display_grand_total_3q.
        elseif p_frprd = 4.
          perform display_grand_total_2q.
        elseif p_frprd = 1.
          perform display_grand_total_1q.
        endif.
        format color col_total off.
        uline.
        clear fg_nodesc.
        endif.
       endif.
        clear : v_total1,
                v_total2,
                v_total3,
                v_total4,
                v_total5,
                v_total6,
                v_total7,
                v_total8,
                v_total9.

        v_total1 = it_out-qt1_tot.
        v_total2 = it_out-qt2_tot.
        v_total3 = it_out-qt3_tot.
        v_total4 = it_out-qt4_tot.
        v_total5 = it_out-qt5_tot.
        v_total6 = it_out-qt6_tot.
        v_total7 = it_out-yr_tot1.
        v_total8 = it_out-yr_tot2.
        v_total9 = it_out-yr_tot3.

        read table it_out index l_sytabix.

* grand total when there is no headcount data and records corresponding
* to cost elements which have no description
        if it_out-descript = ' '.
          v_gtotal1 = v_gtotal1 + v_total1.
          v_gtotal2 = v_gtotal2 + v_total2.
          v_gtotal3 = v_gtotal3 + v_total3.
          v_gtotal4 = v_gtotal4 + v_total4.
          v_gtotal5 = v_gtotal5 + v_total5.
          v_gtotal6 = v_gtotal6 + v_total6.
          v_gtotal7 = v_gtotal7 + v_total7.
          v_gtotal8 = v_gtotal8 + v_total8.
         v_gtotal9 = v_gtotal9 + v_total9.

        endif.

        write: / it_out-descript.
        if p_frprd = 10.
          perform write_output_for_4q.
        elseif p_frprd = 7.
          perform write_output_for_3q.
        elseif p_frprd = 4.
          perform write_output_for_2q.
        elseif p_frprd = 1.
          perform write_output_for_1q.

        endif.
      endif.


* Displaying the records for cost element data
    at end of highlevel4.
      if not it_out-highlevel4 is initial.
        clear : v_total1,
               v_total2,
               v_total3,
               v_total4,
               v_total5,
               v_total6,
               v_total7,
               v_total8,
               v_total9.
        sum.
        v_total1 = it_out-qt1_tot.
        v_total2 = it_out-qt2_tot.
        v_total3 = it_out-qt3_tot.
        v_total4 = it_out-qt4_tot.
        v_total5 = it_out-qt5_tot.
        v_total6 = it_out-qt6_tot.
        v_total7 = it_out-yr_tot1.
        v_total8 = it_out-yr_tot2.
        v_total9 = it_out-yr_tot3.

        read table it_out index l_sytabix.
        write: / it_out-highlevel4.

        if p_frprd = 10.
          perform write_output_for_4q.
        elseif p_frprd = 7.
          perform write_output_for_3q.
        elseif p_frprd = 4.
          perform write_output_for_2q.
        elseif p_frprd = 1.
          perform write_output_for_1q.

        endif.
      endif.
    endat.

    at end of highlevel3.
      if not it_out-highlevel3 is initial.
        clear : v_total1,
               v_total2,
               v_total3,
               v_total4,
               v_total5,
               v_total6,
               v_total7,
               v_total8,
               v_total9.
        sum.
        v_total1 = it_out-qt1_tot.
        v_total2 = it_out-qt2_tot.
        v_total3 = it_out-qt3_tot.
        v_total4 = it_out-qt4_tot.
        v_total5 = it_out-qt5_tot.
        v_total6 = it_out-qt6_tot.
        v_total7 = it_out-yr_tot1.
        v_total8 = it_out-yr_tot2.
        v_total9 = it_out-yr_tot3.

        read table it_out index l_sytabix.
        if not it_out-highlevel4 is initial.
          uline.
          format color col_positive on.
          it_out-cost_ctr = ' '.
          it_out-cst_ele = ' '.
        endif.
        write: / it_out-highlevel3.

        if p_frprd = 10.
          perform write_output_for_4q.
        elseif p_frprd = 7.
          perform write_output_for_3q.
        elseif p_frprd = 4.
          perform write_output_for_2q.
        elseif p_frprd = 1.
          perform write_output_for_1q.

        endif.
        if not it_out-highlevel4 is initial.
          format color col_positive off.
          uline.
        endif.

      endif.
    endat.

    at end of highlevel2.
      if not it_out-highlevel2 is initial.
        clear : v_total1,
               v_total2,
               v_total3,
               v_total4,
               v_total5,
               v_total6,
               v_total7,
               v_total8,
               v_total9.
        sum.
        v_total1 = it_out-qt1_tot.
        v_total2 = it_out-qt2_tot.
        v_total3 = it_out-qt3_tot.
        v_total4 = it_out-qt4_tot.
        v_total5 = it_out-qt5_tot.
        v_total6 = it_out-qt6_tot.
        v_total7 = it_out-yr_tot1.
        v_total8 = it_out-yr_tot2.
        v_total9 = it_out-yr_tot3.

        read table it_out index l_sytabix.
        if not it_out-highlevel3 is initial.
          uline.
          format color col_group on.
          it_out-cost_ctr = ' '.
          it_out-cst_ele = ' '.
        endif.

        write: / it_out-highlevel2.

        if p_frprd = 10.
          perform write_output_for_4q.
        elseif p_frprd = 7.
          perform write_output_for_3q.
        elseif p_frprd = 4.
          perform write_output_for_2q.
        elseif p_frprd = 1.
          perform write_output_for_1q.

        endif.
        if not it_out-highlevel3 is initial.
          format color col_group off.
          uline.
        endif.
      endif.
    endat.

    at end of highlevel1.
      if not it_out-highlevel1 is initial.

        clear : v_total1,
               v_total2,
               v_total3,
               v_total4,
               v_total5,
               v_total6,
               v_total7,
               v_total8,
               v_total9.
        sum.
        v_total1 = it_out-qt1_tot.
        v_total2 = it_out-qt2_tot.
        v_total3 = it_out-qt3_tot.
        v_total4 = it_out-qt4_tot.
        v_total5 = it_out-qt5_tot.
        v_total6 = it_out-qt6_tot.
        v_total7 = it_out-yr_tot1.
        v_total8 = it_out-yr_tot2.
        v_total9 = it_out-yr_tot3.

* Storing the Grand total
        v_gtotal1 = v_gtotal1 + v_total1.
        v_gtotal2 = v_gtotal2 + v_total2.
        v_gtotal3 = v_gtotal3 + v_total3.
        v_gtotal4 = v_gtotal4 + v_total4.
        v_gtotal5 = v_gtotal5 + v_total5.
        v_gtotal6 = v_gtotal6 + v_total6.
        v_gtotal7 = v_gtotal7 + v_total7.
        v_gtotal8 = v_gtotal8 + v_total8.
        v_gtotal9 = v_gtotal9 + v_total9.


        read table it_out index l_sytabix.
        if not it_out-highlevel2 is initial.
          uline.
          format color col_total intensified off.
          it_out-cost_ctr = ' '.
          it_out-cst_ele = ' '.
        endif.
        write: / it_out-highlevel1.

        if p_frprd = 10.
          perform write_output_for_4q.
        elseif p_frprd = 7.
          perform write_output_for_3q.
        elseif p_frprd = 4.
          perform write_output_for_2q.
        elseif p_frprd = 1.
          perform write_output_for_1q.

        endif.
        if not it_out-highlevel2 is initial.
          format color col_total off.
          uline.
        endif.
      endif.
    endat.

* Displaying the Grand total when there is no headcount data and
* when there are cost element records which have no description
    at last.
      if fg_gtotal &amp;lt;&amp;gt; 'X'.
        if fg_nodesc = 'X'.
        uline.
        format color col_total intensified on.
        it_out-cost_ctr = ' '.
        it_out-cst_ele = ' '.
        if p_frprd = 10.
          perform display_grand_total_4q.
        elseif p_frprd = 7.
          perform display_grand_total_3q.
        elseif p_frprd = 4.
          perform display_grand_total_2q.
        elseif p_frprd = 1.
          perform display_grand_total_1q.
        endif.
        format color col_total off.
        uline.
        clear fg_nodesc.
        endif.
      else.
       uline.
      endif.
    endat.

  endloop.
endform.                    " display_report
*&amp;amp;---------------------------------------------------------------------

*&amp;amp;      Form  transfer_data
*&amp;amp;---------------------------------------------------------------------

*      Transfer the output data to the final internal table
*----------------------------------------------------------------------
form transfer_data.
  loop at it_output.
    move-corresponding it_output to it_out.
    append it_out.
    clear it_out.
  endloop.

endform.                    " transfer_data
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  write_output_for_1q
*&amp;amp;---------------------------------------------------------------------
*    Display the output if the first quarter of the year entered
*----------------------------------------------------------------------
form write_output_for_1q.

  write :  45 sy-vline,
            46 v_cstcenter NO-ZERO,
            61 sy-vline,
            62(10) v_total1 round 3 no-zero,
            72 sy-vline,
            73(10) v_total2 round 3 no-zero,
            83 sy-vline,
            84(10) v_total3 round 3 no-zero,
            94 sy-vline,
            95(10) v_total4 round 3 no-zero,
           105 sy-vline,
           106(10)  v_total7 round 3 no-zero,
           116 sy-vline,
           117(10) v_total5 round 3 no-zero,
           127 sy-vline,
           128(10) v_total6 round 3 no-zero,
           138 sy-vline,
           139(10) v_total8 round 3 no-zero,
           150 sy-vline.

endform.                    " write_output_for_1q
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  display_grand_total_1q
*&amp;amp;---------------------------------------------------------------------
*   Display the grand total if the first quarter of the year entered
*----------------------------------------------------------------------
form display_grand_total_1q.
  write: / 'Grand Total'(022),
           45 sy-vline,
           46 ' ',
           61 sy-vline,
           62(10) v_gtotal1 round 3 no-zero,
           72 sy-vline,
           73(10) v_gtotal2 round 3 no-zero,
           83 sy-vline,
           84(10) v_gtotal3 round 3 no-zero,
           94 sy-vline,
           95(10) v_gtotal4 round 3 no-zero,
          105 sy-vline,
          106(10) v_gtotal7 round 3 no-zero,
          116 sy-vline,
          117(10) v_gtotal5 round 3 no-zero,
          127 sy-vline,
          128(10) v_gtotal6 round 3 no-zero,
          138 sy-vline,
          139(10) v_gtotal8 round 3 no-zero,
          150 sy-vline.


endform.                    " display_grand_total_1q
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  write_output_for_4q
*&amp;amp;---------------------------------------------------------------------
*       Display the output if the last quarter of the year entered
*----------------------------------------------------------------------
form write_output_for_4q.
  write :  45 sy-vline,
           46 v_cstcenter NO-ZERO  ,
           61 sy-vline,
           62(10) v_total1 round 3 no-zero,
           72 sy-vline,
           73(10) v_total7 round 3 no-zero,
           83 sy-vline,
           84(10) v_total2 round 3 no-zero,
           94 sy-vline,
           95(10) v_total3 round 3 no-zero,
          105 sy-vline,
          106(10) v_total4 round 3 no-zero,
          116 sy-vline,
          117(10) v_total5 round 3 no-zero,
          127 sy-vline,
          128(10) v_total8 round 3 no-zero,
          138 sy-vline,
          139(10) v_total6 round 3 no-zero,
          150 sy-vline,
          151(10) v_total9 round 3 no-zero,
          161 sy-vline.

endform.                    " write_output_for_4q
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  display_grand_total_4q
*&amp;amp;---------------------------------------------------------------------
*      Display the grand total if the last quarter of the year entered
*----------------------------------------------------------------------
form display_grand_total_4q.
  write :/ 'Grand Total'(022),
            45 sy-vline,
            46 ' ',
            61 sy-vline,
            62(10) v_gtotal1 round 3 no-zero,
            72 sy-vline,
            73(10) v_gtotal7 round 3 no-zero,
            83 sy-vline,
            84(10) v_gtotal2 round 3 no-zero,
            94 sy-vline,
            95(10) v_gtotal3 round 3 no-zero,
           105 sy-vline,
           106(10) v_gtotal4 round 3 no-zero,
           116 sy-vline,
           117(10) v_gtotal5 round 3 no-zero,
           127 sy-vline,
           128(10) v_gtotal8 round 3 no-zero,
           138 sy-vline,
           139(10) v_gtotal6 round 3 no-zero,
           150 sy-vline,
           151(10) v_gtotal9 round 3 no-zero,
           161 sy-vline.

endform.                    " display_grand_total_4q
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  append_records_to_node
*&amp;amp;---------------------------------------------------------------------*
*       append the records to internal table it_node
*----------------------------------------------------------------------*
form append_records_to_node.
  loop at  it_costelements.
    move  it_costelements-valfrom to it_node-valfrom.
    move  it_costelements-valto to it_node-valto.

    it_node-descript = it_cstnodes-descript.
    append it_node.
    it_cstnodes-valcount = it_cstnodes-valcount - 1.
    delete  it_costelements.
    if   it_cstnodes-valcount eq 0 .
      exit.
    endif.
  endloop.

endform.                    " append_records_to_node
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  display_grand_total_3q
*&amp;amp;---------------------------------------------------------------------*
*  Display grand total if third quarter is entered on selection screen
*----------------------------------------------------------------------*
form display_grand_total_3q.
  write: / 'Grand Total'(022),
            45 sy-vline,
            46 ' ',
            61 sy-vline,
            62(10) v_gtotal1 round 3 no-zero,
            72 sy-vline,
            73(10) v_gtotal2 round 3 no-zero,
            83 sy-vline,
            84(10) v_gtotal7 round 3 no-zero,
            94 sy-vline,
            95(10) v_gtotal3 round 3 no-zero,
            105 sy-vline,
            106(10) v_gtotal4 round 3 no-zero,
            116 sy-vline,
            117(10) v_gtotal5 round 3 no-zero,
            127 sy-vline,
            128(10) v_gtotal6 round 3 no-zero,
            138 sy-vline,
            139(10) v_gtotal8 round 3 no-zero,
            150 sy-vline.

endform.                    " display_grand_total_3q
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  display_grand_total_2q
*&amp;amp;---------------------------------------------------------------------*
* Display grand total if second quarter is entered on selection screen
*----------------------------------------------------------------------*
form display_grand_total_2q.
  write: / 'Grand Total'(022),
             45 sy-vline,
             46 ' ',
             61 sy-vline,
             62(10) v_gtotal1 round 3 no-zero,
             72 sy-vline,
             73(10) v_gtotal2 round 3 no-zero,
             83 sy-vline,
             84(10) v_gtotal3 round 3 no-zero,
             94 sy-vline,
             95(10) v_gtotal7 round 3 no-zero,
            105 sy-vline,
            106(10) v_gtotal4 round 3 no-zero,
            116 sy-vline,
            117(10) v_gtotal5 round 3 no-zero,
            127 sy-vline,
            128(10) v_gtotal6 round 3 no-zero,
            138 sy-vline,
            139(10) v_gtotal8 round 3 no-zero,
            150 sy-vline.

endform.                    " display_grand_total_2q
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  write_output_for_3q
*&amp;amp;---------------------------------------------------------------------*
* Display output if third quarter is entered on selection screen
*----------------------------------------------------------------------*
form write_output_for_3q.
  write :  45 sy-vline,
             46 v_cstcenter NO-ZERO ,
             61 sy-vline,
             62(10) v_total1 round 3 no-zero,
             72 sy-vline,
             73(10) v_total2 round 3 no-zero,
             83 sy-vline,
             84(10) v_total7 round 3 no-zero,
             94 sy-vline,
             95(10) v_total3 round 3 no-zero,
             105 sy-vline,
            106(10) v_total4 round 3 no-zero,
            116 sy-vline,
            117(10) v_total5 round 3 no-zero,
            127 sy-vline,
            128(10) v_total6 round 3 no-zero,
            138 sy-vline,
            139(10) v_total8 round 3 no-zero,
            150 sy-vline.

endform.                    " write_output_for_3q
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  write_output_for_2q
*&amp;amp;---------------------------------------------------------------------*
*    Display output if second quarter is entered on selection screen
*----------------------------------------------------------------------*
form write_output_for_2q.
  write :  45 sy-vline,
             46 v_cstcenter NO-ZERO ,
             61 sy-vline,
             62(10) v_total1 round 3 no-zero,
             72 sy-vline,
             73(10) v_total2 round 3 no-zero,
             83 sy-vline,
             84(10) v_total3 round 3 no-zero,
             94 sy-vline,
             95(10) v_total7 round 3 no-zero,
            105 sy-vline,
            106(10) v_total4 round 3 no-zero,
            116 sy-vline,
            117(10) v_total5 round 3 no-zero,
            127 sy-vline,
            128(10) v_total6 round 3 no-zero,
            138 sy-vline,
            139(10) v_total8 round 3 no-zero,
            150 sy-vline.

endform.                    " write_output_for_2q
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  display_cst_element
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  --&amp;gt;  p1        text
*  &amp;lt;--  p2        text
*----------------------------------------------------------------------*
FORM display_cst_element.
data v_lines like sy-index.
describe table s_cstele lines v_lines.

clear: v_cost_element.
if not p_cstgp is initial.
  clear v_cost_element.
elseif s_cstele-high is initial and v_lines le 1.
 v_cost_element = s_cstele-low.
else.
 clear v_cost_element.
endif.


describe table s_cstele lines v_lines.

clear: v_cstcenter.
if not p_cntrgp is initial.
 v_cstcenter = p_cntrgp.
elseif s_cntr-high is initial and v_lines le 1.
 v_cstcenter = s_cntr-low.
else.
 clear v_cstcenter.
endif.


ENDFORM.                    " display_cst_element
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  add_headcount
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  --&amp;gt;  p1        text
*  &amp;lt;--  p2        text
*----------------------------------------------------------------------*
FORM add_headcount.

it_output1[] = it_output[].
refresh it_output.
clear it_output.

loop at it_output1.
clear it_output1-cost_ctr.
move-corresponding it_output1 to it_output.
collect it_output.
endloop.

ENDFORM.                    " add_headcount
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  calculate_v_cnt
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  --&amp;gt;  p1        text
*  &amp;lt;--  p2        text
*----------------------------------------------------------------------*
FORM calculate_v_cnt.
if p_frprd eq 1.
 v_cnt  = 12.
elseif p_frprd = 4.
 v_cnt = 09.
elseif p_frprd = 7.
 v_cnt = 6.
elseif p_frprd = 10.
 v_cnt = 3.
endif.
ENDFORM.                    " calculate_v_cnt
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Chidanand&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 14 Oct 2008 08:33:53 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2008-10-14T08:33:53Z</dc:date>
    <item>
      <title>Reg:Display data using ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/reg-display-data-using-alv/m-p/4626384#M1089717</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; In my Requirent i want to Display data like this Using ALV.&lt;/P&gt;&lt;P&gt; Please help me how to display data using alv like this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; From: Plant.                                      Order nr : Po.Number&lt;/P&gt;&lt;P&gt; To:     Vendor Number&lt;/P&gt;&lt;P&gt; Date:  System Date                           Doc. Currency : EUR&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ship To: Ship to Address                Invoice To: Invoice Address.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Oct 2008 08:29:16 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/reg-display-data-using-alv/m-p/4626384#M1089717</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-10-14T08:29:16Z</dc:date>
    </item>
    <item>
      <title>Re: Reg:Display data using ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/reg-display-data-using-alv/m-p/4626385#M1089718</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Venkar,&lt;/P&gt;&lt;P&gt;Check out the Sample code for your reference.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;
***********************************************************************
* Program Name      : Cost Center Rolling Trend Summary Report        *
*                                                                     *
* Request No.       : DEVK905041                                       *
* Requester         : Jocelyn Ordanza                                 *
* Program Type      : Report                                          *
* Programmer        : Aruna Pitla                                     *
* Date programmed   : 09/24/2002                                      *
* Transaction code  : ZF04                                            *
* Brief Description : This Summary Report will show a total of six    *
*                     quarters in two plan versions based on selected *
*                     periods and cost center/cost element combination
*                     and a grand total of all the costs
*---------------------------------------------------------------------*
* Mandatory field(s) - Fiscal year                                    *
*                      Plan/Fcst Version1                             *
*                      Plan/Fcst Version2                             *
*                      From Period                                    *
*                      To Period                                      *
*                                                                     *
* Optional field(s)  - Cost center group(if cost center not entered)  *
*                      Cost center(if cost center group not entered)  *
*                      Cost element group(if cost element not entered)*
*                      Cost element(if cost element group not entered)*
*---------------------------------------------------------------------*
* Remark:                                                             *
***********************************************************************
***********************************************************************
* Modification Log                                                    *
*---------------------------------------------------------------------*
* Date         Programmer   Change Request #                          *
* ----------   ----------   ----------------                          *

report zfi_costcntr_rolling_trend_smr
no standard page heading
       message-id zfi
       line-count 65(3) line-size 161.

************************************************************************
*              Declaration of Database tables
************************************************************************
tables : cosp,     " CO Object: Line Items (by Period)
         setleaf,  " Values in Sets
         cosr,     " CO Object: Statistical Key Figure Totals
         csks,     " Cost Center Master Data
         tkt03,    " Stat. key figure texts
         rksb1.    " Work fields line-item reports

************************************************************************
*              Declaration of Internal tables
************************************************************************
data : begin of it_output occurs 0,
         cst_ele like cosp-kstar,
         cost_ctr like csks-kostl,
         qt1_tot type p decimals 0,
         qt2_tot type p decimals 0,
         qt3_tot type p decimals 0,
         qt4_tot type p decimals 0,
         qt5_tot type p decimals 0,
         qt6_tot type p decimals 0,
         yr_tot1 type p decimals 0,
         yr_tot2 type p decimals 0,
         yr_tot3 type p decimals 0,
         highlevel1 like bapiset_hier-descript,
         highlevel2 like bapiset_hier-descript,
         highlevel3 like bapiset_hier-descript,
         highlevel4 like bapiset_hier-descript,
         descript like bapiset_hier-descript,
         key_desc  like bapiset_hier-descript,
         hierlevel like bapiset_hier-hierlevel,
         sortord   like sy-tabix,
         sortord1  like sy-tabix,
       end of it_output.

* Final internal table
data : begin of it_out occurs 0,
         highlevel1 like bapiset_hier-descript,
         highlevel2 like bapiset_hier-descript,
         highlevel3 like bapiset_hier-descript,
         highlevel4 like bapiset_hier-descript,
         descript like bapiset_hier-descript,
         cst_ele like cosp-kstar,
         cost_ctr like csks-kostl,
         qt1_tot type p decimals 0,
         qt2_tot type p decimals 0,
         qt3_tot type p decimals 0,
         qt4_tot type p decimals 0,
         qt5_tot type p decimals 0,
         qt6_tot type p decimals 0,
         yr_tot1 type p decimals 0,
         yr_tot2 type p decimals 0,
         yr_tot3 type p decimals 0,
       end of it_out.

data : begin of it_cntrnodes occurs 0.
        include structure bapiset_hier.
data : end of it_cntrnodes.

data : begin of it_cstnodes occurs 0.
        include structure bapiset_hier.
data : end of it_cstnodes.

data : begin of it_costcenters occurs 0.
        include structure bapi1112_values.
data : end of it_costcenters.

data : begin of it_costelements occurs 0.
        include structure bapi1112_values.
data : end of it_costelements.

data: begin of it_idynpfields occurs 0,
        fieldname like dpov-fldname,
        stepl like dynpread-stepl,
        fieldvalue like dynpread-fieldvalue,
        fieldinp like dynpread-fieldinp,
      end of it_idynpfields.

data: it_bdctab like bdcdata occurs 0 with header line.

data it_output1 like it_output occurs 0 with header line.

data : begin of it_node occurs 0,
         highlevel1 like bapiset_hier-descript,
         highlevel2 like bapiset_hier-descript,
         highlevel3 like bapiset_hier-descript,
         highlevel4 like bapiset_hier-descript,
         descript like it_cntrnodes-descript,
         valfrom  like bapi1113_values-valfrom ,
         valto    like bapi1113_values-valto,
         sortord1  like sy-tabix,
       end of it_node.

ranges : r_year   for cosp-gjahr.

************************************************************************
*                    Global variables
************************************************************************
data : v_toperiod(30),
       v_ncnt(3) type n,
       v_toprd like setleaf-valto,
       v_cnt type i,
       v_ver_start type i.

field-symbols &amp;lt;fs&amp;gt;.

data : v_qt1_tot like it_output-qt2_tot,
       v_qt2_tot like it_output-qt2_tot,
       v_qt3_tot like it_output-qt2_tot,
       v_qt4_tot like it_output-qt2_tot,
       v_qt5_tot like it_output-qt2_tot,
       v_qt6_tot like it_output-qt2_tot.

data : v_times type i.

data : v_title1(60),                           "report title1
       v_title2(60).                           "report title2

* Variables for totals
data : v_total1 type p decimals 0,
       v_total2 type p decimals 0,
       v_total3 type p decimals 0,
       v_total4 type p decimals 0,
       v_total5 type p decimals 0,
       v_total6 type p decimals 0,
       v_total7 type p decimals 0,
       v_total8 type p decimals 0,
       v_total9 type p decimals 0.

* Variables for Grand Total
data : v_gtotal1 type p decimals 0,
       v_gtotal2 type p decimals 0,
       v_gtotal3 type p decimals 0,
       v_gtotal4 type p decimals 0,
       v_gtotal5 type p decimals 0,
       v_gtotal6 type p decimals 0,
       v_gtotal7 type p decimals 0,
       v_gtotal8 type p decimals 0,
       v_gtotal9 type p decimals 0.


************************************************************************
*                     selection-screen
************************************************************************
selection-screen begin of block b1 with frame title text-020.
parameters : p_year like cosp-gjahr memory id gjr obligatory,
       " Fiscal year
             p_versn1 like cosp-versn obligatory,     " Plan/Fcst
                                                            " Version 1
             p_versn2 like coep-versn obligatory,     " Plan/Fcst
                                                            " Version 2
             p_frprd like coep-perio obligatory,      " From Period
             p_toprd like coep-perio obligatory.      " To Period

select-options : s_skey for cosr-stagr.       " Statistical key figure
select-options : s_wrttp for cosp-wrttp no-display.
selection-screen end of block b1.

selection-screen begin of block b2 with frame title text-021.

parameters : p_cntrgp like rksb1-ksgru memory id ksg.
" Cost Center Group
select-options : s_cntr for csks-kostl memory id kos.   " Cost Center
parameters : p_cstgp like rksb1-kagru.    " Cost Element Group
select-options : s_cstele for cosp-kstar. " Cost Element
selection-screen end of block b2.

data v_cost_element like  rksb1-kagru.
data v_cstcenter like  rksb1-ksgru.
* Include standard page heading
include z_std_heading.

************************************************************************
*                    Initialization
************************************************************************
initialization.
  v_title1 = 'Cost Center Rolling Trend Summary'(001).

************************************************************************
*                    at selection-screen
************************************************************************
* Validation for from period
at selection-screen on p_frprd.
  perform validate_period.

* Validation for to period
at selection-screen on p_toprd.
  perform validate_toperiod.

* Validation for version1
at selection-screen on p_versn1.
  perform validate_version1.

* Validation for version2
at selection-screen on p_versn2.
  perform validate_version2.

at selection-screen.
* Validation for cost center
  perform validate_costcenter.

* Validation for cost center group
  perform validate_costcentergp.

* Validation for cost element
  perform validate_costelement.

* Validation for cost element group
  perform validate_costelementgp.

at selection-screen on value-request for p_cntrgp.
* Search help for cost center group
  perform cost_cntr_gp_valuehelp.

at selection-screen on value-request for p_cstgp.
* Search help for cost element group
  perform cost_ele_gp_valuehelp.

************************************************************************
*                    Top-of-page
************************************************************************
top-of-page.
* Display standard page heading
  perform pgh_standard_heading using v_title1 v_title2.

* Display selection screen
  perform display_selection_screen.

* Display column headings
  perform display_heading.

************************************************************************
*                    start-of-selection
************************************************************************
start-of-selection.
* Extraction of Data.
  perform frm_extract_data.

************************************************************************
*                    end-of-selection
************************************************************************
end-of-selection.
  if not it_out[] is initial.
* Display report output
    perform display_report.

  else.
     message I005 with 'No record found for Selected Criteria'(034).
     exit.

  endif.
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  display_selection_screen
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form display_selection_screen.
  if not p_year is initial.
    write :/3  'Year'(023), 34 p_year.
  endif.
  if not p_versn1 is initial.
    write :/3  'Version 1'(024), 34 p_versn1.
  endif.
  if not p_versn2 is initial.
    write :/3  'Version 2'(025), 34 p_versn2.
  endif.


  if not p_frprd  is initial.
    write :/3  'From Period'(026), 34 p_frprd .
  endif.

  if not p_toprd  is initial.
    write :/3  'To Period'(027), 34 p_toprd .
  endif.

  if not s_skey[] is initial and p_cntrgp  eq space.
    write :/3 'Statistical key'(028),34 s_skey-low .
    if not s_skey-high is initial.
      write : 50 'to'(029), 53 s_skey-high.
    endif.
  endif.

  if not p_cntrgp  is initial.
    write :/3 'Cost Center Grp'(030),34 p_cntrgp.
  endif.

  if not s_cntr-low is initial and p_cntrgp eq space.
    write :/3 'Cost Center'(031),34 s_cntr-low .
    if not s_cntr-high is initial.
      write : 50 'to'(029), 53 s_cntr-high.
    endif.
  endif.

  if not p_cstgp  is initial.
    write :/3 'Cost Element Grp'(032),34 p_cstgp.
  endif.

  if not s_cstele-low is initial.
    write :/3 'Cost Element'(033),34 s_cstele-low .
    if not s_cstele-high is initial.
      write : 50 'to'(029), 53 s_cstele-high.
    endif.
  endif.
endform.                    " display_selection_screen
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  frm_extract_data
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form frm_extract_data.

  perform display_cst_element.

  if s_cntr[] is initial.
* Get Cost Center data
    perform get_cost_center.
  endif.

  if s_cstele[] is initial.
* Get Cost element data
    perform get_cost_element.
  endif.

* Get Object data
  perform get_obj_data.

* Transfer the data to the internal table it_out.
  perform transfer_data.
endform.                    " frm_extract_data
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  get_cost_center
*&amp;amp;---------------------------------------------------------------------*
*       Getting the details of cost center
*----------------------------------------------------------------------*
form get_cost_center.
  call function 'BAPI_COSTCENTERGROUP_GETDETAIL'
       exporting
            controllingarea = 'EGLS'
            groupname       = p_cntrgp
       tables
            hierarchynodes  = it_cntrnodes
            hierarchyvalues = it_costcenters.


  if sy-subrc = 0.
    loop at it_costcenters.
      s_cntr-low = it_costcenters-valfrom.
      s_cntr-high = it_costcenters-valto.
      s_cntr-sign = 'I'.
      s_cntr-option = 'EQ'.
      append s_cntr.
      clear s_cntr.
    endloop.
  endif.

endform.                    " get_cost_center
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  get_cost_element
*&amp;amp;---------------------------------------------------------------------*
*      Getting the details of cost element
*----------------------------------------------------------------------*
form get_cost_element.
  call function 'BAPI_COSTELEMENTGRP_GETDETAIL'
       exporting
            chartofaccounts = 'WWCA'
            groupname       = p_cstgp
       tables
            hierarchynodes  = it_cstnodes
            hierarchyvalues = it_costelements.

  if sy-subrc = 0.

    loop at it_costelements.
      s_cstele-low = it_costelements-valfrom.
      s_cstele-high = it_costelements-valto.
      s_cstele-sign = 'I'.

      s_cstele-option = 'BT'.
      append s_cstele.
      clear s_cstele.
    endloop.

    loop at it_cstnodes.
      if it_cstnodes-hierlevel = 0.
        it_node-highlevel1 = it_cstnodes-descript.
        if   it_cstnodes-valcount eq 0 .
          continue.
        else.
          perform append_records_to_node.
        endif.
      endif.


      if it_cstnodes-hierlevel = 1.
        it_node-highlevel2 = it_cstnodes-descript.
        if   it_cstnodes-valcount eq 0 .
          continue.
        else.
          perform append_records_to_node.
        endif.

      endif.

      if it_cstnodes-hierlevel = 2.
        it_node-highlevel3 = it_cstnodes-descript.
        if   it_cstnodes-valcount eq 0 .
          continue.
        else.
          perform append_records_to_node.
        endif.

      endif.

      if it_cstnodes-hierlevel = 3.
        it_node-highlevel4 = it_cstnodes-descript.
        if   it_cstnodes-valcount eq 0 .
          continue.
        else.
          perform append_records_to_node.
        endif.

      endif.
    endloop.

  endif.
endform.                    " get_cost_element
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  get_obj_data
*&amp;amp;---------------------------------------------------------------------
*       Getting the required data
*----------------------------------------------------------------------
form get_obj_data.
* Build the range for the period and the year
  perform build_the_range.

  if not s_skey[] is initial.
* Get the Headcount data
    perform get_the_headcount.
    perform add_headcount.
  endif.

*--Get the COSP data
  perform get_data_cosp.

* Get the Quarter totals for the respective years
  perform get_year_totals.

endform.                    " get_obj_data
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  build_the_range
*&amp;amp;---------------------------------------------------------------------
*      Builing the Quarters range
*----------------------------------------------------------------------
form build_the_range.
  data : l_period like coep-perio,
           l_year like cosp-gjahr.

* Build the range for the year
  r_year-low = p_year.
  r_year-sign = 'I'.
  r_year-option = 'BT'.

  l_period = p_toprd.
  l_year = p_year.

  do 15 times.
    l_period = l_period + 1.
    if l_period &amp;gt; 12.
      l_year = l_year + 1.
      l_period = 1.
    endif.
  enddo.

  r_year-high = l_year.

  append r_year.
  clear r_year.
endform.                    " build_the_range
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  get_the_headcount
*&amp;amp;---------------------------------------------------------------------
*       Getting the headcount data
*----------------------------------------------------------------------
form get_the_headcount.
  data : l_objnr like cosr-objnr,
          l_length type i,
          l_length1 type i.

  clear v_toperiod.
  refresh s_wrttp.
  if p_versn1 =  '000' .
    s_wrttp-low = '04'.
    s_wrttp-option = 'EQ'.
    s_wrttp-sign   = 'I'.
    append s_wrttp.
  else .
    refresh s_wrttp.
  endif.

*---Added
  select * from cosr
          where lednr = '00' and
                gjahr = p_year and
                wrttp in s_wrttp and
                versn = p_versn1 and
                stagr in s_skey.

   clear : v_qt2_tot, v_qt3_tot, v_qt4_tot, v_qt5_tot, v_qt6_tot, v_cnt
  .
    v_ncnt = v_toprd.
    l_objnr = cosr-objnr.
    l_length = strlen( l_objnr ).
    l_length1 = l_length - 10.
    v_times = p_toprd - p_frprd + 1.
    v_ncnt = p_frprd.

* validation of objnr last four characters with respect to the
* selection screen cost centers
    check cosr-objnr+l_length1(10) in  s_cntr.

    do v_times times.
      v_cnt = v_cnt + 1.
      concatenate 'cosr-sme' v_ncnt into v_toperiod.
      condense v_toperiod no-gaps.
      assign (v_toperiod) to &amp;lt;fs&amp;gt;.
      if v_cnt between 1 and 3.
        v_qt1_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 4 and 6.
        v_qt2_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 7 and 9.
        v_qt3_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 10 and 12.
        v_qt4_tot =  &amp;lt;fs&amp;gt;.
      endif.
      v_ncnt = v_ncnt + 1.
    enddo.
    read table it_output with key cst_ele = cosr-stagr
                                  cost_ctr = cosr-objnr+l_length1(10)
                                  binary search.
    if sy-subrc eq 0 .
      it_output-qt1_tot = it_output-qt1_tot + v_qt1_tot.
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      modify it_output index sy-tabix.
      clear it_output.
    else.
      clear tkt03.
      select single *  from tkt03 where kokrs eq 'EGLS'
                        and stagr eq cosr-stagr.
      it_output-descript = tkt03-bezei.
      it_output-key_desc = tkt03-bezei.
      it_output-cst_ele =  cosr-stagr.
      it_output-cost_ctr = cosr-objnr+l_length1(10).
      it_output-qt1_tot = it_output-qt1_tot + v_qt1_tot.
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      it_output-sortord = 900.
      it_output-sortord1 = 900.
      append it_output.
      clear it_output.
      sort it_output by cst_ele cost_ctr.
    endif.
  endselect.
*--End
  sort it_output by cst_ele cost_ctr.
* Headcount for the other Quarters
  perform headcount_other_quarts.
  loop at it_output.
    it_output-qt1_tot = it_output-qt1_tot * 1000.
    it_output-qt2_tot = it_output-qt2_tot * 1000.
    it_output-qt3_tot = it_output-qt3_tot * 1000.
    it_output-qt4_tot = it_output-qt4_tot * 1000.
    it_output-qt5_tot = it_output-qt5_tot * 1000.
    it_output-qt6_tot = it_output-qt6_tot * 1000.
    modify it_output.
  endloop.

endform.                    " get_the_headcount
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  GET_DATA_COSP
*&amp;amp;---------------------------------------------------------------------
*       Getting the cosp data
*----------------------------------------------------------------------
form get_data_cosp.
  data :        l_length type i,
           l_length1 type i.

  data : l_year like cosr-gjahr.

  refresh s_wrttp.
  if p_versn1 =  '000' .
    s_wrttp-low = '04'.
    s_wrttp-option = 'EQ'.
    s_wrttp-sign   = 'I'.
    append s_wrttp.
  else.
    refresh s_wrttp.
  endif.


  select * from cosp
            where lednr = '00' and
                  gjahr = p_year and
                  wrttp in s_wrttp and
                  versn = p_versn1 and
                  kstar in s_cstele.
*---Added
clear: v_qt1_tot, v_qt2_tot, v_qt3_tot, v_qt4_tot, v_qt5_tot, v_qt6_tot
        , v_cnt, it_output.

    v_ncnt = p_frprd.
    l_length = strlen( cosp-objnr ).
    l_length1 = l_length - 10.
    v_times = p_toprd - p_frprd + 1.
    v_toprd = p_toprd.

    check cosp-objnr+l_length1(10) in s_cntr.
    do v_times times.
      v_cnt = v_cnt + 1.
      concatenate 'cosp-wkg' v_ncnt into v_toperiod.
      condense v_toperiod no-gaps.
      assign (v_toperiod) to &amp;lt;fs&amp;gt;.
      if v_cnt between 1 and 3.
        v_qt1_tot = v_qt1_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 4 and 6.
        v_qt2_tot = v_qt2_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 7 and 9.
        v_qt3_tot = v_qt3_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 10 and 12.
        v_qt4_tot = v_qt4_tot + &amp;lt;fs&amp;gt;.
      endif.
      v_ncnt = v_ncnt + 1.
    enddo.

    read table it_output  with key cst_ele = cosp-kstar
                 cost_ctr = cosp-objnr+l_length1(10)
                 binary search.
    if sy-subrc eq 0 .
      it_output-qt1_tot = it_output-qt1_tot + v_qt1_tot.
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      modify it_output index sy-tabix.
      clear it_output.
    else.

      it_output-cost_ctr =  cosp-objnr+l_length1(10).
      it_output-cst_ele = cosp-kstar.
      it_output-qt1_tot = it_output-qt1_tot + v_qt1_tot.
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      it_output-key_desc = space.
      loop at it_node where valfrom le cosp-kstar
                        and valto   ge cosp-kstar.
        it_output-descript = it_node-descript.
        it_output-sortord  = sy-tabix.
        it_output-sortord1 = it_node-sortord1.
        it_output-highlevel1 = it_node-highlevel1.
        it_output-highlevel2    =  it_node-highlevel2.
        it_output-highlevel3 = it_node-highlevel3.
        it_output-highlevel4 = it_node-highlevel4.
      endloop.

      append it_output.
      clear it_output.
    endif.
  endselect.
*--End  Added
  sort it_output by  cst_ele cost_ctr.

  refresh s_wrttp.
  if p_versn2 =  '000' .
    s_wrttp-low = '04'.
    s_wrttp-option = 'EQ'.
    s_wrttp-sign   = 'I'.
    append s_wrttp.
  else .
    refresh s_wrttp.
  endif.

  v_ver_start  =  v_times.
  v_times = 18 - v_times."mmundhada 12/02

  select * from cosp
            where lednr = '00' and
*                gjahr = p_year and
                  wrttp in s_wrttp and
                  versn = p_versn2 and
                  kstar in s_cstele.
   clear : v_qt2_tot, v_qt3_tot, v_qt4_tot, v_qt5_tot, v_qt6_tot, v_cnt
  .

*     v_times = p_toprd - p_frprd + 1.  "mmundhada 12/02
    v_ncnt = v_toprd.
    l_year = p_year.
    l_length = strlen( cosp-objnr ).
    l_length1 = l_length - 10.

    check cosp-objnr+l_length1(10) in s_cntr.
    v_cnt = v_ver_start .
    do v_times times.
      v_ncnt = v_ncnt + 1.
      if v_ncnt &amp;gt; 12.
        l_year = l_year + 1.
        v_ncnt = 1.
*        v_cnt  = 12. "mmundhada 12/02
         perform calculate_v_cnt.
      endif.
      check cosp-gjahr = l_year.
      v_cnt =  v_cnt + 1.
      concatenate 'cosp-wkg' v_ncnt into v_toperiod.
      condense v_toperiod no-gaps.
      assign (v_toperiod) to &amp;lt;fs&amp;gt;.
      if v_cnt between 4 and 6.
        v_qt2_tot = v_qt2_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 7 and 9.
        v_qt3_tot = v_qt3_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 10 and 12.
        v_qt4_tot = v_qt4_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 13 and 15.
        v_qt5_tot = v_qt5_tot + &amp;lt;fs&amp;gt;.
      elseif v_cnt between 16 and 18.
        v_qt6_tot = v_qt6_tot + &amp;lt;fs&amp;gt;.
      endif.
*v_toprd = v_toprd + 1.
    enddo.

    read table it_output  with key cst_ele = cosp-kstar
                 cost_ctr = cosp-objnr+l_length1(10)
                 binary search.
    if sy-subrc eq 0 .
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      it_output-qt5_tot = it_output-qt5_tot + v_qt5_tot.
      it_output-qt6_tot = it_output-qt6_tot + v_qt6_tot.

      modify it_output index sy-tabix.
      clear it_output.
*---Added mgm 10/07 mmundhada
   else.

      it_output-cost_ctr =  cosp-objnr+l_length1(10).
      it_output-cst_ele = cosp-kstar.
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      it_output-qt5_tot = it_output-qt5_tot + v_qt5_tot.
      it_output-qt6_tot = it_output-qt6_tot + v_qt6_tot.
      it_output-key_desc = space.

      loop at it_node where valfrom le cosp-kstar
                        and valto   ge cosp-kstar.
        it_output-descript = it_node-descript.
        it_output-sortord  = sy-tabix.
        it_output-sortord1 = it_node-sortord1.
        it_output-highlevel1 = it_node-highlevel1.
        it_output-highlevel2 = it_node-highlevel2.
        it_output-highlevel3 = it_node-highlevel3.
        it_output-highlevel4 = it_node-highlevel4.
      endloop.

      append it_output.
      clear it_output.
      sort it_output by cst_ele cost_ctr.
*---End of Add 10/07
    endif.

  endselect.
  delete it_output where qt1_tot = 0
                          and qt2_tot = 0
                          and qt3_tot = 0
                          and qt4_tot = 0
                          and qt5_tot = 0
                          and qt6_tot = 0.

endform.                    " GET_DATA_COSP
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  get_year_totals
*&amp;amp;---------------------------------------------------------------------
*      Getting the respective year totals
*----------------------------------------------------------------------
form get_year_totals.
  loop at it_output.
    if p_frprd = 1.
      it_output-yr_tot1 = it_output-qt1_tot + it_output-qt2_tot +
                          it_output-qt3_tot + it_output-qt4_tot.
      it_output-yr_tot2 = it_output-qt5_tot + it_output-qt6_tot.
    elseif p_frprd = 4.
      it_output-yr_tot1 = it_output-qt1_tot + it_output-qt2_tot +
                          it_output-qt3_tot.
      it_output-yr_tot2 = it_output-qt4_tot + it_output-qt5_tot +
                          it_output-qt6_tot.
    elseif p_frprd = 7.
      it_output-yr_tot1 = it_output-qt1_tot + it_output-qt2_tot.
      it_output-yr_tot2 = it_output-qt3_tot + it_output-qt4_tot +
                          it_output-qt5_tot + it_output-qt6_tot.
    elseif p_frprd = 10.
      it_output-yr_tot1 = it_output-qt1_tot.
      it_output-yr_tot2 = it_output-qt2_tot + it_output-qt3_tot +
                          it_output-qt4_tot + it_output-qt5_tot.
      it_output-yr_tot3 = it_output-qt6_tot.
    endif.
    if not it_output-key_desc  is initial.
    clear :  it_output-yr_tot1, it_output-yr_tot2,it_output-yr_tot3.
    endif.
    modify it_output index sy-tabix.
    clear it_output.
  endloop.
endform.                    " get_year_totals
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  display_heading
*&amp;amp;---------------------------------------------------------------------
*       Display column headings
*----------------------------------------------------------------------
form display_heading.
  data l_tabix like sy-tabix.
  data : l_year2 like cosr-gjahr,
         l_year3 like cosr-gjahr.
  data : v_text1(35),
         v_text2(35),
         v_text3(35).

  l_year2 = p_year + 1.
  l_year3 = p_year + 2.

  v_text1(4) = p_year.
  v_text1+5(5)  = 'Total'(011).


  v_text2(4) = l_year2.
  v_text2+5(5)  = 'Total'(011).


  v_text3(4) = l_year3.
  v_text3+5(5)  = 'Total'(011).

  skip.
  uline.
  format color col_heading on.

  if p_frprd = 10.
    write: / 'Description'(002),
       45 sy-vline,
       46 'Cst Ctr'(004),
       61 sy-vline,
       62(10) 'Q4',p_year,
       72 sy-vline,
       73(10) v_text1,
       83 sy-vline,
       84(10) 'Q1',l_year2,
       94 sy-vline,
       95(10) 'Q2',l_year2,
      105 sy-vline,
      106(10) 'Q3',l_year2,
      116 sy-vline,
      117(10) 'Q4',l_year2,
      127 sy-vline,
      128(10) v_text2,
      138 sy-vline,
      139(10) 'Q1',l_year3,
      150 sy-vline,
      151(10) v_text3,
      161 sy-vline.

  elseif p_frprd = 7.
    write: / 'Description'(002),
       45 sy-vline,
       46 'Cst Ctr'(004),
       61 sy-vline,
       62(10) 'Q3',p_year,
       72 sy-vline,
       73(10) 'Q4',p_year,
       83 sy-vline,
       84(10) v_text1,
       94 sy-vline,
       95(10) 'Q1',l_year2,
      105 sy-vline,
      106(10) 'Q2',l_year2,
      116 sy-vline,
      117(10) 'Q3',l_year2,
      127 sy-vline,
      128(10) 'Q4',l_year2,
      138 sy-vline,
      139(10) v_text2,
      150 sy-vline.
  elseif p_frprd = 4.
    write: / 'Description'(002),
       45 sy-vline,
       46 'Cst Ctr'(004),
       61 sy-vline,
       62(10) 'Q2',p_year,
       72 sy-vline,
       73(10) 'Q3',p_year,
       83  sy-vline,
       84(10) 'Q4',p_year,
       94 sy-vline,
       95(10) v_text1,
      105 sy-vline,
      106(10) 'Q1',l_year2,
      116 sy-vline,
      117(10) 'Q2',l_year2,
      127 sy-vline,
      128(10) 'Q3',l_year2,
      138 sy-vline,
      139(10) v_text2,
      150 sy-vline.

  elseif p_frprd = 1.
    write: / 'Description'(002),
       45 sy-vline,
       46 'Cst Ctr'(004),
       61 sy-vline,
       62(10) 'Q1',p_year,
       72 sy-vline,
       73(10) 'Q2'(006),p_year,
       83 sy-vline,
       84(10) 'Q3'(007),p_year,
       94 sy-vline,
       95(10) 'Q4'(008),p_year,
      105 sy-vline,
      106(10) v_text1,
      116 sy-vline,
      117(10) 'Q1',l_year2,
      127 sy-vline,
      128(10) 'Q2',l_year2,
      138 sy-vline,
      139(10) v_text2,
      150 sy-vline.

  endif.
  format color col_heading off.
  uline.
endform.                    " display_heading
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_period
*&amp;amp;---------------------------------------------------------------------
*      Validate from period
*----------------------------------------------------------------------
form validate_period.
  if p_frprd = 1 or
     p_frprd = 4 or
     p_frprd = 7 or
     p_frprd = 10.
  else.
    message e005 with 'Enter a valid period'(012).
  endif.
endform.                    " validate_period
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_toperiod
*&amp;amp;---------------------------------------------------------------------
*     Validate to period
*----------------------------------------------------------------------
form validate_toperiod.
  if p_toprd = 3 or
    p_toprd = 6 or
    p_toprd = 9 or
    p_toprd = 12.
  else.
    message e005 with 'Enter a valid period'(013).
  endif.

endform.                    " validate_toperiod
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_version1
*&amp;amp;---------------------------------------------------------------------
*      Validate version1
*----------------------------------------------------------------------
form validate_version1.
* Local variable
  data l_versn1 like cosp-versn.                            " version1
  clear l_versn1.

  select versn
    into l_versn1
    from tka09 up to 1 rows
   where versn = p_versn1.
  endselect.

  if sy-subrc &amp;lt;&amp;gt; 0.
    message e005 with 'Check the version1 entry'(014).
  endif.
endform.                    " validate_version1
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_version2
*&amp;amp;---------------------------------------------------------------------
*       Validate version2
*----------------------------------------------------------------------
form validate_version2.
* Local variable
  data l_versn2 like cosp-versn.                            " version2
  clear l_versn2.

  select versn
    into l_versn2
    from tka09 up to 1 rows
   where versn = p_versn2.
  endselect.

  if sy-subrc &amp;lt;&amp;gt; 0.
    message e005 with 'Check the version2 entry'(015).
  endif.
endform.                    " validate_version2
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_costcenter
*&amp;amp;---------------------------------------------------------------------
*       Validate cost center
*----------------------------------------------------------------------
form validate_costcenter.
if s_cntr-low is initial and s_cntr-high is initial
     and p_cntrgp is initial.
    message e005 with 'Enter cost center or the cost center group'(016).
    endif.
if not  s_cntr-low is initial and not  p_cntrgp is initial.
  message e005 with 'Enter cost center or the cost center group'(016).
    endif.

endform.                    " validate_costcenter
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_costcentergp
*&amp;amp;---------------------------------------------------------------------
*      Validate cost center group
*----------------------------------------------------------------------
form validate_costcentergp.
  if p_cntrgp is initial.
    clear it_idynpfields.
    refresh it_idynpfields.
    it_idynpfields-fieldname = 'S_CNTR-LOW'.
    append it_idynpfields.

    call function 'DYNP_VALUES_READ'
         exporting
              dyname     = sy-cprog
              dynumb     = '1000'
         tables
              dynpfields = it_idynpfields.
*         exceptions
*              invalid_abapworkarea = 1
*              invalid_dynprofield  = 2
*              invalid_dynproname   = 3
*              invalid_dynpronummer = 4
*              invalid_request      = 5
*              no_fielddescription  = 6
*              invalid_parameter    = 7
*              undefind_error       = 8
*              double_conversion    = 9
*              stepl_not_found      = 10
*              others               = 11.

    read table it_idynpfields.
    if it_idynpfields-fieldvalue = ' '.
    message e005 with 'Enter cost center or the cost center group'(016)
    .
    endif.
  endif.
endform.                    " validate_costcentergp
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_costelement
*&amp;amp;---------------------------------------------------------------------
*       Validate cost element
*----------------------------------------------------------------------
form validate_costelement.
  if s_cstele-low is initial and p_cstgp is initial.
   message e005 with 'Enter cost element or the cost element group'(017)
        .
    endif.
if not s_cstele-low is initial  and not p_cstgp is initial.
 message e005 with 'Enter cost element or the cost element group'(017) .
    endif.

endform.                    " validate_costelement
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  validate_costelementgp
*&amp;amp;---------------------------------------------------------------------
*      Validate cost element group
*----------------------------------------------------------------------
form validate_costelementgp.
  if s_cstele-low is initial.
    if p_cstgp is initial.
  message e005 with 'Enter cost element or the cost element group'(017)
        .
    endif.
  endif.

endform.                    " validate_costelementgp
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  cost_cntr_gp_valuehelp
*&amp;amp;---------------------------------------------------------------------
*      Search help for cost center group
*----------------------------------------------------------------------
form cost_cntr_gp_valuehelp.
  call function 'K_GROUP_SELECT'
     exporting
      class                    = '0101'
       field_name               ='KOSTL'
      table                    = 'CCSS'
    importing
      set_name                 = p_cntrgp
    exceptions
      no_set_picked            = 02.

  case sy-subrc.
    when 1.
      message s005 with 'An appropriate object was not found'(018).
    when 2.
      message s005 with 'No object was selected'(019).
  endcase.

endform.                    " cost_cntr_gp_valuehelp
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  cost_ele_gp_valuehelp
*&amp;amp;---------------------------------------------------------------------
*      Search help for cost element group
*----------------------------------------------------------------------
form cost_ele_gp_valuehelp.
  call function 'K_GROUP_SELECT'
       exporting
            class         = '0102'
            field_name    = 'KSTAR'
            table         = 'CCSS'
       importing
            set_name      = p_cstgp
       exceptions
            no_set_picked = 02.


  case sy-subrc.
    when 1.
      message s005 with 'An appropriate object was not found'(018).
    when 2.
      message s005 with 'No object was selected'(019).
  endcase.


endform.                    " cost_ele_gp_valuehelp
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  headcount_other_quarts
*&amp;amp;---------------------------------------------------------------------
*      Getting the head count data
*----------------------------------------------------------------------
form headcount_other_quarts.
  data : l_objnr like cosr-objnr,
         l_year like cosr-gjahr,
         l_toprd like coep-perio,
         l_rec_cnt type i,
         l_length type i,
         l_length1 type i.


  clear : v_toperiod,
          v_toprd,
          v_cnt,
          l_objnr,
          l_year,
          l_length,
          l_length1.
    v_times = p_toprd - p_frprd + 1.

  v_ver_start  =  v_times.
  v_times = 18 - v_times.
  v_toprd = p_toprd.
  l_year  = p_year.
  clear v_toperiod.

  refresh s_wrttp.
  if p_versn2 =  '000' .
    s_wrttp-low = '04'.
    s_wrttp-option = 'EQ'.
    s_wrttp-sign   = 'I'.
    append s_wrttp.
  else .
    refresh s_wrttp.
  endif.



  select * from cosr
           where lednr = '00' and
                 gjahr in r_year and
                 wrttp in s_wrttp and
                 versn = p_versn2 and
                 stagr in s_skey.
   clear : v_qt2_tot, v_qt3_tot, v_qt4_tot, v_qt5_tot, v_qt6_tot, v_cnt
  .
    v_ncnt = v_toprd.
    l_year = p_year.
    l_objnr = cosr-objnr.
    l_length = strlen( l_objnr ).
    l_length1 = l_length - 10.


* validation of objnr last four characters with respect to the
* selection screen cost centers
    check cosr-objnr+l_length1(10) in  s_cntr.
    v_cnt = v_ver_start .
    do v_times times.

      v_ncnt = v_ncnt + 1.
      if v_ncnt &amp;gt; 12.
        l_year = l_year + 1.
        v_ncnt = 1.
*        v_cnt  = 12. "mmundhada 12/02
        perform calculate_v_cnt.
      endif.

      check cosr-gjahr = l_year.
      v_cnt = v_cnt + 1.

      concatenate 'cosr-sme' v_ncnt into v_toperiod.
      condense v_toperiod no-gaps.
      assign (v_toperiod) to &amp;lt;fs&amp;gt;.
      if v_cnt between 4 and 6.
        v_qt2_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 7 and 9.
        v_qt3_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 10 and 12.
        v_qt4_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 13 and 15.
        v_qt5_tot =  &amp;lt;fs&amp;gt;.
      elseif v_cnt between 16 and 18.
        v_qt6_tot =  &amp;lt;fs&amp;gt;.
      endif.
    enddo.

    read table it_output with key cst_ele = cosr-stagr
                                  cost_ctr = cosr-objnr+l_length1(10)
                                  binary search.
    if sy-subrc eq 0 .
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      it_output-qt5_tot = it_output-qt5_tot + v_qt5_tot.
      it_output-qt6_tot = it_output-qt6_tot + v_qt6_tot.
      modify it_output index sy-tabix.
      clear it_output.
    else.
      clear tkt03.
      select single *  from tkt03 where kokrs eq 'EGLS'
                        and stagr eq cosr-stagr.
      it_output-descript = tkt03-bezei.
      it_output-key_desc = tkt03-bezei.
      it_output-cst_ele =  cosr-stagr.
      it_output-cost_ctr = cosr-objnr+l_length1(10).
      it_output-qt2_tot = it_output-qt2_tot + v_qt2_tot.
      it_output-qt3_tot = it_output-qt3_tot + v_qt3_tot.
      it_output-qt4_tot = it_output-qt4_tot + v_qt4_tot.
      it_output-qt5_tot = it_output-qt5_tot + v_qt5_tot.
      it_output-qt6_tot = it_output-qt6_tot + v_qt6_tot.
      it_output-sortord = 900.
      it_output-sortord1 = 900.
      append it_output.
      clear it_output.
      sort it_output by cst_ele cost_ctr.
    endif.
    clear it_output.
  endselect.
*  clear it_output-cst_ele.
*  modify it_output transporting cst_ele where  cst_ele ne space.

endform.                    " headcount_other_quarts
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  display_report
*&amp;amp;---------------------------------------------------------------------
*     Display the report output
*----------------------------------------------------------------------
form display_report.
  data : fg_gtotal,        " flag for grand total display in case of
         fg_nodesc value 'X'.
  " headcount data
  data l_sytabix like sy-tabix.
  loop at it_out.
    l_sytabix = sy-tabix.
* Displaying the Grand total when there is headcount data
    at new highlevel1.

     read table it_out index l_sytabix.

      if it_out-highlevel1 is initial.

       if it_out-descript &amp;lt;&amp;gt; ' ' and l_sytabix &amp;lt;&amp;gt; 1.

       if fg_nodesc = 'X'.
        uline.
        format color col_total intensified on.
        it_out-cost_ctr = ' '.
        it_out-cst_ele = ' '.
        if p_frprd = 10.
          perform display_grand_total_4q.
        elseif p_frprd = 7.
          perform display_grand_total_3q.
        elseif p_frprd = 4.
          perform display_grand_total_2q.
        elseif p_frprd = 1.
          perform display_grand_total_1q.
        endif.
        format color col_total off.
        uline.

       clear fg_nodesc.
       endif.
        endif.

      endif.
    endat.


* Displaying the records corresponding to the cost element which have
* no description and the headcount data
      if it_out-highlevel1 is initial.
       if it_out-descript &amp;lt;&amp;gt; ' '.
        fg_gtotal = 'X'.
* Displaying the grand total when there is headcount data
* and records having no description
       if fg_nodesc = 'X'.
        uline.
        format color col_total intensified on.
        it_out-cost_ctr = ' '.
        it_out-cst_ele = ' '.
        if p_frprd = 10.
          perform display_grand_total_4q.
        elseif p_frprd = 7.
          perform display_grand_total_3q.
        elseif p_frprd = 4.
          perform display_grand_total_2q.
        elseif p_frprd = 1.
          perform display_grand_total_1q.
        endif.
        format color col_total off.
        uline.
        clear fg_nodesc.
        endif.
       endif.
        clear : v_total1,
                v_total2,
                v_total3,
                v_total4,
                v_total5,
                v_total6,
                v_total7,
                v_total8,
                v_total9.

        v_total1 = it_out-qt1_tot.
        v_total2 = it_out-qt2_tot.
        v_total3 = it_out-qt3_tot.
        v_total4 = it_out-qt4_tot.
        v_total5 = it_out-qt5_tot.
        v_total6 = it_out-qt6_tot.
        v_total7 = it_out-yr_tot1.
        v_total8 = it_out-yr_tot2.
        v_total9 = it_out-yr_tot3.

        read table it_out index l_sytabix.

* grand total when there is no headcount data and records corresponding
* to cost elements which have no description
        if it_out-descript = ' '.
          v_gtotal1 = v_gtotal1 + v_total1.
          v_gtotal2 = v_gtotal2 + v_total2.
          v_gtotal3 = v_gtotal3 + v_total3.
          v_gtotal4 = v_gtotal4 + v_total4.
          v_gtotal5 = v_gtotal5 + v_total5.
          v_gtotal6 = v_gtotal6 + v_total6.
          v_gtotal7 = v_gtotal7 + v_total7.
          v_gtotal8 = v_gtotal8 + v_total8.
         v_gtotal9 = v_gtotal9 + v_total9.

        endif.

        write: / it_out-descript.
        if p_frprd = 10.
          perform write_output_for_4q.
        elseif p_frprd = 7.
          perform write_output_for_3q.
        elseif p_frprd = 4.
          perform write_output_for_2q.
        elseif p_frprd = 1.
          perform write_output_for_1q.

        endif.
      endif.


* Displaying the records for cost element data
    at end of highlevel4.
      if not it_out-highlevel4 is initial.
        clear : v_total1,
               v_total2,
               v_total3,
               v_total4,
               v_total5,
               v_total6,
               v_total7,
               v_total8,
               v_total9.
        sum.
        v_total1 = it_out-qt1_tot.
        v_total2 = it_out-qt2_tot.
        v_total3 = it_out-qt3_tot.
        v_total4 = it_out-qt4_tot.
        v_total5 = it_out-qt5_tot.
        v_total6 = it_out-qt6_tot.
        v_total7 = it_out-yr_tot1.
        v_total8 = it_out-yr_tot2.
        v_total9 = it_out-yr_tot3.

        read table it_out index l_sytabix.
        write: / it_out-highlevel4.

        if p_frprd = 10.
          perform write_output_for_4q.
        elseif p_frprd = 7.
          perform write_output_for_3q.
        elseif p_frprd = 4.
          perform write_output_for_2q.
        elseif p_frprd = 1.
          perform write_output_for_1q.

        endif.
      endif.
    endat.

    at end of highlevel3.
      if not it_out-highlevel3 is initial.
        clear : v_total1,
               v_total2,
               v_total3,
               v_total4,
               v_total5,
               v_total6,
               v_total7,
               v_total8,
               v_total9.
        sum.
        v_total1 = it_out-qt1_tot.
        v_total2 = it_out-qt2_tot.
        v_total3 = it_out-qt3_tot.
        v_total4 = it_out-qt4_tot.
        v_total5 = it_out-qt5_tot.
        v_total6 = it_out-qt6_tot.
        v_total7 = it_out-yr_tot1.
        v_total8 = it_out-yr_tot2.
        v_total9 = it_out-yr_tot3.

        read table it_out index l_sytabix.
        if not it_out-highlevel4 is initial.
          uline.
          format color col_positive on.
          it_out-cost_ctr = ' '.
          it_out-cst_ele = ' '.
        endif.
        write: / it_out-highlevel3.

        if p_frprd = 10.
          perform write_output_for_4q.
        elseif p_frprd = 7.
          perform write_output_for_3q.
        elseif p_frprd = 4.
          perform write_output_for_2q.
        elseif p_frprd = 1.
          perform write_output_for_1q.

        endif.
        if not it_out-highlevel4 is initial.
          format color col_positive off.
          uline.
        endif.

      endif.
    endat.

    at end of highlevel2.
      if not it_out-highlevel2 is initial.
        clear : v_total1,
               v_total2,
               v_total3,
               v_total4,
               v_total5,
               v_total6,
               v_total7,
               v_total8,
               v_total9.
        sum.
        v_total1 = it_out-qt1_tot.
        v_total2 = it_out-qt2_tot.
        v_total3 = it_out-qt3_tot.
        v_total4 = it_out-qt4_tot.
        v_total5 = it_out-qt5_tot.
        v_total6 = it_out-qt6_tot.
        v_total7 = it_out-yr_tot1.
        v_total8 = it_out-yr_tot2.
        v_total9 = it_out-yr_tot3.

        read table it_out index l_sytabix.
        if not it_out-highlevel3 is initial.
          uline.
          format color col_group on.
          it_out-cost_ctr = ' '.
          it_out-cst_ele = ' '.
        endif.

        write: / it_out-highlevel2.

        if p_frprd = 10.
          perform write_output_for_4q.
        elseif p_frprd = 7.
          perform write_output_for_3q.
        elseif p_frprd = 4.
          perform write_output_for_2q.
        elseif p_frprd = 1.
          perform write_output_for_1q.

        endif.
        if not it_out-highlevel3 is initial.
          format color col_group off.
          uline.
        endif.
      endif.
    endat.

    at end of highlevel1.
      if not it_out-highlevel1 is initial.

        clear : v_total1,
               v_total2,
               v_total3,
               v_total4,
               v_total5,
               v_total6,
               v_total7,
               v_total8,
               v_total9.
        sum.
        v_total1 = it_out-qt1_tot.
        v_total2 = it_out-qt2_tot.
        v_total3 = it_out-qt3_tot.
        v_total4 = it_out-qt4_tot.
        v_total5 = it_out-qt5_tot.
        v_total6 = it_out-qt6_tot.
        v_total7 = it_out-yr_tot1.
        v_total8 = it_out-yr_tot2.
        v_total9 = it_out-yr_tot3.

* Storing the Grand total
        v_gtotal1 = v_gtotal1 + v_total1.
        v_gtotal2 = v_gtotal2 + v_total2.
        v_gtotal3 = v_gtotal3 + v_total3.
        v_gtotal4 = v_gtotal4 + v_total4.
        v_gtotal5 = v_gtotal5 + v_total5.
        v_gtotal6 = v_gtotal6 + v_total6.
        v_gtotal7 = v_gtotal7 + v_total7.
        v_gtotal8 = v_gtotal8 + v_total8.
        v_gtotal9 = v_gtotal9 + v_total9.


        read table it_out index l_sytabix.
        if not it_out-highlevel2 is initial.
          uline.
          format color col_total intensified off.
          it_out-cost_ctr = ' '.
          it_out-cst_ele = ' '.
        endif.
        write: / it_out-highlevel1.

        if p_frprd = 10.
          perform write_output_for_4q.
        elseif p_frprd = 7.
          perform write_output_for_3q.
        elseif p_frprd = 4.
          perform write_output_for_2q.
        elseif p_frprd = 1.
          perform write_output_for_1q.

        endif.
        if not it_out-highlevel2 is initial.
          format color col_total off.
          uline.
        endif.
      endif.
    endat.

* Displaying the Grand total when there is no headcount data and
* when there are cost element records which have no description
    at last.
      if fg_gtotal &amp;lt;&amp;gt; 'X'.
        if fg_nodesc = 'X'.
        uline.
        format color col_total intensified on.
        it_out-cost_ctr = ' '.
        it_out-cst_ele = ' '.
        if p_frprd = 10.
          perform display_grand_total_4q.
        elseif p_frprd = 7.
          perform display_grand_total_3q.
        elseif p_frprd = 4.
          perform display_grand_total_2q.
        elseif p_frprd = 1.
          perform display_grand_total_1q.
        endif.
        format color col_total off.
        uline.
        clear fg_nodesc.
        endif.
      else.
       uline.
      endif.
    endat.

  endloop.
endform.                    " display_report
*&amp;amp;---------------------------------------------------------------------

*&amp;amp;      Form  transfer_data
*&amp;amp;---------------------------------------------------------------------

*      Transfer the output data to the final internal table
*----------------------------------------------------------------------
form transfer_data.
  loop at it_output.
    move-corresponding it_output to it_out.
    append it_out.
    clear it_out.
  endloop.

endform.                    " transfer_data
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  write_output_for_1q
*&amp;amp;---------------------------------------------------------------------
*    Display the output if the first quarter of the year entered
*----------------------------------------------------------------------
form write_output_for_1q.

  write :  45 sy-vline,
            46 v_cstcenter NO-ZERO,
            61 sy-vline,
            62(10) v_total1 round 3 no-zero,
            72 sy-vline,
            73(10) v_total2 round 3 no-zero,
            83 sy-vline,
            84(10) v_total3 round 3 no-zero,
            94 sy-vline,
            95(10) v_total4 round 3 no-zero,
           105 sy-vline,
           106(10)  v_total7 round 3 no-zero,
           116 sy-vline,
           117(10) v_total5 round 3 no-zero,
           127 sy-vline,
           128(10) v_total6 round 3 no-zero,
           138 sy-vline,
           139(10) v_total8 round 3 no-zero,
           150 sy-vline.

endform.                    " write_output_for_1q
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  display_grand_total_1q
*&amp;amp;---------------------------------------------------------------------
*   Display the grand total if the first quarter of the year entered
*----------------------------------------------------------------------
form display_grand_total_1q.
  write: / 'Grand Total'(022),
           45 sy-vline,
           46 ' ',
           61 sy-vline,
           62(10) v_gtotal1 round 3 no-zero,
           72 sy-vline,
           73(10) v_gtotal2 round 3 no-zero,
           83 sy-vline,
           84(10) v_gtotal3 round 3 no-zero,
           94 sy-vline,
           95(10) v_gtotal4 round 3 no-zero,
          105 sy-vline,
          106(10) v_gtotal7 round 3 no-zero,
          116 sy-vline,
          117(10) v_gtotal5 round 3 no-zero,
          127 sy-vline,
          128(10) v_gtotal6 round 3 no-zero,
          138 sy-vline,
          139(10) v_gtotal8 round 3 no-zero,
          150 sy-vline.


endform.                    " display_grand_total_1q
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  write_output_for_4q
*&amp;amp;---------------------------------------------------------------------
*       Display the output if the last quarter of the year entered
*----------------------------------------------------------------------
form write_output_for_4q.
  write :  45 sy-vline,
           46 v_cstcenter NO-ZERO  ,
           61 sy-vline,
           62(10) v_total1 round 3 no-zero,
           72 sy-vline,
           73(10) v_total7 round 3 no-zero,
           83 sy-vline,
           84(10) v_total2 round 3 no-zero,
           94 sy-vline,
           95(10) v_total3 round 3 no-zero,
          105 sy-vline,
          106(10) v_total4 round 3 no-zero,
          116 sy-vline,
          117(10) v_total5 round 3 no-zero,
          127 sy-vline,
          128(10) v_total8 round 3 no-zero,
          138 sy-vline,
          139(10) v_total6 round 3 no-zero,
          150 sy-vline,
          151(10) v_total9 round 3 no-zero,
          161 sy-vline.

endform.                    " write_output_for_4q
*&amp;amp;---------------------------------------------------------------------
*&amp;amp;      Form  display_grand_total_4q
*&amp;amp;---------------------------------------------------------------------
*      Display the grand total if the last quarter of the year entered
*----------------------------------------------------------------------
form display_grand_total_4q.
  write :/ 'Grand Total'(022),
            45 sy-vline,
            46 ' ',
            61 sy-vline,
            62(10) v_gtotal1 round 3 no-zero,
            72 sy-vline,
            73(10) v_gtotal7 round 3 no-zero,
            83 sy-vline,
            84(10) v_gtotal2 round 3 no-zero,
            94 sy-vline,
            95(10) v_gtotal3 round 3 no-zero,
           105 sy-vline,
           106(10) v_gtotal4 round 3 no-zero,
           116 sy-vline,
           117(10) v_gtotal5 round 3 no-zero,
           127 sy-vline,
           128(10) v_gtotal8 round 3 no-zero,
           138 sy-vline,
           139(10) v_gtotal6 round 3 no-zero,
           150 sy-vline,
           151(10) v_gtotal9 round 3 no-zero,
           161 sy-vline.

endform.                    " display_grand_total_4q
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  append_records_to_node
*&amp;amp;---------------------------------------------------------------------*
*       append the records to internal table it_node
*----------------------------------------------------------------------*
form append_records_to_node.
  loop at  it_costelements.
    move  it_costelements-valfrom to it_node-valfrom.
    move  it_costelements-valto to it_node-valto.

    it_node-descript = it_cstnodes-descript.
    append it_node.
    it_cstnodes-valcount = it_cstnodes-valcount - 1.
    delete  it_costelements.
    if   it_cstnodes-valcount eq 0 .
      exit.
    endif.
  endloop.

endform.                    " append_records_to_node
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  display_grand_total_3q
*&amp;amp;---------------------------------------------------------------------*
*  Display grand total if third quarter is entered on selection screen
*----------------------------------------------------------------------*
form display_grand_total_3q.
  write: / 'Grand Total'(022),
            45 sy-vline,
            46 ' ',
            61 sy-vline,
            62(10) v_gtotal1 round 3 no-zero,
            72 sy-vline,
            73(10) v_gtotal2 round 3 no-zero,
            83 sy-vline,
            84(10) v_gtotal7 round 3 no-zero,
            94 sy-vline,
            95(10) v_gtotal3 round 3 no-zero,
            105 sy-vline,
            106(10) v_gtotal4 round 3 no-zero,
            116 sy-vline,
            117(10) v_gtotal5 round 3 no-zero,
            127 sy-vline,
            128(10) v_gtotal6 round 3 no-zero,
            138 sy-vline,
            139(10) v_gtotal8 round 3 no-zero,
            150 sy-vline.

endform.                    " display_grand_total_3q
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  display_grand_total_2q
*&amp;amp;---------------------------------------------------------------------*
* Display grand total if second quarter is entered on selection screen
*----------------------------------------------------------------------*
form display_grand_total_2q.
  write: / 'Grand Total'(022),
             45 sy-vline,
             46 ' ',
             61 sy-vline,
             62(10) v_gtotal1 round 3 no-zero,
             72 sy-vline,
             73(10) v_gtotal2 round 3 no-zero,
             83 sy-vline,
             84(10) v_gtotal3 round 3 no-zero,
             94 sy-vline,
             95(10) v_gtotal7 round 3 no-zero,
            105 sy-vline,
            106(10) v_gtotal4 round 3 no-zero,
            116 sy-vline,
            117(10) v_gtotal5 round 3 no-zero,
            127 sy-vline,
            128(10) v_gtotal6 round 3 no-zero,
            138 sy-vline,
            139(10) v_gtotal8 round 3 no-zero,
            150 sy-vline.

endform.                    " display_grand_total_2q
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  write_output_for_3q
*&amp;amp;---------------------------------------------------------------------*
* Display output if third quarter is entered on selection screen
*----------------------------------------------------------------------*
form write_output_for_3q.
  write :  45 sy-vline,
             46 v_cstcenter NO-ZERO ,
             61 sy-vline,
             62(10) v_total1 round 3 no-zero,
             72 sy-vline,
             73(10) v_total2 round 3 no-zero,
             83 sy-vline,
             84(10) v_total7 round 3 no-zero,
             94 sy-vline,
             95(10) v_total3 round 3 no-zero,
             105 sy-vline,
            106(10) v_total4 round 3 no-zero,
            116 sy-vline,
            117(10) v_total5 round 3 no-zero,
            127 sy-vline,
            128(10) v_total6 round 3 no-zero,
            138 sy-vline,
            139(10) v_total8 round 3 no-zero,
            150 sy-vline.

endform.                    " write_output_for_3q
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  write_output_for_2q
*&amp;amp;---------------------------------------------------------------------*
*    Display output if second quarter is entered on selection screen
*----------------------------------------------------------------------*
form write_output_for_2q.
  write :  45 sy-vline,
             46 v_cstcenter NO-ZERO ,
             61 sy-vline,
             62(10) v_total1 round 3 no-zero,
             72 sy-vline,
             73(10) v_total2 round 3 no-zero,
             83 sy-vline,
             84(10) v_total3 round 3 no-zero,
             94 sy-vline,
             95(10) v_total7 round 3 no-zero,
            105 sy-vline,
            106(10) v_total4 round 3 no-zero,
            116 sy-vline,
            117(10) v_total5 round 3 no-zero,
            127 sy-vline,
            128(10) v_total6 round 3 no-zero,
            138 sy-vline,
            139(10) v_total8 round 3 no-zero,
            150 sy-vline.

endform.                    " write_output_for_2q
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  display_cst_element
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  --&amp;gt;  p1        text
*  &amp;lt;--  p2        text
*----------------------------------------------------------------------*
FORM display_cst_element.
data v_lines like sy-index.
describe table s_cstele lines v_lines.

clear: v_cost_element.
if not p_cstgp is initial.
  clear v_cost_element.
elseif s_cstele-high is initial and v_lines le 1.
 v_cost_element = s_cstele-low.
else.
 clear v_cost_element.
endif.


describe table s_cstele lines v_lines.

clear: v_cstcenter.
if not p_cntrgp is initial.
 v_cstcenter = p_cntrgp.
elseif s_cntr-high is initial and v_lines le 1.
 v_cstcenter = s_cntr-low.
else.
 clear v_cstcenter.
endif.


ENDFORM.                    " display_cst_element
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  add_headcount
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  --&amp;gt;  p1        text
*  &amp;lt;--  p2        text
*----------------------------------------------------------------------*
FORM add_headcount.

it_output1[] = it_output[].
refresh it_output.
clear it_output.

loop at it_output1.
clear it_output1-cost_ctr.
move-corresponding it_output1 to it_output.
collect it_output.
endloop.

ENDFORM.                    " add_headcount
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;      Form  calculate_v_cnt
*&amp;amp;---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  --&amp;gt;  p1        text
*  &amp;lt;--  p2        text
*----------------------------------------------------------------------*
FORM calculate_v_cnt.
if p_frprd eq 1.
 v_cnt  = 12.
elseif p_frprd = 4.
 v_cnt = 09.
elseif p_frprd = 7.
 v_cnt = 6.
elseif p_frprd = 10.
 v_cnt = 3.
endif.
ENDFORM.                    " calculate_v_cnt
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Chidanand&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Oct 2008 08:33:53 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/reg-display-data-using-alv/m-p/4626385#M1089718</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-10-14T08:33:53Z</dc:date>
    </item>
    <item>
      <title>Re: Reg:Display data using ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/reg-display-data-using-alv/m-p/4626386#M1089719</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Use Function module REUSE_ALV_GRID_DISPLAY and pass your internal table to it. Also use TOP_OF_PAGE event for getting the page header as you desire.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I presume the data fetching logic you would have already taken care of.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Alternately you can also use method set_table_for_first_display of class CL_GUI_ALV_GRID to display ALV grid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Oct 2008 08:35:27 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/reg-display-data-using-alv/m-p/4626386#M1089719</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-10-14T08:35:27Z</dc:date>
    </item>
    <item>
      <title>Re: Reg:Display data using ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/reg-display-data-using-alv/m-p/4626387#M1089720</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  go throu the following link,it will give brief idea of how ALV works:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;[http://saptechnical.com/Tutorials/ALV/Interactive/demo.htm]&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Oct 2008 08:53:05 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/reg-display-data-using-alv/m-p/4626387#M1089720</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-10-14T08:53:05Z</dc:date>
    </item>
    <item>
      <title>Re: Reg:Display data using ALV</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/reg-display-data-using-alv/m-p/4626388#M1089721</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Pls gothrough with these example programs you will get an idea of doing ALV programs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BALVSD02_GRID&lt;/P&gt;&lt;P&gt;BALVST02_GRID&lt;/P&gt;&lt;P&gt;BALVST03_GRID&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BCALV_GRID_01&lt;/P&gt;&lt;P&gt;BCALV_GRID_02&lt;/P&gt;&lt;P&gt;BCALV_GRID_03&lt;/P&gt;&lt;P&gt;BCALV_GRID_04&lt;/P&gt;&lt;P&gt;BCALV_GRID_05&lt;/P&gt;&lt;P&gt;BCALV_GRID_06&lt;/P&gt;&lt;P&gt;BCALV_GRID_07&lt;/P&gt;&lt;P&gt;BCALV_GRID_08&lt;/P&gt;&lt;P&gt;BCALV_GRID_09&lt;/P&gt;&lt;P&gt;BCALV_GRID_10&lt;/P&gt;&lt;P&gt;BCALV_GRID_11&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;++++++++++++++&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BALVBT01&lt;/P&gt;&lt;P&gt;BALVBT02&lt;/P&gt;&lt;P&gt;BALVHD01&lt;/P&gt;&lt;P&gt;BALVHD01_GROUP&lt;/P&gt;&lt;P&gt;BALVHM10&lt;/P&gt;&lt;P&gt;BALVHM12&lt;/P&gt;&lt;P&gt;BALVHT01&lt;/P&gt;&lt;P&gt;BALVSD01&lt;/P&gt;&lt;P&gt;BALVSD03&lt;/P&gt;&lt;P&gt;BALVSD04&lt;/P&gt;&lt;P&gt;BALVSD11&lt;/P&gt;&lt;P&gt;BALVSM03&lt;/P&gt;&lt;P&gt;BALVSM04&lt;/P&gt;&lt;P&gt;BALVSM11&lt;/P&gt;&lt;P&gt;BALVST01&lt;/P&gt;&lt;P&gt;BALVST02&lt;/P&gt;&lt;P&gt;BALVST02_GRID&lt;/P&gt;&lt;P&gt;BALVST03_GRID&lt;/P&gt;&lt;P&gt;BCALV_EDIT_06&lt;/P&gt;&lt;P&gt;BCALV_EDIT_07&lt;/P&gt;&lt;P&gt;BCALV_GRID_02&lt;/P&gt;&lt;P&gt;BCALV_GRID_03&lt;/P&gt;&lt;P&gt;BCALV_GRID_10&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Ramesh.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Oct 2008 09:48:01 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/reg-display-data-using-alv/m-p/4626388#M1089721</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-10-14T09:48:01Z</dc:date>
    </item>
  </channel>
</rss>

