Abap 使用功能模块更新BSEG-ZOUNR

Abap 使用功能模块更新BSEG-ZOUNR,abap,sap-erp,bapi,Abap,Sap Erp,Bapi,我成功地用FM change\u文档更改了BKPF-BKTXT,但是为什么我不能用FM change\u文档更改BSEG-ZUONR 这是fmchange\u文档: CALL FUNCTION 'CHANGE_DOCUMENT' TABLES T_BKDF = t_bkdf T_BKPF = t_bkpf T_BSEC = t_bsec T_BSED = t_bsed T_

我成功地用
FM change\u文档更改了
BKPF-BKTXT
,但是为什么我不能用
FM change\u文档更改
BSEG-ZUONR

这是
fmchange\u文档

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
(成功):

以下是要更改的代码
BSEG-ZOUONR
(失败):


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

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

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

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


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

请勿使用此
FM

CALL FUNCTION 'CHANGE_DOCUMENT' 
FM
将所有其他字段更改为初始值(如果未提供)


似乎此
FM
不能用于更改具有科目类型(
BSEG-KOART
)-“S”(总账科目)的行项目


试试这个
FM

'FI_ITEMS_MASS_CHANGE'

您是否尝试调试此功能模块以查看问题可能在何处?@Jagger是的,结果表明,如果我们要更新BSEGP,也必须声明t_bkpf,因此问题已得到解决?如果是,那么请发布您自己问题的答案,以便将来如果有人遇到相同的问题,他可以找到您的解决方案。请将代码格式化为代码(而不是普通文本)。
CALL FUNCTION 'CHANGE_DOCUMENT' 
CALL FUNCTION 'FI_DOCUMENT_CHANGE'
'FI_ITEMS_MASS_CHANGE'