************************************************************************
* Copyright 2004 Wuhan *
* All Rights Reserved *
*----------------------------------------------------------------------*
* Program Name : ZHRR0001 *
* Project : SAP Implementation Project *
* Program Title: 员工奖金模拟明细表 *
* Created by : *
* Created on : 2004/09/20 *
* Version : 1.0 *
*----------------------------------------------------------------------*
* Function Description: *
* 员工工龄工资的计算及显示 *
*----------------------------------------------------------------------*
* Data Table List: *
* PA0001: 人力资源主记录:信息类型0001 (原始分配) *
* PA0041: HR 主记录: 信息类型0041 (日期详细说明) *
* PA0014: HR主记录: 信息类型 0014 (经常性收益/折减) *
*----------------------------------------------------------------------*
* Refrence Table List: *
* cskt: 成本中心说明文本 *
* hrp1000: 信息类型 1000 数据库 *
*----------------------------------------------------------------------*
* Modification Log: *
* Date Programmer Correction Number *
************************************************************************
REPORT zhrr0027 MESSAGE-ID zdev.
*----------------------------------------------------------------------*
* TABLES *
*----------------------------------------------------------------------*
TABLES: pa0001,pa0009,zhr_jjdr.
*----------------------------------------------------------------------*
* TYPES OR TYPE-POOLS *
*----------------------------------------------------------------------*
TYPE-POOLS: slis.
*----------------------------------------------------------------------*
* INCLUDE *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* INTERNAL TABLES AND WORK AREAS *
*----------------------------------------------------------------------*
* 人事范围帮助内表
DATA: BEGIN OF gt_werks_h OCCURS 0,
persa LIKE t500p-persa, "人事范围编号
name1 LIKE t500p-name1, "人事范围描述
END OF gt_werks_h.
* 部门(组织单元)-成本中心关系内表
DATA: BEGIN OF gt_orgeh_kostl OCCURS 0,
werks LIKE pa0001-werks, "人事范围
orgeh LIKE pa0001-orgeh, "组织单元
kostl LIKE pa0001-kostl, "成本中心
END OF gt_orgeh_kostl.
* 部门(组织单元)帮助内表
DATA: BEGIN OF gt_orgeh_h OCCURS 0,
orgeh LIKE pa0001-orgeh, "部门(组织单元)
stext LIKE hrp1000-stext, "部门文本
END OF gt_orgeh_h.
* 成本中心帮助内表
DATA: BEGIN OF gt_kostl_h OCCURS 0,
kostl LIKE cskt-kostl, "成本中心编号
ktext LIKE cskt-ktext, "成本中心描述
END OF gt_kostl_h.
* 获得员工编号帮助内表
DATA: BEGIN OF gt_pernr_h OCCURS 0,
pernr LIKE pa0001-pernr, "员工编号
ename LIKE pa0001-ename, "员工姓名
END OF gt_pernr_h.
* 获得银行帮助内表
DATA: BEGIN OF gt_bnka OCCURS 0,
bankl LIKE pa0009-bankl, "编号
banka LIKE bnka-banka, "名称
END OF gt_bnka.
* 员工工龄工资计算结果内表
DATA: BEGIN OF gt_list OCCURS 0,
orgeh LIKE pa0001-orgeh, "部门
orgtx LIKE t527x-orgtx, "组织单元文本
pernr LIKE pa0001-pernr, "员工编号
ename LIKE pa0001-ename, "员工姓名
yfjj TYPE p DECIMALS 2, "应发奖金
zfgjjg TYPE p DECIMALS 2, "住房公积金
zfgjjd TYPE p DECIMALS 2, "住房公积金(单位)
sqkk TYPE p DECIMALS 2, "税前扣款
* ynse type p DECIMALS 2, "应纳税额
se TYPE p DECIMALS 2, "税额
shkk TYPE p DECIMALS 2, "税后扣款
qthj TYPE p DECIMALS 2, "其他金额
qt TYPE p DECIMALS 2, "其他金额
byj TYPE p DECIMALS 2, "备用金
sfhj TYPE p DECIMALS 2, "实发合计
bankl LIKE p0009-bankl, "发卡行
banka LIKE bnka_bf-banka, "发卡行
bankn TYPE p0009-bankn, "银行帐号
lx(6) TYPE c, "是否留现
END OF gt_list.
**计算中间表
*T7CN33免除税额信息内表
DATA: gt_t7cn33 LIKE t7cn33 OCCURS 0 WITH HEADER LINE.
*信息类型0530员工住房公积金信息内表
DATA: gt_pa0530 LIKE pa0530 OCCURS 0 WITH HEADER LINE.
*pa0267人力资源主记录: 信息类型 0267 (循环外一次性支付)
DATA: gt_pa0267 LIKE pa0267 OCCURS 0 WITH HEADER LINE.
* 信息类型0000员工状态信息内表
DATA: gt_pa0000 LIKE pa0000 OCCURS 0 WITH HEADER LINE.
* 信息类型0014员工工龄工资信息内表
DATA: gt_pa0014 LIKE pa0014 OCCURS 0 WITH HEADER LINE.
* 信息类型1000(组织单元文本)信息内表
DATA: gt_hrp1000 LIKE hrp1000 OCCURS 0 WITH HEADER LINE.
* 成本中心文本信息内表
DATA: gt_cskt LIKE cskt OCCURS 0 WITH HEADER LINE.
* 信息类型0001员工状态信息内表
DATA: BEGIN OF gt_pa0001 OCCURS 0,
pernr LIKE pa0001-pernr, "员工编号
ename LIKE pa0001-ename, "员工姓名
orgeh LIKE pa0001-orgeh, "组织单元
orgtx LIKE t527x-orgtx, "组织单元文本
bankl LIKE p0009-bankl, "发卡行
banka LIKE bnka_bf-banka, "发卡行
bankn TYPE p0009-bankn, "银行帐号
lx(6) TYPE c, "是否留现
END OF gt_pa0001.
* 信息类型0009员工卡信息内表
DATA: BEGIN OF gt_pa00091 OCCURS 0,
pernr LIKE pa0001-pernr, "员工编号
subty LIKE pa0009-subty, "子类型
END OF gt_pa00091.
DATA: BEGIN OF gt_pa00092 OCCURS 0,
pernr LIKE pa0001-pernr, "员工编号
subty LIKE pa0009-subty, "子类型
bankl LIKE pa0009-bankl, "银行代码
bankn LIKE pa0009-bankn, "银行帐户编号
banka LIKE bnka-banka, "银行名称
END OF gt_pa00092.
*----------------------------------------------------------------------*
* GLOBAL VARIABLES *
*----------------------------------------------------------------------*
DATA: g_repid LIKE sy-repid, "当前程序
g_dynnum LIKE sy-dynnr. "当前屏幕
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,
gt_sort TYPE slis_t_sortinfo_alv.
DATA: g_sdate LIKE sy-datum, "时间计算中间变量
g_edate LIKE sy-datum,
g_ktext LIKE cskt-ktext, "单个成本中心文本
g_orgtx LIKE t527x-orgtx . "单个组织单元
*----------------------------------------------------------------------*
* PARAMETERS AND SELECT-OPTIONS *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b_2 WITH FRAME TITLE text-002.
SELECT-OPTIONS: s_werks FOR pa0001-werks, "人事范围
s_btrtl FOR pa0001-btrtl, "人事子范围
s_persg FOR pa0001-persg, "员工组
s_persk FOR pa0001-persk, "员工子组
s_orgeh FOR pa0001-orgeh, "部门(组织单元)
s_kostl FOR pa0001-kostl, "成本中心
s_pernr FOR pa0001-pernr. "员工编号
SELECTION-SCREEN END OF BLOCK b_2.
SELECTION-SCREEN BEGIN OF BLOCK b_1 WITH FRAME TITLE text-001.
PARAMETERS: p_mon RADIOBUTTON GROUP tst1 DEFAULT 'X',
p_ann RADIOBUTTON GROUP tst1.
PARAMETERS: p_cxsj LIKE sy-datum DEFAULT sy-datum. "查询时间
SELECTION-SCREEN END OF BLOCK b_1.
SELECTION-SCREEN BEGIN OF BLOCK b_0 WITH FRAME TITLE text-003.
PARAMETERS: p_quan RADIOBUTTON GROUP gr1 DEFAULT 'X', "发放方式-全部
p_show RADIOBUTTON GROUP gr1, "发放方式-银行卡
p_calc RADIOBUTTON GROUP gr1. "发放方式-留现
SELECT-OPTIONS: s_bankl FOR pa0009-bankl."发卡行选择
SELECTION-SCREEN END OF BLOCK b_0.
*----------------------------------------------------------------------*
* INITIALIZATION *
*----------------------------------------------------------------------*
INITIALIZATION.
g_repid = sy-repid.
g_dynnum = sy-dynnr.
* 获得人事范围帮助内表
REFRESH gt_werks_h.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_werks_h
FROM t500p
WHERE persa IN ('1002','3001').
* 部门文本信息内表
REFRESH gt_hrp1000.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_hrp1000
FROM hrp1000
WHERE otype = 'O'
AND langu = '1'
ORDER BY objid.
* 成本中心文本信息内表
REFRESH gt_cskt.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_cskt
FROM cskt
WHERE spras = '1'
AND datbi = '99991231'
ORDER BY kostl.
* 获得部门(组织单元)与成本中心的对应关系内表
REFRESH gt_orgeh_kostl.
SELECT DISTINCT werks orgeh kostl
INTO CORRESPONDING FIELDS OF TABLE gt_orgeh_kostl
FROM pa0001
WHERE endda = '99991231'
ORDER BY werks orgeh kostl.
*银行信息内表
REFRESH gt_bnka.
SELECT DISTINCT bankl banka INTO TABLE gt_bnka
FROM bnka
WHERE banks = 'CN' AND bankl IN ('0000000999','0000000888','0000000111').
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*----------------------------------------------------------------------*
* 人事范围帮助选择
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_werks-low.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'PERSA'
dynpprog = g_repid
dynpnr = g_dynnum
dynprofield = 'S_WERKS'
value_org = 'S'
TABLES
value_tab = gt_werks_h.
PERFORM clear_orgeh.
PERFORM clear_kostl.
PERFORM clear_pernr.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_werks-high.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'PERSA'
dynpprog = g_repid
dynpnr = g_dynnum
dynprofield = 'S_WERKS'
value_org = 'S'
TABLES
value_tab = gt_werks_h.
PERFORM clear_orgeh.
PERFORM clear_kostl.
PERFORM clear_pernr.
* 获得部门(组织单元)选择帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_orgeh-low.
PERFORM read_werks_value.
PERFORM get_orgeh_h.
PERFORM clear_kostl.
PERFORM clear_pernr.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_orgeh-high.
PERFORM read_werks_value.
PERFORM get_orgeh_h.
PERFORM clear_kostl.
PERFORM clear_pernr.
* 获得成本中心选择帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_kostl-low.
PERFORM read_werks_value.
PERFORM read_orgeh_value.
PERFORM get_kostl_h.
PERFORM clear_pernr.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_kostl-high.
PERFORM read_werks_value.
PERFORM read_orgeh_value.
PERFORM get_kostl_h.
PERFORM clear_pernr.
* 获得员工选择帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_pernr-low.
PERFORM read_werks_value.
PERFORM read_orgeh_value.
PERFO