对于会记凭证文本更改,前台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.
同步更新,但是比较慢点 。
网友评论