请教一个loltequanwangbapifu问题loltequanwangbapifu

BAPI和BDC使用小结 | 查问题
汇聚最新编程技术,编程问题一网打尽
& BAPI和BDC使用小结
BAPI和BDC使用小结
[ 分类: ]
在项目上遇到了要同时用BAPI和BDC更新数据的情况。开发的需求如下:ME22N中修改采购订单中物料条目的净价和每,然后在物料数据页的供应商物料号中记录旧价格和旧每,同时在EAN/UPC中写入’ZSJ’。
&大部分的更新都可以由BAPI完成,但是EAN/UPC在BAPI中找不到对应的字段,而且客户不愿意改字段。一开始看到ME22N这种多条目的事务代码,觉得BDC录屏没法做,但是其实是可以做的,只是比较麻烦。下面一点点总结分享。
BDC录屏后,得到的结果基本是没法直接用的,我是通过录了很多次屏,然后东拼西凑、修修改改得出来的。
录屏的操作流程:其他采购订单-&输入采购订单号-&确定-&项目点击下拉列表选择行项目-&修改EAN/UPC-&保存,得到的录屏结果如下 :
直接录屏的结果是没法用的,必须把红色下划线的部分去掉,保留反而会出错。这些是录屏的时候记录下来的屏幕上一些字段的值,但在程序操作调用BDC的过程中,你无法知道这些字段的具体值是多少,填不对的话反而会出错,所以要去掉。
而且在填写BDC_FIELD的时候,带BDC_SUBSCR的部分都可以不填写,只要填写一些关于操作和字段赋值的部分就可以了。
BDC需要调试的话就设置模式MODE为A,这样就可以观看前台是怎么样一步一步执行的,便于发现错误。MODE为E是只有发生错误才转到前台,而MODE为N是完全的后台操作。一般先用A或E确认能执行成功后再换成N来执行。
总结下BDC的适用范围:
BDC适用于录制较为单一的操作,并且一般情况下不适用于多条行项目,但是也有例外。在一些特殊的事物代码中,对于行项目的修改也能是一组比较单一的操作,比如ME22N就是每次选择下拉列表,然后修改相应的字段。所以有时候BDC录屏是一件需要业务顾问、技术顾问一起做、互相配合的事。
BAPI部分:
由于SAP各个表之间的关联关系非常复杂,一个前台操作可能同时更新了N张表,所以ABAP中严禁直接更新标准表,这会导致不一致性。而为了保持一致性,需要更新和修改的时候则需要使用BAPI。
BAPI与BDC相比,执行速度会快些、效率会高些,而且比较适合用来更新修改多条行项目的数据。
BAPI中值得一提的是它的X参数,参数明后代X后缀的参数标示了需要更新哪些相应的字段,所以必须对X参数中需要更新的字段赋值为 X ,否则BAPI并不会更新任何字段。
对需要更新的字段赋值:
另外ABAP中能够支持多个BAPI连续调用,然后同时COMMIT或是ROLLBACK,以此来保证一致性。只需要再调用完BAPI后再调用BAPI_TRANSACTION_COMMIT或是BAPI_TRANSACTION_ROLLBACK。
值得一提的是BAPI_TRANSACTION_COMMIT的WAIT参数。注意:BAPI是异步更新的,所以如果不使用WAIT参数的话,那么它无法保证在执行下条语句时BAPI已经更新成功,这样如果连续两条语句都是写操作,有很大可能会造成读写冲突,比如:我在BAPI执行完后调用BDC,如果不WAIT的话,那么就会有读写冲突,BAPI锁住了一些表或是资源导致BDC无法更新。查看: 6788|回复: 2
请教BAPI_ACC_GL_POSTING_POST创建凭证问题
论坛徽章:0
本帖最后由 喵喵爱吃菠萝 于
09:44 编辑
在写程序时需要创建财务凭证。
调用BAPI_ACC_GL_POSTING_POST创建财务凭证,如果行项目超过998项,按每998项生成一个财务凭证. 程序报错:
T ID& && && && && && & NUM MESSAGE
E RW& && && && && && & 609 凭证错误: BKPFF $ CECCLNT202
E RW& && && && && && & 022 FI/CO接口:事务货币计价的余额
请高手指点下,这个BAPI这么用对吗。感谢!!
& && & BAPI参数如下: & &结构BAPIACHE08:USERNAME = sy-unameHEADER_TXT = “主营业务额成本重估”COMP_CODE = “8000”FISC_YEAR = BKPF-GJAHRDOC_DATE: 结转月份最后一天PSTNG_DATE:结转月份最后一天FIS_PERIOD = BKPF-MONATDOC_TYPE = “ML” 循环行项目数据,填充一下财务凭证项目数据:BAPIACGL08:ITEMNO_ACC:序号,从1开始GL_ACCOUNT = BSEG-HKONTCOMP_CODE = “8000”ALLOC_NMBR: 销售订单及行项目ITEM_TEXT:物料编码 BSEG-MATNRPROFIT_CTR = BSEG- PRCTRSALES_ORD = 销售订单号S_ORD_ITEM = 销售订单行项目& &BAPIACCR08:ITEMNO_ACC:序号,从1开始CURRENCY = “CNY”AMT_DOCCUR =主营业务成本差额------------------------------------------------------------------------------------------ 使用BAPI_ACC_GL_POSTING_POST:
LOOP AT gt_out.
& & zcount = zcount + 1.
& & IF zcount & 998.
& && &CLEAR:accountgl,accountgl[],currencyamount ,currencyamount[],return ,return[],extension1 ,extension1[],t_edidd,t_edidd[],bapi_retn_info,bapi_retn_info[].
& && &zcount = 1.
& && &l_count = l_count - 998.
& & ENDIF.
& & CONCATENATE&&gt_out-KAUFN&&'-' gt_out-KDPOS into NMBR.
& & accountgl-itemno_acc = zcount.
& & accountgl-GL_ACCOUNT = gt_out-HKONT.
& & accountgl-COMP_CODE = '8000'.
& & accountgl-ALLOC_NMBR = NMBR.
& & accountgl-ITEM_TEXT = gt_out-MATNR.
& & accountgl-PROFIT_CTR = gt_out-PRCTR.
& & accountgl-SALES_ORD = gt_out-KAUFN.
& & accountgl-S_ORD_ITEM = gt_out-KDPOS.
& & append accountgl.
& & currencyamount-itemno_acc = zcount.
& & currencyamount-currency = 'CNY'.
& & currencyamount-amt_doccur = gt_out-cbce.
& & append currencyamount.
& & IF&&zcount = l_count or zcount = 998.
& && &call function 'BAPI_ACC_GL_POSTING_POST'
& && &&&EXPORTING
& && && & documentheader = documentheader
& && &&&TABLES
& && && & accountgl& && &= accountgl
& && && & currencyamount = currencyamount
& && && & return& && && &= return
& && && & extension1& &&&= extension1
& && &&&EXCEPTIONS
& && && & others& && && &= 1.
& && &if sy-subrc && 0.
& && &&&message e999(re) with 'Problem occured'.
& && &else.
& && &&&loop at return.
& && && & if not return is initial.
& && && && &clear bapi_retn_info.
& && && && &move-corresponding return to bapi_retn_info.
& && && && &if return-type = 'A' or return-type = 'E'.
& && && && &&&error_flag = 'X'.
& && && && &endif.
& && && && &append bapi_retn_info.
& && && && &CONCATENATE zmessage '& & '&&return-MESSAGE into zmessage.
& && && && && WRITE:return-MESSAGE.
& && && & endif.
& && &&&endloop.
& && &&&if error_flag = 'X'.
& && && & rollback work.
& && && & && &message e999(re) with zmessage .
& && && & &&&LEAVE PROGRAM.
& && &&&else.
& && && & commit work.
& && &&&endif.
& && &&&LOOP at return.
& && && & write:/.
& && && & write8) return-TYPE , (100) return-MESSAGE.
& && &&&ENDLOOP .
& && &endif.
& & ENDIF.
& & if zcount = l_count and error_flag && 'X'.
& && &Select single * from ZCperiod where bukrs&&= '8000'.
& && &If sy-subrc = 0.
& && &&&UPDATE&&ZCperiod&&SET GJAHR = p_GJAHR&&monat = p_monat WHERE bukrs&&= '8000'.
& && &Else.
& && &&&INSERT& &ZCperiod&&from table&&gt_zcperiod .
& && &Endif.
& & ENDIF.
&&ENDLOOP.
代码如上,gt_out内表的每一行是销售订单开票凭证与周期价格的差额--gt_out-cbce.
论坛徽章:0
代码可能比较复杂 看起来比较麻烦。表述下就是这样的。
我将本月的销售开票的价格和周期价格相减,得到差额,放到GT_OUT内表里。
调用BAPI_ACC_GL_POSTING_POST创建财务凭证,如果行项目超过998项,按每998项生成一个财务凭证
& & BAPI参数如下:
& &结构BAPIACHE08:
USERNAME = sy-uname
HEADER_TXT = “主营业务额成本重估”
COMP_CODE = “8000”
FISC_YEAR = BKPF-GJAHR
DOC_DATE: 结转月份最后一天
PSTNG_DATE:结转月份最后一天
FIS_PERIOD = BKPF-MONAT
DOC_TYPE = “ML”
循环GT_OUT行项目数据,填充一下财务凭证项目数据:
BAPIACGL08:
ITEMNO_ACC:序号,从1开始
GL_ACCOUNT = BSEG-HKONT
COMP_CODE = “8000”
ALLOC_NMBR: 销售订单及行项目
ITEM_TEXT:物料编码 BSEG-MATNR
PROFIT_CTR = BSEG- PRCTR
SALES_ORD = 销售订单号
S_ORD_ITEM = 销售订单行项目
BAPIACCR08:
ITEMNO_ACC:序号,从1开始
CURRENCY = “CNY”
AMT_DOCCUR =主营业务成本差额
论坛徽章:0
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号TA的最新馆藏对于业务需求的实现,经常需要我们获取生产订单(PROD ORD)状态等一些列抬头信息,如下图所示:通过SELECT语句从后台表中一一获取很麻烦,发现一个BAPI:BAPI_PRODORD_GET_LIST,可以成功解决这个问题。具体使用如下:定义变量:DATA:it_range TYPE STANDARD TABLE OF BAPI_PP_ORDERRANGE WITH HEADER LINE,
it_header TYPE STANDARD TABLE OF BAPI_ORDER_HEADER1 WITH HEADER LINE.变量赋值:IT_RANGE-SIGN = 'I'.IT_RANGE-OPTION = 'EQ'.IT_RANGE-LOW = L_AUFNR. "生产订单号APPEND IT_RANGE.调用BAPI:CALL FUNCTION 'BAPI_PRODORD_GET_LIST'
COLLECTIVE_ORDER
ORDER_NUMBER_RANGE
= IT_RANGE
ORDER_HEADER
= IT_HEADER.
"返回抬头信息内表内表IT_HEADER中的system_status字段。如下图所示:
如果您想留下此文,您可以将其发送至您的邮箱(将同时以邮件内容&PDF形式发送)
相关文章推荐
(Ctrl+Enter提交) &&
已有0人在此发表见解
&在& 17:01收藏到了
&&在信息爆炸的时代,您的知识需要整理,沉淀,积累!Lai18为您提供一个简单实用的文章整理收藏工具,在这里您可以收藏对您有用的技术文章,自由分门别类,在整理的过程中,用心梳理自己的知识!相信,用不了多久,您收藏整理的文章将是您一生的知识宝库!
· 蜀ICP备号-1

我要回帖

更多关于 abap bapi 的文章

 

随机推荐