1

我成功地改变BKPF-BKTXT了,FM CHANGE_DOCUMENT但为什么我不能改变BSEG-ZUONRFM 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.
4

3 回答 3

1

由于作者没有时间确认,我可以为他做这件事,因为我刚刚测试了这个案例。如果我们将其签名中的所有参数传递给 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 表参数都是强制性的。

于 2015-12-24T14:09:24.283 回答
1

不要使用这个FM

CALL FUNCTION 'CHANGE_DOCUMENT' 

FM如果未提供,这会将所有其他字段更改为初始字段。


CALL FUNCTION 'FI_DOCUMENT_CHANGE'

似乎这FM不能用于更改具有帐户类型 ( BSEG-KOART) - 'S'(GL 帐户)的行项目。


试试这个FM

'FI_ITEMS_MASS_CHANGE'
于 2018-09-10T06:19:29.550 回答
0

zuonr 字段引用了它所属的对象。例如采购订单。

假设您支付采购订单的头寸。在 bkpf/bseg 中创建一个文档(以及更多)。Bseg-Zuonr 包含此采购订单位置的编号。

如果您被允许更改此字段,您将破坏数据的引用完整性。它将指向一个不是创建它的采购订单位置或根本不存在的采购订单位置。

因此,从业务角度来看,在创建此字段后更改它是没有意义的,因此 SAP 绝不允许更改它。

于 2015-12-29T22:48:38.177 回答