SAP HANA ABAP-调用北森人事接口获取工资信息生成凭证

财务部每月发工资,首先进行计提工资,月末结账完成后冲销计提工资凭证,月中发放工资时在系统做工资付款凭证并将工资分到对应的工作中心中,通过开发程序实现: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&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuaiguo75

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值