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

alv grid display

0 Likes
917

Hi All,

I am working on ALV reports.My requirement is like I want to diplay the subtotals .Instead of displaying text in the subtotals row i need to diplay the field values in that row .

field1 field2 field3

0001 usd 10

0001 usd 20

0001 usd 30

0001 usd 60 subtotal row(which i need to display)

Thanks&regards

sambasiva rao

Hi All,

I am working on ALV reports.My requirement is like I want to diplay the subtotals .Instead of displaying text in the subtotals row i need to diplay the field values in that row .

field1 field2 field3

0001 usd 10

0001 usd 20

0001 usd 30

0001 usd 60 subtotal row(which i need to display)

Thanks&regards

sambasiva rao

5 REPLIES 5
Read only

Former Member
0 Likes
853

Hi

Build the internal Table I_SORT with the required fields and pass that ITAB to the fun module

see the sample report

report ZRGRIRNA no standard page heading

line-count 65

line-size 255

message-id mm.

----


  • GR IR Detail Report *

----


  • Description : The output has to be displayed

  • in the ALV Grid format with the Selection *

  • screen appearing on the output. In The Output *

  • Subtotals for Vendor, Plant, Period, Material,*

  • Valuation Class, Purchase Order,Cost Center, *

  • Cost Element and Receipt Date are displayed *

  • after sorting the data by same fields. *

----


  • Declaration for Tables

----


tables: t001, " Company Codes

t001w, " Plants/Branches

lfa1, " Vendor Master

ska1, " GL Account Master

mara, " Material Master

mbew, " Material Valuation

ekko, " PO Header Data

cska, " Cost Elements

csks, " Cost Centers

bsis, " GL Accounts: Open Items Data

bkpf. " Accounting Doc: Header Data

----


  • Type-pools

----


  • Type pools for ALV display

type-pools : slis.

----


  • Global variables

----


data: g_repid like sy-repid,

g_exit type c,

g_events type slis_t_event,

g_list_top_of_page type slis_t_listheader,

g_exit_caused_by_caller,

g_exit_caused_by_user type slis_exit_by_user,

g_top_of_page type slis_formname value 'TOP_OF_PAGE',

g_variant like disvariant,

g_save.

----


  • Declaration for Constants

----


constants : c_x type c value 'X', " Flag

c_c type c value 'C', " Flag

c_l type c value 'L', " Flag

c_a type c value 'A', " Line Type

c_h type c value 'H', " Dr/Cr

c_s type c value 'S', " Line Type

c_mkpf(4) type c value 'MKPF'. " Table

----


  • Declaration of Internal Tables

----


  • Internal Table for BSIS Table data

data: begin of i_bsis occurs 0,

bukrs like bsis-bukrs, " Company Code

hkont like bsis-hkont, " GR IR Account

gjahr like bsis-gjahr, " Fiscal Year

belnr like bsis-belnr, " Acc Document

buzei like bsis-buzei, " Item No

budat like bsis-budat, " Receipt Date(Posting)

monat like bsis-monat, " Period

end of i_bsis.

  • Internal Table for BSEG Table data

data: begin of i_bseg occurs 0,

bukrs like bsis-bukrs, " Company Code

belnr like bsis-belnr, " Acc Document

buzei like bsis-buzei, " Item No

gjahr like bsis-gjahr, " Fiscal Year

shkzg like bseg-shkzg, " Dr/Cr Indicator

lifnr like bseg-lifnr, " Vendor Code

matnr like bseg-matnr, " Material No

ebeln like bseg-ebeln, " Purchase Order

ebelp like bseg-ebelp, " PO Item

werks like bseg-werks, " Plant

menge like bseg-menge, " PO Quantity

meins like bseg-meins, " UOM

dmbtr like bseg-dmbtr, " Amount in Local Currency

wrbtr like bseg-wrbtr, " Amount in Trans.Currency

end of i_bseg.

  • Internal Table for BKPF Table data

data: begin of i_bkpf occurs 0,

bukrs like bkpf-bukrs, " Company Code

belnr like bkpf-belnr, " Acc Document

gjahr like bkpf-gjahr, " Fiscal Year

waers like bkpf-waers, " Trans. Currency

awkey like bkpf-awkey, " Object Key

awtyp like bkpf-awtyp, " Reference Procedure

end of i_bkpf.

  • Internal Table for MSEG Table data

data: begin of i_mseg occurs 0,

mblnr like mseg-mblnr, " Material Document

mjahr like mseg-mjahr, " Fiscal Year

bwart like mseg-bwart, " Movement Type

matnr like mseg-matnr, " Material No

menge like mseg-menge, " PO Quantity

meins like mseg-meins, " UOM

end of i_mseg.

  • Internal Table for MBEW Table data

data: begin of i_mbew occurs 0,

matnr like mbew-matnr, " Material No

werks like mbew-bwkey, " Plant

bklas like mbew-bklas, " Valuation Class

end of i_mbew.

  • Internal Table for EKPO Table data

data: begin of i_ekpo occurs 0,

ebeln like ekpo-ebeln, " Purchase Order

ebelp like ekpo-ebelp, " PO Item

matnr like ekpo-matnr, " Material No

txz01 like ekpo-txz01, " Material Text

end of i_ekpo.

  • Internal Table for EKKN Table data

data: begin of i_ekkn occurs 0,

ebeln like ekkn-ebeln, " Purchase Order

ebelp like ekkn-ebelp, " PO Item

kostl like ekkn-kostl, " Cost Center

sakto like ekkn-sakto, " Cost Element

end of i_ekkn.

  • Internal Table for LFA1 Table data

data: begin of i_lfa1 occurs 0,

lifnr like lfa1-lifnr, " Vendor

name1 like lfa1-name1, " Name

end of i_lfa1.

  • Declaration of Output Internal Table

data: begin of i_final occurs 0,

lifnr like lfa1-lifnr, " Vendor

werks like bseg-werks, " Plant

monat like bsis-monat, " Period

matnr like mara-matnr, " Material Number

bklas like mbew-bklas, " Val Class

ebeln like bseg-ebeln, " PO

kostl like ekkn-kostl, " Cost Center

sakto like ekkn-sakto, " Cost Element

budat like bsis-budat, " Rec. Date

name1 like lfa1-name1, " Vendor Name

belnr like bsis-belnr, " FI Document

bwart like mseg-bwart, " Movement Type

txz01 like ekpo-txz01, " Material Text

menge like bseg-menge, " Quantity

meins like bseg-meins, " UOM

dmbtr like bseg-dmbtr, " Local Amount

wrbtr like bseg-wrbtr, " Tran.Amount

waers like bkpf-waers, " Tran.Currency

status type c, " Material Status

end of i_final.

  • Internal table to hold field catgory data

data: i_fldcat type slis_t_fieldcat_alv. " Table - field catgory

  • Internal table to hold Sort/Subtotals criteria data

data: i_sort type slis_t_sortinfo_alv. " Table - sort/Subtotals

----


  • Structure

----


data: x_layout type slis_layout_alv, " Structure-layout

x_fldcat like line of i_fldcat, " Structure-field catagory

x_sort like line of i_sort. " Structure-Sort/Subtotals

----


  • Selection screen

----


selection-screen : begin of block b1 with frame title text-000.

parameters:

p_bukrs like t001-bukrs obligatory, " Company Code

p_grira like ska1-saknr default '0241101000' obligatory. " Account

select-options:

s_budat for bkpf-budat, " Posting Date

s_werks for t001w-werks, " Plant

s_lifnr for lfa1-lifnr, " Vendor

s_matnr for mara-matnr, " Material Number

s_kostl for csks-kostl, " Cost Center

s_kstar for cska-kstar, " Cost Element

s_ebeln for ekko-ebeln, " Purchase Order

s_monat for bsis-monat. " Period

selection-screen skip.

parameters:

p_incmt as checkbox default 'X',

p_incnm as checkbox default 'X'.

selection-screen end of block b1.

----


  • Initialization

----


initialization.

g_repid = sy-repid.

perform layout_init using x_layout.

perform eventtab_build using g_events[].

g_variant-report = g_repid.

g_save = 'A'.

----


  • At selection screen

----


at selection-screen.

  • Validation of Selection Screen Fields

perform validate_screen.

----


  • Start of selection

----


start-of-selection.

  • Read Data from Database Tables

perform read_data.

----


  • End of selection

----


end-of-selection.

  • Build layout report layout.

perform populate_layout_stucture.

  • Perform build_field_catalog and Sort Table

perform build_field_catalog.

perform build_sort_totals.

  • List Header for Top-Of-Page

perform comment_build using g_list_top_of_page[].

  • Call list viewer function module

perform call_list_viewer .

****************Form - Routines**************************************

----


  • Form : layout_init

  • Description : Form to Build layout for list display

----


form layout_init using rs_layout type slis_layout_alv.

rs_layout-detail_popup = c_x.

endform.

----


  • Form : Eventtab_build

  • Description : Registration of events to happen during list display

----


form eventtab_build using rt_events type slis_t_event.

  • Registration of events to happen during list display

data: ls_event type slis_alv_event.

call function 'REUSE_ALV_EVENTS_GET'

exporting

i_list_type = 0

importing

et_events = rt_events.

read table rt_events with key name = slis_ev_top_of_page

into ls_event.

if sy-subrc = 0.

move g_top_of_page to ls_event-form.

append ls_event to rt_events.

endif.

endform. "eventtab_build

----


  • Form : top_of_page

----


*

form top_of_page.

call function 'REUSE_ALV_COMMENTARY_WRITE'

exporting

  • I_LOGO = 'ENJOYSAP_LOGO'

it_list_commentary = g_list_top_of_page.

endform.

----


  • Form validate_screen

----


  • Validation of Selection Screen fields

----


form validate_screen.

  • Validation of Company Code

clear t001.

if not p_bukrs is initial.

select single bukrs

into t001-bukrs

from t001

where bukrs eq p_bukrs.

if sy-subrc <> 0.

message e899 with 'Enter Valid Company Code'(012).

endif.

endif.

  • Validation of GL Account (GR/IR)

clear ska1.

if not p_grira is initial.

select saknr

into ska1-saknr

from ska1

up to 1 rows

where saknr eq p_grira.

endselect.

if sy-subrc <> 0.

message e899 with 'Enter Valid GR/IR Account'(013).

endif.

endif.

  • Validation of Vendor Code

clear lfa1.

if not s_lifnr[] is initial.

select single lifnr

into lfa1-lifnr

from lfa1

where lifnr in s_lifnr.

if sy-subrc <> 0.

message e899 with 'Enter Valid Vendor'(001).

endif.

endif.

  • Validation of Plant Code

clear t001w.

if not s_werks[] is initial.

select single werks

into t001w-werks

from t001w

where werks in s_werks.

if sy-subrc <> 0.

message e899 with 'Enter Valid Plant'(014).

endif.

endif.

  • Validation of Material Code

clear mara.

if not s_matnr[] is initial.

select single matnr

into mara-matnr

from mara

where matnr in s_matnr.

if sy-subrc <> 0.

message e899 with 'Enter Valid Material'(015).

endif.

endif.

  • Validation of Purchase Order

clear ekko.

if not s_ebeln[] is initial.

select single ebeln

into ekko-ebeln

from ekko

where ebeln in s_ebeln.

if sy-subrc <> 0.

message e899 with 'Enter Valid Purchase Order'(016).

endif.

endif.

  • Validation of Cost Center

clear csks.

if not s_kostl[] is initial.

select kostl

into csks-kostl

from csks

up to 1 rows

where kostl in s_kostl.

endselect.

if sy-subrc <> 0.

message e899 with 'Enter Valid Cost Center'(017).

endif.

endif.

  • Validation of Cost Element

clear cska.

if not s_kstar[] is initial.

select kstar

into cska-kstar

from cska

up to 1 rows

where kstar in s_kstar.

endselect.

if sy-subrc <> 0.

message e899 with 'Enter Valid Cost Element'(018).

endif.

endif.

endform. "validate_screen

&----


*& Form read_data

&----


  • Read the Data from the database Tables

----


form read_data.

  • Get the Accounting Documents for the GR/IR Account Entered on

  • Selection Screen

clear i_bsis.

refresh i_bsis.

select bukrs " Company Code

hkont " GR IR Account

gjahr " Fiscal Year

belnr " Acc Document

buzei " Item No

budat " Receipt Date(Posting)

monat " Period

into table i_bsis

from bsis

where bukrs = p_bukrs

and hkont = p_grira

and budat in s_budat

and monat in s_monat .

if sy-subrc <> 0.

message i899 with 'No data found'(043).

g_exit = c_x.

stop.

endif.

sort i_bsis by bukrs hkont gjahr belnr buzei.

  • Get the Vendor,PO,Material,Qty details from BSEG Table

if not i_bsis[] is initial.

clear i_bseg.

refresh i_bseg.

select bukrs " Company Code

belnr " Acc Document

buzei " Item No

gjahr " Fiscal Year

shkzg " Dr/Cr Indicator

lifnr " Vendor Code

matnr " Material No

ebeln " Purchase Order

ebelp " PO Item

werks " Plant

menge " PO Quantity

meins " UOM

dmbtr " Amount in Local Currency

wrbtr " Amount in Trans.Currency

into table i_bseg

from bseg

for all entries in i_bsis

where bukrs = p_bukrs

and belnr = i_bsis-belnr

and gjahr = i_bsis-gjahr

and buzei = i_bsis-buzei

and lifnr in s_lifnr

and werks in s_werks

and matnr in s_matnr

and ebeln in s_ebeln.

sort i_bseg by bukrs belnr buzei gjahr.

  • Select the Trans.Currency from BKPF Table

clear i_bkpf.

refresh i_bkpf.

select bukrs " Company Code

belnr " Acc Document

gjahr " Fiscal Year

waers " Trans. Currency

awkey " Object Key

awtyp " Reference Procedure

into table i_bkpf

from bkpf

for all entries in i_bsis

where bukrs = p_bukrs

and belnr = i_bsis-belnr

and gjahr = i_bsis-gjahr.

endif.

sort i_bkpf by bukrs belnr gjahr.

  • Get the Quantity and UOM of Material from MSEG Table

if not i_bkpf[] is initial.

clear i_mseg.

refresh i_mseg.

select mblnr " Material Document

mjahr " Fiscal Year

bwart " Movement Type

matnr " Material No

menge " PO Quantity

meins " UOM

into table i_mseg

from mseg

for all entries in i_bkpf

where mblnr = i_bkpf-awkey(10).

endif.

sort i_mseg by mblnr mjahr.

  • Get the Material And Description from EKPO Table

if not i_bseg[] is initial.

clear i_ekpo.

refresh i_ekpo.

select ebeln " Purchase Order

ebelp " PO Item

matnr " Material No

txz01 " Material Text

into table i_ekpo

from ekpo

for all entries in i_bseg

where ebeln = i_bseg-ebeln

and ebelp = i_bseg-ebelp.

sort i_ekpo by ebeln ebelp.

  • Get the Valuation Class from MBEW Table

clear i_mbew.

refresh i_mbew.

select matnr " Material No

bwkey " Plant

bklas " Valuation Class

into table i_mbew

from mbew

for all entries in i_bseg

where matnr = i_bseg-matnr

and bwkey = i_bseg-werks.

sort i_mbew by matnr werks.

  • Get the Cost Center and Cost Element of the PO from EKKN Table

clear i_ekkn.

refresh i_ekkn.

select ebeln " Purchase Order

ebelp " PO Item

kostl " Cost Center

sakto " Cost Element

into table i_ekkn

from ekkn

for all entries in i_bseg

where ebeln = i_bseg-ebeln

and ebelp = i_bseg-ebelp

and kostl in s_kostl

and sakto in s_kstar.

sort i_ekkn by ebeln ebelp.

  • Get the Vendor Name

clear i_lfa1.

refresh i_lfa1.

select lifnr " Vendor

name1 " Name

into table i_lfa1

from lfa1

for all entries in i_bseg

where lifnr = i_bseg-lifnr.

endif.

sort i_lfa1 by lifnr.

  • Move the data to Final Output Internal Table

loop at i_bsis.

i_final-belnr = i_bsis-belnr. " FI Document

i_final-monat = i_bsis-monat. " Period

i_final-budat = i_bsis-budat. " Rec. Date

  • Read the Transaction Currency from BKPF Internal Table

read table i_bkpf with key bukrs = i_bsis-bukrs

belnr = i_bsis-belnr

gjahr = i_bsis-gjahr

binary search.

if sy-subrc = 0.

i_final-waers = i_bkpf-waers. " Tran.Currency

  • Read the Movement Type for all Material Related

  • Documents from MSEG Internal Table

if i_bkpf-awtyp = c_mkpf.

read table i_mseg with key mblnr = i_bkpf-awkey(10)

mjahr = i_bkpf-awkey+10(4).

if sy-subrc = 0.

i_final-bwart = i_mseg-bwart. " Movement Type

endif.

endif.

endif.

  • Read Vendor, Plant, PO Document, Local And Trans.Amounts

  • from BSEG Internal Table

read table i_bseg with key bukrs = i_bsis-bukrs

belnr = i_bsis-belnr

gjahr = i_bsis-gjahr

buzei = i_bsis-buzei

binary search.

if sy-subrc = 0.

i_final-lifnr = i_bseg-lifnr. " Vendor

i_final-werks = i_bseg-werks. " Plant

i_final-ebeln = i_bseg-ebeln. " PO

i_final-dmbtr = i_bseg-dmbtr. " Local Amount

i_final-wrbtr = i_bseg-wrbtr. " Tran.Amount

i_final-menge = i_bseg-menge. " Quantity

i_final-meins = i_bseg-meins. " UOM

  • For Credit Indicator(SHKZG = H) amounts should be (-)ve

if i_bseg-shkzg = c_h.

i_final-dmbtr = i_final-dmbtr * -1.

i_final-wrbtr = i_final-wrbtr * -1.

i_final-menge = i_final-menge * -1.

endif.

  • Read the Material and its Description from EKPO Internal Table

read table i_ekpo with key ebeln = i_bseg-ebeln

ebelp = i_bseg-ebelp

matnr = i_bseg-matnr

binary search.

if sy-subrc = 0.

i_final-matnr = i_ekpo-matnr. " Material Number

i_final-txz01 = i_ekpo-txz01. " Material Text

  • Populate the Material Status depending on the Input Checkbox

  • On Selection Screen

if not i_ekpo-matnr is initial.

i_final-status = c_x.

endif.

endif.

  • Read the PO related Cost Element and Cost Centers

  • from EKKN Internal Table

read table i_ekkn with key ebeln = i_bseg-ebeln

ebelp = i_bseg-ebelp

binary search.

if sy-subrc = 0.

i_final-kostl = i_ekkn-kostl. " Cost Center

i_final-sakto = i_ekkn-sakto. " Cost Element

endif.

  • Read the Valuation Class from MBEW Internal Table

read table i_mbew with key matnr = i_bseg-matnr

werks = i_bseg-werks

binary search.

if sy-subrc = 0.

i_final-bklas = i_mbew-bklas. " Val Class

endif.

  • Read the Vendor Name from LFA1 Internal Table

read table i_lfa1 with key lifnr = i_bseg-lifnr

binary search.

if sy-subrc = 0.

i_final-name1 = i_lfa1-name1. " Vendor Name

endif.

endif.

append i_final.

clear i_final.

endloop.

sort i_final by lifnr werks monat matnr.

  • Depending on the check Box Selected display the data

if p_incmt = c_x and p_incnm ne c_x.

delete i_final where matnr eq space.

elseif p_incnm = c_x and p_incmt ne c_x.

delete i_final where matnr ne space.

endif.

endform. "Read Data

----


  • Form : populate_layout_stucture

  • Description : Populating the layout structure

----


form populate_layout_stucture.

clear x_layout .

  • Layout properties

x_layout-zebra = c_x.

x_layout-detail_popup = c_x.

x_layout-detail_initial_lines = c_x.

x_layout-colwidth_optimize = c_x.

endform. " populate_layout_stucture

----


  • Form : build_field_catalog

  • Description : Building the field catalog data

----


form build_field_catalog.

call function 'REUSE_ALV_FIELDCATALOG_MERGE'

exporting

i_program_name = g_repid

i_internal_tabname = 'I_FINAL'

i_inclname = g_repid

changing

ct_fieldcat = i_fldcat

exceptions

inconsistent_interface = 1

program_error = 2

others = 3.

if sy-subrc <> 0.

message id sy-msgid type sy-msgty number sy-msgno

with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

endif.

  • Getting the Header text for the coloums

loop at i_fldcat into x_fldcat where fieldname = 'LIFNR' or

fieldname = 'NAME1' or

fieldname = 'WERKS' or

fieldname = 'MONAT' or

fieldname = 'MATNR' or

fieldname = 'BKLAS' or

fieldname = 'EBELN' or

fieldname = 'KOSTL' or

fieldname = 'SAKTO' or

fieldname = 'BUDAT' or

fieldname = 'BELNR' or

fieldname = 'BWART' or

fieldname = 'TXZ01' or

fieldname = 'MENGE' or

fieldname = 'MEINS' or

fieldname = 'DMBTR' or

fieldname = 'WRBTR' or

fieldname = 'WAERS' or

fieldname = 'STATUS'.

if x_fldcat-fieldname = 'LIFNR'.

x_fldcat-seltext_l = 'Vendor'(003).

x_fldcat-seltext_m = 'Vendor'(003).

x_fldcat-seltext_s = 'Vendor'(003).

x_fldcat-reptext_ddic = 'Vendor'(003).

x_fldcat-inttype = c_c.

endif.

if x_fldcat-fieldname = 'NAME1'.

x_fldcat-seltext_l = 'Vendor Name'(002).

x_fldcat-seltext_m = 'Vendor Name'(002).

x_fldcat-seltext_s = 'Vendor Name'(002).

x_fldcat-reptext_ddic = 'Vendor Name'(002).

x_fldcat-inttype = c_c.

endif.

if x_fldcat-fieldname = 'WERKS'.

x_fldcat-seltext_l = 'Plant'(010).

x_fldcat-seltext_m = 'Plant'(010).

x_fldcat-seltext_s = 'Plant'(010).

x_fldcat-reptext_ddic = 'Plant'(010).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'MONAT'.

x_fldcat-seltext_l = 'Period'(011).

x_fldcat-seltext_m = 'Period'(011).

x_fldcat-seltext_s = 'Period'(011).

x_fldcat-reptext_ddic = 'Period'(011).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'MATNR'.

x_fldcat-seltext_l = 'Material'(004).

x_fldcat-seltext_m = 'Material'(004).

x_fldcat-seltext_s = 'Material'(004).

x_fldcat-reptext_ddic = 'Material'(004).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'BKLAS'.

x_fldcat-seltext_l = 'Valuation Class'(009).

x_fldcat-seltext_m = 'Valuation Class'(009).

x_fldcat-seltext_s = 'Valuation Class'(009).

x_fldcat-reptext_ddic = 'Valuation Class'(009).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'EBELN'.

x_fldcat-seltext_l = 'Purchase Order'(005).

x_fldcat-seltext_m = 'Purchase Order'(005).

x_fldcat-seltext_s = 'Purchase Order'(005).

x_fldcat-reptext_ddic = 'Purchase Order'(005).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'KOSTL'.

x_fldcat-seltext_l = 'Cost Center'(006).

x_fldcat-seltext_m = 'Cost Center'(006).

x_fldcat-seltext_s = 'Cost Center'(006).

x_fldcat-reptext_ddic = 'Cost Center'(006).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'SAKTO'.

x_fldcat-seltext_l = 'Cost Element'(007).

x_fldcat-seltext_m = 'Cost Element'(007).

x_fldcat-seltext_s = 'Cost Element'(007).

x_fldcat-reptext_ddic = 'Cost Element'(007).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'BUDAT'.

x_fldcat-seltext_l = 'Receipt Date'(008).

x_fldcat-seltext_m = 'Receipt Date'(008).

x_fldcat-seltext_s = 'Receipt Date'(008).

x_fldcat-reptext_ddic = 'Receipt Date'(008).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'BELNR'.

x_fldcat-seltext_l = 'Acc.Document'(100).

x_fldcat-seltext_m = 'Acc.Document'(100).

x_fldcat-seltext_s = 'Acc.Document'(100).

x_fldcat-reptext_ddic = 'Acc.Document'(100).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'BWART'.

x_fldcat-seltext_l = 'Movement Type'(101).

x_fldcat-seltext_m = 'Movement Type'(101).

x_fldcat-seltext_s = 'Movement Type'(101).

x_fldcat-reptext_ddic = 'Movement Type'(101).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'TXZ01'.

x_fldcat-seltext_l = 'Material Text'(102).

x_fldcat-seltext_m = 'Material Text'(102).

x_fldcat-seltext_s = 'Material Text'(102).

x_fldcat-reptext_ddic = 'Material Text'(102).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'MENGE'.

x_fldcat-seltext_l = 'Quantity'(103).

x_fldcat-seltext_m = 'Quantity'(103).

x_fldcat-seltext_s = 'Quantity'(103).

x_fldcat-reptext_ddic = 'Quantity'(103).

x_fldcat-ddictxt = c_l.

x_fldcat-do_sum = c_x.

endif.

if x_fldcat-fieldname = 'MEINS'.

x_fldcat-seltext_l = 'UOM'(104).

x_fldcat-seltext_m = 'UOM'(104).

x_fldcat-seltext_s = 'UOM'(104).

x_fldcat-reptext_ddic = 'UOM'(104).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'DMBTR'.

x_fldcat-seltext_l = 'Amount in Local Curr'(105).

x_fldcat-seltext_m = 'Amount in Local Curr'(105).

x_fldcat-seltext_s = 'Amount in Local Curr'(105).

x_fldcat-reptext_ddic = 'Amount in Local Curr'(105).

x_fldcat-ddictxt = c_l.

x_fldcat-do_sum = c_x.

endif.

if x_fldcat-fieldname = 'WRBTR'.

x_fldcat-seltext_l = 'Amount in Trans.Curr'(106).

x_fldcat-seltext_m = 'Amount in Trans.Curr'(106).

x_fldcat-seltext_s = 'Amount in Trans.Curr'(106).

x_fldcat-reptext_ddic = 'Amount in Trans.Curr'(106).

x_fldcat-ddictxt = c_l.

x_fldcat-do_sum = c_x.

endif.

if x_fldcat-fieldname = 'WAERS'.

x_fldcat-seltext_l = 'Trans.Currency'(107).

x_fldcat-seltext_m = 'Trans.Currency'(107).

x_fldcat-seltext_s = 'Trans.Currency'(107).

x_fldcat-reptext_ddic = 'Trans.Currency'(107).

x_fldcat-ddictxt = c_l.

endif.

if x_fldcat-fieldname = 'STATUS'.

x_fldcat-seltext_l = 'Material Status'(019).

x_fldcat-seltext_m = 'Material Status'(019).

x_fldcat-seltext_s = 'Material Status'(019).

x_fldcat-reptext_ddic = 'Material Status'(019).

x_fldcat-ddictxt = c_l.

endif.

modify i_fldcat from x_fldcat index sy-tabix.

endloop.

endform. " build_field_catalog

----


  • Form : build_sort_totals

  • Description : Building the Criteria for Sort/Subtotals

----


form build_sort_totals.

x_sort-fieldname = 'LIFNR'.

x_sort-tabname = 'I_FINAL'.

x_sort-spos = 1.

x_sort-up = c_x.

x_sort-subtot = c_x.

append x_sort to i_sort.

clear x_sort.

x_sort-fieldname = 'WERKS'.

x_sort-tabname = 'I_FINAL'.

x_sort-spos = 2.

x_sort-up = c_x.

x_sort-subtot = c_x.

append x_sort to i_sort.

clear x_sort.

x_sort-fieldname = 'MONAT'.

x_sort-tabname = 'I_FINAL'.

x_sort-spos = 3.

x_sort-up = c_x.

x_sort-subtot = c_x.

append x_sort to i_sort.

clear x_sort.

x_sort-fieldname = 'MATNR'.

x_sort-tabname = 'I_FINAL'.

x_sort-spos = 4.

x_sort-up = c_x.

x_sort-subtot = c_x.

append x_sort to i_sort.

clear x_sort.

x_sort-fieldname = 'BKLAS'.

x_sort-tabname = 'I_FINAL'.

x_sort-spos = 5.

x_sort-up = c_x.

x_sort-subtot = c_x.

append x_sort to i_sort.

clear x_sort.

x_sort-fieldname = 'EBELN'.

x_sort-tabname = 'I_FINAL'.

x_sort-spos = 6.

x_sort-up = c_x.

x_sort-subtot = c_x.

append x_sort to i_sort.

clear x_sort.

x_sort-fieldname = 'KOSTL'.

x_sort-tabname = 'I_FINAL'.

x_sort-spos = 7.

x_sort-up = c_x.

x_sort-subtot = c_x.

append x_sort to i_sort.

clear x_sort.

x_sort-fieldname = 'SAKTO'.

x_sort-tabname = 'I_FINAL'.

x_sort-spos = 8.

x_sort-up = c_x.

x_sort-subtot = c_x.

append x_sort to i_sort.

clear x_sort.

x_sort-fieldname = 'BUDAT'.

x_sort-tabname = 'I_FINAL'.

x_sort-spos = 9.

x_sort-up = c_x.

x_sort-subtot = c_x.

append x_sort to i_sort.

clear x_sort.

endform. " build_sort_totals

----


  • Form : comment_build

  • Description : This form is used to display the Report Header(ALV)

----


*

form comment_build using lt_top_of_page type

slis_t_listheader.

data: l_line type slis_listheader,

l_heading1 like rs38m-repti,

l_date(10), l_time(8).

clear l_line.

l_heading1 = 'GR/IR DETAIL REPORT'(021).

g_repid = sy-repid.

write sy-uzeit to l_time.

write sy-datum to l_date.

l_line-typ = c_h.

move l_heading1 to l_line-info.

append l_line to lt_top_of_page.

clear l_line.

l_line-typ = c_s.

concatenate 'System:'(023) sy-sysid

'Date:'(024) l_date

' Time:'(025)

l_time into l_line-info.

append l_line to lt_top_of_page.

concatenate 'Report:'(026) g_repid

' User:'(027) sy-uname into

l_line-info.

append l_line to lt_top_of_page.

l_line-typ = c_a.

move 'SELECTION CRITERIA:'(028) to l_line-info.

append l_line to lt_top_of_page.

concatenate ' Company Code : '(029)

p_bukrs into l_line-info.

append l_line to lt_top_of_page.

concatenate ' GR/IR Account: '(030)

p_grira into l_line-info.

append l_line to lt_top_of_page.

concatenate ' Posting Date : '(032) s_budat-low

' To: '(031) s_budat-high into l_line-info.

append l_line to lt_top_of_page.

concatenate ' Plant : '(033) s_werks-low

' To: '(031) s_werks-high into l_line-info.

append l_line to lt_top_of_page.

concatenate ' Vendor: '(034) s_lifnr-low

' To: '(031) s_lifnr-high into l_line-info.

append l_line to lt_top_of_page.

concatenate ' Material: '(035) s_matnr-low

' To: '(031) s_matnr-high into l_line-info.

append l_line to lt_top_of_page.

concatenate ' Cost Center : '(036) s_kostl-low

' To: '(031) s_kostl-high into l_line-info.

append l_line to lt_top_of_page.

concatenate ' Cost Element: '(037) s_kstar-low

' To: '(031) s_kstar-high into l_line-info.

append l_line to lt_top_of_page.

concatenate ' Purchase Order: '(038) s_ebeln-low

' To: '(031) s_ebeln-high into l_line-info.

append l_line to lt_top_of_page.

concatenate ' Period : '(039) s_monat-low

' To: '(031) s_monat-high into l_line-info.

append l_line to lt_top_of_page.

concatenate ' Include Material Items: '(040)

p_incmt into l_line-info.

append l_line to lt_top_of_page.

concatenate ' Include Non-Material Items: '(041)

p_incnm into l_line-info.

append l_line to lt_top_of_page.

endform.

----


  • Form : call_list_viewer

  • Description : This form is used to display the grid through ALV

----


form call_list_viewer.

call function 'REUSE_ALV_GRID_DISPLAY'

exporting

i_callback_program = g_repid

is_layout = x_layout

it_fieldcat = i_fldcat[]

i_default = c_x

it_sort = i_sort[]

i_save = g_save

is_variant = g_variant

it_events = g_events[]

importing

e_exit_caused_by_caller = g_exit_caused_by_caller

es_exit_caused_by_user = g_exit_caused_by_user

tables

t_outtab = i_final

exceptions

program_error = 1

others = 2.

if sy-subrc <> 0.

write: / 'Problem in calling the ALV report'(042).

endif.

endform. " call_list_viewer

Reward points for useful Answers

Regards

Anji

Read only

Former Member
0 Likes
853

Hello,

For this u can try like this.


First declare a field ur final table.
LINECOLOR(4) TYPE C,

  CLEAR T_MARD.
* 004 vsm1kor 07.05.07 - sn
  DATA: LV_MARD LIKE T_MARD.
  DATA: WA_MARD LIKE T_MARD.
  DATA: BEGIN OF L_WA_MARD,
*          INCLUDE STRUCTURE T_MARD.
        MATNR TYPE MARD-MATNR,
        MAKTX LIKE MAKT-MAKTX,
        MTART LIKE MARA-MTART,
        WERKS TYPE MARD-WERKS,
        LGORT TYPE MARD-LGORT,
        LABST TYPE MARD-LABST,
        MSTAE LIKE MARA-MSTAE,
        MMSTA LIKE MARC-MMSTA,
        SBDKZ LIKE MARC-SBDKZ,
        DISMM LIKE MARC-DISMM,
        SCHGT LIKE MARC-SCHGT,
        PLIFZ LIKE MARC-PLIFZ,
        MINBE LIKE MARC-MINBE,
        EISBE LIKE MARC-EISBE,
        BSTMI LIKE MARC-BSTMI,
        PREIS LIKE Z48M_VERBRA-PREIS,
        WAERS LIKE T001-WAERS,
        PEINH LIKE MBEW-PEINH,
        VJKUM(16),
        VMENGVJ LIKE Z48M_VERBRA-VMENGVJ, "like mseg-menge,
        RWVJA LIKE Z48M_VERBRA-RWVJA, "(3) type n,
        BMENGVJ LIKE Z48M_VERBRA-BMENGVJ, "like mseg-menge,
        WMENGVJ LIKE Z48M_VERBRA-WMENGVJ, "like mseg-menge,
        LBKUM(16),
        VMENG LIKE Z48M_VERBRA-VMENG, "like mseg-menge,
        RWLFJ LIKE Z48M_VERBRA-RWLFJ, "(3) type n,
        BMENG LIKE Z48M_VERBRA-BMENG, "like mseg-menge,
        WMENG LIKE Z48M_VERBRA-WMENG, "like mseg-menge,
        BAMNG LIKE Z48M_VERBRA-BAMNG, "like mseg-menge,
        MEINS LIKE MSEG-MEINS,
        LINECOLOR(4) TYPE C,
        END OF L_WA_MARD.
  DATA: LT_MARD LIKE L_WA_MARD OCCURS 0 WITH HEADER LINE.
  DATA: L_VJKUM LIKE MBEW-VJKUM.
  DATA: L_LBKUM LIKE MBEW-LBKUM.
  DATA: L_RWVJA LIKE Z48M_VERBRA-VMENG.
  DATA: L_RWLFJ LIKE Z48M_VERBRA-VMENG.
  CLEAR: LT_MARD.
  REFRESH: LT_MARD.

  LOOP AT T_MARD.
    MOVE-CORRESPONDING T_MARD TO LT_MARD.
    IF P_SUM = 'X'.
      LT_MARD-LBKUM = SPACE.
      LT_MARD-VJKUM = SPACE.
      LT_MARD-RWVJA = SPACE.
      LT_MARD-RWLFJ = SPACE.
      LT_MARD-LBKUM = T_MARD-LABST.
    ELSE.
      LT_MARD-VJKUM = SPACE.
      LT_MARD-RWVJA = SPACE.
      LT_MARD-RWLFJ = SPACE.
      LT_MARD-LBKUM = T_MARD-LABST.
    ENDIF.
    APPEND LT_MARD.
    CLEAR LT_MARD.
  ENDLOOP.

  IF P_SUM = 'X'.
    SORT LT_MARD BY MATNR.
    SORT T_MARD BY MATNR.

    LOOP AT T_MARD INTO WA_MARD.
     CLEAR: L_VJKUM,L_LBKUM,L_RWVJA,L_RWLFJ,WA_MARD-RWLFJ,WA_MARD-RWVJA.
      SELECT SINGLE VJKUM LBKUM
        INTO (L_VJKUM,L_LBKUM)
        FROM MBEW
       WHERE MATNR EQ WA_MARD-MATNR
         AND BWKEY EQ WA_MARD-WERKS.

      LV_MARD = WA_MARD.
      AT END OF MATNR.
        SUM.
        IF LV_MARD-WMENG NE 0.
          WA_MARD-BAMNG = WA_MARD-BMENG / WA_MARD-WMENG.
        ELSE.
          WA_MARD-BAMNG = SPACE.
        ENDIF.
        WA_MARD-MAKTX = LV_MARD-MAKTX.
        WA_MARD-MTART = LV_MARD-MTART.
        WA_MARD-WERKS = LV_MARD-WERKS.
        WA_MARD-LGORT = SPACE.
        WA_MARD-MSTAE = LV_MARD-MSTAE.
        WA_MARD-MMSTA = LV_MARD-MMSTA.
        WA_MARD-SBDKZ = LV_MARD-SBDKZ.
        WA_MARD-DISMM = LV_MARD-DISMM.
        WA_MARD-SCHGT = LV_MARD-SCHGT.
        WA_MARD-PLIFZ = LV_MARD-PLIFZ.
        WA_MARD-MINBE = LV_MARD-MINBE.
        WA_MARD-EISBE = LV_MARD-EISBE.
        WA_MARD-BSTMI = LV_MARD-BSTMI.
        WA_MARD-PREIS = LV_MARD-PREIS.
        WA_MARD-WAERS = LV_MARD-WAERS.
        WA_MARD-PEINH = LV_MARD-PEINH.
        WA_MARD-VJKUM = L_VJKUM.
        IF WA_MARD-VMENGVJ > 0.
          IF L_VJKUM > 0.
            WA_MARD-RWVJA = L_VJKUM * H_TVOJA / WA_MARD-VMENGVJ.
          ELSE.
            WA_MARD-RWVJA = '000'.
          ENDIF.
        ELSE.
          IF L_VJKUM > 0.
            WA_MARD-RWVJA = '999'.
          ELSE.
            WA_MARD-RWVJA = '000'.
          ENDIF.
        ENDIF.
        WA_MARD-LBKUM = L_LBKUM.
        IF WA_MARD-VMENG > 0.
          IF L_LBKUM > 0.
            WA_MARD-RWLFJ = L_LBKUM * H_TLFJA / WA_MARD-VMENG.
          ELSE.
            WA_MARD-RWLFJ = '000'.
          ENDIF.
        ELSE.
          IF L_LBKUM > 0.
            WA_MARD-RWLFJ = '999'.
          ELSE.
            WA_MARD-RWLFJ = '000'.
          ENDIF.
        ENDIF.
        WA_MARD-MEINS = LV_MARD-MEINS.
        MOVE-CORRESPONDING WA_MARD TO L_WA_MARD.
        MOVE 'C310' TO L_WA_MARD-LINECOLOR.
        APPEND L_WA_MARD TO LT_MARD.
      ENDAT.
      CLEAR: WA_MARD.
    ENDLOOP.
  ENDIF.

  SORT LT_MARD BY MATNR LABST LINECOLOR.
* 004 vsm1kor 07.05.07 - sn

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     I_CALLBACK_PROGRAM                = G_PROGNAME
     I_CALLBACK_PF_STATUS_SET          = G_CALLBACK_PF_STATUS_SET
     I_CALLBACK_USER_COMMAND           = G_CALLBACK_USER_COMMAND
     IS_LAYOUT                         = G_R_LAYOUT
     IT_FIELDCAT                       = G_T_FIELDCAT
*     IT_SORT                           = G_T_SORT
     I_SAVE                            = 'A'
     IS_VARIANT                        = LT_VARIANT
    TABLES
      T_OUTTAB                          = LT_MARD.

  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

The purpose of the above code is we will add a new record in the final table which is to show the subtotal

Regards,

Vasanth

Read only

0 Likes
853

Hi Vasanth,

Can u send the complete code so that i can understand or otherwise can u send the sample program.

Read only

S0025444845
Active Participant
0 Likes
853

hi,

take help of the bel;ow code.

FORM build_fieldcat CHANGING p_it_fieldcat LIKE it_fieldcat.

DATA : wa_fieldcat TYPE slis_fieldcat_alv,

l_col_pos TYPE i.

l_col_pos = l_col_pos + 1.

wa_fieldcat-col_pos = l_col_pos.

wa_fieldcat-fieldname = 'NETWR'.

wa_fieldcat-ref_fieldname = 'NETWR'.

wa_fieldcat-ref_tabname = 'VBRP'.

wa_fieldcat-cfieldname = 'WAERK'.

wa_fieldcat-do_sum = 'X'.

wa_fieldcat-seltext_l = 'Net Sales Value'.

APPEND wa_fieldcat TO p_it_fieldcat.

CLEAR wa_fieldcat.

l_col_pos = l_col_pos + 1.

wa_fieldcat-col_pos = l_col_pos.

wa_fieldcat-fieldname = 'WAERK'.

wa_fieldcat-ref_fieldname = 'WAERK'.

wa_fieldcat-ref_tabname = 'VBRK'.

APPEND wa_fieldcat TO p_it_fieldcat.

CLEAR wa_fieldcat.

  • NEW Andreas Retzlaff

l_col_pos = l_col_pos + 1.

wa_fieldcat-col_pos = l_col_pos.

wa_fieldcat-fieldname = 'WAVWR'.

wa_fieldcat-ref_fieldname = 'WAVWR'.

wa_fieldcat-ref_tabname = 'VBRP'.

wa_fieldcat-cfieldname = 'WAERK'.

wa_fieldcat-do_sum = 'X'.

APPEND wa_fieldcat TO p_it_fieldcat.

CLEAR wa_fieldcat.

l_col_pos = l_col_pos + 1.

wa_fieldcat-col_pos = l_col_pos.

wa_fieldcat-fieldname = 'GMV'.

wa_fieldcat-ref_fieldname = 'WAVWR'.

  • wa_fieldcat-ref_tabname = 'VBRP'.

wa_fieldcat-cfieldname = 'WAERK'.

wa_fieldcat-seltext_s = 'GMV'.

wa_fieldcat-seltext_m = 'GMV'.

wa_fieldcat-seltext_l = 'GMV'.

wa_fieldcat-do_sum = 'X'.

APPEND wa_fieldcat TO p_it_fieldcat.

CLEAR wa_fieldcat.

endform.

&----


*& Form build_sortinfo

&----


  • Subroutine to build the sortinfo for subtotals.

----


  • <--P_IT_SORTINFO text

----


FORM build_sortinfo CHANGING p_it_sortinfo LIKE it_sortinfo.

DATA : wa_sortinfo TYPE slis_sortinfo_alv.

wa_sortinfo-fieldname = 'BUKRS'.

wa_sortinfo-tabname = 'VBRK'.

wa_sortinfo-up = 'X'.

wa_sortinfo-subtot = 'X'.

APPEND wa_sortinfo TO p_it_sortinfo.

wa_sortinfo-fieldname = 'VBELN'.

wa_sortinfo-tabname = 'VBAK'.

wa_sortinfo-up = 'X'.

wa_sortinfo-subtot = 'X'.

APPEND wa_sortinfo TO p_it_sortinfo.

ENDFORM. " build_sortinfo

regards,

sudha

Read only

Former Member
0 Likes
853

In the fieldcat assignthe SUM = 'X and field type

', on which field u want the sum

Foe ex:

I want the subtotal on amount field then

wa_fieldcat2-col_pos = '10'.

wa_fieldcat2-fieldname = 'FAKWR'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Amount'.

<b>wa_fieldcat2-do_sum = 'X'. "SUM UPON DISPLAY

wa_fieldcat2-datatype = 'CURR'</b>.

  • wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '15'.

wa_fieldcat2-do_sum = 'X'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

----


  • Program Name : ZFIR_RENTAL_PROFILES *

  • Program Title : Rental Profile *

  • Author : Sumithra Sudharsanam *

  • Date Written : 26.05.2007 *

  • Development Class : ZLES *

  • Enhancement No. : *

  • Description : Rental Profile *

----


&----


*& Report ZFIR_RENTAL_PROFILES

&----


REPORT zfir_rental_profiles MESSAGE-ID zles.

************************************************************************

  • TABLES

************************************************************************

TABLES: knb1, vbrk, bsid, t052, vbak. "#EC *

************************************************************************

  • Type Pools

************************************************************************

TYPE-POOLS: slis.

************************************************************************

  • INTERNAL TABLES

************************************************************************

  • To check for bukrs in selection screen

DATA: BEGIN OF t_t001 OCCURS 0, "#EC NEEDED

bukrs TYPE t001-bukrs,

END OF t_t001.

  • To check for the customer in selection screen

DATA: BEGIN OF t_kna1 OCCURS 0, "#EC NEEDED

kunnr TYPE kna1-kunnr,

name1 TYPE kna1-name1,

END OF t_kna1.

  • To check for the document number in selection screen

DATA: BEGIN OF t_vbak OCCURS 0, "#EC NEEDED

vbeln TYPE vbak-vbeln,

END OF t_vbak.

*to store the value based on input

DATA:BEGIN OF t_data1 OCCURS 0,

bukrs LIKE t001-bukrs,

kunnr LIKE vbak-kunnr,

vbeln LIKE vbak-vbeln,

END OF t_data1.

*To store Business data

DATA:BEGIN OF t_vbkd OCCURS 0,

vbeln LIKE vbkd-vbeln,

posnr LIKE vbkd-posnr,

fplnr LIKE vbkd-fplnr,

zterm LIKE vbkd-zterm,

END OF t_vbkd.

*to get the billing plan

DATA:BEGIN OF t_fplt OCCURS 0,

fplnr LIKE fplt-fplnr,

afdat LIKE fplt-afdat,

fakwr LIKE fplt-fakwr,

END OF t_fplt.

*To get days from baseline date

DATA:BEGIN OF t_t052 OCCURS 0,

zterm LIKE t052-zterm,

ztag1 LIKE t052-ztag1,

END OF t_t052.

DATA:BEGIN OF t_fplt1 OCCURS 0,

fplnr LIKE fplt-fplnr,

afdat LIKE fplt-afdat,

fakwr LIKE fplt-fakwr,

vbeln LIKE vbkd-vbeln,

END OF t_fplt1.

  • Output of the first report

DATA:BEGIN OF t_alv1 OCCURS 0,

bukrs LIKE t001-bukrs,

kunnr LIKE vbak-kunnr,

vbeln LIKE vbak-vbeln,

afdat LIKE fplt-afdat,

fplnr LIKE fplt-fplnr,

posnr LIKE vbkd-posnr,

END OF t_alv1.

*to store subecuent doc number from vbfa

DATA: BEGIN OF t_vbfa_r OCCURS 0,

vbeln LIKE vbfa-vbeln,

posnv LIKE vbfa-posnv,

vbelv LIKE vbfa-vbeln,

posnn LIKE vbfa-posnn,

vbtyp_n LIKE vbfa-vbtyp_n,

vbtyp_v LIKE vbfa-vbtyp_v,

fplnr LIKE vbfa-fplnr,

fpltr LIKE vbfa-fpltr,

kunnr LIKE vbak-kunnr,

END OF t_vbfa_r.

*to store billing plan type

DATA: BEGIN OF t_fpla_r OCCURS 0,

fplnr LIKE fpla-fplnr,

fpart LIKE fpla-fpart,

perio LIKE fpla-perio,

END OF t_fpla_r.

  • to get FPLT data

DATA:BEGIN OF t_fplt_r OCCURS 0,

fplnr LIKE fplt-fplnr,

fpltr LIKE fplt-fpltr,

fkarv LIKE fplt-fkarv,

fakwr LIKE fplt-fakwr,

waers LIKE fplt-waers,

fksaf LIKE fplt-fksaf,

afdat LIKE fplt-afdat,

END OF t_fplt_r.

  • get the billing freq from vbak

DATA: BEGIN OF t_vbak_r OCCURS 0, "#EC NEEDED

vbeln LIKE vbak-vbeln,

zzbilling_freq LIKE vbak-zzbilling_freq,

kunnr LIKE vbak-kunnr,

END OF t_vbak_r.

  • get the data from BSID

DATA:BEGIN OF t_bsid_r OCCURS 0,

vbeln LIKE bsid-vbeln,

kunnr LIKE bsid-kunnr,

END OF t_bsid_r.

  • get the data from BSAD

DATA:BEGIN OF t_bsad_r OCCURS 0,

vbeln LIKE bsad-vbeln,

kunnr LIKE bsad-kunnr,

END OF t_bsad_r.

*get the billed documents

DATA:BEGIN OF t_vbrk_1 OCCURS 0,

vbeln LIKE vbrk-vbeln,

fkdat LIKE vbrk-fkdat,

fkart LIKE vbrk-fkart,

END OF t_vbrk_1.

*get the item details from VBRP

DATA:BEGIN OF t_vbrp_1 OCCURS 0,

vbeln LIKE vbrp-vbeln,

posnr LIKE vbrp-posnr,

vkaus LIKE vbrp-vkaus,

END OF t_vbrp_1.

DATA: BEGIN OF t_vbfa_r1 OCCURS 0,

vbeln LIKE vbfa-vbeln,

posnv LIKE vbfa-posnv,

vbelv LIKE vbfa-vbeln,

posnn LIKE vbfa-posnn,

vbtyp_n LIKE vbfa-vbtyp_n,

vbtyp_v LIKE vbfa-vbtyp_v,

fplnr LIKE vbfa-fplnr,

fpltr LIKE vbfa-fpltr,

kunnr LIKE vbak-kunnr,

END OF t_vbfa_r1.

*Unbilled documents

DATA:BEGIN OF t_vbap_2 OCCURS 0,

vbeln LIKE vbap-vbeln,

posnr LIKE vbap-posnr,

vkaus LIKE vbap-vkaus,

  • FKDAT like vbap-fkdat,

END OF t_vbap_2.

*

DATA:BEGIN OF t_common OCCURS 0,

vbeln LIKE vbak-vbeln,

vbelv LIKE vbfa-vbelv,

  • fpart LIKE fpla-fpart,

bptype(50) TYPE c,

fplnr LIKE fplt-fplnr,

fpltr LIKE fplt-fpltr,

fkarv LIKE fplt-fkarv,

waers LIKE fplt-waers,

fakwr LIKE fplt-fakwr,

afdat LIKE fplt-afdat,

perio LIKE fpla-perio,

status(20) TYPE c,

usage(30) TYPE c,

END OF t_common.

DATA:BEGIN OF t_output2 OCCURS 0,

vbeln LIKE vbak-vbeln,

vbelv LIKE vbfa-vbelv,

  • fpart LIKE fpla-fpart,

bptype(50) TYPE c,

fplnr LIKE fplt-fplnr,

fkarv LIKE fplt-fkarv,

waers LIKE fplt-waers,

fakwr LIKE fplt-fakwr,

afdat LIKE fplt-afdat,

perio LIKE fpla-perio,

status(20) TYPE c,

fkdat LIKE vbrk-fkdat,

posnr LIKE vbrp-posnr,

vkaus LIKE vbrp-vkaus,

fkart LIKE vbrk-fkart,

usage(30) TYPE c,

bfreq(30) TYPE c,

END OF t_output2.

DATA:BEGIN OF t_tfplb_r OCCURS 0,

fpart LIKE tfplb-fpart,

fpbez LIKE tfplb-fpbez,

END OF t_tfplb_r.

DATA:BEGIN OF t_output1 OCCURS 0,

name(30) TYPE c,

value(50) TYPE c,

END OF t_output1.

DATA:BEGIN OF t_tvrgt OCCURS 0,

regel LIKE tvrgt-regel,

bezeich LIKE tvrgt-bezeich,

END OF t_tvrgt.

************************************************************************

  • VARIABLE DECLARATION

************************************************************************

DATA: l_afdat LIKE fplt-afdat,

l_repid LIKE sy-repid.

DATA: l_fpart LIKE fpla-fpart,

l_fpbez LIKE tfplb-fpbez,

l_bptype(50) TYPE c.

DATA: l_cust1(15) TYPE c,

l_cust2(30) TYPE c,

l_doc1(15) TYPE c,

l_doc2(30) TYPE c.

DATA l_usage(30) TYPE c.

DATA l_vkaus LIKE vbap-vkaus.

DATA l_perio(30) TYPE c.

************************************************************************

  • FOR ALV DISPLAY

************************************************************************

  • ALV Variables

DATA: t_fieldcat1 TYPE slis_t_fieldcat_alv,

wa_fieldcat1 TYPE slis_fieldcat_alv,

wa_events TYPE slis_alv_event,

t_events1 TYPE slis_t_event,

t_events2 TYPE slis_t_event,

t_layout1 TYPE slis_layout_alv,

t_layout2 TYPE slis_layout_alv,

t_fieldcat2 TYPE slis_t_fieldcat_alv,

wa_fieldcat2 TYPE slis_fieldcat_alv.

DATA: gt_extab TYPE slis_t_extab WITH HEADER LINE.

************************************************************************

  • RANGES

************************************************************************

*For document categories

RANGES r_vbtyp FOR vbfa-vbtyp_n.

RANGES r_auart FOR vbak-auart.

************************************************************************

  • SELECTION-SCREEN

************************************************************************

*Selection Screen Parameters for user input

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS:

*Company Code

p_bukrs LIKE t001-bukrs OBLIGATORY.

SELECT-OPTIONS:

*Customer Number

s_kunnr FOR knb1-kunnr.

SELECT-OPTIONS:

*Document Number

s_vbeln FOR vbak-vbeln.

*SELECT-OPTIONS:

**Agreement Number

  • s_agtyp for vbak-zzagtyp.

SELECTION-SCREEN END OF BLOCK b1.

************************************************************************

  • AT SELECTION-SCREEN

************************************************************************

*Selection Screen validation for Company code

AT SELECTION-SCREEN ON p_bukrs.

SELECT SINGLE bukrs FROM t001 "#EC *

INTO t_t001

WHERE bukrs = p_bukrs.

IF sy-subrc NE 0.

*Error message for Invalid Company Code

MESSAGE e000 WITH text-002.

ENDIF.

*Selection Screen Validation for Customer

AT SELECTION-SCREEN ON s_kunnr.

IF NOT s_kunnr IS INITIAL.

SELECT SINGLE kunnr name1

FROM kna1 "#EC *

INTO t_kna1

WHERE kunnr IN s_kunnr.

IF sy-subrc NE 0.

*Error message for Invalid Customer Number

MESSAGE e000 WITH text-003.

ENDIF.

ENDIF.

*Selection Screen Validation for Sales documents

AT SELECTION-SCREEN ON s_vbeln.

IF NOT s_vbeln IS INITIAL.

SELECT SINGLE vbeln FROM vbak "#EC *

INTO t_vbak

WHERE vbeln IN s_vbeln.

IF sy-subrc NE 0.

MESSAGE e000 WITH text-004.

ENDIF.

ENDIF.

IF s_kunnr IS INITIAL.

CHECK s_vbeln IS INITIAL.

MESSAGE e000 WITH text-004.

ENDIF.

IF s_vbeln IS INITIAL.

CHECK s_kunnr IS INITIAL.

MESSAGE e000 WITH text-004.

ENDIF.

************************************************************************

  • INITIALIZATION

************************************************************************

INITIALIZATION.

  • Include the list of document categories for document check

CLEAR r_vbtyp.

REFRESH r_vbtyp.

r_vbtyp-low = 'K'.

r_vbtyp-option = 'EQ'.

r_vbtyp-sign = 'I'.

APPEND r_vbtyp.

r_vbtyp-low = 'O'.

r_vbtyp-option = 'EQ'.

r_vbtyp-sign = 'I'.

APPEND r_vbtyp.

r_vbtyp-low = 'S'.

r_vbtyp-option = 'EQ'.

r_vbtyp-sign = 'I'.

APPEND r_vbtyp.

r_vbtyp-low = 'U'.

r_vbtyp-option = 'EQ'.

r_vbtyp-sign = 'I'.

APPEND r_vbtyp.

r_vbtyp-low = '3'.

r_vbtyp-option = 'EQ'.

r_vbtyp-sign = 'I'.

APPEND r_vbtyp.

r_vbtyp-low = '4'.

r_vbtyp-option = 'EQ'.

r_vbtyp-sign = 'I'.

APPEND r_vbtyp.

r_vbtyp-low = '6'.

r_vbtyp-option = 'EQ'.

r_vbtyp-sign = 'I'.

APPEND r_vbtyp.

r_vbtyp-low = 'N'.

r_vbtyp-option = 'EQ'.

r_vbtyp-sign = 'I'.

APPEND r_vbtyp.

CLEAR r_auart.

REFRESH r_auart.

r_auart-low = 'ZLC1'.

r_auart-option = 'EQ'.

r_auart-sign = 'I'.

APPEND r_auart.

r_auart-low = 'ZLC2'.

r_auart-option = 'EQ'.

r_auart-sign = 'I'.

APPEND r_auart.

************************************************************************

  • START-OF-SELECTION

************************************************************************

START-OF-SELECTION.

*Clear the variables and refresh the internal tables

PERFORM clear_data.

*Either document number or Customer number should be entered in the

*selection screen

IF s_vbeln IS INITIAL.

CLEAR t_data1.

REFRESH t_data1.

SELECT vbeln kunnr FROM vbak

INTO CORRESPONDING FIELDS OF TABLE t_data1

WHERE kunnr IN s_kunnr AND

bukrs_vf = p_bukrs

AND

auart IN r_auart.

ENDIF.

IF s_kunnr IS INITIAL.

CLEAR t_data1.

REFRESH t_data1.

SELECT vbeln kunnr FROM vbak

INTO CORRESPONDING FIELDS OF TABLE t_data1

WHERE bukrs_vf = p_bukrs AND

vbeln IN s_vbeln AND

auart IN r_auart.

ENDIF.

IF ( NOT s_kunnr IS INITIAL ) AND ( NOT s_vbeln IS INITIAL ).

CLEAR t_data1.

REFRESH t_data1.

SELECT vbeln kunnr FROM vbak

INTO CORRESPONDING FIELDS OF TABLE t_data1

WHERE bukrs_vf = p_bukrs AND

kunnr IN s_kunnr AND

vbeln IN s_vbeln AND

auart IN r_auart.

ENDIF.

  • Process for rental profile

*____________ << Report1-Summary

IF NOT t_data1[] IS INITIAL.

  • select the data for first report

SELECT vbeln posnr fplnr zterm FROM vbkd

INTO TABLE t_vbkd

FOR ALL ENTRIES IN t_data1

WHERE vbeln = t_data1-vbeln.

CHECK sy-subrc EQ 0.

*get the billing plan from FPLT

SELECT fplnr afdat fakwr FROM fplt

INTO TABLE t_fplt

FOR ALL ENTRIES IN t_vbkd

WHERE fplnr = t_vbkd-fplnr AND

fksaf = 'C'.

CHECK sy-subrc EQ 0.

*Get the base line days

SELECT zterm ztag1 FROM t052

INTO TABLE t_t052

FOR ALL ENTRIES IN t_vbkd

WHERE zterm = t_vbkd-zterm.

*Delete the rows which are not having billing amount as 0

LOOP AT t_fplt WHERE fplnr = ''.

DELETE t_fplt INDEX sy-tabix.

ENDLOOP.

LOOP AT t_fplt WHERE fakwr EQ 0.

DELETE t_fplt INDEX sy-tabix.

ENDLOOP.

CHECK NOT t_fplt[] IS INITIAL.

SORT t_fplt BY fplnr afdat DESCENDING.

LOOP AT t_fplt.

AT NEW fplnr.

READ TABLE t_fplt WITH KEY fplnr = t_fplt-fplnr.

IF sy-subrc = 0.

MOVE-CORRESPONDING t_fplt TO t_fplt1.

APPEND t_fplt1.

ENDIF.

ENDAT.

ENDLOOP.

*Add the base line days to the billing date .From this get the latest

*date .and from the list of dates for the billing plan get the first

*come date as Net due date

LOOP AT t_fplt1.

CLEAR t_t052.

CLEAR t_vbkd.

READ TABLE t_vbkd WITH KEY fplnr = t_fplt1-fplnr.

READ TABLE t_t052 WITH KEY zterm = t_vbkd-zterm.

CLEAR l_afdat.

l_afdat = t_fplt1-afdat.

l_afdat = l_afdat + t_t052-ztag1.

t_fplt1-afdat = l_afdat.

t_fplt1-vbeln = t_vbkd-vbeln.

MODIFY t_fplt1 TRANSPORTING afdat vbeln.

ENDLOOP.

SORT t_fplt1 BY fplnr afdat ASCENDING.

*Prepare the output itab for report 1 display

LOOP AT t_vbkd.

AT NEW vbeln.

CLEAR t_fplt1.

READ TABLE t_fplt1 WITH KEY vbeln = t_vbkd-vbeln.

IF sy-subrc = 0.

t_alv1-fplnr = t_fplt1-fplnr.

t_alv1-afdat = t_fplt1-afdat.

t_alv1-bukrs = p_bukrs.

t_alv1-vbeln = t_vbkd-vbeln.

CLEAR t_data1.

READ TABLE t_data1 WITH KEY vbeln = t_vbkd-vbeln.

IF sy-subrc = 0.

t_alv1-kunnr = t_data1-kunnr.

ENDIF.

APPEND t_alv1.

ENDIF.

ENDAT.

ENDLOOP.

LOOP AT t_alv1 WHERE fplnr = ''.

DELETE t_alv1 INDEX sy-tabix.

ENDLOOP.

*Prepare ALB Fieldcatelog and events to display first report

IF NOT t_alv1[] IS INITIAL.

SORT t_alv1 BY afdat ASCENDING.

CLEAR t_output1.

REFRESH t_output1.

t_output1-name = 'Company Code' .

t_output1-value = p_bukrs.

APPEND t_output1.

CLEAR l_cust1.

CLEAR l_cust2.

IF NOT s_kunnr-high IS INITIAL.

CONCATENATE ' to' s_kunnr-high INTO l_cust1 SEPARATED BY space.

ENDIF.

CONCATENATE s_kunnr-low l_cust1 INTO l_cust2.

t_output1-name = 'Customer Number' .

t_output1-value = l_cust2.

APPEND t_output1.

CLEAR l_doc1.

CLEAR l_doc2.

IF NOT s_vbeln-high IS INITIAL.

CONCATENATE ' to ' s_vbeln-high INTO l_doc1 SEPARATED BY space.

ENDIF.

CONCATENATE s_vbeln-low l_doc1 INTO l_doc2.

t_output1-name = 'Document Number' .

t_output1-value = l_doc2.

APPEND t_output1.

READ TABLE t_alv1 INDEX 1.

t_output1-name = '1st Due date' .

t_output1-value = t_alv1-afdat.

APPEND t_output1.

PERFORM block_list_init.

PERFORM build_fieldcat1.

PERFORM build_events1.

PERFORM display_block1.

ENDIF.

ELSE.

MESSAGE e000 WITH text-005.

ENDIF.

*____________ >> Report1 Summary.

*____________ << Report2 detailed report.

*Get the Subsecuent document number(VBELN) from VBFA for the

*preceding

*doc number (VBELV)

SELECT vbeln posnv vbelv posnn vbtyp_n vbtyp_v fplnr fpltr FROM vbfa

INTO TABLE t_vbfa_r

FOR ALL ENTRIES IN t_alv1

WHERE vbelv = t_alv1-vbeln AND

NOT vbtyp_n IN r_vbtyp.

SORT t_vbfa_r BY vbeln.

*Include customer for further process

LOOP AT t_vbfa_r.

CLEAR t_alv1.

READ TABLE t_alv1 WITH KEY vbeln = t_vbfa_r-vbelv.

IF sy-subrc = 0.

t_vbfa_r-kunnr = t_alv1-kunnr.

MODIFY t_vbfa_r TRANSPORTING kunnr.

ENDIF.

ENDLOOP.

IF NOT t_vbfa_r[] IS INITIAL.

*Get the Billing plan

SELECT fplnr fpltr fkarv fakwr waers fksaf afdat FROM fplt

INTO TABLE t_fplt_r

FOR ALL ENTRIES IN t_vbfa_r

WHERE fplnr = t_vbfa_r-fplnr

  • AND

  • fksaf = 'C'.

.

  • get the Billing Plan type from FPLA

SELECT fplnr fpart perio FROM fpla

INTO TABLE t_fpla_r

FOR ALL ENTRIES IN t_fplt_r

WHERE fplnr = t_fplt_r-fplnr.

*Get the description for billing frequency for fpla data

SELECT regel bezeich FROM tvrgt

INTO TABLE t_tvrgt

FOR ALL ENTRIES IN t_fpla_r

WHERE regel = t_fpla_r-perio AND

spras = 'EN'.

  • Get the description from TFPLB

SELECT fpart fpbez FROM tfplb

INTO TABLE t_tfplb_r

FOR ALL ENTRIES IN t_fpla_r

WHERE fpart = t_fpla_r-fpart AND

spras = 'E'.

*Delete the billing schedule having amount as 0.

LOOP AT t_fplt_r WHERE fakwr EQ 0.

DELETE t_fplt_r INDEX sy-tabix.

ENDLOOP.

***<< Added NEX44JC

LOOP AT t_fplt_r WHERE fplnr = '' .

DELETE t_fplt_r INDEX sy-tabix.

ENDLOOP.

***>> Added NEX44JC

*get the billing freq from vbak

SELECT vbeln zzbilling_freq kunnr FROM vbak

INTO TABLE t_vbak_r

FOR ALL ENTRIES IN t_vbfa_r

WHERE vbeln = t_vbfa_r-vbelv.

*Get the open AR for the documents

SELECT vbeln kunnr FROM bsid

INTO TABLE t_bsid_r

FOR ALL ENTRIES IN t_vbfa_r

WHERE vbeln = t_vbfa_r-vbeln AND

bukrs = p_bukrs

AND

kunnr = t_vbfa_r-kunnr.

*Get the cleared items

SELECT vbeln kunnr FROM bsad

INTO TABLE t_bsad_r

FOR ALL ENTRIES IN t_vbfa_r

WHERE vbeln = t_vbfa_r-vbeln AND

kunnr = t_vbfa_r-kunnr.

ENDIF.

*Process for report display

IF NOT t_vbfa_r[] IS INITIAL.

*Check the vbeln in vbrk.If exists get the item details from vbrp.

*If data not in vbrk get from VBAK and VBAP.

SELECT vbeln fkdat fkart

FROM vbrk

INTO TABLE t_vbrk_1

FOR ALL ENTRIES IN t_vbfa_r

WHERE vbeln = t_vbfa_r-vbeln.

IF NOT t_vbrk_1[] IS INITIAL.

SELECT vbeln posnr vkaus FROM vbrp

INTO TABLE t_vbrp_1

FOR ALL ENTRIES IN t_vbrk_1

WHERE vbeln = t_vbrk_1-vbeln.

ENDIF.

*<< NEX44JC

    • Get the doc of unbilled

  • LOOP AT t_vbfa_r.

  • CLEAR t_vbrk_1.

  • READ TABLE t_vbrk_1 WITH KEY vbeln = t_vbfa_r-vbeln.

  • IF sy-subrc NE 0.

  • MOVE t_vbfa_r TO t_vbfa_r1.

  • APPEND t_vbfa_r1.

  • ENDIF.

  • ENDLOOP.

ENDIF.

IF NOT t_vbfa_r[] IS INITIAL.

*Unbilled documents

SELECT vbeln posnr vkaus

  • FKDAT

FROM vbap

INTO TABLE t_vbap_2

FOR ALL ENTRIES IN t_vbfa_r

WHERE vbeln = t_vbfa_r-vbelv

AND

posnr = t_vbfa_r-posnv.

ENDIF.

*>> NEX44JC

*Preparing the output internal table for report display

*For the line items already billed

LOOP AT t_vbfa_r.

CLEAR l_fpart.

CLEAR l_fpbez.

CLEAR l_bptype.

CLEAR t_fpla_r.

READ TABLE t_fpla_r WITH KEY fplnr = t_vbfa_r-fplnr.

IF sy-subrc = 0.

CLEAR t_fplt_r.

READ TABLE t_fplt_r WITH KEY fplnr = t_vbfa_r-fplnr

fpltr = t_vbfa_r-fpltr.

IF t_fplt_r-fksaf = 'C'.

t_common-vbeln = t_vbfa_r-vbeln.

l_fpart = t_fpla_r-fpart.

READ TABLE t_tfplb_r WITH KEY fpart = l_fpart.

l_fpbez = t_tfplb_r-fpbez.

CONCATENATE l_fpart ' - ' l_fpbez INTO l_bptype.

t_common-bptype = l_bptype.

t_common-perio = t_fpla_r-perio.

t_common-fplnr = t_vbfa_r-fplnr.

t_common-fpltr = t_vbfa_r-fpltr.

*fill FKARV FAKWR and WAERK

t_common-fkarv = t_fplt_r-fkarv.

t_common-fakwr = t_fplt_r-fakwr.

t_common-waers = t_fplt_r-waers.

t_common-afdat = t_fplt_r-afdat.

*fill ZZBILLING_FREQ

  • CLEAR t_vbak_r.

  • READ TABLE t_vbak_r WITH KEY vbeln = t_vbfa_r-vbeln.

  • IF sy-subrc = 0.

  • t_common-zzbilling_freq = t_vbak_r-zzbilling_freq.

  • ENDIF.

*Fill status

*If the data exists in BSID ,status is not cleared.

*If data not in BSID,Check in BSAD.If data exists in BSAD, then status

*is cleared else not cleared

CLEAR t_bsid_r.

READ TABLE t_bsid_r WITH KEY vbeln = t_vbfa_r-vbeln

kunnr = t_vbfa_r-kunnr.

IF sy-subrc NE 0.

CLEAR t_bsad_r.

READ TABLE t_bsad_r WITH KEY vbeln = t_vbfa_r-vbeln

kunnr = t_vbfa_r-kunnr.

IF sy-subrc = 0.

t_common-status = 'CLEARED' .

ELSE.

t_common-status = 'NOT CLEARED' .

ENDIF.

ELSE.

t_common-status = 'NOT CLEARED' .

ENDIF.

APPEND t_common.

ENDIF.

ENDIF.

ENDLOOP.

LOOP AT t_vbfa_r.

*check for VBRK or VBAK

CLEAR t_vbrk_1.

READ TABLE t_vbrk_1 WITH KEY vbeln = t_vbfa_r-vbeln.

IF sy-subrc = 0.

*get data from VBRP

CLEAR t_vbrp_1.

READ TABLE t_vbrp_1 WITH KEY vbeln = t_vbrk_1-vbeln

posnr = t_vbfa_r-posnn.

IF sy-subrc = 0.

CLEAR t_common.

READ TABLE t_common WITH KEY vbeln = t_vbrp_1-vbeln

fplnr = t_vbfa_r-fplnr

fpltr = t_vbfa_r-fpltr.

IF sy-subrc = 0.

MOVE-CORRESPONDING t_common TO t_output2.

t_output2-vbelv = t_vbfa_r-vbelv.

t_output2-posnr = t_vbfa_r-posnv.

CLEAR t_vbap_2.

READ TABLE t_vbap_2 WITH KEY vbeln = t_vbfa_r-vbelv

posnr = t_vbfa_r-posnv.

IF sy-subrc = 0.

CLEAR l_usage.

CLEAR l_vkaus.

l_vkaus = t_vbap_2-vkaus.

TRANSLATE l_vkaus TO UPPER CASE.

"#EC TRANSLANG or "#EC SYNTCHAR

PERFORM get_usage USING l_vkaus

CHANGING l_usage.

  • t_output2-vkaus = t_vbrp_1-vkaus.

t_output2-usage = l_usage.

ENDIF.

t_output2-fkdat = t_vbrk_1-fkdat.

t_output2-fkart = t_vbrk_1-fkart.

IF t_common-perio IS INITIAL.

CLEAR t_vbak_r.

READ TABLE t_vbak_r WITH KEY vbeln = t_vbfa_r-vbelv.

t_output2-perio = t_vbak_r-zzbilling_freq.

CLEAR l_perio.

PERFORM get_bfreq USING t_output2-perio

CHANGING l_perio.

CONCATENATE

t_output2-perio '-' l_perio INTO l_perio.

t_output2-bfreq = l_perio.

ELSE.

CLEAR t_tvrgt.

READ TABLE t_tvrgt WITH KEY regel = t_common-perio.

IF sy-subrc = 0.

CLEAR l_perio.

l_perio = t_tvrgt-bezeich .

t_output2-bfreq = l_perio.

ENDIF.

ENDIF.

APPEND t_output2.

ENDIF.

ENDIF.

ELSE.

*get data from VBAP.

CLEAR t_vbap_2.

READ TABLE t_vbap_2 WITH KEY vbeln = t_vbfa_r-vbelv

posnr = t_vbfa_r-posnv.

IF sy-subrc = 0.

CLEAR t_common.

READ TABLE t_common WITH KEY vbeln = t_vbap_2-vbeln

fplnr = t_vbfa_r-fplnr

fpltr = t_vbfa_r-fpltr.

IF sy-subrc = 0.

MOVE-CORRESPONDING t_common TO t_output2.

t_output2-posnr = t_vbfa_r-posnv.

CLEAR l_usage.

CLEAR l_vkaus.

l_vkaus = t_vbap_2-vkaus.

TRANSLATE l_vkaus TO UPPER CASE.

"#EC TRANSLANG or "#EC SYNTCHAR

PERFORM get_usage USING l_vkaus

CHANGING l_usage.

  • t_output2-vkaus = t_vbap_2-vkaus.

t_output2-usage = l_usage.

IF t_common-perio IS INITIAL.

CLEAR t_vbak_r.

READ TABLE t_vbak_r WITH KEY vbeln = t_vbap_2-vbeln.

t_output2-perio = t_vbak_r-zzbilling_freq.

CLEAR l_perio.

PERFORM get_bfreq USING t_output2-perio

CHANGING l_perio.

CONCATENATE

t_output2-perio '-' l_perio INTO l_perio.

t_output2-bfreq = l_perio.

ELSE.

CLEAR t_tvrgt.

READ TABLE t_tvrgt WITH KEY regel = t_common-perio.

IF sy-subrc = 0.

CLEAR l_perio.

l_perio = t_tvrgt-bezeich .

t_output2-bfreq = l_perio.

ENDIF.

ENDIF.

*t_output2-fkdat = t_vbap_2-fkdat.

APPEND t_output2.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

*For the billing schedules not yet billed

LOOP AT t_fplt_r WHERE fksaf = 'A'.

CLEAR l_fpart.

CLEAR l_bptype.

CLEAR l_fpbez.

CLEAR t_fpla_r.

READ TABLE t_fpla_r WITH KEY fplnr = t_fplt_r-fplnr.

IF sy-subrc = 0.

CLEAR t_vbfa_r.

READ TABLE t_vbfa_r WITH KEY fplnr = t_fplt_r-fplnr.

t_output2-vbeln = ' '.

t_output2-vbelv = t_vbfa_r-vbelv.

l_fpart = t_fpla_r-fpart.

READ TABLE t_tfplb_r WITH KEY fpart = l_fpart.

l_fpbez = t_tfplb_r-fpbez.

CONCATENATE l_fpart ' - ' l_fpbez INTO l_bptype.

t_output2-bptype = l_bptype.

  • t_output2-BPTYPE = t_fpla_r-fpart.

t_output2-fplnr = t_vbfa_r-fplnr.

READ TABLE t_vbap_2 WITH KEY vbeln = t_vbfa_r-vbelv

posnr = t_vbfa_r-posnv.

IF sy-subrc = 0.

CLEAR l_usage.

CLEAR l_vkaus.

l_vkaus = t_vbap_2-vkaus.

TRANSLATE l_vkaus TO UPPER CASE.

"#EC TRANSLANG or "#EC SYNTCHAR

PERFORM get_usage USING l_vkaus

CHANGING l_usage.

  • t_output2-vkaus = t_vbap_2-vkaus.

t_output2-usage = l_usage.

ENDIF.

*fill FKARV FAKWR and WAERK

t_output2-fkarv = ''.

t_output2-fakwr = t_fplt_r-fakwr.

t_output2-waers = t_fplt_r-waers.

t_output2-afdat = t_fplt_r-afdat.

t_output2-posnr = t_vbfa_r-posnv.

t_output2-fkdat = ''.

*Fill status

t_output2-status = 'Yet to be billed'.

IF NOT t_fpla_r-perio IS INITIAL.

CLEAR t_tvrgt.

READ TABLE t_tvrgt WITH KEY regel = t_fpla_r-perio .

IF sy-subrc = 0.

CLEAR l_perio.

l_perio = t_tvrgt-bezeich .

t_output2-bfreq = l_perio.

ENDIF.

ELSE.

CLEAR t_vbak_r.

READ TABLE t_vbak_r WITH KEY vbeln = t_vbfa_r-vbelv.

t_output2-perio = t_vbak_r-zzbilling_freq.

CLEAR l_perio.

PERFORM get_bfreq USING t_output2-perio

CHANGING l_perio.

CONCATENATE

t_output2-perio '-' l_perio INTO l_perio.

t_output2-bfreq = l_perio.

ENDIF.

APPEND t_output2.

ENDIF.

ENDLOOP.

*Prepare ALV for the detailed report

IF NOT t_output2[] IS INITIAL.

PERFORM build_fieldcat2.

PERFORM build_events2.

PERFORM display_block2.

ENDIF.

*Both the ALV's will be displayed

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'.

&----


*& Form clear_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM clear_data .

CLEAR:t_t001,

t_kna1,

t_vbak,

t_data1,

t_vbkd,

t_fplt,

t_t052,

t_fplt1,

t_alv1.

REFRESH:t_t001,

t_kna1,

t_vbak,

t_data1,

t_vbkd,

t_fplt,

t_t052,

t_fplt1,

t_alv1.

CLEAR: l_afdat,

l_repid.

CLEAR: t_fieldcat1,

t_fieldcat2,

wa_fieldcat1,

wa_events,

t_layout1,

t_layout2,

t_events1,

t_events2.

REFRESH:t_fieldcat1 ,

t_fieldcat2,

t_events1,

t_events2.

CLEAR: t_vbfa_r,

t_fpla_r,

t_fplt_r,

t_vbak_r,

t_bsid_r,

t_bsad_r,

t_vbrk_1,

t_vbrp_1,

t_vbap_2,

t_vbfa_r1,

t_common,

t_output2,

t_tvrgt.

REFRESH : t_vbfa_r,

t_fpla_r,

t_fplt_r,

t_vbak_r,

t_bsid_r,

t_bsad_r,

t_vbrk_1,

t_vbrp_1,

t_vbap_2,

t_vbfa_r1,

t_common,

t_output2,

t_tvrgt.

CLEAR l_fpart.

CLEAR l_fpbez.

CLEAR l_bptype.

CLEAR:l_cust1,

l_cust2,

l_doc1,

l_doc2.

CLEAR t_output1.

REFRESH t_output1.

CLEAR l_usage.

CLEAR l_vkaus.

ENDFORM. " clear_data

&----


*& Form block_list_init

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM block_list_init .

l_repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'

EXPORTING

i_callback_program = l_repid

i_callback_pf_status_set = 'PF_STATUS_SET'

  • I_CALLBACK_USER_COMMAND = 'USER_COMMAND'.

  • IT_EXCLUDING =

.

ENDFORM. " block_list_init

*PF_STATUS

FORM pf_status_set USING extab TYPE slis_t_extab. "#EC CALLED

  • SET PF-STATUS 'PFST'.

SET PF-STATUS 'ZPF_S' .

ENDFORM. "PF_STATUS_SET

&----


*& Form build_fieldcat1

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM build_fieldcat1 .

REFRESH t_fieldcat1.

CLEAR wa_fieldcat1.

wa_fieldcat1-col_pos = '1'.

wa_fieldcat1-fieldname = 'NAME'.

wa_fieldcat1-tabname = 'T_OUTPUT1'.

wa_fieldcat1-seltext_l = 'Description'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat1-outputlen = '25'.

APPEND wa_fieldcat1 TO t_fieldcat1.

CLEAR wa_fieldcat1.

wa_fieldcat1-col_pos = '2'.

wa_fieldcat1-fieldname = 'VALUE'.

wa_fieldcat1-tabname = 'T_OUTPUT1'.

wa_fieldcat1-seltext_l = 'Entry'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat1-outputlen = '50'.

APPEND wa_fieldcat1 TO t_fieldcat1.

CLEAR wa_fieldcat1.

  • wa_fieldcat1-col_pos = '1'.

  • wa_fieldcat1-fieldname = 'BUKRS'.

  • wa_fieldcat1-tabname = 'T_ALV1'.

  • wa_fieldcat1-seltext_l = 'Comp Code'.

    • wa_fieldcat-just = 'L'.

  • wa_fieldcat1-outputlen = '15'.

  • APPEND wa_fieldcat1 TO t_fieldcat1.

  • CLEAR wa_fieldcat1.

*

  • wa_fieldcat1-col_pos = '2'.

  • wa_fieldcat1-fieldname = 'KUNNR'.

  • wa_fieldcat1-tabname = 'T_ALV1'.

  • wa_fieldcat1-seltext_l = 'Customer No'.

    • wa_fieldcat-just = 'L'.

  • wa_fieldcat1-outputlen = '15'.

  • APPEND wa_fieldcat1 TO t_fieldcat1.

  • CLEAR wa_fieldcat1.

*

  • wa_fieldcat1-col_pos = '3'.

  • wa_fieldcat1-fieldname = 'VBELN'.

  • wa_fieldcat1-tabname = 'T_ALV1'.

  • wa_fieldcat1-seltext_l = 'Doc No'.

    • wa_fieldcat-just = 'L'.

  • wa_fieldcat1-outputlen = '10'.

  • APPEND wa_fieldcat1 TO t_fieldcat1.

  • CLEAR wa_fieldcat1.

*

  • wa_fieldcat1-col_pos = '4'.

  • wa_fieldcat1-fieldname = 'AFDAT'.

  • wa_fieldcat1-tabname = 'T_ALV1'.

  • wa_fieldcat1-seltext_l = 'Due Date'.

    • wa_fieldcat-just = 'L'.

  • wa_fieldcat1-outputlen = '10'.

  • APPEND wa_fieldcat1 TO t_fieldcat1.

  • CLEAR wa_fieldcat1.

*

*

ENDFORM. " build_fieldcat1

&----


*& Form build_events1

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM build_events1 .

CLEAR wa_events.

wa_events-name = slis_ev_top_of_list.

wa_events-form = 'TOP1_OF_LIST'.

APPEND wa_events TO t_events1.

CLEAR wa_events.

ENDFORM. " build_events1

&----


*& Form top1_of_list

&----


  • text

----


FORM top1_of_list. "#EC CALLED

WRITE: 'Summarization of Rental profile'.

ENDFORM. "top1_of_list

&----


*& Form display_block1

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM display_block1 .

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'

EXPORTING

is_layout = t_layout1

it_fieldcat = t_fieldcat1[]

i_tabname = 'T_OUTPUT1'

it_events = t_events1[]

  • IT_SORT = t_sort1[]

  • I_TEXT =

TABLES

t_outtab = t_output1[]

EXCEPTIONS

program_error = 1

maximum_of_appends_reached = 2

OTHERS = 3

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " display_block1

&----


*& Form build_fieldcat2

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM build_fieldcat2 .

REFRESH t_fieldcat2.

CLEAR wa_fieldcat2.

wa_fieldcat2-col_pos = '1'.

wa_fieldcat2-fieldname = 'BPTYPE'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Billing Plan Type'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '35'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

wa_fieldcat2-col_pos = '2'.

wa_fieldcat2-fieldname = 'VBELN'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Billing Doc Number'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '18'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

wa_fieldcat2-col_pos = '3'.

wa_fieldcat2-fieldname = 'VBELV'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Contract Number'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '15'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

wa_fieldcat2-col_pos = '4'.

wa_fieldcat2-fieldname = 'FKART'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Billing doc Type'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '18'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

wa_fieldcat2-col_pos = '5'.

wa_fieldcat2-fieldname = 'POSNR'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Item'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '10'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

wa_fieldcat2-col_pos = '6'.

wa_fieldcat2-fieldname = 'USAGE'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Usage'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '30'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

wa_fieldcat2-col_pos = '7'.

wa_fieldcat2-fieldname = 'BFREQ'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Billing Frequency'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '30'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

wa_fieldcat2-col_pos = '8'.

wa_fieldcat2-fieldname = 'FKDAT'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Doc date'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '10'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

wa_fieldcat2-col_pos = '9'.

wa_fieldcat2-fieldname = 'AFDAT'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Due Date'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '15'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

wa_fieldcat2-col_pos = '10'.

wa_fieldcat2-fieldname = 'FAKWR'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Amount'.

<b>wa_fieldcat2-do_sum = 'X'. "SUM UPON DISPLAY

wa_fieldcat2-datatype = 'CURR'.</b>*

wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '15'.

wa_fieldcat2-do_sum = 'X'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

wa_fieldcat2-col_pos = '11'.

wa_fieldcat2-fieldname = 'WAERS'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Currency'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '10'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

wa_fieldcat2-col_pos = '12'.

wa_fieldcat2-fieldname = 'STATUS'.

wa_fieldcat2-tabname = 't_output2'.

wa_fieldcat2-seltext_l = 'Status'.

  • wa_fieldcat-just = 'L'.

wa_fieldcat2-outputlen = '20'.

APPEND wa_fieldcat2 TO t_fieldcat2.

CLEAR wa_fieldcat2.

  • DATA: GS_SORT TYPE SLIS_SORTINFO_ALV.

*

  • CLEAR GS_SORT.

  • GS_SORT-FIELDNAME = 'VBELV'.

  • GS_SORT-TabNAME = 't_output2'.

  • GS_SORT-SPOS = 1.

  • GS_SORT-down = 'X'.

  • GS_SORT-SUBTOT = 'X'.

  • APPEND GS_SORT TO GT_SORT.

*

ENDFORM. " build_fieldcat2

&----


*& Form build_events2

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM build_events2 .

CLEAR wa_events.

wa_events-name = slis_ev_top_of_list.

wa_events-form = 'TOP2_OF_LIST'.

APPEND wa_events TO t_events2.

CLEAR wa_events.

ENDFORM. " build_events2

----


  • --> p1 text

  • <-- p2 text

----


FORM top2_of_list. "#EC CALLED

WRITE: 'Detailed report'.

ENDFORM. "top1_of_list

&----


*& Form display_block2

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM display_block2 .

CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'

EXPORTING

is_layout = t_layout2

it_fieldcat = t_fieldcat2[]

i_tabname = 't_output2'

it_events = t_events2[]

  • IT_SORT = t_sort2[]

  • I_TEXT =

TABLES

t_outtab = t_output2[]

EXCEPTIONS

program_error = 1

maximum_of_appends_reached = 2

OTHERS = 3

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " display_block2

&----


*& Form Get_usage

&----


  • text

----


  • -->P_L_VKAUS text

  • <--P_L_USAGE text

----


FORM get_usage USING p_l_vkaus TYPE c

CHANGING p_l_usage TYPE c.

*Clear p_l_usage.

CASE p_l_vkaus.

WHEN 'L'.

p_l_usage = 'LEASE'.

WHEN 'CO'.

p_l_usage = 'CONSUMABLES'.

WHEN 'D'.

p_l_usage = 'SOLD'.

WHEN 'DL'.

p_l_usage = 'LEASE FOLLOWED BY DEMO'.

WHEN 'DR'.

p_l_usage = 'RENTAL FOLLOWED BY DEMO'.

WHEN 'DS'.

p_l_usage = 'SOLD FOLLOWED BY DEMO'.

WHEN 'E'.

p_l_usage = 'REPLACEMENT'.

WHEN 'R'.

p_l_usage = 'RENTAL'.

WHEN 'M'.

p_l_usage = 'SAMPLE'.

WHEN 'S'.

p_l_usage = 'SERIES'.

WHEN 'SE'.

p_l_usage = 'SERVICE'.

ENDCASE.

ENDFORM. " Get_usage

&----


*& Form get_bfreq

&----


  • text

----


  • -->P_T_OUTPUT2_PERIO text

  • <--P_L_PERIO text

----


FORM get_bfreq USING p_t_output2_perio

CHANGING p_l_perio.

CASE p_t_output2_perio.

WHEN '1'.

p_l_perio = 'Lunar'.

WHEN '2'.

p_l_perio = 'Monthly'.

WHEN '3'.

p_l_perio = 'Quarterly'.

WHEN '4'.

p_l_perio = 'Half Yearly'.

WHEN '5'.

p_l_perio = 'Yearly'.

ENDCASE.

ENDFORM. " get_bfreq