hello guru's
pls help this querry..
am giving prgm code pls explained th logic and from where the data is fetching and how its working. i want alll the details of program. pls help. i will giv full points....
arjun
report zrvp2222 message-id zz line-size 132 line-count 36
no standard page heading.
zrvp2222 - OTDB Report, WeekToDate [Z_ONTIME_WK]
co.qt 1595(0982).794 devk925285/318/391 11oct04 jcr initial install
cp.qt 0217.0887 devk926914 04may05 - simplify operations; fy06
include zrvp2222_00. " top
initialization.
perform init_screen.
at selection-screen.
if sscrfields-ucomm = 'FC01'.
call function 'Z_OTDB_POPUP_LOAD_DATES'.
endif.
at selection-screen output.
perform set_screen_fields.
top-of-page.
perform hof.
start-of-selection. " MAIN
perform hskp.
get and total data
perform bld_dy_tables.
perform bld_fp_tables.
perform bld_qt_tables. commit work.
perform output_summary.
perform output_bu.
eject----
*& Form init_screen
&----
load: button description, standard business units;
setup screen depending on user: Operator|R3admin or not
----
form init_screen.
move 'OTDB Date Info' to sscrfields-functxt_01.
s_bu-sign = 'I'.
s_bu-option = 'EQ'.
select bunit
from z145
into (s_bu-low)
where bunit between '01' and '05'
order by bunit.
append s_bu.
endselect."z145
if sy-subrc <> 0.
message x022 with 'z145 load fail:' sy-subrc.
endif."subrc
perform set_screen_fields.
endform. " init_screen
eject----
*& Form hof
&----
head of form.
----
form hof.
write: 001 text-h10.
write: 009 sy-datum,
094 sy-uzeit.
write:/001 text-h20.
write:/001 text-h30,
046 'Fiscal Week',
g_wknbr.
write:/001 text-h40.
skip 1.
endform. " hof
eject----
*& Form hskp
&----
lock otdb (shared); get z135 and edit screen date; load date
ranges for week, fiscal period, fiscal quarter
----
form hskp.
data: ls_chrdate type z170. " date in character format
data: l_tgtdate type sy-datum. " target date for report
data: l_date type sy-datum. " initially, sy-datum; allow for
"testing
data: l_dow type langt. " weekday name
call function 'Z_OTDB_LOCK_DB'
exporting
i_mode = 'S'
exceptions
lock_fail = 1
others = 2.
if sy-subrc <> 0.
message e001 with sy-msgv1 'has OTDB locked!'.
endif."subrc
select single *
from z135
into gs_dcon
where funcid = 'LOAD'.
if sy-subrc <> 0.
message x002 with 'z135 not found'.
endif."subrc
*
if pa_std = 'X'.
l_date = sy-datum.
write l_date to ls_chrdate. " use for testing special dates
perform get_dow using l_date changing l_dow.
case l_dow.
when 'Monday'.
case ls_chrdate-dd.
when '01'. " yesterday (sunday) is monthend
l_tgtdate = l_date - 2.
perform load_ra using l_tgtdate.
perform inc_wkend.
when '03'. " previous friday is monthend
l_tgtdate = l_date - 3.
perform load_ra using l_tgtdate.
when others. " no monthend; normal saturday week end
l_tgtdate = l_date - 2.
perform load_ra using l_tgtdate.
endcase."chrdate
when others. " use yesterday; adjust week begin for
" sunday = 02
l_tgtdate = l_date - 1.
perform load_ra using l_tgtdate.
write l_tgtdate to ls_chrdate.
if ls_chrdate-dd = '02'
and l_dow = 'Sunday'.
perform dec_wkbeg.
endif."day, date
endcase."dow
else. " use whatever date user entered
l_tgtdate = m_vdatu.
perform load_ra using l_tgtdate.
endif."std
endform. " hskp
eject----
*& Form do_over
&----
date from screen not found; if online, leave (does not return!)
program and re-execute; if batch, abort.
user entered a bad date or there's a system problem
----
form do_over.
if sy-batch is initial.
message i003 with 'Date not found on OTDB; <cr> then'
'click OTDB DATE INFO button'.
leave to transaction 'Z_ONTIME_WK'.
else.
message x004 with 'Date not found on OTDB' m_vdatu.
endif.
endform. " do_over
eject----
*& Form bld_dy_tables
&----
build day tables for week: week summed on date, summed on bu,
grand total; calc percents for each.
----
form bld_dy_tables.
data: lt_sum type z140 occurs 0. " summarized on date
get data summarized on date for the week
call function 'Z_OTDB_SUMMARIZE_HEADER'
exporting
i_get_header = 'X'
i_summarize_date = 'X'
tables
it_bu = s_bu
it_vdatu = gr_dy
et_op = lt_sum
exceptions
syserr_level = 1
nothing_found = 2
no_date_range = 3
fisc_cal_fail = 4
others = 5.
if sy-subrc <> 0.
if sy-subrc = 2.
perform do_over.
else.
message x005 with 'syserr' sy-subrc.
endif.
endif."subrc
summarize data on bu, all bu's
call function 'Z_OTDB_ROLLUP_BU_GRAND'
exporting
i_bu = 'X'
i_grand = 'X'
tables
it_ip = lt_sum
et_bu = gt_dybu
et_grand = gt_dygr.
summarize bu and date
call function 'Z_OTDB_ROLLUP_BU_GRAND'
exporting
i_date = 'X'
tables
it_ip = lt_sum
et_bu = gt_budy.
summarize all bu's on date
call function 'Z_OTDB_ROLLUP_BU_GRAND'
exporting
i_budate = 'X'
tables
it_ip = lt_sum
et_bu = gt_bugr.
calc percents
call function 'Z_OTDB_CALC_PERCENTS'
tables
iet_tgt = lt_sum.
call function 'Z_OTDB_CALC_PERCENTS'
tables
iet_tgt = gt_dybu.
call function 'Z_OTDB_CALC_PERCENTS'
tables
iet_tgt = gt_dygr.
call function 'Z_OTDB_CALC_PERCENTS'
tables
iet_tgt = gt_budy.
call function 'Z_OTDB_CALC_PERCENTS'
tables
iet_tgt = gt_bugr.
save the day detail; sort tables
gt_dy = lt_sum.
sort gt_dy by bunit vdatu.
sort gt_dybu by bunit.
sort gt_budy by bunit vdatu.
sort gt_bugr by vdatu.
endform. " bld_dy_tables
eject----
*& Form bld_fp_tables
&----
build fiscal period tables: summed on bu, grand total;
calc percents for each.
note date detail not needed: date info in day tables is used
----
form bld_fp_tables.
data: lt_sum type z140 occurs 0. " summarized on fiscal period
get data summarized on date for the week
call function 'Z_OTDB_SUMMARIZE_HEADER'
exporting
i_get_header = 'X'
i_summarize_fp = 'X'
tables
it_bu = s_bu
it_vdatu = gr_fp
et_op = lt_sum
exceptions
syserr_level = 1
nothing_found = 2
no_date_range = 3
fisc_cal_fail = 4
others = 5.
if sy-subrc <> 0.
if sy-subrc = 2.
perform do_over.
else.
message x014 with 'syserr' sy-subrc.
endif.
endif."subrc
summarize data on bu, all bu's
call function 'Z_OTDB_ROLLUP_BU_GRAND'
exporting
i_bu = 'X'
i_grand = 'X'
tables
it_ip = lt_sum
et_bu = gt_fpbu
et_grand = gt_fpgr.
call function 'Z_OTDB_CALC_PERCENTS'
tables
iet_tgt = gt_fpbu.
call function 'Z_OTDB_CALC_PERCENTS'
tables
iet_tgt = gt_fpgr.
save the fp detail; sort tables
sort gt_fpbu by bunit.
endform. " bld_fp_tables
eject----
*& Form bld_qt_tables
&----
build fiscal quarter tables: summed on bu, grand total;
calc percents for each.
note date detail not needed: date info in day tables is used
----
form bld_qt_tables.
data: lt_sum type z140 occurs 0. " summarized on fiscal quarter
get data summarized on date for the week
call function 'Z_OTDB_SUMMARIZE_HEADER'
exporting
i_get_header = 'X'
i_summarize_quarter = 'X'
tables
it_bu = s_bu
it_vdatu = gr_qt
et_op = lt_sum
exceptions
syserr_level = 1
nothing_found = 2
no_date_range = 3
fisc_cal_fail = 4
others = 5.
if sy-subrc <> 0.
if sy-subrc = 2.
perform do_over.
else.
message x018 with 'syserr' sy-subrc.
endif.
endif."subrc
summarize data on bu, all bu's
call function 'Z_OTDB_ROLLUP_BU_GRAND'
exporting
i_bu = 'X'
i_grand = 'X'
tables
it_ip = lt_sum
et_bu = gt_qtbu
et_grand = gt_qtgr.
call function 'Z_OTDB_CALC_PERCENTS'
tables
iet_tgt = gt_qtbu.
call function 'Z_OTDB_CALC_PERCENTS'
tables
iet_tgt = gt_qtgr.
save the quarter detail; sort tables
sort gt_qtbu by bunit.
endform. " bld_qt_tables
eject----
*& Form output_summary
&----
otifne section: wtd, mtd, qtd on page 1
----
form output_summary.
WTD
write:/023 'Fiscal Week',
g_wknbr,
'(' no-gap,
gr_dy-low mm/dd/yy no-gap, '-' no-gap,
gr_dy-high mm/dd/yy no-gap,
')'.
if gr_dy-high > gs_dcon-erdat.
write: 'thru', gs_dcon-erdat mm/dd/yy.
endif."dy-high
write:/022(58) sy-uline.
write:/023 text-i10.
write:/022(58) sy-uline.
perform print_summary tables s_bu gt_dygr gt_dybu.
skip 4.
FP
write:/023 'Fiscal Period',
g_fpnbr,
'(' no-gap,
gr_fp-low mm/dd/yy no-gap, '-' no-gap,
gr_fp-high mm/dd/yy no-gap,
')'.
if gr_fp-high > gs_dcon-erdat.
write: 'thru', gs_dcon-erdat mm/dd/yy.
endif."dy-high
write:/022(58) sy-uline.
write:/023 text-i10.
write:/022(58) sy-uline.
perform print_summary tables s_bu gt_fpgr gt_fpbu.
skip 4.
QTR
write:/023 'Fiscal Qtr.',
g_qtnbr,
'(' no-gap,
gr_qt-low mm/dd/yy no-gap, '-' no-gap,
gr_qt-high mm/dd/yy no-gap,
')'.
if gr_qt-high > gs_dcon-erdat.
write: 'thru', gs_dcon-erdat mm/dd/yy.
endif."dy-high
write:/022(58) sy-uline.
write:/023 text-i10.
write:/022(58) sy-uline.
perform print_summary tables s_bu gt_qtgr gt_qtbu.
new-page.
endform. " output_summary
eject----
*& Form output_bu
&----
detail section: wtd for all bu's then each in turn
----
form output_bu.
all bu's
write:/015 'All Business Units'.
write:/014(118) sy-uline.
write:/015 text-s05.
write:/015 text-s10.
write:/015 text-s20.
write:/015 text-s30.
write:/014(118) sy-uline.
perform print_bu tables gt_bugr gt_dygr using space.
new-page.
01: USA
write:/015 '01: USA'.
write:/014(118) sy-uline.
write:/015 text-s05.
write:/015 text-s10.
write:/015 text-s20.
write:/015 text-s30.
write:/014(118) sy-uline.
perform print_bu tables gt_budy gt_dybu using '01'.
new-page.
02: Asia
write:/015 '02: Asia'.
write:/014(118) sy-uline.
write:/015 text-s05.
write:/015 text-s10.
write:/015 text-s20.
write:/015 text-s30.
write:/014(118) sy-uline.
perform print_bu tables gt_budy gt_dybu using '02'.
new-page.
03: PA
write:/015 '03: PA'.
write:/014(118) sy-uline.
write:/015 text-s05.
write:/015 text-s10.
write:/015 text-s20.
write:/015 text-s30.
write:/014(118) sy-uline.
perform print_bu tables gt_budy gt_dybu using '03'.
new-page.
04: EMEA
write:/015 '04: EMEA'.
write:/014(118) sy-uline.
write:/015 text-s05.
write:/015 text-s10.
write:/015 text-s20.
write:/015 text-s30.
write:/014(118) sy-uline.
perform print_bu tables gt_budy gt_dybu using '04'.
new-page.
05: IA
write:/015 '05: IA'.
write:/014(118) sy-uline.
write:/015 text-s05.
write:/015 text-s10.
write:/015 text-s20.
write:/015 text-s30.
write:/014(118) sy-uline.
perform print_bu tables gt_budy gt_dybu using '05'.
endform. " output_bu
eject----
*& Form print_summary
&----
first page of report is the summary (ontime and infull lines)
aka otifne
----
-->PR_BU range of bu's from selection screen
-->PT_XXGR detail, grand totals
-->PT_XXBU detail, bu by date
----
form print_summary tables pr_bu structure s_bu
pt_xxgr structure z140
pt_xxbu structure z140.
OnTime and InFull field tables
data: lt_otd type z140-pc_ot occurs 0 with header line.
data: lt_if type z140-pc_ot occurs 0 with header line.
data: ls_ip type z140. " work area for grand/bu detail
data: l_pp type p. " print position
loop at pt_xxgr into ls_ip.
lt_otd = ls_ip-pc_ot. append lt_otd.
lt_if = ls_ip-pc_if. append lt_if.
endloop."xxgr
loop at pr_bu.
clear: lt_otd, lt_if, ls_ip.
loop at pt_xxbu into ls_ip where bunit = pr_bu-low.
lt_otd = ls_ip-pc_ot.
lt_if = ls_ip-pc_if.
endloop."xxgr
append: lt_otd, lt_if.
endloop."bu
write:/011 '% On Time'.
l_pp = 21.
loop at lt_otd.
write: at l_pp lt_otd no-gap no-sign no-zero.
l_pp = l_pp + 10.
endloop."otd
write:/011 '% In Full'.
l_pp = 21.
loop at lt_if.
write: at l_pp lt_if no-gap no-sign no-zero.
l_pp = l_pp + 10.
endloop."if.
endform. " print_summary
eject----
*& Form print_bu
&----
write wtd bu detail
----
-->PT_DTL bu detail
-->PT_GR grand total for detail
-->P_BU bu number or blank
----
form print_bu tables pt_dtl structure z140
pt_gr structure z140
using p_bu type z140-bunit.
data: ls_dtl type z140. " work area
data: lr_bu type zbunit_range_tab " bu range of
with header line. " one value
data: l_dyname type hrvsched-daytxt.
lr_bu-sign = 'I'.
if p_bu is initial.
lr_bu-low = '*'.
lr_bu-option = 'CP'.
else.
lr_bu-low = p_bu.
lr_bu-option = 'EQ'.
endif."p_bu
append lr_bu.
loop at pt_dtl into ls_dtl where bunit = p_bu.
call function 'RH_GET_DATE_DAYNAME'
exporting
langu = sy-langu
date = ls_dtl-vdatu
importing
daytxt = l_dyname
exceptions
no_langu = 1
no_date = 2
no_daytxt_for_langu = 3
invalid_date = 4
others = 5.
if sy-subrc <> 0.
message x006 with 'rhgetdayname fail:'
sy-subrc ls_dtl-vdatu.
endif."subrc
write:/ l_dyname+0(3),
ls_dtl-vdatu mm/dd/yy,
016 ls_dtl-pc_ot no-sign no-zero,
025(007) ls_dtl-cnt_tl no-sign no-zero,
036(007) ls_dtl-cnt_ot no-sign no-zero,
049 ls_dtl-pv_ot no-sign no-zero,
059(012) ls_dtl-val_tl no-sign no-zero decimals 0,
072(012) ls_dtl-val_ot no-sign no-zero decimals 0,
086(007) ls_dtl-cnt_cr no-sign no-zero,
096(012) ls_dtl-val_cr no-sign no-zero decimals 0,
114 ls_dtl-pc_cr no-sign no-zero,
124 ls_dtl-pv_cr no-sign no-zero.
endloop."ls_dtl
loop at pt_gr into ls_dtl where bunit = p_bu.
write:/001 'WTD',
013 '=>',
016 ls_dtl-pc_ot no-sign no-zero,
025(007) ls_dtl-cnt_tl no-sign no-zero,
036(007) ls_dtl-cnt_ot no-sign no-zero,
049 ls_dtl-pv_ot no-sign no-zero,
059(012) ls_dtl-val_tl no-sign no-zero decimals 0,
072(012) ls_dtl-val_ot no-sign no-zero decimals 0,
086(007) ls_dtl-cnt_cr no-sign no-zero,
096(012) ls_dtl-val_cr no-sign no-zero decimals 0,
114 ls_dtl-pc_cr no-sign no-zero,
124 ls_dtl-pv_cr no-sign no-zero.
endloop."lt_gr
check sy-subrc <> 0.
write:/001 'WTD',
013 '=> No Sales'.
endform. " print_bu
eject----
*& Form get_dow
&----
get the day of week for input date
----
-->U_DATE input date
<--C_DOW returned day of week
----
form get_dow using u_date type sy-datum
changing c_dow type langt.
data: lta_casdayattr type table of casdayattr.
data: ls_casdayattr type casdayattr.
data: l_returncode type sy-subrc.
call function 'DAY_ATTRIBUTES_GET'
exporting
date_from = u_date
date_to = u_date
importing
returncode = l_returncode
tables
day_attributes = lta_casdayattr
exceptions
factory_calendar_not_found = 1
holiday_calendar_not_found = 2
date_has_invalid_format = 3
date_inconsistency = 4
others = 5.
if sy-subrc <> 0 or l_returncode <> 0.
message x007 with 'dayattributesget fail:'
u_date l_returncode sy-subrc.
endif.
loop at lta_casdayattr into ls_casdayattr.
c_dow = ls_casdayattr-weekday_l.
exit.
endloop."casdayattr
endform. " get_dow
eject----
*& Form load_ra
&----
edit target date; load fiscal week/period/quarter ranges
----
-->U_TGTDATE date used to identify fiscal info
----
form load_ra using u_tgtdate type sy-datum.
if not u_tgtdate between gs_dcon-begda and gs_dcon-erdat.
perform do_over.
endif."tgtdaye
call function 'Z_OTDB_BLD_RANGES_FOR_DATE'
exporting
i_date = u_tgtdate
importing
e_week = g_wknbr
e_period = g_fpnbr
e_quarter = g_qtnbr
tables
et_week = gr_dy
et_period = gr_fp
et_quarter = gr_qt
exceptions
syserr = 1
others = 2.
if sy-subrc <> 0.
perform do_over.
endif."subrc
endform. " load_ra
eject----
*& Form inc_wkend
&----
increment the end of the week one day
----
form inc_wkend.
loop at gr_dy.
gr_dy-high = gr_dy-high + 1.
modify gr_dy.
endloop."week
endform. " inc_wkend
&----
*& Form dec_wkbeg
&----
decrement the beginning of week one day
----
form dec_wkbeg.
loop at gr_dy.
gr_dy-low = gr_dy-low - 1.
modify gr_dy.
endloop."week
endform. " dec_wkbeg
eject----
*& Form set_screen_fields
&----
set visible fields on sel scrn depending on login name
----
form set_screen_fields.
case sy-uname.
when 'OPERATOR' or 'R3ADMIN'.
loop at screen.
if screen-name = 'PA_STD'. " show field
screen-active = 1.
screen-input = 1.
screen-output = 1.
screen-invisible = 0.
modify screen.
elseif
screen-name = 'M_VDATU'. " not obligatory
screen-required = 0.
modify screen.
endif."screen
endloop."screen
if m_vdatu is initial.
pa_std = 'X'. " operator default
endif."vdatu
when others.
loop at screen.
if screen-name = 'PA_STD' " hide field
or screen-name = '%C311010_1000'. " hide comments
screen-active = 0.
screen-input = 0.
screen-output = 0.
screen-invisible = 1.
modify screen.
endif."screen
endloop."screen
if m_vdatu is initial.
m_vdatu = sy-datum - 1. " default yesterday
endif."vdatu
endcase."uname
endform. " set_screen_fields