Skip to Content
0
Former Member
Sep 14, 2007 at 09:24 AM

hello this querry

77 Views

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