考虑使用BAPI_ACC_DOCUMENT_POST。
本文重点讨论的业务场景:使用用户上传的EXCLE文件批量创建会计凭证,节省时间操作时间。
开发申请要求:给出前台(TCODE:FB01)创建会计凭证需要的抬头数据以及行项目数据,批量将会计凭证创建出来。
前台操作,根据界面底部的消息提示一步一步输入会计凭证的数据
接收抬头数据的结构。
接收行项目数据的表。
采购会计凭证的成功失败消息都会放在消息表RETURN里。
-
- BAPI行项目字段增强
许多行项目字段在该BAPI里面的内表里面并没有(常见的有反记账BSEG- XNEGP、原因代码BSEG-RSTGR、汇票签发日期BSED-WDATE等)这里我们需要对这些字段做BADI增强。
(1)T-CODE SE11创建结构,该结构包含了要增强的字段和行项目(该字段必须有):
(2)然后T-CODE SE19 开始进行增强实施
在SE19创建典型BADI 输入ACC_DOCUMENT步骤如图:
进入以下界面点击增加,然后选会计凭证:
点击保存后进入以下界面点击新建
然后
选中刚才创建的
然后回到T-CODE SE19界面,编辑实施界面输入刚才创建的实施名称,点更改
进去后在实施累中双击第一个方法,将如下代码复制进去。
DATA: wa_extension TYPE bapiparex,
ext_value(960) TYPE c,
wa_accit TYPE accit,
l_ref TYPE REF TO data.
FIELD-SYMBOLS: <l_struc> TYPE ANY,
<l_field> TYPE ANY.
SORT c_extension2 BY structure.
LOOP AT c_extension2 INTO wa_extension.
AT NEW structure.
CREATE DATA l_ref TYPE (wa_extension-structure).
ASSIGN l_ref->* TO <l_struc>.
ENDAT.
CONCATENATE wa_extension-valuepart1 wa_extension-valuepart2
wa_extension-valuepart3 wa_extension-valuepart4
INTO ext_value.
MOVE ext_value TO <l_struc>.
ASSIGN COMPONENT 'POSNR' OF STRUCTURE <l_struc> TO <l_field>.
READ TABLE c_accit WITH KEY posnr = <l_field>
INTO wa_accit.
IF sy-subrc IS INITIAL.
MOVE-CORRESPONDING <l_struc> TO wa_accit.
MODIFY c_accit FROM wa_accit INDEX sy-tabix.
ENDIF.
ENDLOOP.
到此增强部分就做完了,剩下的只要在BAPI_ACC_DOCUMENT_POST中的扩展表将参考结构和参考结构建的工作区(里面存放了要增强的字段的数据)分别赋给即可。
REPORT ZWDTEST5.
DATA:
GD_DOCUMENTHEADER LIKE BAPIACHE09,
GD_CUSTOMERCPD LIKE BAPIACPA09,
GD_FICA_HD LIKE BAPIACCAHD,
IT_ACCOUNTRECEIVABLE LIKE TABLE OF BAPIACAR09 WITH HEADER LINE, "客户
IT_ACCOUNTGL LIKE TABLE OF BAPIACGL09 WITH HEADER LINE, "总账科目
IT_ACCOUNTTAX LIKE TABLE OF BAPIACTX09 WITH HEADER LINE, "税务项目
IT_CRITERIA LIKE TABLE OF BAPIACKEC9 WITH HEADER LINE, "计记帐:CO-PA 科目分配特性
IT_VALUEFIELD LIKE TABLE OF BAPIACKEV9 WITH HEADER LINE, "会计记帐:CO-PA