关于BAPI_ACC_DOCUMENT_POST解读
BAPI_ACC_DOCUMENT_POST是SAP ERP提供生成会计凭证的标准BAPI,这个BAPI可以用到多种场景生成会计凭证,实际项目中一般情况下更多的是生成应收和应付的会计凭证,分别对应客户和供应商,本例使用该BAPI生成资产价值,对应前台事务为F-90.
使用F-90,前台做凭证一般是一行是供应商(应付),一行是资产(总帐),因此使用BAPI_ACC_DOCUMENT_POST创建资产价值的时候应该按照这样填充值,需要注意以下参数赋值,对于资产行,由于资产主数据上有科目定位码这个字段,对应是在事务代码AO90中配置了科目,对于资产价值需要使用购置和生产成本这个科目,所以在BAPI中也要使用这个科目;科目类型要给A(如果不给A,BAPI的返回消息中会提示科目1601050000不能直接记帐);业务范围本例给的0001,这个取决于资产主数据是否填写,如果填写F-90做凭证的时候可以直接带过来,BAPI中则可以赋值,没填写就可以不使用;次级资产编号标准定义的是CHAR4,在使用BAPI时一定要给足四位,否则会报错(报资产XX不属于公司代码XX)。根据公司代码,帐目表,科目定位码可以在AO90中找到对应的关于资产的科目配置,如下图所示,1601050000在FS00中是资产类型的统驭科目,



另外对于资产来说还需要业务类型字段(对应F-90中的字段是事务类型),由于BAPI中的ACCOUNTGL中没有该字段,因此需要手动扩充,建立在EXTENSION2中,并结合BADI使用,建立的扩充结构如下,字段名字参照BSEG。



生成的凭证:


参考样例代码,供读者参考,
REPORT zssh_test_create_asset_value.
*通过BAPI创建资产价值 对应事务为F-90
DATA:ls_doc_header TYPE bapiache09,
lt_accountgl TYPE TABLE OF bapiacgl09,
ls_accountgl TYPE bapiacgl09,
lt_accountpayable TYPE TABLE OF bapiacap09,
ls_accountpayable TYPE bapiacap09,
lt_currencyamount TYPE TABLE OF bapiaccr09,
ls_currencyamount TYPE bapiaccr09,
lt_extension2 TYPE TABLE OF bapiparex,
ls_extension2 TYPE bapiparex,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2,
ls_asset_value TYPE zssh_test_asset_value_str.
ls_doc_header-comp_code = 'ZSSH'.
ls_doc_header-fisc_year = 2020.
ls_doc_header-fis_period = 11.
ls_doc_header-doc_type = 'KR'.
ls_doc_header-pstng_date = '20201116'.
ls_doc_header-doc_date = '20201116'. " 凭证中的凭证日期
ls_doc_header-header_txt = 'BAPI_ACC_DOCUMENT_POST创建资产价值'. " 凭证抬头文本
ls_doc_header-username = sy-uname. " 用户名
ls_doc_header-ref_doc_no = 'BAPI_ACC_DOCUMENT_POST'.
*应付科目行
ls_accountpayable-itemno_acc = 1. "会计凭证行项目 1
ls_accountpayable-comp_code = 'ZSSH'. "公司代码
ls_accountpayable-profit_ctr = 'LZSSH00001'. "利润中心
ls_accountpayable-item_text = 'BAPI_ACC_DOCUMENT_POST创建资产价值'. "行项目文本
ls_accountpayable-gl_account = '2202010000'. "总账科目
ls_accountpayable-vendor_no = '0401000015'. "客户代码
ls_accountpayable-pmnttrms = 'ZZ99'.
ls_accountpayable-bline_date = '20201116'. "付款基准日期
APPEND ls_accountpayable TO lt_accountpayable.
ls_currencyamount-itemno_acc = 1. "会计凭证行项目编号
ls_currencyamount-amt_doccur = 120 * '-1'.
ls_currencyamount-curr_type = '00'.
ls_currencyamount-currency = 'RMB' .
APPEND ls_currencyamount TO lt_currencyamount.
*资产科目行
ls_accountgl-itemno_acc = 2. " 会计凭证行项目 2
ls_accountgl-comp_code = 'ZSSH'. " 公司代码
ls_accountgl-item_text = 'BAPI_ACC_DOCUMENT_POST创建资产价值'. " 行项目文本
ls_accountgl-gl_account = '1601050000'. " 总分类帐帐目
ls_accountgl-asset_no = '180207000015'.
ls_accountgl-sub_number = '0000'.
*ls_accountgl-cs_trans_t = '100'."事务类型
*ls_accountgl-acct_key = '100'.
ls_accountgl-acct_type = 'A'. "资产
ls_accountgl-bus_area = '0001'. "业务部门 业务类别
APPEND ls_accountgl TO lt_accountgl.
ls_currencyamount-itemno_acc = 2. "会计凭证行项目编号
ls_currencyamount-amt_doccur = 120.
ls_currencyamount-curr_type = '00'.
ls_currencyamount-currency = 'RMB' .
APPEND ls_currencyamount TO lt_currencyamount.
ls_asset_value-posnr = 2.
ls_asset_value-anbwa = '100'.
ls_extension2-structure = 'ZSSH_TEST_ASSET_VALUE_STR'.
ls_extension2+30(960) = ls_asset_value.
APPEND ls_extension2 TO lt_extension2.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_doc_header
- CUSTOMERCPD =
- CONTRACTHEADER =
- IMPORTING
- OBJ_TYPE =
- OBJ_KEY =
- OBJ_SYS =
TABLES
accountgl = lt_accountgl - ACCOUNTRECEIVABLE =
accountpayable = lt_accountpayable - ACCOUNTTAX =
currencyamount = lt_currencyamount - CRITERIA =
- VALUEFIELD =
- EXTENSION1 =
return = lt_return - PAYMENTCARD =
- CONTRACTITEM =
extension2 = lt_extension2 - REALESTATE =
- ACCOUNTWT =
.
LOOP AT lt_return INTO ls_return WHERE type CA 'AE'.
WRITE:/ ls_return-id,ls_return-number,ls_return-message.
CLEAR ls_return.
ENDLOOP.
IF sy-subrc NE 0.
LOOP AT lt_return INTO ls_return WHERE type EQ 'S'.
WRITE:/ ls_return-id,ls_return-number,ls_return-message.
CLEAR ls_return.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
BADI:ACC_DOCUMENT
METHOD if_ex_acc_document~change.
DATA:ls_asset_value TYPE zssh_test_asset_value_str,
ls_extension2 TYPE bapiparex,
ls_accit TYPE accit.
CHECK sy-uname EQ 'SHISH'.
LOOP AT c_extension2 INTO ls_extension2.
ls_asset_value = ls_extension2+30(960).
CLEAR ls_accit.
READ TABLE c_accit INTO ls_accit WITH KEY posnr = ls_asset_value-posnr.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING ls_asset_value TO ls_accit.
MODIFY c_accit FROM ls_accit INDEX sy-tabix. "lv_tabix.
ENDIF.
ENDLOOP.
ENDMETHOD.
关于BAPI_ACC_DOCUMENT_POST解读的更多相关文章
- SDWebImage源码解读之SDWebImageDownloaderOperation
第七篇 前言 本篇文章主要讲解下载操作的相关知识,SDWebImageDownloaderOperation的主要任务是把一张图片从服务器下载到内存中.下载数据并不难,如何对下载这一系列的任务进行设计 ...
- SDWebImage源码解读 之 NSData+ImageContentType
第一篇 前言 从今天开始,我将开启一段源码解读的旅途了.在这里先暂时不透露具体解读的源码到底是哪些?因为也可能随着解读的进行会更改计划.但能够肯定的是,这一系列之中肯定会有Swift版本的代码. 说说 ...
- SDWebImage源码解读 之 UIImage+GIF
第二篇 前言 本篇是和GIF相关的一个UIImage的分类.主要提供了三个方法: + (UIImage *)sd_animatedGIFNamed:(NSString *)name ----- 根据名 ...
- SDWebImage源码解读 之 SDWebImageCompat
第三篇 前言 本篇主要解读SDWebImage的配置文件.正如compat的定义,该配置文件主要是兼容Apple的其他设备.也许我们真实的开发平台只有一个,但考虑各个平台的兼容性,对于框架有着很重要的 ...
- SDWebImage源码解读_之SDWebImageDecoder
第四篇 前言 首先,我们要弄明白一个问题? 为什么要对UIImage进行解码呢?难道不能直接使用吗? 其实不解码也是可以使用的,假如说我们通过imageNamed:来加载image,系统默认会在主线程 ...
- SDWebImage源码解读之SDWebImageCache(上)
第五篇 前言 本篇主要讲解图片缓存类的知识,虽然只涉及了图片方面的缓存的设计,但思想同样适用于别的方面的设计.在架构上来说,缓存算是存储设计的一部分.我们把各种不同的存储内容按照功能进行切割后,图片缓 ...
- SDWebImage源码解读之SDWebImageCache(下)
第六篇 前言 我们在SDWebImageCache(上)中了解了这个缓存类大概的功能是什么?那么接下来就要看看这些功能是如何实现的? 再次强调,不管是图片的缓存还是其他各种不同形式的缓存,在原理上都极 ...
- AFNetworking 3.0 源码解读 总结(干货)(下)
承接上一篇AFNetworking 3.0 源码解读 总结(干货)(上) 21.网络服务类型NSURLRequestNetworkServiceType 示例代码: typedef NS_ENUM(N ...
- AFNetworking 3.0 源码解读 总结(干货)(上)
养成记笔记的习惯,对于一个软件工程师来说,我觉得很重要.记得在知乎上看到过一个问题,说是人类最大的缺点是什么?我个人觉得记忆算是一个缺点.它就像时间一样,会自己消散. 前言 终于写完了 AFNetwo ...
随机推荐
- css3系列之详解border-image
border-image border-image呢,是给 边框加上背景图片的.没错,就是平常那一小小条的边框,也能加图片. 参数: border-image-source border-image ...
- Java Bean拷贝工具Orika原理解析
最近面试被问及对象拷贝怎样才能高效,实际上问的就是Orika或者BeanCopier的原理.由于网上对Orika原理的解析并不太多-因此本文重点讲解一下Orika的原理.(Orika是基于JavaBe ...
- C++ cout格式化输出完全攻略
写算法题的时候突然发现自己忘记基本的C++:cout格式化输出了,赶紧拉出以前的C++学习笔记重新看一看. 部分内容来自教程:C语言中文网(一个很棒的网站) 有时希望按照一定的格式进行输出,如按十六进 ...
- JAVA面试宝典分享
JAVA面试宝典分享 前言 面试题 Java面试题(上) Java面试题(中) Java面试题(下) 参考答案 其他补充内容: 项目经验 项目介绍 项目开发流程 项目管理 系统架构 第三方工具(插件) ...
- php进阶学习-单例设计模式
什么是单例模式(singleton)? 在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个,同时这个类还必须提供一个访问该类的全局访问点. 单例模式的特点 一个类只有一个实例 私有克隆 ...
- 【Updating】汇编语言学习记录02
换码指令.字符的输出 前置知识: XLAT 指令:将BX指定的缓冲区中.AL指定的位移处的一个字节数据取出赋给AL,实际相当于(AL) = (DS:(BX+AL)).注意,不是单纯地赋予AL+BX,而 ...
- G - Pyramid 题解(打表)
题目链接 题目大意 t组数据,给你一个n(n<=1e9)求高度为n的等边三角形,求里面包含了多少个等边三角形 题目思路 打表找规律,然而我一直没找到规律. 看到题解恍然大悟,答案就是C(n+3, ...
- go特性-数组与切片
数组: 复制传递(不要按照c/c++的方式去理解,c/c++中数组是引用传递),定长 切片: 引用传递,底层实现是3个字段 array(数组) + len(长度) +cap(容量) type slic ...
- ansible playbook 安装docker
1.新增host配置到/etc/ansible/hosts文件中 [docker] 192.168.43.95 2.配置无密码登录 # 配置ssh,默认rsa加密,保存目录(公钥)~/.ssh/id_ ...
- 转:浅析windows下字符集和文件编码存储/utf8/gbk
最近老猿在学习文件操作及网络爬虫相关知识,发现字符集及编码的处理非常重要,而老猿原来对此了解并不多,因此找了几篇文章看了一下,将老猿认为比较的相关文章转载一下.感谢各位原创大神! 1,字符集 这里主要 ...