BDC程序需要注意的问题!(常见问题集合)

时间:2023-01-08 15:17:47

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会有问题。)

BDC程序需要注意的问题!(常见问题集合)


8、