‎2007 Feb 20 11:14 AM
hai all,
need help in subroutine.
in a report program,
i had calculated to get the total collection amount and need to generate a list for every day.
on next day that collection amount must come as a poeninig balance at the top of the list.
this i had done using two subroutines.
i have to call the subroutine for opening balance for previous day's collection first. after that in have to calculate the todays collection.
how can i have this please give me a suggession.
thanks in advance.
this is my report.
i want the 'Progressive Total C/O ' from subroutine form f002_item_data. of today to be come in
'Progressive Total B/F -
-
' ,106 w_total_bf. of the subroutine form f001_progressive_total on next day..
here is the code.....
*&----
*
*& Report ZVR023_COLL_STATEMENT *
*& *
*&----
*
*& *
*& *
*&----
*
report zvr023_coll_statement no standard page heading .
*----
*
MODULE. MSD *
*----
*
Objective : *
Program : Updates Tables ( ) Downloads data ( ) *
Outputs List ( X ) *
Date Created *
Author *
Location *
LDB ..... *
*----
*
External Dependencies *
*----
*
Amendment History *
*----
*
Who Change ID Reason *
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ *
XXXXXXXXX AADDMMYYYY Where XXXX = Developers Name................. *
AA- Developers Initial ................................ *
*----
*
Includes *
*----
*
*INCLUDE : *
*----
*
Tables *
*----
*
tables : vbak,bsid,kna1,t001,adrc,vbrk,knvv.
*----
*
Types Begin with TY_ *
*----
*
types : begin of ty_cust,
belnr type bseg-belnr,
wrbtr type bseg-wrbtr,
xref1 type bseg-xref1,
kunnr type kna1-kunnr, " sarang
bschl type bseg-bschl,
hkont type bseg-hkont,
end of ty_cust.
types : begin of ty_bp,
kunnr type vbak-kunnr,
bukrs type bseg-bukrs,
budat type bkpf-budat,
end of ty_bp.
types : begin of ty_kna1,
kunnr type kna1-kunnr,
name1 type kna1-name1,
ort01 type kna1-ort01,
end of ty_kna1.
types : begin of ty_lst,
vbeln type vbrk-vbeln, " INVOICE NO
fkart type vbrk-fkart,
posnr type vbrp-posnr ,
fkimg type vbrp-fkimg , " qty
fkdat type vbrk-fkdat, " date
vkorg type vbrk-vkorg, " sales org
vtweg type vbrk-vtweg, " division
spart type vbrk-spart, " distribution
knumv type vbrk-knumv, " Number of the document condition
matnr type vbrp-matnr ,
med_prod type jptmg0-med_prod,
kunrg type vbrk-kunrg,
kwert type konv-kwert,
kbetr type konv-kbetr,
netwr type vbrk-netwr,
Address Details
KUNRG type vbrk-KUNRG,
name1 type kna1-name1,
stras type kna1-stras,
pstlz type kna1-pstlz,
***
***Added For Billing
bukrs type vbrk-bukrs, " Company code
xblnr type vbrk-xblnr, " Bill Ref
***************
ismpublication type mara-ismpublication,
Condition Type
kschl_zj01 type konv-kschl,
kschl_zdis type konv-kschl,
kschl_znet type konv-kschl,
kwert_zj01 type konv-kawrt, " Base Condition
kwert_zdis type konv-kawrt,
kwert_znet type konv-kawrt,
adrnr type kna1-adrnr,
****
end of ty_lst.
types : begin of ty_lst1,
vbeln type vbrk-vbeln, " INVOICE NO
fkart type vbrk-fkart,
fkdat type vbrk-fkdat, " date
fkimg type vbrp-fkimg, " qty
kunrg type vbrk-kunrg, " Payer
fkimg_1 type vbrp-fkimg, " qty
fkimg_2 type vbrp-fkimg, " qty
fkimg_3 type vbrp-fkimg, " qty
fkimg_4 type vbrp-fkimg, " qty
fkimg_5 type vbrp-fkimg, " qty
matnr type vbrp-matnr,
med_prod type jptmg0-med_prod,
kwert type konv-kwert,
kbetr type konv-kbetr,
netwr type vbrk-netwr,
Address Details
KUNRG type vbrk-KUNRG,
name1 type kna1-name1,
stras type kna1-stras,
pstlz type kna1-pstlz,
***
***Added For Billing
bukrs type vbrk-bukrs ,
xblnr type vbrk-xblnr,
***
ismpublication type mara-ismpublication,
****SPLIT FOR RATE
kbetr_1 type konv-kbetr,
kbetr_2 type konv-kbetr,
kbetr_3 type konv-kbetr,
***
Condition Type
kschl_zj01 type konv-kschl,
kschl_zdis type konv-kschl,
kschl_znet type konv-kschl,
kwert_zj01 type konv-kawrt, " Base Condition
kwert_zdis type konv-kawrt,
kwert_znet type konv-kawrt,
****
end of ty_lst1.
types : begin of ty_condition,
kschl type konv-kschl, " Condition Type
kwert type konv-kwert, " Condition Value
knumv type konv-knumv, " Document Condi
kposn type konv-kposn,
kbetr type konv-kbetr, " Condition Rate
end of ty_condition.
types : begin of ty_bkpf ,
belnr type bkpf-belnr,
gjahr type bkpf-gjahr,
bukrs type bkpf-bukrs,
end of ty_bkpf.
*----
*
Constants Begin with C_ *
*----
*
*CONSTANTS: *
*----
*
Data Begin with W_ *
*----
*
data : w_cnt type i .
*DATA : W_DMBTR TYPE BSID-DMBTR. " Open Value
*DATA : W_KWERT TYPE VBRP-FKIMG. " Invoice Value
*DATA : W_QTY_CON TYPE VBRP-FKIMG. " QTY
*DATA : W_TO_QTY_CON TYPE VBRP-FKIMG. " QTY
*DATA : W_DIFF TYPE BSID-DMBTR. " W_DIFF Bt Open & Invoice
*DATA : W_DMBTR_CR TYPE BSID-DMBTR. " Cr Value
*DATA : W_DMBTR_DR TYPE BSID-DMBTR. " Dr Value
*DATA : W_DMBTR_TO TYPE BSID-DMBTR. " Total Value
*DATA : W_KDGRP(2) .
*DATA : W_CNT_IS TYPE I.
*DATA : W_CNT_IS1 TYPE I.
*DATA : W_CNT_IS2 TYPE I.
*DATA : W_CNT_FIRST TYPE I.
*DATA : W_CNT_ITAB TYPE I.
*DATA : W_CNT_FIRST1(2).
*DATA : W_CNT_TAB(62),
W_CNT_TAB_HEA(62),
*data: W_CNT_POS TYPE I.
Variable for balance window
data : w_open_bal type dmshb_x8,
w_total_bf type dmshb_x8,
w_sub_tot type dmshb_x8,
w_total_co type dmshb_x8,
w_bill_bal type dmshb_x8,
w_drn_bal type dmshb_x8,
w_othr_chr type dmshb_x8,
w_total_bal type dmshb_x8,
w_coll_bal type dmshb_x8,
w_unsd_cr type dmshb_x8, "Unsold Credit
w_inceve type dmshb_x8, "Incentive
w_cr_nt type dmshb_x8. "Cr Note
data : w_pos type bseg-wrbtr. " Total Value
data : w_neg type bseg-wrbtr. " Total Value
data : w_du_start_date like sy-datum,
w_du_end_date like sy-datum .
**vARIABLE DEFINED FOR CONSOLIDATED WINDOW
data : w_prod_cnt type i .
data : w_prod_ch(2) .
data : w_prod_rate type i .
***
*----
*
Infotypes ( HR Module Specific) *
*----
*
*INFOTYPES : *
*----
*
Internal tables Begin with IT_ *
*----
*
data : it_bp type table of ty_bp with header line,
it_bp1 type table of ty_bp with header line,
it_bp2 type table of ty_bp with header line,
it_bp3 type table of ty_bp with header line,
it_kna1 type table of ty_kna1 with header line,
it_cust type table of ty_cust with header line,
it_cust1 type table of ty_cust with header line,
it_bkpf type table of ty_bkpf with header line,
it_cust2 type table of ty_cust with header line,
it_cust3 type table of ty_cust with header line.
data : it_pos like rfposxext occurs 1 with header line,
it_check like rfposxext occurs 1 with header line,
it_pos_bc1 like rfposxext occurs 1 with header line,
it_pos_bc like rfposxext occurs 1 with header line,
it_pos_nc like rfposxext occurs 1 with header line,
it_pos1 like rfposxext occurs 1 with header line,
it_sec like rfposxext occurs 1 with header line.
data : it_bal like rfposxext occurs 1 with header line.
data : w_text(100) type c.
data : w_cnt1(3).
data : l_date like mara-ismpublperiod .
data : p_date1 like jkpaz-jkpavon.
data : l_day_c(2).
data : l_month_c(2).
data : l_base_yr_c(4).
data : w_text1(100) type c.
data : w_text2(100) type c.
*----
*
Field Symbols Begin with FS_ *
*----
*
*FIELD-SYMBOLS: *
field-symbols: type ty_condition.
*----
*
Insert *
*----
*
*INSERT : *
*----
*
Select Options Begin with SO_ *
*----
*
selection-screen skip 1.
selection-screen: begin of block b1 with frame title text-001.
select-options : so_bukrs for vbrk-bukrs no intervals no-extension obligatory .
select-options : so_kunrg for vbrk-vkorg no intervals no-extension obligatory,
so_vkbur for knvv-vkbur no intervals no-extension ,
so_fkdat for bsid-budat no-extension obligatory ,
so_bdat1 for bsid-budat no-display ,
so_bdat3 for bsid-budat no-display ,
so_kunnr for kna1-kunnr no-display.
selection-screen: end of block b1.
*----
*
Parameters Begin with PR_ *
*----
*
*PARAMETERS : *
*----
*
selection-screen begin of block b3 with frame title text-003.
parameters pr_3 radiobutton group rad1.
parameters pr_4 radiobutton group rad1.
selection-screen end of block b3.
selection-screen begin of block b2 with frame title text-002.
parameters pr_1 radiobutton group rad.
parameters pr_2 radiobutton group rad.
selection-screen end of block b2.
*----
*
*INITIALISATION :
*----
*
At selection-screen *
*----
*
*AT SELECTION-SCREEN.
***********************************************************************
S T A R T O F S E L E C T I O N *
***********************************************************************
start-of-selection.
if pr_3 is not initial.
Code commented/added by Praveen on 20.07.2006
SELECT kunnr INTO CORRESPONDING FIELDS OF TABLE it_bp1 FROM knvv
WHERE vkorg IN so_kunrg
AND kunnr GE '0004000000'
AND kunnr LE '0004999999'.
select kunnr into corresponding fields of table it_bp1 from knvv
where vkorg in so_kunrg
and aufsd <> '01'
and kunnr ge '0004000000'
and kunnr le '0004999999' .
and
PLTYP ne 'HB'.
*ends here
endif.
if pr_4 is not initial.
clear so_kunnr[].
clear so_kunnr.
so_kunnr-sign = 'I'.
so_kunnr-option = 'BT'.
so_kunnr-low = '0001000000'.
so_kunnr-high = '0001999999'.
append so_kunnr.
so_kunnr-sign = 'I'.
so_kunnr-option = 'BT'.
so_kunnr-low = '0002000000'.
so_kunnr-high = '0002999999'.
append so_kunnr.
so_kunnr-sign = 'I'.
so_kunnr-option = 'BT'.
so_kunnr-low = '0007000000'.
so_kunnr-high = '0007999999'.
append so_kunnr.
Code commented/added by Praveen on 20.07.2006
select kunnr into corresponding fields of table it_bp1 from knvv
where vkorg in so_kunrg and
kunnr in so_kunnr and
vkbur in so_vkbur.
AND kunnr GE '0001000000'
AND kunnr LE '0001999999' .
select kunnr into corresponding fields of table it_bp1 from knvv
where vkorg in so_kunrg and
aufsd <> '01' and
kunnr in so_kunnr and
vkbur in so_vkbur.
AND kunnr GE '0001000000'
AND kunnr LE '0001999999' .
ends here
endif.
if pr_1 = 'X'.
perform cust_prog.
perform cust_line.
perform f001_progressive_total.
perform f002_item_data.
elseif pr_2 = 'X'.
perform cust_line.
perform f002_item_data.
endif.
*&----
*
*& Form cust_prog
*&----
*
text
*----
*
form cust_prog.
clear it_bp3[].
p_date1 = so_fkdat-low.
call function 'Z_VF053_DATE_GET_YEAR_MONTH'
exporting
i_date = p_date1
importing
e_dd = l_day_c
e_month = l_month_c
e_year = l_base_yr_c.
ranges so_bdat2 for bsid-budat.
clear : so_bdat3[].
if l_day_c > 01.
l_day_c = '01'.
concatenate l_base_yr_c l_month_c l_day_c into l_date.
so_bdat2-low = l_date.
so_bdat2-high = so_fkdat-low - 1.
else.
so_bdat2-low = '00000000'.
so_bdat2-high = '00000000'.
endif.
so_bdat2-sign = 'I'.
so_bdat2-option = 'BT'.
append so_bdat2 to so_bdat3.
select kunnr bukrs budat into corresponding fields of table it_bp3 from bsid
for all entries in it_bp1
where bukrs in so_bukrs
and kunnr = it_bp1-kunnr
and budat in so_bdat3.
select kunnr bukrs budat
appending corresponding fields of table it_bp3
from bsad
for all entries in it_bp1
where bukrs in so_bukrs
and kunnr = it_bp1-kunnr
and budat in so_bdat3.
sort it_bp3 by kunnr .
delete adjacent duplicates from it_bp3 comparing kunnr.
sort it_bp3 by kunnr .
clear w_total_bf.
endform. "cust_prog
*&----
*
*& Form cust_line
*&----
*
text
*----
*
form cust_line.
clear it_bp[].
select kunnr bukrs budat
into corresponding fields of table it_bp
from bsid
for all entries in it_bp1
where bukrs in so_bukrs
and kunnr = it_bp1-kunnr
and budat in so_fkdat.
select kunnr bukrs budat
appending corresponding fields of table it_bp
from bsad
for all entries in it_bp1
where bukrs in so_bukrs
and kunnr = it_bp1-kunnr
And budat in so_fkdat.
sort it_bp by kunnr .
delete adjacent duplicates from it_bp comparing kunnr.
sort it_bp by kunnr .
endform. "cust_line
*&----
*
*& Form f001_progressive_total
*&----
*
text
*----
*
form f001_progressive_total.
if not it_bp3[] is initial.
clear : w_text ,w_cnt,p_date1,l_base_yr_c, l_month_c,l_day_c,l_date.
w_cnt1 = sy-tabix .
*
CONCATENATE w_cnt1 ' Feaching Data ' INTO w_text.
*
*
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = w_text.
ranges so_bdat2 for bsid-bldat.
clear : so_bdat1[].
p_date1 = so_fkdat-low.
call function 'Z_VF053_DATE_GET_YEAR_MONTH'
exporting
i_date = p_date1
importing
e_dd = l_day_c
e_month = l_month_c
e_year = l_base_yr_c.
if l_day_c > 01.
l_day_c = '01'.
concatenate l_base_yr_c l_month_c l_day_c into l_date.
so_bdat2-low = l_date.
so_bdat2-high = so_fkdat-low - 1.
else.
l_day_c = so_fkdat-low.
so_bdat2-low = l_date.
so_bdat2-high = '00000000'.
endif.
so_bdat2-sign = 'I'.
so_bdat2-option = 'BT'.
append so_bdat2 to so_bdat1.
export so_bdat1 to memory id 'DATE1'.
export it_bp3 to memory id 'IT_BP3'.
clear : so_bdat1, it_bp3.
submit z_rfitemar1
with x_aisel = 'X'
with x_norm = 'X'
with dd_bukrs-low = so_bukrs-low "#EC *
and return.
clear : it_pos[], it_pos .
import it_pos from memory id 'zit_pos'.
free memory id 'zit_pos'.
delete it_pos where blart <> 'DZ'.
Here Plz Clear all the varible to avoid overlap
clear : w_open_bal,w_du_start_date,w_du_end_date.
select belnr bukrs gjahr into corresponding fields of table it_bkpf
from bkpf for all entries in it_pos where belnr = it_pos-belnr and gjahr = it_pos-gjahr
and bukrs = it_pos-bukrs and xreversal = ' '.
endif.
loop at it_pos.
clear it_bkpf.
read table it_bkpf with key bukrs = it_pos-bukrs belnr = it_pos-belnr gjahr = it_pos-gjahr.
if sy-subrc eq 0.
append it_pos to it_check.
endif.
endloop.
it_pos[] = it_check[].
***opening bal
since runtime error is coming while summing the alternate way is being used ... done by jayakumar on 11 10 06
LOOP AT it_pos .
SUM .
w_open_bal = it_pos-dmshb .
EXIT .
ENDLOOP .
**
loop at it_pos .
read table it_cust3 with key belnr = it_pos-belnr.
it_pos-dmshb = it_cust3-wrbtr.
w_open_bal = w_open_bal + it_pos-dmshb .
endloop .
if w_open_bal < 0 .
w_open_bal = w_open_bal * -1.
endif.
w_total_bf = w_total_bf + w_open_bal.
endif.
write :20 'Progressive Total B/F -
-
' ,106 w_total_bf.
skip 1 .
endform. "f001_progressive_total
*&----
*
*& Form f002_item_data
*&----
*
text
*----
*
form f002_item_data.
if not it_bp[] is initial.
select * into corresponding fields of table it_kna1 from kna1
for all entries in it_bp
where kunnr = it_bp-kunnr .
export so_fkdat to memory id 'DATE'.
export it_bp to memory id 'IT_BP'.
clear : so_fkdat, it_bp.
submit z_rfitemar1
with x_aisel = 'X'
with x_norm = 'X'
with dd_bukrs-low = so_bukrs-low "#EC *
and return.
DELETE it_pos WHERE u_xreversal <> ' '.
clear : it_pos[], it_pos .
import it_pos from memory id 'zit_pos'.
free memory id 'zit_pos'.
delete it_pos where blart <> 'DZ'.
sort it_pos by belnr.
APPEND LINES OF it_pos TO it_pos1.
DELETE ADJACENT DUPLICATES FROM it_pos COMPARING belnr." commented by sarang
clear : it_cust[], it_cust.
if not it_pos[] is initial.
select belnr wrbtr xref1 kunnr bschl
into corresponding fields of table it_cust
from bseg
for all entries in it_pos
where belnr = it_pos-belnr
and bukrs = it_pos-bukrs
and gjahr = it_pos-gjahr
and bschl in ('15','40') .
it_cust2[] = it_cust[].
delete it_cust where bschl ne 15.
delete it_cust2 where bschl ne 40.
sort it_pos by konto.
else.
write : 20 '**No Transaction to Display**'.
endif.
DELETE it_pos WHERE u_xreversal = 'X'.
tables bkpf.
loop at it_pos.
select single * from bkpf where belnr = it_pos-belnr and bukrs = it_pos-bukrs and gjahr = it_pos-gjahr and xreversal = ' '.
if sy-subrc = 0.
append it_pos to it_pos_bc1.
endif.
endloop.
clear it_pos.
it_pos[] = it_pos_bc1[].
sort it_pos by konto belnr xref3.
loop at it_pos.
read table it_cust2 with key belnr = it_pos-belnr.
on change of it_pos-konto or "IT_CUST2-xref1 or
it_pos-belnr.
it_pos_bc[] = it_pos[].
delete it_pos_bc[] where konto ne it_pos-konto.
delete it_pos_bc[] where belnr ne it_pos-belnr.
loop at it_pos_bc.
sum.
exit.
endloop.
append it_pos_bc to it_pos_nc.
endon.
endloop.
free it_pos.
it_pos[] = it_pos_nc[].
data : w_amt1 type bseg-dmbtr,
w_amt2 type bseg-dmbtr.
clear : w_amt1 , w_amt2.
sort it_pos by budat belnr konto.
data : w_ch(5) type c,
w_i type i.
w_i = 0.
loop at it_pos where shkzg = 'H' .
clear w_text.
w_i = w_i + 1 .
w_ch = w_i.
read table it_cust with key belnr = it_pos-belnr kunnr = it_pos-konto.
read table it_kna1 with key kunnr = it_pos-konto .
CONCATENATE it_kna1-name1 INTO w_text.
w_text = it_kna1-name1.
CONDENSE w_text NO-GAPS.
write : / w_ch left-justified , 07 it_pos-budat ,20 it_pos-belnr(10) ,31 it_pos-konto(10),42 w_text(60).
read table it_cust2 with key belnr = it_pos-belnr.
if it_cust2-xref1 = 'Cash Payment' or it_cust2-xref1 = 'Cash'.
if it_pos-dmshb < 0 .
it_pos-dmshb = it_pos-dmshb * -1 .
it_pos-dmshb = it_cust2-wrbtr.
else. "+PM28072006
it_pos-dmshb = it_pos-dmshb * -1 . "+PM28072006
it_pos-dmshb = it_cust2-wrbtr.
endif.
write : 72 it_pos-dmshb.
w_amt1 = w_amt1 + it_pos-dmshb.
else.
if it_pos-dmshb < 0 .
it_pos-dmshb = it_pos-dmshb * -1 .
it_pos-dmshb = it_cust2-wrbtr.
else. "+PM28072006
it_pos-dmshb = it_pos-dmshb * -1."+PM28072006
it_pos-dmshb = it_cust2-wrbtr.
endif.
write : 87 it_pos-dmshb.
w_amt2 = w_amt2 + it_pos-dmshb.
endif .
endloop .
else.
write : 20 '**No Transaction to Display**'.
endif.
clear : it_cust1[] ,w_pos .
it_cust1[] = it_cust[] .
sort it_cust1 by wrbtr.
delete it_cust1 where xref1 <> 'Cash Payment' .
delete it_cust1 where xref1 <> 'Cash' .
loop at it_cust1.
sum .
w_pos = it_cust1-wrbtr .
exit .
endloop .
clear :it_cust1[],w_neg .
it_cust1[] = it_cust[] .
sort it_cust1 by wrbtr.
delete it_cust1 where xref1 = 'Cash Payment' .
delete it_cust1 where xref1 = 'Cash' .
loop at it_cust1.
sum .
w_neg = it_cust1-wrbtr .
exit .
endloop .
if w_pos < 0.
w_pos = w_pos * -1 .
else. "+PM28072006
w_pos = w_pos * -1. "+PM28072006
endif.
if w_neg < 0.
w_neg = w_neg * -1 .
else. "+PM28072006
w_neg = w_neg * -1. "+PM28072006
endif.
write sy-uline(125) .
write : /20 'Total Collection Amount -
-
>'.
write : 76 w_amt1 ,91 w_amt2.
w_sub_tot = w_amt1 + w_amt2.
if w_sub_tot < 0.
w_sub_tot = w_sub_tot * -1.
endif.
write : 106 w_sub_tot.
if pr_1 = 'X'.
w_total_co = w_total_bf + w_sub_tot.
if w_total_co < 0.
w_total_co = w_total_co * -1.
endif.
write : /20 'Progressive Total C/O -
-
>'.
write : 106 w_total_co.
endif.
write sy-uline(125) .
endform. "f002_item_data
***
ENDIF .
*END-OF-SELECTION.
***********************************************************************
E N D O F S E L E C T I O N *
***********************************************************************
At line selection *
*----
*
*AT LINE-SELECTION.
*----
*
User Command Processing *
*----
*
*AT USER-COMMAND.
*----
*
Top Of Page *
*----
*
top-of-page.
select single * from t001 where bukrs = so_bukrs-low .
select single * from adrc where addrnumber = t001-adrnr . "EC *
write : /05 t001-butxt.
CONCATENATE adrc-house_num1 '-' adrc-street INTO w_text1.
CONCATENATE adrc-city1 '-' adrc-post_code1 INTO w_text2.
WRITE : /05 w_text1 .
WRITE : /05 w_text2 .
write : /05 'Sales Organisation:', so_kunrg-low.
write : /05 'Sales Office:', so_vkbur-low.
skip 1.
if pr_3 = 'X'.
write : /05 'Agent Circulation Collection Statement From ' , so_fkdat-low , ' to ' ,so_fkdat-high .
else.
write : /05 'Advertisement Collection Statement From ' , so_fkdat-low , ' to ' ,so_fkdat-high .
endif.
if pr_3 = 'X'.
write 😕 sy-uline(125) .
write :/07 'Date' ,20 'Doc No',31 'Code' ,42 'Agent Name & Place',84 'BY CASH' ,97 'BY CHQ/DD' ,115 'Prog. Total'.
write 😕 sy-uline(125) .
else.
write 😕 sy-uline(125) .
write :/07 'Date' ,20 'Doc No',31 'Code' ,42 'Advertisers Name' , 84 'BY CASH' ,97 'BY CHQ/DD' ,115 'Prog. Total'.
write 😕 sy-uline(125) .
endif .
*----
*
End Of Page *
*----
*
END-OF-PAGE.END-OF-PAGE.
‎2007 Feb 20 11:24 AM
Hello Selvi
There is no need to use two subroutine. Actually, this would be bad programming. Instead use a switch for your subroutine which determines whether the calculation should be done for the actual and the previous day, e.g.:
PERFORM do_calculation
USING 'X' " 'X' = calculate for previous day as well
USING p_date " current date
CHANGING gt_list. " itab with list dataAnd that's how the subroutine could look like:
FORM do_calculation
USING VALUE(ud_calculate_previous_day) TYPE c
VALUE(ud_date) TYPE d
CHANGING ct_list TYPE <table type>.
* define local data
DATA:
ld_date_prev TYPE d,
lt_list_prev TYPE <table type>. " list for previous day
* Do the calculations for the current day
...
IF ( ud_calculate_previous_day = 'X' ).
ld_date_prev = ud_date - 1.
PERFORM do_calculation
USING ' ' " ' ' = no calculation for previous day
ld_date_prev
CHANGING lt_list_prev. " itab with list data
ENDIF.
* Post-processing after calculation for both days
...
ENDFORM.Regards
Uwe