SAP接口 财务凭证集成_付款

OA系统调用此接口,传输借款流程的凭证信息到SAP,生成借款类型SAP凭证。以下介绍两种方法:

1、调用标准的BAPI方法;

2、BDC方法,个人认为此方法比较适合简单的SAP窗口调用操作,而某些会计凭证生成较为复杂,不太建议此方法。

一、调用标准的BABI方法实现。 

1、首先先介绍一下实现会计凭证生成的BAPI,参考链接

2、增强操作在另一篇文章(SAP接口 财务凭证集成_借款),在此不再赘述。

3、数据导入和导出,此流程生成的凭证存在多借的情况,所有需要多定义一个结构来接收参数。

 

4、实现代码

FUNCTION ZFIIP017.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IV_BUKRS) TYPE  BUKRS OPTIONAL
*"     VALUE(IV_RSTGR) TYPE  RSTGR OPTIONAL
*"     VALUE(IV_LIFNR) TYPE  LIFNR OPTIONAL
*"     VALUE(IV_WAERS) TYPE  WAERS OPTIONAL
*"     VALUE(IV_BLART) TYPE  BLART OPTIONAL
*"     VALUE(IV_BSCHLS) TYPE  BSCHL OPTIONAL
*"     VALUE(IV_SHBKZD) TYPE  UMSKZ OPTIONAL
*"     VALUE(IV_RACCTH) TYPE  RACCT OPTIONAL
*"     VALUE(IV_BUDAT) TYPE  BUDAT OPTIONAL
*"     VALUE(IV_WRBTR) TYPE  WRBTR OPTIONAL
*"     VALUE(IV_PRCTR) TYPE  PRCTR OPTIONAL
*"     VALUE(IV_TYPE) TYPE  CHAR1 OPTIONAL
*"     VALUE(IV_NAME) TYPE  USNAM OPTIONAL
*"     VALUE(IV_CGTXT) TYPE  TEXT34 OPTIONAL
*"     VALUE(IV_USNAM) TYPE  USNAM OPTIONAL
*"  EXPORTING
*"     VALUE(EV_MSGTY) TYPE  BAPI_MTYPE
*"     VALUE(EV_MESSAGE) TYPE  BAPI_MSG
*"     VALUE(EV_MESBELNR) TYPE  BAPI_MSG
*"  TABLES
*"      IV_INPUT STRUCTURE  ZSFIIP015
*"----------------------------------------------------------------------
*凭证生成规则:
*"     VALUE(IV_BUKRS)        公司代码         固定值
*"     VALUE(IV_RSTGR)        原因代码         选择
*"     VALUE(IV_LIFNR)        会计科目-借      A:供应商编码;B:IV_INPUT
*"     VALUE(IV_WAERS)        货币码           默认CNY,可选择修改
*"     VALUE(IV_BLART)        凭证类型         SA/KZ;费用类、其他类:SA;资产类、材料类:KZ
*"     VALUE(IV_BSCHLS)       记账码-借        A:29/21;B:40
*"     VALUE(IV_SHBKZD)       特别总账标记-借  记账码-借=29时,默认A,必选;记账码-借=21时,无
*"     VALUE(IV_RACCTH)       会计科目-贷      付款银行编码
*"     VALUE(IV_BUDAT)        过账日期         出纳付款日期
*"     VALUE(IV_WRBTR)        过账金额         实际付款金额
*"     VALUE(IV_PRCTR)        利润中心         固定值
*"     VALUE(IV_TYPE)         业务类型         固定值:A:往来供应商,B;不挂往来供应商
*"     VALUE(IV_NAME)         费用归属人姓名
*"     VALUE(IV_CGTXT)        采购内容         限定17个汉字以内
*"     VALUE(IV_USNAM)        输入者
*"     BSCHLS                 记账码-贷        50
*"     SGTXT                  项目行文本       费用归属人姓名+“付款”+采购内容
*"     BKTXT                  凭证抬头         费用归属人姓名+“付款”
*"     KOSTL                  成本中心         A:无;B:IV_INPUT
*"TABLES:
*"B类型时:IV_INPUT
*:RACCTS  会计科目-借
*:BXTXT   采购内容
*:WRBTR   金额
*:KOSTL   成本中心
*"----------------------BAPI方法----------------------------------------
TYPES: BEGIN OF ty_data.
    INCLUDE TYPE ZSFIIP015.
TYPES: END OF ty_data.

DATA:  lw_documentheader    TYPE bapiache09,                          "表头内容
       lt_accountgl         TYPE STANDARD TABLE OF bapiacgl09,        "总帐科目项
       lw_accountgl         TYPE bapiacgl09,                          "总帐科目项工作区
       lt_accountpayable    TYPE STANDARD TABLE OF bapiacap09,        "供应商项目
       lw_accountpayable    TYPE  bapiacap09,                         "供应商项目工作区
*       lt_accountreceivable TYPE STANDARD TABLE OF bapiacar09,        "客户项目
*       lW_accountreceivable TYPE bapiacar09,                          "客户项目
       lt_currencyamount    TYPE STANDARD TABLE OF bapiaccr09,        "货币项目
       lw_currencyamount    TYPE bapiaccr09,                          "货币项目工作区
       lt_ext2              TYPE STANDARD TABLE OF bapiparex WITH HEADER LINE,"扩展字段(记账码,原因代码)
       lw_ext2              TYPE ZSFIIP019,"扩展字段工作区
*       lt_order_info        TYPE STANDARD TABLE OF zfit_order_info,
       lv_itemno_acc        TYPE posnr_acc,                          "会计凭证行项目号
       lt_return            TYPE STANDARD TABLE OF bapiret2,         "返回参数
       lw_return            TYPE bapiret2,                           "返回参数工作区
*       ls_no_acc_rule       TYPE zfit_no_acc_rule,
*       lv_order_no          TYPE zfit_order_info-order_no,
       lv_key               TYPE bapiache09-obj_key.
DATA:  it_data              TYPE TABLE OF ty_data,          "借方结构
       wa_data              TYPE ty_data.


"CONSTANTS:  cn_bus_act  TYPE glvor VALUE 'RFBU',"交易类型
"            cn_status_s TYPE char4 VALUE 'S000',
"            cn_status_e TYPE char4 VALUE 'E0M1',
"            cn_type_s   TYPE c VALUE 'S',
"            cn_type_e   TYPE c VALUE 'E',
"            cn_koart_k  TYPE c VALUE 'K',
"            cn_koart_d  TYPE c VALUE 'D',
"            cn_koart_s  TYPE c VALUE 'S',
"            cn_shkzg_h  TYPE c VALUE 'H',
"            cn_shkzg_s  TYPE c VALUE 'S',
"            cn_blart_z5 TYPE bkpf-blart VALUE 'Z5',
"            cn_bschl_50 TYPE bschl VALUE '50',
"            cn_bschl_40 TYPE bschl VALUE '40'.

DATA: l_itemno TYPE char10 VALUE '0000000000'."行项目
DATA: ls_currencyamount    TYPE LINE OF bapiaccr09_tab.
DATA: l_wrbtr_sum TYPE bapidoccur,
      l_tax_sum   TYPE bapidoccur.

DATA: v_tabix TYPE sy-tabix,
      IV_SGTXT TYPE sgtxt,"项目行文本
      IV_BKTXT TYPE bktxt."凭证抬头文本.
*"----------测试数据------------
*IV_BUKRS = '1100'.  "公司
*IV_RSTGR = 'B5'.    "原因代码
*IV_LIFNR = '700202'. "供应商
*IV_WAERS = 'CNY'. "货币码
*IV_BLART = 'SA'.   "凭证类型
*IV_BSCHLS = '21'.    "过账码-借
*IV_SHBKZD ='A'.
*IV_RACCTS = '8001070500'. "会计科目-借
*IV_RACCTH = '1002010103'. "会计科目-贷
*IV_BUDAT = '20200508'.  "凭证日期
*IV_WRBTR = '3000'.      "金额
**IV_KOSTL = '11S00202'.   "成本中心
*IV_PRCTR = 'PC1100'.    "利润中心
*IV_TYPE = 'A'.           "业务类型
*IV_NAME = '刘定'.        "借款人姓名
*IV_CGTXT = '树莓派'.       "采购内容
*IV_USNAM = 'FICO03'.     "输入者

*加上p_in的前导零
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = IV_LIFNR
    IMPORTING
      output = IV_LIFNR.

IF IV_BUDAT IS INITIAL.
 IV_BUDAT = SY-DATUM.
ENDIF.

IF IV_BSCHLS <> '29'.
    CLEAR IV_SHBKZD.
    ENDIF.

IF IV_NAME IS NOT INITIAL.
IF IV_NAME IS NOT INITIAL.
  CONCATENATE IV_NAME '付款' IV_CGTXT INTO IV_BKTXT."拼接凭证抬头文本
  CONCATENATE IV_NAME '付款' IV_CGTXT INTO IV_SGTXT."拼接项目行文本
ENDIF.

ENDIF.

* 分配字段写入“收付款单号+行项目号”
* 抬头信息
  lw_documentheader-doc_date   = IV_BUDAT."凭证中的凭证日期
  lw_documentheader-pstng_date = IV_BUDAT."凭证中的记账日期
  lw_documentheader-fisc_year   = IV_BUDAT+0(4)."记账财年
  lw_documentheader-fis_period  = IV_BUDAT+4(2)."记账月份
  lw_documentheader-doc_type   = IV_BLART."凭证类型
  lw_documentheader-comp_code  = IV_BUKRS."公司代码
  lw_documentheader-header_txt = IV_BKTXT."凭证抬头
*  lw_documentheader-bus_act    = cn_bus_act. "'RFBU'. “交易类型
  lw_documentheader-username   = IV_USNAM."用户名

*********************---借方---*****************************
   IF IV_TYPE ='A' ."往来供应商时
       ADD 1 TO l_itemno.
     "供应商
    lw_accountpayable-itemno_acc = l_itemno. "凭证行项目
    lw_accountpayable-vendor_no = IV_LIFNR."员工供应商编码
    IF IV_SHBKZD IS NOT INITIAL.
     lw_accountpayable-sp_gl_ind = IV_SHBKZD."特别总账标识
    ENDIF.
    lw_accountpayable-bline_date = IV_BUDAT."到期日
    lw_accountpayable-item_text  = IV_SGTXT."项目行文本(同凭证抬头)
    lw_accountpayable-profit_ctr  = IV_PRCTR .        "利润中心
    APPEND lw_accountpayable TO lt_accountpayable.
    CLEAR  lw_accountpayable.
    "货币金额
    lw_currencyamount-itemno_acc = l_itemno."凭证行项目
    lw_currencyamount-currency   = IV_WAERS."货币码
    lw_currencyamount-amt_doccur = IV_WRBTR."金额
    APPEND lw_currencyamount TO lt_currencyamount.
    CLEAR:lw_currencyamount.
    "----------- extension2 --------------------
    "记账码&原因代码
     lw_ext2-posnr       = l_itemno.  "凭证行项目
     IF IV_SHBKZD IS NOT INITIAL.
     lw_ext2-bschl       = '29'.   "记账码
     ELSE.
      lw_ext2-bschl       = '21'.   "记账码
     ENDIF.
*     lw_ext2-rstgr       = IV_RSTGR.   "凭证行项目原因代码
    IF  lw_ext2 IS NOT INITIAL .
      lt_ext2-structure = 'ZSFIIP019'.
      lt_ext2-valuepart1 =  lw_ext2.
      APPEND lt_ext2 TO lt_ext2.
      CLEAR  lt_ext2.
      CLEAR  lw_ext2.
    ENDIF.

    ELSE."不挂往来供应商

 LOOP AT IV_INPUT INTO wa_data.
 ADD 1 TO l_itemno.
  IF wa_data-raccts CP '22210102*'.   "判断是否为进项税科目号
     IV_SGTXT =  wa_data-bxtxt.
     ELSE.
  CONCATENATE IV_NAME '付款' wa_data-bxtxt INTO IV_SGTXT.
  ENDIF.
   "总账相关的行项目信息
    lw_accountgl-itemno_acc  = l_itemno .        "凭证行项目
    lw_accountgl-gl_account  = wa_data-raccts.   "会计科目(借)
    lw_accountgl-item_text   = IV_SGTXT.         "项目行文本
    lw_accountgl-fis_period  = IV_BUDAT+4(2).    "记账月份
    lw_accountgl-pstng_date  = IV_BUDAT.         "凭证中的记账日期
    lw_accountgl-value_date  = IV_BUDAT.         "起息日
    IF wa_data-raccts+(4) = '8001'.
    lw_accountgl-costcenter  = wa_data-kostl .    "成本中心
    lw_accountgl-profit_ctr  = IV_PRCTR .        "利润中心
    ENDIF.
    APPEND  lw_accountgl  TO  lt_accountgl .
    CLEAR  lw_accountgl .
    "货币金额
    lw_currencyamount-itemno_acc = l_itemno."凭证行项目
    lw_currencyamount-currency   = IV_WAERS."货币码
    lw_currencyamount-amt_doccur = wa_data-wrbtr."金额
    APPEND lw_currencyamount TO lt_currencyamount.
    CLEAR:lw_currencyamount.
    "----------- extension2 --------------------
    "记账码&原因代码
     lw_ext2-posnr       = l_itemno.  "凭证行项目
      lw_ext2-bschl       = '40'.   "记账码
*     lw_ext2-rstgr       = IV_RSTGR.   "凭证行项目原因代码
    IF  lw_ext2 IS NOT INITIAL .
      lt_ext2-structure = 'ZSFIIP019'.
      lt_ext2-valuepart1 =  lw_ext2.
      APPEND lt_ext2 TO lt_ext2.
      CLEAR  lt_ext2.
      CLEAR  lw_ext2.
    ENDIF.
     CLEAR wa_data.
    ENDLOOP.
 ENDIF.
******************---贷方---*************************
  ADD 1 TO l_itemno.
       "总账相关的行项目信息
    lw_accountgl-itemno_acc  = l_itemno.        "凭证行项目
    lw_accountgl-gl_account  = IV_RACCTH.       "会计科目(贷)
    lw_accountgl-item_text  = IV_BKTXT.         "项目行文本
    APPEND  lw_accountgl  TO  lt_accountgl .
    CLEAR  lw_accountgl .
    "货币金额
    lw_currencyamount-itemno_acc = l_itemno."凭证行项目
    lw_currencyamount-currency   = IV_WAERS."货币码
    lw_currencyamount-amt_doccur = - IV_WRBTR."金额
    APPEND lw_currencyamount TO lt_currencyamount.
    CLEAR:lw_currencyamount.
    "----------- extension2 --------------------
    "记账码&原因代码
     lw_ext2-posnr       = l_itemno.  "凭证行项目
     lw_ext2-bschl       = '50'.   "记账码
     lw_ext2-rstgr       = IV_RSTGR.   "凭证行项目原因代码
    IF  lw_ext2 IS NOT INITIAL .
      lt_ext2-structure = 'ZSFIIP019'.
      lt_ext2-valuepart1 =  lw_ext2.
      APPEND lt_ext2 TO lt_ext2.
      CLEAR  lt_ext2.
      CLEAR  lw_ext2.
    ENDIF.
* 调用即可:check 可以防止跳号
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
      EXPORTING
        documentheader = lw_documentheader
      TABLES
        accountgl      = lt_accountgl[]
        currencyamount = lt_currencyamount[]
        return         = lt_return[].

 CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
    EXPORTING
      documentheader    = lw_documentheader
    IMPORTING
*     OBJ_TYPE          =
      obj_key           = lv_key
*     OBJ_SYS           =
    TABLES
      accountgl         = lt_accountgl[]
*      accountreceivable = lt_accountreceivable[]
      accountpayable    = lt_accountpayable[]
      currencyamount    = lt_currencyamount[]
      return            = lt_return[]
      extension2        = lt_ext2[].

  READ TABLE lt_return INTO lw_return INDEX 1.
  IF lw_return-type = 'S' .
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
     wait = 'X'.
     EV_MESBELNR   = lv_key+0(10).
*    os_key-bukrs   = lv_key+10(4).
*    os_key-gjahr   = lv_key+14(4).
     ev_msgty     = 'S'.
     EV_MESSAGE    = lw_return-message.
  ELSE.
    LOOP AT lt_return INTO lw_return WHERE type = 'E'.
       EV_MSGTY = 'E'.
      IF  EV_MESSAGE IS INITIAL.
         EV_MESSAGE = lw_return-message.
      ELSE.
        CONCATENATE  EV_MESSAGE '/' lw_return-message INTO  EV_MESSAGE.
      ENDIF.
    ENDLOOP.
  ENDIF.
  CLEAR:l_itemno,
        lt_accountgl[],
        lt_accountpayable[],
        lt_currencyamount[],
        lt_return[],
        lt_ext2[].
ENDFUNCTION.

二、DBC录屏方法

FUNCTION ZFIIP017.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IV_BUKRS) TYPE  BUKRS OPTIONAL
*"     VALUE(IV_RSTGR) TYPE  RSTGR OPTIONAL
*"     VALUE(IV_LIFNR) TYPE  LIFNR OPTIONAL
*"     VALUE(IV_WAERS) TYPE  WAERS OPTIONAL
*"     VALUE(IV_BLART) TYPE  BLART OPTIONAL
*"     VALUE(IV_BSCHLS) TYPE  BSCHL OPTIONAL
*"     VALUE(IV_SHBKZD) TYPE  UMSKZ OPTIONAL
*"     VALUE(IV_RACCTH) TYPE  RACCT OPTIONAL
*"     VALUE(IV_BUDAT) TYPE  BUDAT OPTIONAL
*"     VALUE(IV_WRBTR) TYPE  WRBTR OPTIONAL
*"     VALUE(IV_PRCTR) TYPE  PRCTR OPTIONAL
*"     VALUE(IV_TYPE) TYPE  CHAR1 OPTIONAL
*"     VALUE(IV_NAME) TYPE  USNAM OPTIONAL
*"     VALUE(IV_CGTXT) TYPE  TEXT34 OPTIONAL
*"     VALUE(IV_USNAM) TYPE  USNAM OPTIONAL
*"  EXPORTING
*"     VALUE(EV_MSGTY) TYPE  BAPI_MTYPE
*"     VALUE(EV_MESSAGE) TYPE  BAPI_MSG
*"     VALUE(EV_MESBELNR) TYPE  BAPI_MSG
*"  TABLES
*"      IV_INPUT STRUCTURE  ZSFIIP015
*"----------------------------------------------------------------------
*凭证生成规则:
*"     VALUE(IV_BUKRS)        公司代码         固定值,集团及分厂:1100,富贤:1200
*"     VALUE(IV_RSTGR)        原因代码         选择
*"     VALUE(IV_LIFNR)        会计科目-借      A:供应商编码;B:IV_INPUT
*"     VALUE(IV_WAERS)        货币码           默认CNY,可选择修改
*"     VALUE(IV_BLART)        凭证类型         SA/KZ;费用类、其他类:SA;资产类、材料类:KZ
*"     VALUE(IV_BSCHLS)       记账码-借        A:29/21;B:40
*"     VALUE(IV_SHBKZD)       特别总账标记-借  记账码-借=29时,默认A,必选;记账码-借=21时,无
*"     VALUE(IV_RACCTH)       会计科目-贷      付款银行编码
*"     VALUE(IV_BUDAT)        过账日期         出纳付款日期
*"     VALUE(IV_WRBTR)        过账金额         实际付款金额
*"     VALUE(IV_PRCTR)        利润中心         固定值,集团及分厂:PC1100,富贤:PC1200
*"     VALUE(IV_TYPE)         业务类型         固定值:A:往来供应商,B;不挂往来供应商
*"     VALUE(IV_NAME)         费用归属人姓名
*"     VALUE(IV_CGTXT)        采购内容         限定17个汉字以内
*"     VALUE(IV_USNAM)        输入者
*"     BSCHLS                 记账码-贷        50
*"     SGTXT                  项目行文本       费用归属人姓名+“付款”+采购内容
*"     BKTXT                  凭证抬头         费用归属人姓名+“付款”
*"     KOSTL                  成本中心         A:无;B:IV_INPUT
*"TABLES:
*"B类型时:IV_INPUT
*:RACCTS  会计科目-借
*:BXTXT   采购内容
*:WRBTR   金额
*:KOSTL   成本中心

*"---------------------BDC方法(无输入者字段)----------------------------
DATA: v_tabix TYPE sy-tabix,
      flag TYPE char1 VALUE 'N',
      IV_SGTXT TYPE sgtxt,"项目行文本
      IV_BKTXT TYPE bktxt."凭证抬头文本

DATA: msg TYPE bdcmsgcoll.

IF IV_BUDAT IS INITIAL.
 IV_BUDAT = SY-DATUM.
ENDIF.

IF IV_NAME IS NOT INITIAL.
  CONCATENATE IV_NAME '付款' INTO IV_BKTXT."拼接凭证抬头文本
  CONCATENATE IV_NAME '付款:' IV_CGTXT INTO IV_SGTXT."拼接项目行文本
ENDIF.

PERFORM bdc_init.
*****************BDC
IF IV_TYPE ='A' AND IV_BSCHLS = '29'.
    perform bdc_dynpro      using 'SAPMF05A'    '0100'.
    perform bdc_field       using 'BDC_CURSOR'  'RF05A-NEWUM'.
    perform bdc_field       using 'BDC_OKCODE' '/00'.
    perform bdc_field       using 'BKPF-BLDAT'  IV_BUDAT."过账日期
    perform bdc_field       using 'BKPF-BLART'  iv_blart."记账类型
    perform bdc_field       using 'BKPF-BUKRS'  iv_bukrs."公司代码
    perform bdc_field       using 'BKPF-BUDAT'  IV_BUDAT."凭证日期
    perform bdc_field       using 'BKPF-MONAT'  IV_BUDAT+4(2)."月份
    perform bdc_field       using 'BKPF-WAERS'  iv_waers. "货币
    perform bdc_field       using 'BKPF-BKTXT'  iv_bktxt."凭证抬头
    perform bdc_field       using 'FS006-DOCID' '*'.
    perform bdc_field       using 'RF05A-NEWBS' iv_bschls. "过账码(借)
    perform bdc_field       using 'RF05A-NEWKO' IV_LIFNR. "会计科目(借)/供应商或借款人
    perform bdc_field       using 'RF05A-NEWUM' iv_shbkzd. "特别总账标识(借)
*    ****************
    perform bdc_dynpro      using 'SAPMF05A'    '0304'.
    perform bdc_field       using 'BDC_CURSOR'  'BSEG-ZFBDT'.
    perform bdc_field       using 'BDC_OKCODE'   '/00'.
    perform bdc_field       using 'BSEG-WRBTR'   iv_wrbtr."金额
    perform bdc_field       using 'BSEG-ZFBDT'   IV_BUDAT."到期日,默认当天
    perform bdc_field       using 'BSEG-SGTXT'   iv_sgtxt."行文本
    perform bdc_field       using 'RF05A-NEWBS'  '50'. "过账码(贷)固定50
    perform bdc_field       using 'RF05A-NEWKO'  iv_raccth. "会计科目(贷)
*    ****************
    perform bdc_dynpro      using 'SAPMF05A'     '0300'.
    perform bdc_field       using 'BDC_CURSOR'   'BSEG-SGTXT'.
    perform bdc_field       using 'BDC_OKCODE'   '/00'.
    perform bdc_field       using 'BSEG-WRBTR'   iv_wrbtr."金额
    perform bdc_field       using 'BSEG-VALUT'   IV_BUDAT."计息日期
    perform bdc_field       using 'BSEG-SGTXT'   iv_sgtxt."行文本
    perform bdc_field       using 'DKACB-FMORE'  'X'.
*    ****************
    perform bdc_dynpro      using 'SAPLKACB'     '0002'.
    perform bdc_field       using 'BDC_CURSOR'   'COBL-PRCTR'.
    perform bdc_field       using 'BDC_OKCODE'   '=ENTE'.
    perform bdc_field       using 'COBL-PRCTR'   iv_prctr. "利润中心
*    ****************现金流
    perform bdc_dynpro      using 'SAPMF05A'     '0330'.
    perform bdc_field       using 'BDC_CURSOR'   'BSEG-RSTGR'.
    perform bdc_field       using 'BDC_OKCODE'   '/00'.
    perform bdc_field       using 'BSEG-RSTGR'    iv_rstgr."原因代码
*    ****************
    perform bdc_dynpro      using 'SAPMF05A'    '0330'.
    perform bdc_field       using 'BDC_CURSOR'  'BSEG-RSTGR'.
    perform bdc_field       using 'BDC_OKCODE'  '=AB'.
    perform bdc_field       using 'BSEG-RSTGR'   iv_rstgr."原因代码
*    ****************
    perform bdc_dynpro      using 'SAPMF05A'    '0700'.
    perform bdc_field       using 'BDC_CURSOR'  'RF05A-NEWBS'.
    perform bdc_field       using 'BDC_OKCODE'  '=BU'.
    perform bdc_field       using 'BKPF-BKTXT'   iv_bktxt."摘要
     CLEAR itmsg.
     CALL TRANSACTION 'F-02' USING itbdc MODE 'E' UPDATE 'S' MESSAGES INTO itmsg.
     IF sy-subrc = 0.
       LOOP AT itmsg INTO msg.
        IF msg-msgtyp = 'S'.
         flag = 'Y'.
       ENDIF.
       CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = msg-MSGID
          msgnr               = msg-MSGNR
          msgv1               = msg-MSGV1
          msgv2               = msg-MSGV2
          msgv3               = msg-MSGV3
          msgv4               = msg-MSGV4
        IMPORTING
           MESSAGE_TEXT_OUTPUT = EV_MESSAGE.
      ENDLOOP.
      ENDIF.
  ELSEIF IV_TYPE ='A' AND IV_BSCHLS = '21'.
    perform bdc_dynpro      using 'SAPMF05A'    '0100'.
    perform bdc_field       using 'BDC_CURSOR'  'RF05A-NEWKO'.
    perform bdc_field       using 'BDC_OKCODE' '/00'.
    perform bdc_field       using 'BKPF-BLDAT'  SY-DATUM."过账日期
    perform bdc_field       using 'BKPF-BLART'  iv_blart."记账类型
    perform bdc_field       using 'BKPF-BUKRS'  iv_bukrs."公司代码
    perform bdc_field       using 'BKPF-BUDAT'  IV_BUDAT."凭证日期
    perform bdc_field       using 'BKPF-MONAT'  SY-DATUM+4(2)."月份
    perform bdc_field       using 'BKPF-WAERS'  iv_waers. "货币
    perform bdc_field       using 'BKPF-BKTXT'  iv_bktxt."凭证抬头
    perform bdc_field       using 'FS006-DOCID' '*'.
    perform bdc_field       using 'RF05A-NEWBS' IV_BSCHLS. "过账码(借)固定40
    perform bdc_field       using 'RF05A-NEWKO' IV_LIFNR. "会计科目(借)--供应商或借款人
*   **********************
    perform bdc_dynpro      using 'SAPMF05A'    '0302'.
    perform bdc_field       using 'BDC_CURSOR'  'RF05A-NEWKO'.
    perform bdc_field       using 'BDC_OKCODE'  '/00'.
    perform bdc_field       using 'BSEG-WRBTR'  iv_wrbtr."金额
    perform bdc_field       using 'BSEG-ZFBDT'  IV_BUDAT."过账日期
    perform bdc_field       using 'BSEG-SGTXT'  iv_sgtxt."行文本
    perform bdc_field       using 'RF05A-NEWBS' '50'. "过账码(贷)固定50
    perform bdc_field       using 'RF05A-NEWKO' iv_raccth. "会计科目(贷)
*   **********************
    perform bdc_dynpro      using 'SAPMF05A'    '0300'.
    perform bdc_field       using 'BDC_CURSOR'  'BSEG-SGTXT'.
    perform bdc_field       using 'BDC_OKCODE'  '/00'.
    perform bdc_field       using 'BSEG-WRBTR'  iv_wrbtr."金额
    perform bdc_field       using 'BSEG-VALUT'  IV_BUDAT."过账日期
    perform bdc_field       using 'BSEG-SGTXT'  iv_sgtxt."行文本
    perform bdc_field       using 'DKACB-FMORE'  'X'.
*   **********************
*   **********************
    perform bdc_dynpro      using 'SAPLKACB'     '0002'.
    perform bdc_field       using 'BDC_CURSOR'  'COBL-PRCTR'.
    perform bdc_field       using 'BDC_OKCODE'  '=ENTE'.
    perform bdc_field       using 'COBL-PRCTR'  iv_prctr. "利润中心
*   **********************
    perform bdc_dynpro      using 'SAPMF05A'    '0330'.
    perform bdc_field       using 'BDC_CURSOR'  'BSEG-RSTGR'.
    perform bdc_field       using 'BDC_OKCODE'  '/00'.
    perform bdc_field       using 'BSEG-RSTGR'   iv_rstgr."原因代码
*   **********************
    perform bdc_dynpro      using 'SAPMF05A'    '0330'.
    perform bdc_field       using 'BDC_CURSOR'  'BSEG-RSTGR'.
    perform bdc_field       using 'BDC_OKCODE'  '=AB'.
    perform bdc_field       using 'BSEG-RSTGR'   iv_rstgr."原因代码
*    ****************
    perform bdc_dynpro      using 'SAPMF05A'    '0700'.
    perform bdc_field       using 'BDC_CURSOR'  'RF05A-NEWBS'.
    perform bdc_field       using 'BDC_OKCODE'  '=BU'.
    perform bdc_field       using 'BKPF-BKTXT'   iv_bktxt."摘要
     CLEAR itmsg.
     CALL TRANSACTION 'F-02' USING itbdc MODE 'E' UPDATE 'S' MESSAGES INTO itmsg.
     IF sy-subrc = 0.
       LOOP AT itmsg INTO msg.
        IF msg-msgtyp = 'S'.
         flag = 'Y'.
       ENDIF.
       CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = msg-MSGID
          msgnr               = msg-MSGNR
          msgv1               = msg-MSGV1
          msgv2               = msg-MSGV2
          msgv3               = msg-MSGV3
          msgv4               = msg-MSGV4
        IMPORTING
           MESSAGE_TEXT_OUTPUT = EV_MESSAGE.
      ENDLOOP.
      ENDIF.
  ELSE.
    perform bdc_dynpro      using 'SAPMF05A'    '0100'.
    perform bdc_field       using 'BDC_CURSOR'  'RF05A-NEWUM'.
    perform bdc_field       using 'BDC_OKCODE' '/00'.
    perform bdc_field       using 'BKPF-BLDAT'  SY-DATUM."过账日期
    perform bdc_field       using 'BKPF-BLART'  iv_blart."记账类型
    perform bdc_field       using 'BKPF-BUKRS'  iv_bukrs."公司代码
    perform bdc_field       using 'BKPF-BUDAT'  IV_BUDAT."凭证日期
    perform bdc_field       using 'BKPF-MONAT'  SY-DATUM+4(2)."月份
    perform bdc_field       using 'BKPF-WAERS'  iv_waers. "货币
    perform bdc_field       using 'BKPF-BKTXT'  iv_bktxt."凭证抬头
    perform bdc_field       using 'FS006-DOCID' '*'.
    perform bdc_field       using 'RF05A-NEWBS' '40'. "过账码(借)固定40
    perform bdc_field       using 'RF05A-NEWKO' iv_raccts. "会计科目(借)--供应商或借款人
*   **********************
    perform bdc_dynpro      using 'SAPMF05A'    '0300'.
    perform bdc_field       using 'BDC_CURSOR'  'RF05A-NEWKO'.
    perform bdc_field       using 'BDC_OKCODE'  '/00'.
    perform bdc_field       using 'BSEG-WRBTR'  iv_wrbtr."金额
    perform bdc_field       using 'BSEG-VALUT'  IV_BUDAT."过账日期
    perform bdc_field       using 'BSEG-SGTXT'  iv_sgtxt."行文本
    perform bdc_field       using 'RF05A-NEWBS' '50'. "过账码(贷)固定50
    perform bdc_field       using 'RF05A-NEWKO' iv_raccth. "会计科目(贷)
    perform bdc_field       using 'DKACB-FMORE'  'X'.
*   **********************
    perform bdc_dynpro      using 'SAPLKACB'     '0002'.
    perform bdc_field       using 'BDC_CURSOR'  'COBL-PRCTR'.
    perform bdc_field       using 'BDC_OKCODE'  '=ENTE'.
    perform bdc_field       using 'COBL-KOSTL'  iv_kostl. "成本中心
    perform bdc_field       using 'COBL-PRCTR'  iv_prctr. "利润中心
*   **********************
    perform bdc_dynpro      using 'SAPMF05A'    '0300'.
    perform bdc_field       using 'BDC_CURSOR'  'BSEG-SGTXT'.
    perform bdc_field       using 'BDC_OKCODE'  '/00'.
    perform bdc_field       using 'BSEG-WRBTR'  iv_wrbtr."金额
    perform bdc_field       using 'BSEG-VALUT'  IV_BUDAT."过账日期
    perform bdc_field       using 'BSEG-SGTXT'  iv_sgtxt."行文本
    perform bdc_field       using 'DKACB-FMORE'  'X'.
*   **********************
    perform bdc_dynpro      using 'SAPLKACB'   '0002'.
    perform bdc_field       using 'BDC_CURSOR' 'COBL-GSBER'.
    perform bdc_field       using 'BDC_OKCODE' '=ENTE'.
*   **********************
    perform bdc_dynpro      using 'SAPMF05A'    '0330'.
    perform bdc_field       using 'BDC_CURSOR'  'BSEG-RSTGR'.
    perform bdc_field       using 'BDC_OKCODE'  '/00'.
    perform bdc_field       using 'BSEG-RSTGR'   iv_rstgr."原因代码
*   **********************
    perform bdc_dynpro      using 'SAPMF05A'    '0330'.
    perform bdc_field       using 'BDC_CURSOR'  'BSEG-RSTGR'.
    perform bdc_field       using 'BDC_OKCODE'  '=BU'.
    perform bdc_field       using 'BSEG-RSTGR'   iv_rstgr."原因代码
     CLEAR itmsg.
     CALL TRANSACTION 'F-02' USING itbdc MODE 'E' UPDATE 'S' MESSAGES INTO itmsg.
     IF sy-subrc = 0.
       LOOP AT itmsg INTO msg.
        IF msg-msgtyp = 'S'.
         flag = 'Y'.
       ENDIF.
       CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = msg-MSGID
          msgnr               = msg-MSGNR
          msgv1               = msg-MSGV1
          msgv2               = msg-MSGV2
          msgv3               = msg-MSGV3
          msgv4               = msg-MSGV4
        IMPORTING
           MESSAGE_TEXT_OUTPUT = EV_MESSAGE.
      ENDLOOP.
      ENDIF.
ENDIF.
 IF flag = 'Y'.
    ev_msgty = 'S'.
    EV_MESBELNR = EV_MESSAGE+3(10).
  ELSE.
    ev_msgty = 'E'.
    EV_MESBELNR = '凭证过账失败!'.
  ENDIF.
ENDFUNCTION.

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值