*&---------------------------------------------------------------------*
*& 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
No comments:
Post a Comment