*----------------------------------------------------------------------*
* INCLUDE ZXPADU01 *
*----------------------------------------------------------------------*
* data declaration in ZXPADTOP "Global Data
DATA: I2005 LIKE P2005,
I2006 LIKE P2006.
* default values in ZXPADU01
WHEN '2006'.
MOVE INNNN TO I2006.
IF I2006-SUBTY = '15' OR I2006-SUBTY = '20'.
MOVE '99991231' TO I2006-DEEND.
MOVE I2006-BEGDA TO I2006-DESTA.
MOVE I2006 TO INNNN.
ENDIF.
ENDCASE.
*----------------------------------------------------------------------*
* INCLUDE ZXPADU02 *
*----------------------------------------------------------------------*
DATA: I2001 LIKE P2001,
I2005 LIKE P2005,
I2006 LIKE P2006,
I2010 LIKE P2010,
I0022 LIKE P0022,
I0041 LIKE P0041,
I0000 LIKE P0000,
H0000 LIKE P0000,
I0001 LIKE P0001,
IIPSYST LIKE IPSYST.
*****IT0041&IT2001
DATA: DATE LIKE SY-DATUM,
DAY(2) TYPE C,
MONTH(2) TYPE C,
YEAR(4) TYPE C,
DAYS TYPE I,
C_WEEKS TYPE I,
C_MONTHS TYPE I,
C_YEARS TYPE I,
WEEKS TYPE F,
MONTHS TYPE F,
YEARS TYPE F,
D_MONTHS TYPE I.
*****IT2005
DATA: ZOTHOUR LIKE P2005-STDAZ,
IOTHOUR LIKE P2005-STDAZ,
ZKWERT LIKE T511K-KWERT,
ZOTFLG LIKE P2005-FLAG,
ZCALCFLG LIKE P2005-FLAG.
*****IT0000
DATA: ZPERSG LIKE P0001-PERSG,
I0001_TAB TYPE TABLE OF P0001 INITIAL SIZE 1.
*****IT0001
DATA: ZANSVH LIKE P0001-ANSVH.
DATA:
ZERROR LIKE T100-TEXT,
ZERROR1 LIKE T100-TEXT,
ZERROR2 LIKE T100-TEXT,
ZERROR3 LIKE T100-TEXT.
*ZERROR1 = '记录开始时间所属月度的员工考勤已月结,无法维护!'.
ZERROR2 = '年薪制员工不享受加班发放和年假返还,无法维护!'.
ZERROR3 = '记录由考勤数据月结程序生成,无法维护!'.
* additional checks in ZXPADU02
CASE INNNN-INFTY.
WHEN '2001'.
MOVE INNNN TO I2001.
*****检查输入记录是否属于已结算月度
CALL FUNCTION 'ZHRF_PT_CALCCHECK'
EXPORTING
P_PERNR = I2001-PERNR
P_BEGDA = I2001-BEGDA
P_ACTION = '0'
IMPORTING
P_CALCFLG = ZCALCFLG
P_ERROR = ZERROR.
IF ZCALCFLG = 'X'.
MESSAGE E001(00) WITH ZERROR.
ENDIF.
*****请年假时,提醒当前足额年假年资年份数
IF I2001-SUBTY EQ '0100' .
CLEAR DATE.
CALL FUNCTION 'ZHRF_GET_DATETYP_FROM_IT0041'
EXPORTING
PERNR = I2001-PERNR
KEYDT = I2001-BEGDA
DATAR = 'Z6'
IMPORTING
DATE = DATE.
CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES'
EXPORTING
BEGDA = DATE
ENDDA = I2001-BEGDA
IMPORTING
DAYS = DAYS
C_WEEKS = C_WEEKS
C_MONTHS = C_MONTHS
C_YEARS = C_YEARS
WEEKS = WEEKS
MONTHS = MONTHS
YEARS = YEARS
D_MONTHS = D_MONTHS.
MESSAGE I001(00) WITH '员工截止请假日整年年假年资:' C_YEARS '年' .
ENDIF.
WHEN '2005'.
MOVE INNNN TO I2005.
*****检查输入记录是否属于已结算月度
CALL FUNCTION 'ZHRF_PT_CALCCHECK'
EXPORTING
P_PERNR = I2005-PERNR
P_BEGDA = I2005-BEGDA
P_ACTION = '0'
IMPORTING
P_CALCFLG = ZCALCFLG
P_ERROR = ZERROR.
IF ZCALCFLG = 'X'.
MESSAGE E001(00) WITH ZERROR .
ENDIF.
*****加班上限检查
IF IPSYST-IOPER EQ INSERT.
IOTHOUR = I2005-STDAZ.
ENDIF.
CALL FUNCTION 'ZHRF_PT_OTCHECK'
EXPORTING
P_PERNR = I2005-PERNR
P_BEGDA = I2005-BEGDA
P_MOLGA = '28'
P_MODIFY = IOTHOUR
IMPORTING
P_OTHOUR = ZOTHOUR
P_KWERT = ZKWERT
P_OTFLG = ZOTFLG.
IF ZOTFLG = 'X'.
MESSAGE W001(00) WITH '本月累计加班时数:' ZOTHOUR
',已经超过设置提醒上限' ZKWERT .
ENDIF.
WHEN '2006'.
MOVE INNNN TO I2006.
*****检查输入记录是否属于月结程序修改
IF I2006-FLAG = 'X'.
MESSAGE E001(00) WITH ZERROR3 .
ENDIF.
WHEN '2010'.
MOVE INNNN TO I2010.
*****检查输入记录是否属于月结程序修改
IF I2010-FLAG = 'X'.
MESSAGE E001(00) WITH ZERROR3 .
ENDIF.
IF I2010-BEGDA+4(2) = '12'.
YEAR = I2010-BEGDA+0(4) - 1.
CONCATENATE YEAR '01' I2010-BEGDA+6(2) INTO DATE.
ELSE.
MONTH = I2010-BEGDA+4(2) - 1.
IF MONTH < 10.
CONCATENATE '0' MONTH INTO MONTH.
ENDIF.
CONCATENATE I2010-BEGDA+0(4) MONTH I2010-BEGDA+6(2) INTO DATE.
ENDIF.
*****检查输入记录是否属于已结算月度
CALL FUNCTION 'ZHRF_PT_CALCCHECK'
EXPORTING
P_PERNR = I2010-PERNR
P_BEGDA = DATE
P_ACTION = '0'
IMPORTING
P_CALCFLG = ZCALCFLG
P_ERROR = ZERROR.
IF ZCALCFLG = 'X'.
MESSAGE E001(00) WITH ZERROR .
ENDIF.
*****限制年薪制员工录入加班发放和年假返还
IF IPSYST-IOPER EQ INSERT.
IF I2010-LGART = '700C' OR I2010-LGART = '705C' OR I2010-LGART = '710C'.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
PERNR = I2010-PERNR
INFTY = '0001'
BEGDA = DATE
ENDDA = DATE
TABLES
INFTY_TAB = I0001_TAB.
READ TABLE I0001_TAB INDEX 1 INTO I0001.
CHECK SY-SUBRC = 0.
ZANSVH = I0001-ANSVH.
IF ZANSVH = 'Z2'.
MESSAGE E001(00) WITH ZERROR2 .
ENDIF.
ENDIF.
IF I2010-LGART = '710C' OR I2010-LGART = '715C' OR I2010-LGART = '720C'.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
PERNR = I2010-PERNR
INFTY = '0001'
BEGDA = DATE
ENDDA = DATE
TABLES
INFTY_TAB = I0001_TAB.
READ TABLE I0001_TAB INDEX 1 INTO I0001.
CHECK SY-SUBRC = 0.
ZANSVH = I0001-ANSVH.
IF ZANSVH = 'Z2'.
MESSAGE E001(00) WITH ZERROR2 .
ENDIF.
ENDIF.
ENDIF.
WHEN '0000'.
CLEAR:I0000,IIPSYST.
MOVE INNNN TO I0000.
*****检查非外包工未离职无法再次入职
MOVE IPSYST TO IIPSYST.
IF IIPSYST-IOPER = 'COP'.
IF I0000-MASSN = 'Z2'.
MOVE PSAVE TO H0000.
IF H0000-STAT2 <> '0'.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
PERNR = I0000-PERNR
INFTY = '0001'
BEGDA = '99991231'
ENDDA = '99991231'
TABLES
INFTY_TAB = I0001_TAB.
READ TABLE I0001_TAB INDEX 1 INTO I0001.
CHECK SY-SUBRC = 0.
IF I0001-PERSG <> '9'.
MESSAGE E001(00) WITH '请先离职,然后执行再次入职!'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
*****************check POSITION被占的比例不超过100%
ENDCASE.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8479461/viewspace-1021910/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8479461/viewspace-1021910/