2007 Jun 06 1:53 PM
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®ards
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®ards
sambasiva rao
2007 Jun 06 1:58 PM
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
2007 Jun 06 2:01 PM
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
2007 Jul 05 6:49 AM
Hi Vasanth,
Can u send the complete code so that i can understand or otherwise can u send the sample program.
2007 Jul 05 7:03 AM
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
2007 Jul 05 7:06 AM
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
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |