************************************************************************
* 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.
PERFORM read_kostl_value.
PERFORM get_pernr_h.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_pernr-high.
PERFORM read_werks_value.
PERFORM read_orgeh_value.
PERFORM read_kostl_value.
PERFORM get_pernr_h.
*获得银行选择帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_bankl-low.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'BANKL'
dynpprog = g_repid
dynpnr = g_dynnum
dynprofield = 'S_BANKL'
value_org = 'S'
TABLES
value_tab = gt_bnka.
*获得银行选择帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_bankl-high.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'BANKL'
dynpprog = g_repid
dynpnr = g_dynnum
dynprofield = 'S_BANKL'
value_org = 'S'
TABLES
value_tab = gt_bnka.
*----------------------------------------------------------------------*
*AT SELECTION-SCREEN. *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
CONCATENATE p_cxsj+0(6) '01' INTO g_sdate.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = g_sdate
IMPORTING
last_day_of_month = g_edate.
*----------------------------------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------------------------------*
START-OF-SELECTION.
*提取数据
PERFORM select_data.
*计算数据
PERFORM calc_data.
*----------------------------------------------------------------------*
* END-OF-SELECTION *
*----------------------------------------------------------------------*
END-OF-SELECTION.
PERFORM f_fieldcat_init USING gt_fieldcat[] gt_sort[].
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
it_fieldcat = gt_fieldcat[]
it_sort = gt_sort[]
* it_events = event_top_of_page[]
i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
TABLES
t_outtab = gt_list.
************************************************************************
* Form Name : html_top_of_page *
* Created by : *
* Created on : 2004/09/01 *
*----------------------------------------------------------------------*
* Function Description: *
* 设置HTML报表页头 *
*----------------------------------------------------------------------*
* 参数说明 *
* document:报表页头设置参数 *
*----------------------------------------------------------------------*
* Date Programmer Description *
* *
************************************************************************
FORM html_top_of_page USING document TYPE REF TO cl_dd_document.
DATA: text TYPE sdydo_text_element.
CALL METHOD document->add_gap
EXPORTING
width = 50.
text = '员工奖金模拟明细表'.
CALL METHOD document->add_text
EXPORTING
text = text
sap_style = 'HEADING'.
CALL METHOD document->new_line.
text = '部门(组织单元):'.
CALL METHOD document->add_text
EXPORTING
text = text
sap_emphasis = 'Strong'.
* CALL METHOD document->add_gap
* EXPORTING
* width = 6.
*
text = g_orgtx.
CALL METHOD document->add_text
EXPORTING
text = text
sap_style = 'Key'.
CALL METHOD document->new_line.
text = '所属成本中心 : '.
CALL METHOD document->add_text
EXPORTING
text = text
sap_emphasis = 'Strong'.
* CALL METHOD document->add_gap
* EXPORTING
* width = 6.
text = g_ktext.
CALL METHOD document->add_text
EXPORTING
text = text
sap_style = 'Key'.
CALL METHOD document->new_line.
IF p_mon ='X'.
text = '月奖发放时间 : '.
ELSE.
text = '年终奖发放时间:'.
ENDIF.
CALL METHOD document->add_text
EXPORTING
text = text
sap_emphasis = 'Strong'.
text = p_cxsj .
CALL METHOD document->add_text
EXPORTING
text = text
sap_style = 'Key'.
CALL METHOD document->add_gap
EXPORTING
width = 100.
text = '奖金所属时间:'.
CALL METHOD document->add_text
EXPORTING
text = text
sap_emphasis = 'Strong'.
CONCATENATE zhr_jjdr-zksyf '-' zhr_jjdr-zjsyf INTO text.
CALL METHOD document->add_text
EXPORTING
text = text
sap_style = 'Key'.
CALL METHOD document->new_line.
ENDFORM. "HTML_TOP_OF_PAGE
************************************************************************
* Form Name : f_fieldcat_init *
* Created by : *
* Created on : 2004/09/01 *
*----------------------------------------------------------------------*
* Function Description: *
* 定义报表格式 *
*----------------------------------------------------------------------*
* 参数说明 *
* im_fieldcat:报表格式设置参数 *
*----------------------------------------------------------------------*
* Date Programmer Description *
* *
************************************************************************
FORM f_fieldcat_init USING im_fieldcat TYPE slis_t_fieldcat_alv
im_sort TYPE slis_t_sortinfo_alv.
DATA: ls_fieldcat TYPE slis_fieldcat_alv,
ls_sort TYPE slis_sortinfo_alv.
REFRESH im_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ORGEH'.
ls_fieldcat-seltext_l = '部门'.
ls_fieldcat-outputlen = '10'.
APPEND ls_fieldcat TO im_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ORGYX'.
ls_fieldcat-seltext_l = '部门名称'.
ls_fieldcat-outputlen = '10'.
APPEND ls_fieldcat TO im_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'PERNR'.
ls_fieldcat-seltext_l = '员工编号'.
ls_fieldcat-outputlen = '8'.
APPEND ls_fieldcat TO im_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ENAME'.
ls_fieldcat-seltext_l = '员工姓名'.
ls_fieldcat-outputlen = '10'.
APPEND ls_fieldcat TO im_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'YFJJ'.
ls_fieldcat-seltext_l = '应发奖金'.
ls_fieldcat-outputlen = '10'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ZFGJJG'.
ls_fieldcat-seltext_l = '住房公积金(个)'.
ls_fieldcat-outputlen = '10'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'ZFGJJD'.
ls_fieldcat-seltext_l = '住房公积金(单)'.
ls_fieldcat-outputlen = '10'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'SQKK'.
ls_fieldcat-seltext_l = '税前扣款'.
ls_fieldcat-outputlen = '10'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'SE'.
ls_fieldcat-seltext_l = '税额'.
ls_fieldcat-outputlen = '10'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'SHKK'.
ls_fieldcat-seltext_l = '税后扣款'.
ls_fieldcat-outputlen = '10'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'QT'.
ls_fieldcat-seltext_l = '其他'.
ls_fieldcat-outputlen = '10'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'BYJ'.
ls_fieldcat-seltext_l = '备用金'.
ls_fieldcat-outputlen = '10'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'SFHJ'.
ls_fieldcat-seltext_l = '实发合计'.
ls_fieldcat-outputlen = '8'.
ls_fieldcat-do_sum = 'X'.
ls_fieldcat-no_zero = 'X'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'BANKL'.
ls_fieldcat-seltext_l = '发卡行'.
ls_fieldcat-outputlen = '12'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'BANKA'.
ls_fieldcat-seltext_l = '银行名称'.
ls_fieldcat-outputlen = '15'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'BANKN'.
ls_fieldcat-seltext_l = '银行帐号'.
ls_fieldcat-outputlen = '15'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'LX'.
ls_fieldcat-seltext_l = '是否留现'.
ls_fieldcat-outputlen = '4'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_sort.
ls_sort-fieldname = 'ORGEH'.
ls_sort-spos = 1.
ls_sort-up = 'X'.
ls_sort-subtot = 'X'.
APPEND ls_sort TO gt_sort.
CLEAR ls_sort.
ls_sort-fieldname = 'PERNR'.
ls_sort-spos = 2.
ls_sort-up = 'X'.
* ls_sort-subtot = 'X'.
APPEND ls_sort TO gt_sort.
ENDFORM. "f_fieldcat_init
************************************************************************
* Form Name : select_data *
* Created by : *
* Created on : 2004/09/21 *
*----------------------------------------------------------------------*
* Function Description: *
* 对员工进行提取数据 *
*----------------------------------------------------------------------*
* 参数说明 *
* *
*----------------------------------------------------------------------*
* Date Programmer Description *
* *
************************************************************************
FORM select_data .
DATA: l_count TYPE i.
*读取成本中心
SELECT COUNT( * ) INTO (l_count)
FROM csks
WHERE csks~kostl IN s_kostl
AND datbi >= p_cxsj AND datab <= p_cxsj.
IF l_count = 1.
SELECT SINGLE cskt~ktext INTO (g_ktext)
FROM csks
LEFT JOIN cskt
ON cskt~spras = '1' AND csks~kokrs = cskt~kokrs
AND csks~kostl = cskt~kostl
WHERE csks~kostl IN s_kostl
AND csks~datbi >= p_cxsj AND csks~datab <= p_cxsj.
ELSE.
g_ktext = space.
ENDIF.
* 部门文本信息内表
SELECT COUNT( * ) INTO (l_count)
FROM t527x
WHERE t527x~orgeh IN s_orgeh
AND endda >= p_cxsj AND begda <= p_cxsj.
IF l_count = 1.
SELECT SINGLE orgtx INTO (g_orgtx)
FROM t527x
WHERE sprsl = '1' AND t527x~orgeh IN s_orgeh
AND endda >= p_cxsj AND begda <= p_cxsj.
ELSE.
g_orgtx = space.
ENDIF.
*提取员工
REFRESH gt_pa0001.
CLEAR gt_pa0001.
SELECT pa0001~pernr pa0001~ename pa0001~orgeh t527x~orgtx
INTO CORRESPONDING FIELDS OF TABLE gt_pa0001
FROM pa0001
INNER JOIN t527x
ON t527x~sprsl = '1' AND pa0001~orgeh = t527x~orgeh
WHERE pa0001~werks IN s_werks
AND pa0001~btrtl IN s_btrtl
AND pa0001~persg IN s_persg
AND pa0001~persk IN s_persk
AND pa0001~orgeh IN s_orgeh
AND pa0001~kostl IN s_kostl
AND pa0001~pernr IN s_pernr
AND pa0001~endda >= p_cxsj AND pa0001~begda <= p_cxsj
AND t527x~endda >= p_cxsj AND t527x~begda <= p_cxsj.
*删除不符合卡条件的人员
* 判断员工是否留现
REFRESH gt_pa00091.
CLEAR gt_pa00091.
SELECT pernr subty
INTO CORRESPONDING FIELDS OF TABLE gt_pa00091
FROM pa0009
FOR ALL ENTRIES IN gt_pa0001
WHERE pernr = gt_pa0001-pernr
AND pa0009~subty = '0'
AND pa0009~begda <= p_cxsj AND pa0009~endda >= p_cxsj.
* 获得员工工资发卡行及银行帐号
REFRESH gt_pa00092.
CLEAR gt_pa00092.
IF p_calc = space.
SELECT pa0009~pernr pa0009~subty pa0009~bankl pa0009~bankn bnka~banka
INTO CORRESPONDING FIELDS OF TABLE gt_pa00092
FROM pa0009
INNER JOIN bnka ON pa0009~bankl = bnka~bankl AND bnka~banks = 'CN'
FOR ALL entries IN gt_pa0001
WHERE pernr = gt_pa0001-pernr
AND pa0009~begda <= sy-datum AND pa0009~endda >= sy-datum
AND pa0009~bankl IN s_bankl.
ENDIF.
SORT gt_pa00092 BY pernr.
DELETE ADJACENT DUPLICATES FROM gt_pa00092 COMPARING pernr.
SORT gt_pa00091 BY pernr.
DELETE ADJACENT DUPLICATES FROM gt_pa00091 COMPARING pernr.
LOOP AT gt_pa0001.
READ TABLE gt_pa00091 WITH KEY pernr = gt_pa0001-pernr BINARY SEARCH.
IF sy-subrc = 0.
IF p_calc = 'X'."只显示留现
DELETE gt_pa0001.
CONTINUE.
ENDIF.
ELSE.
IF p_show = 'X'."只显示留现
DELETE gt_pa0001.
CONTINUE.
ELSE.
gt_pa0001-lx = '留现'.
ENDIF.
ENDIF.
IF p_calc = 'X'."只显示留现
READ TABLE gt_pa00092 WITH KEY pernr = gt_pa0001-pernr BINARY SEARCH.
IF sy-subrc = 0.
gt_pa0001-bankl = gt_pa00092-bankl.
gt_pa0001-banka = gt_pa00092-banka.
gt_pa0001-bankn = gt_pa00092-bankn.
ENDIF.
ENDIF.
MODIFY gt_pa0001.
ENDLOOP.
*获得员工免除税额信息
REFRESH gt_t7cn33.
CLEAR gt_t7cn33.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_t7cn33 FROM t7cn33
WHERE endda >= p_cxsj AND begda <= p_cxsj.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_pa0530 FROM pa0530
FOR ALL ENTRIES IN gt_pa0001
WHERE pernr = gt_pa0001-pernr
AND endda >= p_cxsj AND begda <= p_cxsj.
*提取奖金项
IF p_mon ='X'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_pa0267
FROM pa0267
FOR ALL ENTRIES IN gt_pa0001
WHERE pernr = gt_pa0001-pernr
AND endda = p_cxsj
AND lgart IN ('6100','6200','6600','6600','6900','6510',
'6520','6530','6540','6550','6560','6570',
'6580','6590','6500','6710','6720').
*获取公积金
REFRESH gt_pa0014.
CLEAR gt_pa0014.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_pa0014
FROM pa0014
FOR ALL ENTRIES IN gt_pa0001
WHERE pernr = gt_pa0001-pernr
AND endda >= p_cxsj AND begda <= p_cxsj
AND lgart = '2920'.
ELSE.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_pa0267
FROM pa0267
FOR ALL ENTRIES IN gt_pa0001
WHERE pernr = gt_pa0001-pernr
AND endda = p_cxsj
AND lgart IN ('9100','9510','9520','9530','9540','9550',
'9560','9570','9580','9590','9500','9710',
'9720').
ENDIF.
**获取导入数据
CLEAR zhr_jjdr.
SELECT SINGLE * INTO zhr_jjdr
FROM zhr_jjdr
WHERE begda = p_cxsj.
ENDFORM. " select_data
************************************************************************
* Form Name : calc_data *
* Created by : *
* Created on : 2004/09/03 *
*----------------------------------------------------------------------*
* Function Description: *
* 对员工进行工龄工资的计算 *
*----------------------------------------------------------------------*
* 参数说明 *
* *
*----------------------------------------------------------------------*
* Date Programmer Description *
* *
************************************************************************
FORM calc_data .
DATA: l_i0014 TYPE i VALUE 0, l_i0267 TYPE i VALUE 0.
DATA: l_dis(1),l_div(1).
DATA: l_ynse TYPE p DECIMALS 2,
l_ffje TYPE p DECIMALS 2,
l_ffse TYPE p DECIMALS 2.
SORT gt_pa0001 BY pernr.
SORT gt_pa0267 BY pernr.
SORT gt_pa0014 BY pernr.
LOOP AT gt_pa0001.
CLEAR gt_list.
l_dis = space.
l_div = space.
MOVE-CORRESPONDING gt_pa0001 TO gt_list.
LOOP AT gt_pa0267 FROM l_i0267.
IF gt_pa0267-pernr > gt_pa0001-pernr.
l_i0014 = sy-tabix.
EXIT.
ELSEIF gt_pa0267-pernr = gt_pa0001-pernr.
CASE gt_pa0267-lgart .
WHEN '6100'.
gt_list-yfjj = gt_list-yfjj + gt_pa0267-betrg.
l_dis = 'X'.
WHEN '6200'.
gt_list-yfjj = gt_list-yfjj + gt_pa0267-betrg.
l_dis = 'X'.
l_div = 'X'.
WHEN '6600'.
gt_list-yfjj = gt_list-yfjj + gt_pa0267-betrg.
WHEN '6900'.
gt_list-yfjj = gt_list-yfjj + gt_pa0267-betrg.
WHEN '9100'.
gt_list-yfjj = gt_list-yfjj + gt_pa0267-betrg.
WHEN '6510' OR '6520' OR '6530' OR '6540' OR '6550' OR
'6560' OR '6570' OR '6580' OR '6590' OR '6500' OR
'9510' OR '9520' OR '9530' OR '9540' OR '9550' OR
'9560' OR '9570' OR '9580' OR '9590' OR '9500'.
gt_list-sqkk = gt_list-sqkk + gt_pa0267-betrg.
WHEN '6710' OR '9710'.
gt_list-byj = gt_list-byj + gt_pa0267-betrg.
gt_list-shkk = gt_list-shkk + gt_pa0267-betrg.
WHEN '6720' OR '9720'.
gt_list-qt = gt_list-qt + gt_pa0267-betrg.
gt_list-shkk = gt_list-shkk + gt_pa0267-betrg.
ENDCASE.
ENDIF.
ENDLOOP.
LOOP AT gt_pa0014 FROM l_i0014.
IF gt_pa0014-pernr > gt_pa0001-pernr.
l_i0014 = sy-tabix.
EXIT.
ELSEIF gt_pa0014-pernr = gt_pa0001-pernr.
CASE gt_pa0014-lgart .
WHEN '2920'.
gt_list-zfgjjg = gt_list-zfgjjg + gt_pa0014-betrg.
gt_list-zfgjjd = gt_list-zfgjjd +