BDC程序需要注意的问题!(常见问题集合)
2013-08-09 15:52
344 查看
BDC在FICO模块是经常用到的,用于批量过账程序时使用的,但是稳定性不如使用BAPI的好,但是BDC可以有多种T-CODE进行过账,也有不同的模式,功能也不错,但是在写程序或者是出现问题的时候需要考虑下面几个问题:
1、可以在程序加入BDC的模式选择,默认为N模式,但是可以选择A模式,方便调试。当然这个也可以debug进去之后进行改值。
2、LOOP里面有call BDC的情况,在每一次call TRANSACTION 之后,可以适当延时几秒,可以防止在有些t-code过账的时候出现profit center被锁着的情况:
CALL TRANSACTION 'F-30' USING BDCDATA
MODE P_MODE
MESSAGES INTO L_BDCMSG.
WAIT UP TO p_wait SECONDS.
有时候,当你直接跑,过账失败,而你debug跑的话就成功,也可以看看是不是锁的问题,然后页可以考虑下对两次生成凭证进行延时。
3、可能会出现的A模式下过账成功,N模式过账不成功:
原因是:有些事你的BDC在这一屏没有这个字段,然后会返回一个这个字段不存在的S类型的message,然后BDC退出了,就没有完全成功过账。
同一个屏幕,不同的过账码+科目可能有不同的字段。所以录屏完写程序的时候,这个光标的问题,最好还是要有if判断或者是基本排除光标,这个基本没有用。在写BDC程序的时候,最好自己要对这个t-code的不同条件下会有不一样的屏幕显示有一定的了解,然后写程序的时候一定要注意使用if语句,去判断在这个公司代码下,这个屏幕有没有这个字段。
4、LOOP里面过账完,要记得清BDCDATA,和BDCMESSAGE(这个就是低级错误了)
5、过账完了,生产的message里面,提取凭证号:
LOOP AT L_BDCMSG.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = L_BDCMSG-MSGID
msgnr = L_BDCMSG-MSGNR
msgv1 = L_BDCMSG-MSGV1
msgv2 = L_BDCMSG-MSGV2
msgv3 = L_BDCMSG-MSGV3
msgv4 = L_BDCMSG-MSGV4
IMPORTING
message_text_output = WA_LOG-MSG.
其中,L_BDCMSG-MSGV1就是返回的凭证号!
6、遇见BDC程序跑了,报错了,最好跑A模式去查看报错处在哪个环节了!
7、一个FB60的BDC程序,有些成功并返回了凭证号,有些成功生成了凭证号,但是没有返回message。
reason:这种问题通常是一些增强导致。
方法:在S F5 312 message前面设断点,然后跑N模式,查看没有返回凭证号的情况,是在前面那里跳出了而没有跑这个312的message。通常都是增强导致。(遇到一个是增强里面的更新表,然后commit work的时候直接跳出了,但是实际表已经更新成功了。因为modify是不需要commit work的。因为通过call transaction
FB60的话,里面有个选项opt,通过这个选项可以选择执行commit work是否跳出。这也就是为什么FB60直接跑这段,即使有commit work也没有问题,但是通过call transaction会有问题。)
![](http://img.blog.csdn.net/20141021163018914?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenpqX3JhaW5ib3c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
8、
1、可以在程序加入BDC的模式选择,默认为N模式,但是可以选择A模式,方便调试。当然这个也可以debug进去之后进行改值。
2、LOOP里面有call BDC的情况,在每一次call TRANSACTION 之后,可以适当延时几秒,可以防止在有些t-code过账的时候出现profit center被锁着的情况:
CALL TRANSACTION 'F-30' USING BDCDATA
MODE P_MODE
MESSAGES INTO L_BDCMSG.
WAIT UP TO p_wait SECONDS.
有时候,当你直接跑,过账失败,而你debug跑的话就成功,也可以看看是不是锁的问题,然后页可以考虑下对两次生成凭证进行延时。
3、可能会出现的A模式下过账成功,N模式过账不成功:
原因是:有些事你的BDC在这一屏没有这个字段,然后会返回一个这个字段不存在的S类型的message,然后BDC退出了,就没有完全成功过账。
同一个屏幕,不同的过账码+科目可能有不同的字段。所以录屏完写程序的时候,这个光标的问题,最好还是要有if判断或者是基本排除光标,这个基本没有用。在写BDC程序的时候,最好自己要对这个t-code的不同条件下会有不一样的屏幕显示有一定的了解,然后写程序的时候一定要注意使用if语句,去判断在这个公司代码下,这个屏幕有没有这个字段。
4、LOOP里面过账完,要记得清BDCDATA,和BDCMESSAGE(这个就是低级错误了)
5、过账完了,生产的message里面,提取凭证号:
LOOP AT L_BDCMSG.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = L_BDCMSG-MSGID
msgnr = L_BDCMSG-MSGNR
msgv1 = L_BDCMSG-MSGV1
msgv2 = L_BDCMSG-MSGV2
msgv3 = L_BDCMSG-MSGV3
msgv4 = L_BDCMSG-MSGV4
IMPORTING
message_text_output = WA_LOG-MSG.
其中,L_BDCMSG-MSGV1就是返回的凭证号!
6、遇见BDC程序跑了,报错了,最好跑A模式去查看报错处在哪个环节了!
7、一个FB60的BDC程序,有些成功并返回了凭证号,有些成功生成了凭证号,但是没有返回message。
reason:这种问题通常是一些增强导致。
方法:在S F5 312 message前面设断点,然后跑N模式,查看没有返回凭证号的情况,是在前面那里跳出了而没有跑这个312的message。通常都是增强导致。(遇到一个是增强里面的更新表,然后commit work的时候直接跳出了,但是实际表已经更新成功了。因为modify是不需要commit work的。因为通过call transaction
FB60的话,里面有个选项opt,通过这个选项可以选择执行commit work是否跳出。这也就是为什么FB60直接跑这段,即使有commit work也没有问题,但是通过call transaction会有问题。)
8、
相关文章推荐
- 编写多线程java程序时需要注意哪些问题?(来自于effective java se)
- 微信小程序发现的一些小问题以及解决方案集合以及注意点
- 命令行下的C++程序转换成VC的MFC程序需要注意的问题
- 在程序中使用相对路径需要注意的问题
- 权限问题实在头疼啊?不光是上传文件夹的权限,还有很多程序文件的特殊权限需要注意!
- Qt打开外部程序和文件夹需要注意的细节(注意QProcess的空格问题,以及打开本地文件时,需要QUrl::fromLocalFile才可以)
- Java中需要注意的3个常见集合错误
- Java程序基础测试 基础笔试、面试常见问题集合
- 设计android程序框架需要注意的问题总结
- 32位C/C++程序移植到64位系统时需要注意的问题
- js 常见的一些小问题 需要注意的细节
- 【小程序】调用wx.request接口时需要注意的几个问题
- oracle中表查询需要注意的常见问题
- 程序中有事务的时候需要注意的一个问题
- c#程序调用c++编写dll需要注意问题
- J2EE程序需要注意的问题
- VC++ “时间复杂度”需要注意的常见问题
- JAVA别名问题----JAVA程序需要注意的对象引用
- 调试使用了函数模块的程序时需要注意的一个小问题
- 我在程序中这么做f1==f2,可是明明相等但是程序中却按不相等的去做了。难道浮点数比较还有什么需要注意的问题吗?