对于某个程序,我需要更新表bsid。需要更新字段cession_kz。我找了很多功能模块,但没有一个能满足我的需求。有人知道解决这个问题的最佳做法吗?
BSID是BSEG客户项目的二级索引,因此直接更新它将导致数据库不一致,任何更新都必须通过BSEG。
您可以使用像FI_ITEMS_MASS_CHANGE
这样的功能模块。该FM通过运行事务FB02(更改文档)的BDC来更新BSEG。当在BSEG中更改相关(客户)项目时,相应的BSID记录也会更改。
请参阅以下示例代码:
DATA: ls_bseg TYPE bseg,
lt_errdoc TYPE tpit_t_errdoc,
lt_fname TYPE tpit_t_fname,
lt_buztab TYPE tpit_t_buztab.
* Field name to be changed
APPEND 'CESSION_KZ' TO lt_fname.
* New field value
ls_bseg-cession_kz = 'AB'.
* Selection of items to be changed
* Only select customer items to avoid problems in batch input
SELECT bukrs belnr gjahr buzei koart umskz bschl mwart mwskz
FROM bseg
INTO CORRESPONDING FIELDS OF TABLE lt_buztab
WHERE belnr = '1400000000' AND
bukrs = '1000' AND
koart = 'D'. "Customers
CALL FUNCTION 'FI_ITEMS_MASS_CHANGE'
EXPORTING
s_bseg = ls_bseg
IMPORTING
errtab = lt_errdoc[]
TABLES
it_buztab = lt_buztab
it_fldtab = lt_fname
EXCEPTIONS
bdc_errors = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
确保您允许使用事务SM30或通过自定义更改维护视图V_TBAER
:
财务会计→财务会计全局设置→凭证→行项目→凭证更改规则,行项目。
注意: 应为传递给FM的所有公司代码定义认捐指标:
财务会计→应收账款和应付账款→客户账户→主数据→准备创建主数据→定义应收账款质押指标。
如果不是,该字段将不可用于批输入,FM将导致错误。