SAP FB02 BAPI

更多内容关注公众号:SAP Technical

对于会记凭证文本更改,前台Tcode:FB02,后台调用BAPI:FI_ITEMS_MASS_CHANGE
有测试过更改文本字段:SGTXT,ZLSPR

DATA:WA_BSEG LIKE BSEG,
IT_BUZTAB TYPE TPIT_T_BUZTAB WITH HEADER LINE,
IT_FLDTAB TYPE TPIT_T_FNAME WITH HEADER LINE,
IT_ERRTAB TYPE TPIT_T_ERRDOC WITH HEADER LINE.

  WA_BSEG-ZLSPR = 'V'."你要更改的值

  IT_BUZTAB-BUKRS  = LS_BSEG-BUKRS.
  IT_BUZTAB-BELNR  = LS_BSEG-BELNR.
  IT_BUZTAB-GJAHR  = LS_BSEG-GJAHR.
  IT_BUZTAB-BUZEI  = LS_BSEG-BUZEI.
  IT_BUZTAB-BSCHL  = '31'. "过账码
  IT_BUZTAB-UMSKZ = ''."特别总账标示
  APPEND IT_BUZTAB .

  IT_FLDTAB-FNAME = 'ZLSPR'."要更改的字段
  IT_FLDTAB-AENKZ  = 'X'."给该字段打上标示
  APPEND IT_FLDTAB.

*该函数是一行一行改的

  CALL FUNCTION 'FI_ITEMS_MASS_CHANGE'
    EXPORTING
      S_BSEG     = WA_BSEG
    IMPORTING
      ERRTAB     = IT_ERRTAB[]
    TABLES
      IT_BUZTAB  = IT_BUZTAB
      IT_FLDTAB  = IT_FLDTAB
    EXCEPTIONS
      BDC_ERRORS = 1
      OTHERS     = 2.
  IF SY-SUBRC <> 0.
  ENDIF

IF IT_ERRTAB IS NOT INITIAL.
  READ TABLE IT_ERRTAB INDEX 1.*BDC消息處理.
  CLEAR L_TEXT.
  CALL FUNCTION 'FORMAT_MESSAGE'
    EXPORTING
      ID        = IT_ERRTAB-ERR-MSGID
      NO        = IT_ERRTAB-ERR-MSGNR
      V1        = IT_ERRTAB-ERR-MSGV1
      V2        = IT_ERRTAB-ERR-MSGV2
      V3        = IT_ERRTAB-ERR-MSGV3
      V4        = IT_ERRTAB-ERR-MSGV4
    IMPORTING
      MSG       = L_TEXT
    EXCEPTIONS
      NOT_FOUND = 1
      OTHERS    = 2.

  CONCATENATE LS_BSEG-BELNR L_TEXT INTO L_TEXT.
  E_STATUS = 'E'.
  E_MESS = L_TEXT.

ELSE.
  E_STATUS = 'S'.
  E_MESS = '成功!'.
  
ENDIF.

由于这个函数是一行一行改数据的,可能会出现凭证被锁,解决方法:拷贝原函数出来,原函数中的:

call transaction 'FB02'  using    bdcdata
                         mode     bdcmode
                         update   'A'
                         messages into msgtab. 

改为

call transaction 'FB02'  using    bdcdata
                         mode     bdcmode
                         update   'S'
                         messages into msgtab. 

同步更新,但是比较慢点 。

猜你喜欢

转载自blog.csdn.net/SAPmatinal/article/details/84333025
今日推荐