在日常的SAP 工作中,经常会遇到ABAP的BAPI或者函数的使用问题。
为了系统性的做一个总结介绍。准备了50多个常用BAPI或者函数进行总结分享。
希望您喜欢,收藏。今天带来的是会计凭证创建FB01/F-02的BAPI_ACC_DOCUMENT_POST。
下一期的内容为:常用BAPI函数50个之2-[BAPI_ACC_DOCUMENT_REV_POST],敬请期待。。。。。。
DOCUMENTHEADER常用输入参数字段:
USERNAME | USNAM | 用户名 |
COMP_CODE | BUKRS | 公司代码 |
DOC_DATE | BLDAT | 凭证中的凭证日期 |
PSTNG_DATE | BUDAT | 凭证中的过帐日期 |
FIS_PERIOD | MONAT | 会计期间 |
DOC_TYPE | BLART | 凭证类型 |
表
参数名称 | 关联类型 | 可选的 | 说明 |
ACCOUNTGL | BAPIACGL09 | 可选 | 行项目 |
CURRENCYAMOUNT | BAPIACCR09 | 必选 | 货币类型数据 |
EXTENSION2 | BAPIPAREX | 可选 | 增强,扩展字段 |
RETURN | BAPIRET2 | 必选 | 返回参数 |
DEMO示例代码:
*bapi相关参数定义
DATA:gs_documentheader TYPE bapiache09, “抬头
gt_accountgl TYPE TABLE OF bapiacgl09, “总账相关的行项目信息
gt_currencyamount TYPE TABLE OF bapiaccr09, “金额相关信息
gt_return TYPE TABLE OF bapiret2, “返回参数信息
gt_extension2 TYPE TABLE OF bapiparex, “增强,扩展字段
gs_accountgl TYPE bapiacgl09, “行项目
gs_currencyamount TYPE bapiaccr09, “金额
gs_return TYPE bapiret2, “返回信息
gs_extension2 TYPE bapiparex, “增强
gs_zexten TYPE zexten, “用于存放增强字段的结构的工作区
gv_buzei TYPE bseg-buzei, “行项目编号
gv_posnr TYPE posnr_acc. “行项目编号
*选择屏幕
PARAMETERS:p_bukrs TYPE bukrs, “公司代码
p_ddate TYPE bldat DEFAULT sy-datum, “凭证日期
p_pdate TYPE budat DEFAULT sy-datum. “过账日期
*数据抓取处理,赋值
*抬头
gs_documentheader-doc_type = ‘WA’. “凭证类型
gs_documentheader-username = sy-uname. “用户名
gs_documentheader-comp_code = p_bukrs. “公司代码
gs_documentheader-doc_date = p_ddate. “凭证日期
gs_documentheader-pstng_date = p_pdate.”过账日期
gs_documentheader-fis_period = 12. “期间
*行项目,会计凭证,讲究借贷相等,可有多借多贷,但生成的凭证中,各科目借贷总数相等。此处只举例一借一贷。
gs_accountgl-item_text = ‘销项税额’. “科目描述
gs_accountgl-gl_account = ‘2221010007’. “科目
gs_accountgl-itemno_acc = 1. “行项目编号,行项目,金额数据,增强的行项目编号要一一对应
APPEND gs_accountgl TO gt_accountgl.
gs_accountgl-item_text = ‘进项税额’.
gs_accountgl-gl_account = ‘2221010001’.
gs_accountgl-itemno_acc = 2.
APPEND gs_accountgl TO gt_accountgl.
*金额数据
gs_currencyamount-amt_doccur = ‘27841.0000’. “金额
gs_currencyamount-currency = ‘CNY’. “币种
gs_currencyamount-itemno_acc = 1. “行项目编号
APPEND gs_currencyamount TO gt_currencyamount.
gs_currencyamount-amt_doccur = ‘-27841.0000’.
gs_currencyamount-currency = ‘CNY’.
gs_currencyamount-itemno_acc = 2.
APPEND gs_currencyamount TO gt_currencyamount.
*增强字段
gs_zexten-posnr = 1. “行项目编号
gs_zexten-bschl = ’40’. “增强中添加的记账码字段
gs_extension2-structure = ‘ZEXTEN’ .
gs_extension2-valuepart1 = gs_zexten.
APPEND gs_extension2 TO gt_extension2.
gs_zexten-posnr = 2.
gs_zexten-bschl = ’50’.
gs_extension2-structure = ‘ZEXTEN’ .
gs_extension2-valuepart1 = gs_zexten.
APPEND gs_extension2 TO gt_extension2.
*调用bapi
PERFORM frm_usebapi.
*——————————————————————————–*
* Form frm_usebapi *
*———————————————————————————*
* 调用bapi
* 表:行项目,金额数据,返回信息,增强字段
* 导入:抬头数据
*———————————————————————————*
FORM frm_usebapi.
DATA:ls_documentheader TYPE bapiache09, “抬头
lt_accountgl TYPE TABLE OF bapiacgl09, “总账相关的行项目信息
lt_currencyamount TYPE TABLE OF bapiaccr09, “金额相关信息
lt_return TYPE TABLE OF bapiret2, “返回参数信息
lt_extension2 TYPE TABLE OF bapiparex, “增强,扩展字段
ls_return TYPE bapiret2. ”
CLEAR ls_documentheader.
CLEAR lt_accountgl.
CLEAR lt_currencyamount.
CLEAR lt_return.
CLEAR lt_extension2.
CLEAR ls_return.
*将全局变量的值赋给局部变量
ls_documentheader = gs_documentheader.
lt_accountgl = gt_accountgl.
lt_currencyamount = gt_currencyamount.
lt_return = gt_return.
lt_extension2 = gt_extension2.
*调用bapi
CALL FUNCTION ‘BAPI_ACC_DOCUMENT_CHECK’
EXPORTING
documentheader = ls_documentheader
TABLES
accountgl = lt_accountgl
currencyamount = lt_currencyamount
return = lt_return
extension2 = lt_extension2.
CALL FUNCTION ‘BAPI_ACC_DOCUMENT_POST’
EXPORTING
documentheader = ls_documentheader
* CUSTOMERCPD =
* CONTRACTHEADER =
* IMPORTING
* OBJ_TYPE =
* OBJ_KEY =
* OBJ_SYS =
TABLES
accountgl = lt_accountgl
* ACCOUNTRECEIVABLE =
* ACCOUNTPAYABLE =
* ACCOUNTTAX =
currencyamount = lt_currencyamount
* CRITERIA =
* VALUEFIELD =
* EXTENSION1 =
return = lt_return
* PAYMENTCARD =
* CONTRACTITEM =
extension2 = lt_extension2
* REALESTATE =
* ACCOUNTWT =
.
IF sy-subrc = 0.
READ TABLE lt_return[] INTO ls_return WITH KEY type = ‘S’.
IF sy-subrc = 0.
*过账成功,将生成凭证的操作提交,否则能看到成功信息,但无法在fb03查看到凭证号
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.
MESSAGE ls_return-message TYPE ‘S’.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
MESSAGE ‘过账失败,请手动录入!’ TYPE ‘E’.
ENDIF.
ENDIF.
ENDFORM.
注意事项
(1)在调用该BAPI之前,可以调用相应的检查函数看看错误BAPI_ACC_DOCUMENT_CHECK。
(2)每有计算税的行项目,就需要额外产生一行税的项目,在批导循环的时候记得判断并计算相应的税。
(3)当特别总账为W、X、Y、Z、U、V时,该BAPI无效,此时可以用函数POSTING_INTERFACE_DOCUMENT批量创建会计凭证,
该函数封装了一个BDC,使用原理跟BDC类似。但是使用该函数,则没有对应的检查函数。
1. 增强(特别注意)
使用场景:许多行项目字段在该BAPI里面的内表里面并没有(常见的有反记账BSEG- XNEGP、原因代码BSEG-RSTGR、汇票签发日期BSED-WDATE等)这里我们需要对这些字段做BADI增强。详细增强步骤和代码请参加公众号hot583
本文链接:http://www.hot583.com/2022/03/30/bapi_acc_document_post/
本文为作者原创,如果这篇文章对您有用,欢迎转载,
转载请务必注明来源《今日热点在看》http://www.hot583.com/
我的微信公众号hot583或者在这个链接联系我
微信原文《全文完》