使用功能模块更新 BSEG-ZUONR
Update BSEG-ZUONR with Function Module
我成功将 BKPF-BKTXT
更改为 FM CHANGE_DOCUMENT
,但为什么我不能将 BSEG-ZUONR
更改为 FM CHANGE_DOCUMENT
?
这是 FM CHANGE_DOCUMENT
:
CALL FUNCTION 'CHANGE_DOCUMENT'
TABLES
T_BKDF = t_bkdf
T_BKPF = t_bkpf
T_BSEC = t_bsec
T_BSED = t_bsed
T_BSEG = t_bseg
T_BSET = t_bset
* T_BSEG_ADD =
.
这里是修改代码BKPF-BKTXT
(成功):
wa_t_bkpf-mandt = sy-mandt.
wa_t_bkpf-bukrs = '1000'.
wa_t_bkpf-gjahr = gjahr_import.
wa_t_bkpf-belnr = belnr_import.
wa_t_bkpf-bktxt = zuonr_import.
APPEND wa_t_bkpf TO t_bkpf.
这里是要更改的代码 BSEG-ZUONR
(失败):
wa_t_bseg-mandt = sy-mandt.
wa_t_bseg-bukrs = '1000'.
wa_t_bseg-gjahr = gjahr_import.
wa_t_bseg-belnr = belnr_import.
wa_t_bseg-buzei = '1'.
wa_t_bseg-zuonr = zuonr_import.
APPEND wa_t_bseg TO t_bseg.
由于作者没有时间确认,我可以为他做这个,因为我刚刚测试了这个案例。
如果我们将其签名中的所有参数传递给 FM,更新就会顺利进行。例如,像这样:
DATA: lt_bkdf TYPE TABLE OF bkdf,
lt_bkpf TYPE TABLE OF bkpf,
wa_bkpf TYPE bkpf,
lt_bsec TYPE TABLE OF bsec,
wa_bseg TYPE bseg,
lt_bsed TYPE TABLE OF bsed,
lt_bseg TYPE TABLE OF bseg,
lt_bset TYPE TABLE OF bset.
wa_bkpf-mandt = sy-mandt.
wa_bkpf-bukrs = '5900'.
wa_bkpf-gjahr = gjahr_import.
wa_bkpf-belnr = belnr_import.
wa_bkpf-bktxt = 'Batch'.
APPEND wa_bkpf TO lt_bkpf.
wa_bseg-mandt = sy-mandt.
wa_bseg-bukrs = '5900'.
wa_bseg-gjahr = gjahr_import.
wa_bseg-belnr = belnr_import.
wa_bseg-buzei = '1'.
wa_bseg-zuonr = '20151131'.
APPEND wa_bseg TO lt_bseg.
CALL FUNCTION 'CHANGE_DOCUMENT'
TABLES
t_bkdf = lt_bkdf
t_bkpf = lt_bkpf
t_bsec = lt_bsec
t_bsed = lt_bsed
t_bseg = lt_bseg
t_bset = lt_bset
.
COMMIT WORK.
除最后一个参数外,所有 FM table 参数都是强制性。
字段 zuonr 引用了它所属的对象。
例如采购订单。
假设您支付采购订单的头寸。
bkpf/bseg 中的文档已创建(以及更多)。
Bseg-Zuonr 包含此采购订单头寸的编号。
如果允许您更改此字段,则会破坏数据的引用完整性。它会指向一个采购订单位置,它不是从中创建的,或者根本不存在。
因此从业务的角度来看,在创建此字段后更改它是没有意义的,因此 SAP 将永远不允许更改它。
不要使用这个FM
CALL FUNCTION 'CHANGE_DOCUMENT'
此 FM
正在将所有其他字段更改为初始字段(如果未提供)。
CALL FUNCTION 'FI_DOCUMENT_CHANGE'
似乎此 FM
不能用于更改帐户类型为 (BSEG-KOART
) - 'S'(总帐帐户)的订单项。
试试这个 FM
:
'FI_ITEMS_MASS_CHANGE'
我成功将 BKPF-BKTXT
更改为 FM CHANGE_DOCUMENT
,但为什么我不能将 BSEG-ZUONR
更改为 FM CHANGE_DOCUMENT
?
这是 FM CHANGE_DOCUMENT
:
CALL FUNCTION 'CHANGE_DOCUMENT'
TABLES
T_BKDF = t_bkdf
T_BKPF = t_bkpf
T_BSEC = t_bsec
T_BSED = t_bsed
T_BSEG = t_bseg
T_BSET = t_bset
* T_BSEG_ADD =
.
这里是修改代码BKPF-BKTXT
(成功):
wa_t_bkpf-mandt = sy-mandt.
wa_t_bkpf-bukrs = '1000'.
wa_t_bkpf-gjahr = gjahr_import.
wa_t_bkpf-belnr = belnr_import.
wa_t_bkpf-bktxt = zuonr_import.
APPEND wa_t_bkpf TO t_bkpf.
这里是要更改的代码 BSEG-ZUONR
(失败):
wa_t_bseg-mandt = sy-mandt.
wa_t_bseg-bukrs = '1000'.
wa_t_bseg-gjahr = gjahr_import.
wa_t_bseg-belnr = belnr_import.
wa_t_bseg-buzei = '1'.
wa_t_bseg-zuonr = zuonr_import.
APPEND wa_t_bseg TO t_bseg.
由于作者没有时间确认,我可以为他做这个,因为我刚刚测试了这个案例。 如果我们将其签名中的所有参数传递给 FM,更新就会顺利进行。例如,像这样:
DATA: lt_bkdf TYPE TABLE OF bkdf,
lt_bkpf TYPE TABLE OF bkpf,
wa_bkpf TYPE bkpf,
lt_bsec TYPE TABLE OF bsec,
wa_bseg TYPE bseg,
lt_bsed TYPE TABLE OF bsed,
lt_bseg TYPE TABLE OF bseg,
lt_bset TYPE TABLE OF bset.
wa_bkpf-mandt = sy-mandt.
wa_bkpf-bukrs = '5900'.
wa_bkpf-gjahr = gjahr_import.
wa_bkpf-belnr = belnr_import.
wa_bkpf-bktxt = 'Batch'.
APPEND wa_bkpf TO lt_bkpf.
wa_bseg-mandt = sy-mandt.
wa_bseg-bukrs = '5900'.
wa_bseg-gjahr = gjahr_import.
wa_bseg-belnr = belnr_import.
wa_bseg-buzei = '1'.
wa_bseg-zuonr = '20151131'.
APPEND wa_bseg TO lt_bseg.
CALL FUNCTION 'CHANGE_DOCUMENT'
TABLES
t_bkdf = lt_bkdf
t_bkpf = lt_bkpf
t_bsec = lt_bsec
t_bsed = lt_bsed
t_bseg = lt_bseg
t_bset = lt_bset
.
COMMIT WORK.
除最后一个参数外,所有 FM table 参数都是强制性。
字段 zuonr 引用了它所属的对象。 例如采购订单。
假设您支付采购订单的头寸。 bkpf/bseg 中的文档已创建(以及更多)。 Bseg-Zuonr 包含此采购订单头寸的编号。
如果允许您更改此字段,则会破坏数据的引用完整性。它会指向一个采购订单位置,它不是从中创建的,或者根本不存在。
因此从业务的角度来看,在创建此字段后更改它是没有意义的,因此 SAP 将永远不允许更改它。
不要使用这个FM
CALL FUNCTION 'CHANGE_DOCUMENT'
此 FM
正在将所有其他字段更改为初始字段(如果未提供)。
CALL FUNCTION 'FI_DOCUMENT_CHANGE'
似乎此 FM
不能用于更改帐户类型为 (BSEG-KOART
) - 'S'(总帐帐户)的订单项。
试试这个 FM
:
'FI_ITEMS_MASS_CHANGE'