Thursday, December 22, 2011
Play Music/Video from ABAP
Will be updated soon ..
Any Suggestions would be highly appreciated.
Any Suggestions would be highly appreciated.
Get ZL entries using FM 'HR_TIME_RESULTS_GET'
*&---------------------------------------------------------------------*
*& Report ZTEST_ZL_ENTRIES
*&---------------------------------------------------------------------*
REPORT ZTEST_ZL_ENTRIES MESSAGE-ID zz.
TABLES : pa0001 , t549a , t549q .*--Types declaration
TYPES: BEGIN OF t_t569v,
abkrs TYPE t569v-abkrs, "Payroll Area
pabrj TYPE t569v-pabrj, "Accounting year
pabrp TYPE t569v-pabrp, "Accounting period
END OF t_t569v.*--For PA0001
TYPES: BEGIN OF ty_0001,
pernr TYPE pa0001-pernr,
begda TYPE pa0001-begda,
werks TYPE pa0001-werks,
END OF ty_0001.*--Final internal table
TYPES: BEGIN OF ty_final,
PERNR TYPE PA0000-PERNR,
reg_hour(8) TYPE c,
ot_hour(8) TYPE c,
END OF ty_final.
*--Internal table and work area declarations
DATA : it_0001 TYPE STANDARD TABLE OF ty_0001,
wa_0001 TYPE ty_0001,
it_final TYPE STANDARD TABLE OF ty_final,
wa_final TYPE ty_final,
it_zl type standard table of pc2bf,
wa_zl type pc2bf,
wa_t569v TYPE t_t569v.
*--Global variables declarationDATA : gv_lines TYPE i,
gv_pabrj TYPE t569v-pabrj, "Accounting year
gv_pabrp TYPE t569v-pabrp, "Accounting period
gv_iperm TYPE pc261-iperm. "Period parameters
*--Constants declaration
CONSTANTS: gc_vwsaz TYPE t569v-vwsaz VALUE 01.
*--Payroll period selections
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(20) text-002.
SELECT-OPTIONS: s_abkrs FOR pa0001-abkrs NO INTERVALS
NO-EXTENSION OBLIGATORY.
SELECTION-SCREEN POSITION 32.
SELECTION-SCREEN COMMENT 34(05) text-007 MODIF ID dtg.
SELECTION-SCREEN POSITION 40.
PARAMETERS: p_begda TYPE sy-datum MODIF ID dtg.
SELECTION-SCREEN COMMENT 52(03) text-006 MODIF ID dtg.
SELECTION-SCREEN POSITION 57.
PARAMETERS: p_endda TYPE sy-datum MODIF ID dtg.
SELECTION-SCREEN END OF LINE.
*-- Current period
SELECTION-SCREEN BEGIN OF LINE .
PARAMETERS: rb_timr9 TYPE qppnp-timr9 RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT 04(20) text-003 FOR FIELD rb_timr9.
SELECTION-SCREEN POSITION 25.
PARAMETERS: p_dispp TYPE qppnp-pabrp MODIF ID cpi,
p_dispj TYPE qppnp-pabrj MODIF ID cpi.
SELECTION-SCREEN END OF LINE.
*-- Other period
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: rb_timra TYPE qppnp-timra RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT 04(20) text-004 FOR FIELD rb_timra.
SELECTION-SCREEN POSITION 25.
PARAMETERS: p_pabrp TYPE qppnp-pabrp,
p_pabrj TYPE qppnp-pabrj.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.
*--Personnel area , number , file
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-005.
PARAMETERS: p_werks TYPE pa0001-werks.
SELECT-OPTIONS : s_pernr FOR pa0001-pernr.
SELECTION-SCREEN END OF BLOCK b2.*-----------------------------------------------------------------------
* A T S E L E C T I O N S C R E E N O U T P U T
*-----------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
*-- Display valid period parameters
PERFORM display_periods.*-----------------------------------------------------------------------
* A T S E L E C T I O N S C R E E N
*-----------------------------------------------------------------------
AT SELECTION-SCREEN.
*-- Validate control recordPERFORM validate_abkrs.
*-- Validate periods
PERFORM validate_periods.
*-- Get dates from periods
PERFORM get_dates.
*-----------------------------------------------------------------------
* START OF SELECTION
*-----------------------------------------------------------------------
START-OF-SELECTION.
*-- Get initial data for the selection screen parameters
PERFORM get_data.
*--Populate final data
PERFORM fill_final.
*-----------------------------------------------------------------------
* END OF SELECTION
*-----------------------------------------------------------------------
END-OF-SELECTION.
*--Write log as to how many records are downloaded
PERFORM write_log.
*&---------------------------------------------------------------------*
*& Form display_periods
*&---------------------------------------------------------------------*
* Display valid period parameters
*----------------------------------------------------------------------*
FORM display_periods.
LOOP AT SCREEN.
CASE screen-group1.
WHEN 'CPI'.
*-- If current period, display current period information
IF rb_timr9 = 'X'.
screen-input = '0'.
screen-output ='1'.
screen-invisible = '0'.
ELSE.
screen-input = '0'.
screen-output ='0'.
screen-invisible = '1'.
ENDIF.
MODIFY SCREEN.
*-- If other period is selected, display other period info
WHEN 'DTG'.
IF p_begda IS INITIAL.
screen-input = '0'.
screen-output ='0'.
screen-invisible = '1'.
ELSE.
screen-input = '0'.
screen-output ='1'.
screen-invisible = '0'.
ENDIF.
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
ENDFORM. " display_periods
*&---------------------------------------------------------------------*
*& Form validate_periods
*&---------------------------------------------------------------------*
* Validate periods
*----------------------------------------------------------------------*
FORM validate_periods.
*-- If current period is selected retrieve information from control
* record
IF rb_timr9 = 'X'.
IF NOT p_pabrp IS INITIAL OR
NOT p_pabrj IS INITIAL .
MESSAGE e000 WITH
'Other period value not allowed with Current Period'.
ENDIF.
gv_pabrp = wa_t569v-pabrp.
p_dispp = gv_pabrp.
gv_pabrj = wa_t569v-pabrj.
p_dispj = gv_pabrj.
ELSE.
*-- If other period is selected, validate required parameters
CLEAR: p_dispp,
p_dispj.
IF p_pabrp EQ 0 .
SET CURSOR FIELD 'P_PABRP' .
MESSAGE e000 WITH 'Invalid Accounting Month'.
ELSEIF p_pabrj EQ 0 .
SET CURSOR FIELD 'P_PABRJ'.
MESSAGE e000 WITH 'Invalid Accounting Year'.
ELSE.
gv_pabrp = p_pabrp.
gv_pabrj = p_pabrj.
ENDIF.
ENDIF.
ENDFORM. " validate_periods
*&---------------------------------------------------------------------*
*& Form validate_abkrs
*&---------------------------------------------------------------------*
* Validate control record
*----------------------------------------------------------------------*
FORM validate_abkrs.
DATA : gv_subrc type sy-subrc.
*-- Check the control record
LOOP AT s_abkrs.
SELECT SINGLE abkrs
pabrj
pabrp
FROM t569v
INTO wa_t569v
WHERE abkrs = s_abkrs-low AND
vwsaz = gc_vwsaz.
gv_subrc = sy-subrc.
ENDLOOP.
IF gv_subrc <> 0.
MESSAGE e000 WITH 'Control Record Not Found'.
ENDIF.
ENDFORM. " validate_abkrs
*&---------------------------------------------------------------------*
*& Form get_dates
*&---------------------------------------------------------------------*
* Get dates from periods
*----------------------------------------------------------------------*
FORM get_dates.
*-- Find the period modifier
LOOP AT s_abkrs.
SELECT SINGLE * FROM t549a WHERE abkrs = s_abkrs-low.
IF sy-subrc <> 0.
MESSAGE e000 WITH 'Period modifier does not exist!'.
ENDIF.
ENDLOOP.
*-- Save off period modifier
gv_iperm = t549a-permo.
*-- Determine the dates for the requested period
SELECT SINGLE * FROM t549q WHERE permo = gv_iperm AND
pabrj = gv_pabrj AND
pabrp = gv_pabrp.
IF sy-subrc <> 0.
MESSAGE e505(pg) WITH gv_pabrj gv_pabrp t549a-permo.
ELSE.
MOVE t549q-begda TO p_begda.
MOVE t549q-endda TO p_endda.
ENDIF.
ENDFORM. " get_dates*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* Get data from PA0001
*----------------------------------------------------------------------*
FORM get_data .
*--Get data from PA0001
SELECT pernr begda werks
INTO TABLE it_0001
FROM pa0001
WHERE pernr IN s_pernr
AND endda GE p_begda
AND begda LE p_endda
AND werks EQ p_werks
AND abkrs IN s_abkrs.
IF sy-subrc = 0.
SORT it_0001 BY pernr begda DESCENDING.
DELETE ADJACENT DUPLICATES FROM it_0001 COMPARING pernr.
ENDIF.
ENDFORM. " get_data*&---------------------------------------------------------------------*
*& Form fill_final
*&---------------------------------------------------------------------*
* Fill final internal table
*----------------------------------------------------------------------*
FORM fill_final .
CLEAR : it_final[] , wa_final.*--Loop thru PA0001 entries
LOOP AT it_0001 INTO wa_0001.
wa_final-pernr = wa_0001-pernr.
*--Get time results for the pernr and given payroll period and year
CALL FUNCTION 'HR_TIME_RESULTS_GET'
EXPORTING
get_pernr = wa_0001-pernr
get_pabrj = gv_pabrj
get_pabrp = gv_pabrp
get_cltyp = '1'
TABLES
get_zl = it_zl
EXCEPTIONS
no_period_specified = 1
wrong_cluster_version = 2
no_read_authority = 3
cluster_archived = 4
technical_error = 5.
*--Fill Hours for the wage types from ZL structure
LOOP AT it_zl INTO wa_zl.
*--Fill temp dept
CASE wa_zl-lgart.
*--For Regular hours
WHEN '3REG'. " Regular hours
wa_final-reg_hour = wa_final-reg_hour + wa_zl-anzhl.
*--For Overtime hours
WHEN '3OVT'. " Overtime hours
wa_final-ot_hour = wa_final-ot_hour + wa_zl-anzhl.
ENDCASE.
CLEAR : wa_zl.
ENDLOOP.
*--Append final table with the number of hours for the wage types
APPEND wa_final TO it_final.
endloop.
ENDFORM. " fill_final*&---------------------------------------------------------------------*
*& Form write_log
*&---------------------------------------------------------------------*
* Write log
*----------------------------------------------------------------------*
FORM write_log .
IF NOT it_final[] IS INITIAL.
LOOP AT IT_FINAL INTO WA_FINAL.
WRITE :/1 wa_final-pernr,
15 wa_final-reg_hour ,
30 wa_final-OT_hour.
ENDLOOP.
else.
MESSAGE i000(zz) WITH 'No data found for the selection criteria'.
ENDIF.
ENDFORM. " write_log
*& Report ZTEST_ZL_ENTRIES
*&---------------------------------------------------------------------*
REPORT ZTEST_ZL_ENTRIES MESSAGE-ID zz.
TABLES : pa0001 , t549a , t549q .*--Types declaration
TYPES: BEGIN OF t_t569v,
abkrs TYPE t569v-abkrs, "Payroll Area
pabrj TYPE t569v-pabrj, "Accounting year
pabrp TYPE t569v-pabrp, "Accounting period
END OF t_t569v.*--For PA0001
TYPES: BEGIN OF ty_0001,
pernr TYPE pa0001-pernr,
begda TYPE pa0001-begda,
werks TYPE pa0001-werks,
END OF ty_0001.*--Final internal table
TYPES: BEGIN OF ty_final,
PERNR TYPE PA0000-PERNR,
reg_hour(8) TYPE c,
ot_hour(8) TYPE c,
END OF ty_final.
*--Internal table and work area declarations
DATA : it_0001 TYPE STANDARD TABLE OF ty_0001,
wa_0001 TYPE ty_0001,
it_final TYPE STANDARD TABLE OF ty_final,
wa_final TYPE ty_final,
it_zl type standard table of pc2bf,
wa_zl type pc2bf,
wa_t569v TYPE t_t569v.
*--Global variables declarationDATA : gv_lines TYPE i,
gv_pabrj TYPE t569v-pabrj, "Accounting year
gv_pabrp TYPE t569v-pabrp, "Accounting period
gv_iperm TYPE pc261-iperm. "Period parameters
*--Constants declaration
CONSTANTS: gc_vwsaz TYPE t569v-vwsaz VALUE 01.
*--Payroll period selections
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(20) text-002.
SELECT-OPTIONS: s_abkrs FOR pa0001-abkrs NO INTERVALS
NO-EXTENSION OBLIGATORY.
SELECTION-SCREEN POSITION 32.
SELECTION-SCREEN COMMENT 34(05) text-007 MODIF ID dtg.
SELECTION-SCREEN POSITION 40.
PARAMETERS: p_begda TYPE sy-datum MODIF ID dtg.
SELECTION-SCREEN COMMENT 52(03) text-006 MODIF ID dtg.
SELECTION-SCREEN POSITION 57.
PARAMETERS: p_endda TYPE sy-datum MODIF ID dtg.
SELECTION-SCREEN END OF LINE.
*-- Current period
SELECTION-SCREEN BEGIN OF LINE .
PARAMETERS: rb_timr9 TYPE qppnp-timr9 RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT 04(20) text-003 FOR FIELD rb_timr9.
SELECTION-SCREEN POSITION 25.
PARAMETERS: p_dispp TYPE qppnp-pabrp MODIF ID cpi,
p_dispj TYPE qppnp-pabrj MODIF ID cpi.
SELECTION-SCREEN END OF LINE.
*-- Other period
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: rb_timra TYPE qppnp-timra RADIOBUTTON GROUP grp1.
SELECTION-SCREEN COMMENT 04(20) text-004 FOR FIELD rb_timra.
SELECTION-SCREEN POSITION 25.
PARAMETERS: p_pabrp TYPE qppnp-pabrp,
p_pabrj TYPE qppnp-pabrj.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.
*--Personnel area , number , file
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-005.
PARAMETERS: p_werks TYPE pa0001-werks.
SELECT-OPTIONS : s_pernr FOR pa0001-pernr.
SELECTION-SCREEN END OF BLOCK b2.*-----------------------------------------------------------------------
* A T S E L E C T I O N S C R E E N O U T P U T
*-----------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
*-- Display valid period parameters
PERFORM display_periods.*-----------------------------------------------------------------------
* A T S E L E C T I O N S C R E E N
*-----------------------------------------------------------------------
AT SELECTION-SCREEN.
*-- Validate control recordPERFORM validate_abkrs.
*-- Validate periods
PERFORM validate_periods.
*-- Get dates from periods
PERFORM get_dates.
*-----------------------------------------------------------------------
* START OF SELECTION
*-----------------------------------------------------------------------
START-OF-SELECTION.
*-- Get initial data for the selection screen parameters
PERFORM get_data.
*--Populate final data
PERFORM fill_final.
*-----------------------------------------------------------------------
* END OF SELECTION
*-----------------------------------------------------------------------
END-OF-SELECTION.
*--Write log as to how many records are downloaded
PERFORM write_log.
*&---------------------------------------------------------------------*
*& Form display_periods
*&---------------------------------------------------------------------*
* Display valid period parameters
*----------------------------------------------------------------------*
FORM display_periods.
LOOP AT SCREEN.
CASE screen-group1.
WHEN 'CPI'.
*-- If current period, display current period information
IF rb_timr9 = 'X'.
screen-input = '0'.
screen-output ='1'.
screen-invisible = '0'.
ELSE.
screen-input = '0'.
screen-output ='0'.
screen-invisible = '1'.
ENDIF.
MODIFY SCREEN.
*-- If other period is selected, display other period info
WHEN 'DTG'.
IF p_begda IS INITIAL.
screen-input = '0'.
screen-output ='0'.
screen-invisible = '1'.
ELSE.
screen-input = '0'.
screen-output ='1'.
screen-invisible = '0'.
ENDIF.
MODIFY SCREEN.
ENDCASE.
ENDLOOP.
ENDFORM. " display_periods
*&---------------------------------------------------------------------*
*& Form validate_periods
*&---------------------------------------------------------------------*
* Validate periods
*----------------------------------------------------------------------*
FORM validate_periods.
*-- If current period is selected retrieve information from control
* record
IF rb_timr9 = 'X'.
IF NOT p_pabrp IS INITIAL OR
NOT p_pabrj IS INITIAL .
MESSAGE e000 WITH
'Other period value not allowed with Current Period'.
ENDIF.
gv_pabrp = wa_t569v-pabrp.
p_dispp = gv_pabrp.
gv_pabrj = wa_t569v-pabrj.
p_dispj = gv_pabrj.
ELSE.
*-- If other period is selected, validate required parameters
CLEAR: p_dispp,
p_dispj.
IF p_pabrp EQ 0 .
SET CURSOR FIELD 'P_PABRP' .
MESSAGE e000 WITH 'Invalid Accounting Month'.
ELSEIF p_pabrj EQ 0 .
SET CURSOR FIELD 'P_PABRJ'.
MESSAGE e000 WITH 'Invalid Accounting Year'.
ELSE.
gv_pabrp = p_pabrp.
gv_pabrj = p_pabrj.
ENDIF.
ENDIF.
ENDFORM. " validate_periods
*&---------------------------------------------------------------------*
*& Form validate_abkrs
*&---------------------------------------------------------------------*
* Validate control record
*----------------------------------------------------------------------*
FORM validate_abkrs.
DATA : gv_subrc type sy-subrc.
*-- Check the control record
LOOP AT s_abkrs.
SELECT SINGLE abkrs
pabrj
pabrp
FROM t569v
INTO wa_t569v
WHERE abkrs = s_abkrs-low AND
vwsaz = gc_vwsaz.
gv_subrc = sy-subrc.
ENDLOOP.
IF gv_subrc <> 0.
MESSAGE e000 WITH 'Control Record Not Found'.
ENDIF.
ENDFORM. " validate_abkrs
*&---------------------------------------------------------------------*
*& Form get_dates
*&---------------------------------------------------------------------*
* Get dates from periods
*----------------------------------------------------------------------*
FORM get_dates.
*-- Find the period modifier
LOOP AT s_abkrs.
SELECT SINGLE * FROM t549a WHERE abkrs = s_abkrs-low.
IF sy-subrc <> 0.
MESSAGE e000 WITH 'Period modifier does not exist!'.
ENDIF.
ENDLOOP.
*-- Save off period modifier
gv_iperm = t549a-permo.
*-- Determine the dates for the requested period
SELECT SINGLE * FROM t549q WHERE permo = gv_iperm AND
pabrj = gv_pabrj AND
pabrp = gv_pabrp.
IF sy-subrc <> 0.
MESSAGE e505(pg) WITH gv_pabrj gv_pabrp t549a-permo.
ELSE.
MOVE t549q-begda TO p_begda.
MOVE t549q-endda TO p_endda.
ENDIF.
ENDFORM. " get_dates*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* Get data from PA0001
*----------------------------------------------------------------------*
FORM get_data .
*--Get data from PA0001
SELECT pernr begda werks
INTO TABLE it_0001
FROM pa0001
WHERE pernr IN s_pernr
AND endda GE p_begda
AND begda LE p_endda
AND werks EQ p_werks
AND abkrs IN s_abkrs.
IF sy-subrc = 0.
SORT it_0001 BY pernr begda DESCENDING.
DELETE ADJACENT DUPLICATES FROM it_0001 COMPARING pernr.
ENDIF.
ENDFORM. " get_data*&---------------------------------------------------------------------*
*& Form fill_final
*&---------------------------------------------------------------------*
* Fill final internal table
*----------------------------------------------------------------------*
FORM fill_final .
CLEAR : it_final[] , wa_final.*--Loop thru PA0001 entries
LOOP AT it_0001 INTO wa_0001.
wa_final-pernr = wa_0001-pernr.
*--Get time results for the pernr and given payroll period and year
CALL FUNCTION 'HR_TIME_RESULTS_GET'
EXPORTING
get_pernr = wa_0001-pernr
get_pabrj = gv_pabrj
get_pabrp = gv_pabrp
get_cltyp = '1'
TABLES
get_zl = it_zl
EXCEPTIONS
no_period_specified = 1
wrong_cluster_version = 2
no_read_authority = 3
cluster_archived = 4
technical_error = 5.
*--Fill Hours for the wage types from ZL structure
LOOP AT it_zl INTO wa_zl.
*--Fill temp dept
CASE wa_zl-lgart.
*--For Regular hours
WHEN '3REG'. " Regular hours
wa_final-reg_hour = wa_final-reg_hour + wa_zl-anzhl.
*--For Overtime hours
WHEN '3OVT'. " Overtime hours
wa_final-ot_hour = wa_final-ot_hour + wa_zl-anzhl.
ENDCASE.
CLEAR : wa_zl.
ENDLOOP.
*--Append final table with the number of hours for the wage types
APPEND wa_final TO it_final.
endloop.
ENDFORM. " fill_final*&---------------------------------------------------------------------*
*& Form write_log
*&---------------------------------------------------------------------*
* Write log
*----------------------------------------------------------------------*
FORM write_log .
IF NOT it_final[] IS INITIAL.
LOOP AT IT_FINAL INTO WA_FINAL.
WRITE :/1 wa_final-pernr,
15 wa_final-reg_hour ,
30 wa_final-OT_hour.
ENDLOOP.
else.
MESSAGE i000(zz) WITH 'No data found for the selection criteria'.
ENDIF.
ENDFORM. " write_log
HR_INFOTYPE_OPERATION in Dynamic action
Will be updated soon
Get work week begin and end dates for a given date
Report zget_wweek_dates.
*Get work week begin and end dates for a given date
tables : pernr , t559a.
infotypes : 0007.
DATA: posid(2).
DATA: pack TYPE p.
DATA: p_wweek LIKE p0007-wweek.
DATA: edatum TYPE d.
DATA: ldatum TYPE d.
PARAMETERS : p_date TYPE sy-datum.
start-of-selection.
rp-lowdate-highdate.
rp-def-time-period.
rp-def-boolean.
GET pernr.
*-----getting current workweek
CLEAR p_wweek.
LOOP AT p0007 WHERE begda <= p_date AND endda >= p_date.
p_wweek = p0007-wweek.
EXIT.
ENDLOOP.
IF p_wweek IS NOT INITIAL.
SELECT SINGLE * FROM t559a WHERE wweek EQ p_wweek.
IF t559a-wleng IS INITIAL.
posid = '00'.
ELSE.
pack = ( p_date - t559a-wdate ) MOD t559a-wleng + 1.
UNPACK pack TO posid.
ENDIF.
ELSE.
posid = '00'.
ENDIF.
IF posid = '00'.
ldatum = edatum = high-date.
ELSE.
ldatum = p_date - posid + 1. " Begin date
edatum = p_date - posid + t559a-wleng. " End date
ENDIF.
end-of-selection.
*Get work week begin and end dates for a given date
tables : pernr , t559a.
infotypes : 0007.
DATA: posid(2).
DATA: pack TYPE p.
DATA: p_wweek LIKE p0007-wweek.
DATA: edatum TYPE d.
DATA: ldatum TYPE d.
PARAMETERS : p_date TYPE sy-datum.
start-of-selection.
rp-lowdate-highdate.
rp-def-time-period.
rp-def-boolean.
GET pernr.
*-----getting current workweek
CLEAR p_wweek.
LOOP AT p0007 WHERE begda <= p_date AND endda >= p_date.
p_wweek = p0007-wweek.
EXIT.
ENDLOOP.
IF p_wweek IS NOT INITIAL.
SELECT SINGLE * FROM t559a WHERE wweek EQ p_wweek.
IF t559a-wleng IS INITIAL.
posid = '00'.
ELSE.
pack = ( p_date - t559a-wdate ) MOD t559a-wleng + 1.
UNPACK pack TO posid.
ENDIF.
ELSE.
posid = '00'.
ENDIF.
IF posid = '00'.
ldatum = edatum = high-date.
ELSE.
ldatum = p_date - posid + 1. " Begin date
edatum = p_date - posid + t559a-wleng. " End date
ENDIF.
end-of-selection.
Subscribe to:
Posts (Atom)