SAP ABAP开发:常用BAPI函数50个之1-[BAPI_ACC_DOCUMENT_POST]

在日常的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或者在这个链接联系我

微信原文《全文完》