Thursday, December 22, 2011

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

No comments:

Post a Comment