财务部每月发工资,首先进行计提工资,月末结账完成后冲销计提工资凭证,月中发放工资时在系统做工资付款凭证并将工资分到对应的工作中心中,通过开发程序实现:1、通过北森提供的报表接口获取计提工资数据。2、月初结完账后,冲销凭证。3、发放工资后,通过接口北森获取实发工资数据,并生成工资发放凭证,并分配到对应的成本中心。4、可查询历史发放数据。
一、程序功能界面:
二、程序代码:
*********************************************************************
** 事务代码:ZFIR027 *
** 程序名称:工资财务凭证生成程序 *
** 程序目的:工资财务凭证生成程序 *
** 设 计 人: *
** 开 发 人: *
** 设计时间:2024-12-30 *
** 程序类型: ABAP/4 程序 ,报表 *
** 应用类型: FI *
** 描 述: 工资财务凭证生成程序 *
**(修改日志)--------------------------------------------------------*
** *
** 日志号 修改人 修改时间 修改说明 传输号码 *
** ---- ---- ------ ----------- ----------- *
** *
*********************************************************************
REPORT zfir037.
*----------------------------------------------------------------------*
* 数据库表声明/Database table declaration
*----------------------------------------------------------------------*
TABLES: bkpf.
*----------------------------------------------------------------------*
* 结构声明类型/Structure type declaration
*----------------------------------------------------------------------*
*&---主表数据/master table data
TYPES:BEGIN OF detail,
period TYPE char10,
salarysf TYPE wrbtr,
department TYPE ktext,
pensioninsuc TYPE wrbtr,
persontax TYPE wrbtr,
pensioninsup TYPE wrbtr,
housingfundp TYPE wrbtr,
joblessinsup TYPE wrbtr,
injuryinsu TYPE wrbtr,
healthinsuc TYPE wrbtr,
phonefei TYPE wrbtr,
costcenter TYPE ktext,
housingfundc TYPE wrbtr,
gongfufei TYPE wrbtr,
salary TYPE wrbtr,
joblessinsuc TYPE wrbtr,
healthinsup TYPE wrbtr,
costcode TYPE kostl,
END OF detail.
TYPES:
t_detail TYPE STANDARD TABLE OF detail WITH NON-UNIQUE DEFAULT KEY.
TYPES:BEGIN OF salary,
msg TYPE String,
code TYPE string,
data TYPE t_detail,
END OF salary.
DATA:ls_salary TYPE salary,
lt_salary TYPE TABLE OF salary,
f_date TYPE datum,
l_date TYPE datum.
TYPES:BEGIN OF ty_out,
sel(1) TYPE c,
bukrs LIKE bkpf-bukrs,
gjahr TYPE bkpf-gjahr,
monat TYPE bkpf-monat,
salarysf TYPE wrbtr,
department TYPE ktext,
pensioninsuc TYPE wrbtr,
persontax TYPE wrbtr,
pensioninsup TYPE wrbtr,
housingfundp TYPE wrbtr,
joblessinsup TYPE wrbtr,
injuryinsu TYPE wrbtr,
healthinsuc TYPE wrbtr,
phonefei TYPE wrbtr,
costcenter TYPE ktext,
housingfundc TYPE wrbtr,
gongfufei TYPE wrbtr,
salary TYPE wrbtr,
joblessinsuc TYPE wrbtr,
healthinsup TYPE wrbtr,
costcode TYPE kostl,
belnr TYPE bkpf-belnr,
budate TYPE bkpf-budat,
icon TYPE icon_d, "红绿灯
memo TYPE char255, "消息
END OF ty_out.
DATA gt_bkpf LIKE STANDARD TABLE OF bkpf WITH HEADER LINE.
*&---------------------------------------------------------------------*
*& 字段串定义/Field-symbols *
*&---------------------------------------------------------------------*
"FIELD-SYMBOLS: <fs_output> TYPE ty_output.
DATA: "gt_event TYPE slis_t_event WITH HEADER LINE,
gt_event_exit TYPE slis_t_event_exit WITH HEADER LINE.
DATA: "gt_data TYPE TABLE OF ty_output,
lt_out TYPE TABLE OF ty_out,
ls_out TYPE ty_out,
"gs_data TYPE ty_output,
gt_acdoca TYPE STANDARD TABLE OF acdoca WITH HEADER LINE,
gv_flag TYPE char1,
z_flag TYPE char01,
ref_grid TYPE REF TO cl_gui_alv_grid.
*&---------------------------------------------------------------------*
*& ALV TYPE/ALV 类型定义
*&---------------------------------------------------------------------*
*&---ALV数据组,类型池
TYPE-POOLS:slis,
vrm.
*&---定义ALV显示的字段列及其描述等属性
DATA: gt_fieldcat TYPE TABLE OF lvc_s_fcat, " ALV 控制: 字段目录
gs_fieldcat TYPE lvc_s_fcat, " ALV 控制: 字段目录
gs_layout TYPE lvc_s_layo, " ALV 控制: 布局结构
gt_event TYPE slis_t_event,
gv_grid TYPE REF TO cl_gui_alv_grid.
SELECTION-SCREEN BEGIN OF BLOCK blc_001 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_r1 RADIOBUTTON GROUP g1 MODIF ID rx USER-COMMAND com .
PARAMETERS: p_r2 RADIOBUTTON GROUP g1 MODIF ID rx.
PARAMETERS: p_r3 RADIOBUTTON GROUP g1 MODIF ID rx DEFAULT 'X'.
PARAMETERS: p_r4 RADIOBUTTON GROUP g1 MODIF ID rx .
SELECTION-SCREEN END OF BLOCK blc_001.
*&---------------------------------------------------------------------*
*& Selection Screen/选择屏幕
*&---------------------------------------------------------------------*
*&---选择屏幕块 数据查询屏幕
SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME TITLE TEXT-t01.
*&---范围
SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs MODIF ID r34 NO-EXTENSION NO INTERVALS OBLIGATORY DEFAULT '1020'."公司代码
SELECT-OPTIONS: s_budatt FOR bkpf-budat MODIF ID r4 ."公司代码
PARAMETERS: s_cxdat LIKE bkpf-budat MODIF ID r3.
PARAMETERS: s_budat LIKE bkpf-budat MODIF ID r3.
SELECTION-SCREEN END OF BLOCK blk01.
*&---------------------------------------------------------------------*
*& INITIALIZATION/选择屏幕前初始化 *
*&---------------------------------------------------------------------*
INITIALIZATION.
*&---------------------------------------------------------------------*
*& at selection-screen output/选择屏幕输出 *
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
PERFORM frm_control_output.
*&---------------------------------------------------------------------*
*& Start-of-selection/开始选择屏幕 *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
IF p_r3 = 'X' OR p_r1 = 'X'.
CONCATENATE s_budat+0(6) '01' INTO f_date.
"MOVE s_budat TO l_date.
DATA: lv_date TYPE sy-datum.
DATA:lv_yn TYPE string.
MOVE s_budat TO lv_date.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = lv_date "输入日期
IMPORTING
last_day_of_month = lv_date "返回日期:20140131
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
IF f_date IS NOT INITIAL AND lv_date IS NOT INITIAL.
IF p_r3 = 'X'.
SELECT COUNT(*)
FROM zsalary_fukan
WHERE budate >= f_date AND budate <= lv_date AND bukrs IN s_bukrs AND gjahr = s_budat+0(4) AND ttype = '3'.
IF sy-subrc = 0.
"弹出确认框
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
titel = '凭证已生成提示'
textline1 = '本月薪资凭证已经生成过,请确认是否重新生成?'
cancel_display = 'X' "space 不显示cancel按钮,'X'是显示取消按钮
IMPORTING
answer = lv_yn. "确定= J 否=N 取消 = A
IF lv_yn = 'J'.
PERFORM frm_get_data_se. " 基础数据查询
"ELSEif lv_yn = 'N' or lv_yn = 'A'.
ENDIF.
ELSE.
PERFORM frm_get_data_se. " 基础数据查询
ENDIF.
ELSEIF p_r1 = 'X'.
SELECT COUNT(*)
FROM zsalary_fukan
WHERE budate >= f_date AND budate <= lv_date AND bukrs IN s_bukrs AND gjahr = s_budat+0(4) AND ttype = '1'.
IF sy-subrc = 0.
"弹出确认框
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
titel = '凭证已生成提示'
textline1 = '本月薪资凭证已经生成过,请确认是否重新生成?'
cancel_display = 'X' "space 不显示cancel按钮,'X'是显示取消按钮
IMPORTING
answer = lv_yn. "确定= J 否=N 取消 = A
IF lv_yn = 'J'.
PERFORM frm_get_data_se. " 基础数据查询
"ELSEif lv_yn = 'N' or lv_yn = 'A'.
ENDIF.
ELSE.
PERFORM frm_get_data_se. " 基础数据查询
ENDIF.
ENDIF.
ENDIF.
ELSEIF p_r4 = 'X' OR p_r2 = 'X'.
PERFORM frm_get_data_fo.
ENDIF.
**&--- 判断查询是否为空
IF lt_out IS INITIAL.
MESSAGE s001(zfi001).
LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.
ENDIF.
*&---------------------------------------------------------------------*
*& end-of-selection/结束选择屏幕(程序结束处理,输出等) *
*&---------------------------------------------------------------------*
END-OF-SELECTION.
*&===ALV 输出
*&---设置ALV输出格式
PERFORM frm_init_layout.
*&---设置ALV输出字段
PERFORM frm_set_fieldcat.
*&---ALV 显示
PERFORM frm_display_alv.
*&---------------------------------------------------------------------*
*& Form frm_init_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_init_layout .
CLEAR gs_layout.
gs_layout-zebra = 'X' . " 斑马线
gs_layout-no_toolbar = 'X' . " 不用工具栏
gs_layout-cwidth_opt = 'X&