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.