当前位置: 首页 > news >正文

OA通过调用RFC实现员工报销的接口

FUNCTION zfmfi_if804.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IS_HEAD) TYPE  ZSLOG_101 OPTIONAL
*"  EXPORTING
*"     VALUE(ES_HEAD) TYPE  ZSLOG_101
*"     VALUE(EV_STATUS) TYPE  BAPI_MTYPE
*"     VALUE(EV_MESSAGE) TYPE  BAPI_MSG
*"  TABLES
*"      T_HEAD STRUCTURE  ZSFI_001H OPTIONAL
*"      T_ITEM STRUCTURE  ZSFI_001 OPTIONAL
*"      T_RETURN STRUCTURE  ZSFI_001R OPTIONAL
*"----------------------------------------------------------------------
  zfdatasave_name 'ZFMFI_IF804'.
  DATA: ls_documentheader    TYPE bapiache09,                   "待传凭证抬头 工作区
        ls_accountgl         TYPE bapiacgl09,                   "总帐科目项 工作区
        lt_accountgl         TYPE STANDARD TABLE OF bapiacgl09,  "总帐科目项内表
        ls_currencyamount    TYPE bapiaccr09,                   "货币项目 工作区
        lt_currencyamount    TYPE STANDARD TABLE OF bapiaccr09,  "货币项目 内表
        ls_accountreceivable TYPE bapiacar09,                   "客户项目 工作区
        lt_accountreceivable TYPE STANDARD TABLE OF bapiacar09,  "客户项目 内表
        ls_accountpayable    TYPE bapiacap09,                   "供应商项目 工作区
        lt_accountpayable    TYPE STANDARD TABLE OF bapiacap09,  "供应商项目内表
        lt_tax               TYPE STANDARD TABLE OF bapiactx09,  "税务项目
        ls_tax               TYPE bapiactx09,                    "税务项目
        ls_return            TYPE bapiret2,                    "返回参数 工作区
        lt_return            TYPE STANDARD TABLE OF bapiret2,   "参考结构 内表
        lt_extension2        TYPE STANDARD TABLE OF bapiparex,   "参考结构 内表
        ls_extension2        TYPE bapiparex,
        lv_belnr             TYPE bapiache09-obj_key.   "参考结构 内表
  "扩展字段
  DATA: ls_zexten LIKE zexten. "ZEXTEN SE11创建的那个结构

  DATA:lv_no TYPE i.
  DATA:ls_return1      TYPE zsfi_001r,
       lt_log          TYPE TABLE OF ztfico001,
       ls_log          TYPE ztfico001,
       lv_kostl        TYPE ztfico001-kostl,
       lv_message(250) TYPE c.

  DATA : lv_reversal TYPE bapiacrev,
         lv_bus_act  TYPE bapiache09-bus_act,
         lv_obj_key  TYPE bapiacrev-obj_key,
         lt_return2  TYPE TABLE OF bapiret2 WITH HEADER LINE,
         ls_return2  TYPE bapiret2,
         lv_lgo_sys  TYPE tbdls-logsys.

*&--Changeby TCD 2026-02-28--start------------------------------------------------
* 需求:当费用科目为福利费(6601040100)或职工教育经费(6601050100)时,
*       需要增加应付职工薪酬过渡科目,生成三行凭证:
*       行1:借:费用科目(原借贷方向不变)
*       行2:贷:应付职工薪酬-费用科目(计提)
*       行3:借:应付职工薪酬-费用科目(支付)
*       原凭证中的其他应收款科目由其他行处理保持不变

  "需要特殊处理的费用科目
  CONSTANTS: BEGIN OF lc_special_expense,
               welfare      TYPE saknr VALUE '6601040100',  "福利费
               education    TYPE saknr VALUE '6601050100',  "职工教育经费
             END OF lc_special_expense.

  "对应的应付职工薪酬科目
  CONSTANTS: BEGIN OF lc_payable,
               welfare      TYPE saknr VALUE '2211020000',  "应付职工薪酬-福利费
               education    TYPE saknr VALUE '2211050000',  "应付职工薪酬-职工教育经费
             END OF lc_payable.
*&--Changeby TCD 2026-02-28--end------------------------------------------------

  lv_no = 0.
  "报销

  LOOP AT t_head INTO DATA(ls_head).
*&--------add by   TCD on 20260120-----------start
*&限制不能重复创建会计凭证
*&确保凭证抬头文本抬头是唯一的
*&凭证抬头文本是OA的流程单(例如:FYBXD2026011925247)
    DATA: lv_bktxt_exists TYPE bkpf-belnr.
    CLEAR: lv_bktxt_exists.

    "检查BKPF表中是否存在相同的凭证抬头文本
    SELECT SINGLE belnr
      FROM bkpf
      INTO @lv_bktxt_exists
      WHERE bktxt = @ls_head-bktxt
        AND bukrs = @ls_head-bukrs
        AND xreversal = ''.

    "如果凭证已经存在,则返回成功消息,跳过处理
    IF lv_bktxt_exists IS NOT INITIAL.
      ls_return1-status = 'S'.
      ls_return1-belnr = lv_bktxt_exists.
      ls_return1-bukrs = ls_head-bukrs.
      ls_return1-gjahr = ls_head-gjahr.
      ls_return1-message = |凭证已存在,无需重复创建.|.
      APPEND ls_return1 TO t_return.

      "记录日志
      ls_log-rldnr = ls_head-rldnr. "分类账
      ls_log-bukrs = ls_head-bukrs. "分类账
      ls_log-gjahr = ls_head-gjahr. "分类账
      ls_log-zlsh  = ls_head-bktxt. "流水号
      ls_log-belnr = lv_bktxt_exists."会计凭证号
      ls_log-zzt   = '10'. "状态
      ls_log-status = 'S'.
      ls_log-message = |凭证已存在,无需重复创建.|.
      APPEND ls_log TO lt_log.

      CONTINUE. "跳过当前凭证的处理
    ENDIF.
*&--------add by   TCD on 20260120-----------end
    "抬头
    ls_documentheader-username   = sy-uname.   "创建人
    ls_documentheader-header_txt = ls_head-bktxt.    "凭证抬头文本
    ls_documentheader-comp_code  = ls_head-bukrs.     "公司代码
    ls_documentheader-doc_date   = ls_head-bldat.      "凭证中的凭证日期
    ls_documentheader-pstng_date = ls_head-budat.    "凭证中的过账日期
    ls_documentheader-fisc_year  = ls_head-gjahr.    "会计年度
    ls_documentheader-fis_period = ls_head-monat.    "会计期间
    ls_documentheader-doc_type   = 'SA'.   "凭证类型
    ls_documentheader-ref_doc_no = ls_head-xblnr.    "参考凭证编号
*    ls_documentheader-ac_doc_no  = ls_head-belnr.    "会计凭证号码

    "清空内表
    REFRESH: lt_accountgl, lt_currencyamount, lt_accountreceivable,
             lt_accountpayable, lt_tax, lt_extension2.

*&--Changeby TCD 2026-02-28--start------------------------------------------------
    "用于记录下一个可用的行项目号,确保行号连续
    DATA: lv_next_itemno TYPE posnr_acc.
    lv_next_itemno = 1.
*&--Changeby TCD 2026-02-28--end------------------------------------------------

    LOOP AT t_item INTO DATA(ls_item) WHERE bktxt = ls_head-bktxt.

***********changedby Jack 20241212******【D7149】*************
******* IF LS_ITEM-BSCHL = '40'.
      IF ls_item-bschl = '40' OR ls_item-bschl = '50'.
***********changedby Jack 20241212******【D7149】*************
        IF ls_item-kostl IS NOT INITIAL.
          ls_log-kostl = ls_item-kostl. "成本中心
        ENDIF.

*&--Changeby TCD 2026-02-28--start------------------------------------------------
        "判断是否是需要特殊处理的费用科目
        DATA: lv_is_special TYPE abap_bool.
        DATA: lv_payable_account TYPE saknr.

        CLEAR: lv_is_special, lv_payable_account.

        CASE ls_item-ktonr.
          WHEN lc_special_expense-welfare.
            lv_is_special = abap_true.
            lv_payable_account = lc_payable-welfare.
          WHEN lc_special_expense-education.
            lv_is_special = abap_true.
            lv_payable_account = lc_payable-education.
        ENDCASE.

        IF lv_is_special = abap_true.
          "==========================================
          "特殊处理:费用科目(福利费/职工教育经费)
          "生成三行凭证:
          "行1:借:费用科目(原借贷方向不变)
          "行2:贷:应付职工薪酬-费用科目(计提)
          "行3:借:应付职工薪酬-费用科目(支付)
          "==========================================

          "保存原始信息
          DATA(lv_original_amount) = ls_item-wrbtr.
          DATA(lv_original_bschl) = ls_item-bschl.
          DATA(lv_item_text) = ls_item-sgtxt.
          DATA(lv_original_buzei) = ls_item-buzei.
*&--Changeby TCD 2026-02-28--end------------------------------------------------

*&--Changeby TCD 2026-02-28--start------------------------------------------------
          "----------------------------------------
          "行1:费用科目(原借方/贷方不变)
          "----------------------------------------
          ls_accountgl-itemno_acc = |{ lv_next_itemno ALPHA = IN }|.
          ls_accountgl-gl_account = ls_item-ktonr.
          ls_accountgl-item_text  = lv_item_text.
          ls_accountgl-comp_code  = ls_head-bukrs.
          ls_accountgl-costcenter = ls_item-kostl.
          ls_accountgl-fis_period = ls_head-monat.
          ls_accountgl-fisc_year  = |{ ls_head-gjahr ALPHA = IN }|.
          ls_accountgl-pstng_date = ls_head-budat.
************ADD BY TCD  29.02.2024 14:46:46 START*********
        IF ls_head-check = 0.
          ls_accountgl-orderid    = |{ ls_item-aufnr ALPHA = IN }|.  "订单编号
        ELSEIF ls_head-check = 1.
          ls_zexten-posnr = |{ lv_next_itemno ALPHA = IN }|.
          ls_zexten-zzhsxmid = |{ ls_item-aufnr ALPHA = IN }|. "扩展字段
****CHANGE BY TCD [87463]20250314 START---
*OLD
*          LS_ZEXTEN-BSCHL =

http://www.jsqmd.com/news/421701/

相关文章:

  • 基于flask的河南红色旅游景点管理系统-vue pycharm django
  • DeepSeek写的论文AI率99%?一文教你降到安全线以下 - 还在做实验的师兄
  • NMN哪个牌子好?2026年NMN抗衰老品牌Top10重磅揭晓 - 资讯焦点
  • 比话降AI和嘎嘎降AI深度对比:Pallas引擎vs双引擎谁更强 - 还在做实验的师兄
  • 算法题-25
  • 基于flask的计件工人工资管理系统-vue pycharm django
  • React系列-1
  • 探索.NET Core 外卖订餐系统:初学者的进阶之旅
  • 2026年纯手写论文居然AI率60%?3个原因和解决办法 - 还在做实验的师兄
  • 算法题-24
  • 教学设备怎么选?这5家四川本土品牌兼顾合规、性价比与售后 - 深度智识库
  • 基于flask的健身助手系统 教练预约系统-vue pycharm django
  • 基于flask的河南庙会文化艺术展示与定制-vue pycharm django
  • linux进程和端口相关命令
  • 全网热议!2026年口碑好的抖音直播代运营企业推荐榜单 - 睿易优选
  • 基于flask 的人工智能研讨社区系统-vue pycharm django
  • 金属制品企业哪家强?政企采购必看的Top5优质厂家推荐 - 深度智识库
  • 为什么比话降AI敢承诺不达标退款?背后的技术逻辑 - 还在做实验的师兄
  • 2026年高校论文AI率标准解读:本科硕士博士各是多少 - 还在做实验的师兄
  • 基于flask 的学生网上选课系统的设计-vue pycharm django
  • 2026年水泥管钢筋笼绕筋机/滚焊机/水泥管绕筋机厂家推荐:青州市诚意重工机械有限公司全系供应 - 品牌推荐官
  • Win10/11访问共享提示“你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问”(已解决)
  • 留学中介TOP10 文书逻辑哪家强: 招生官视角看这就懂了 - 博客湾
  • 比话降AI和学术猹哪个好?知网实测数据全面对比 - 还在做实验的师兄
  • OpenCSG月度更新2026.2
  • 比话降AI批量处理教程:多篇论文同时降AI怎么操作 - 还在做实验的师兄
  • 金属制品哪家好?西南地区政企批量采购避坑指南与Top5高性价比厂家推荐 - 深度智识库
  • 2026年水泵/新风/电气/高低压/恒压供水/PLC控制柜厂家推荐:青岛乐控电气自动化技术有限公司 - 品牌推荐官
  • 2026年家用/大吸力/节能油烟机推荐:德国罗西欧电气集团,全品类吸油烟机解决方案 - 品牌推荐官
  • 商汤正式进入MSCI中国指数,商汤入选意味着什么?