Обновление BSEG-ZUONR с функциональным модулем

Я успешно заменил 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.

person Marsha    schedule 19.11.2015    source источник
comment
Пробовали ли вы отладить этот функциональный модуль, чтобы увидеть, в чем может быть проблема?   -  person Jagger    schedule 19.11.2015
comment
@Jagger да, и оказывается, что t_bkpf тоже нужно объявить, если мы хотим обновить BSEG   -  person Marsha    schedule 19.11.2015
comment
Значит проблема решена? Если да, то, пожалуйста, опубликуйте ответ на свой вопрос, чтобы, если кто-то столкнется с той же проблемой в будущем, он мог найти ваше решение.   -  person Jagger    schedule 20.11.2015


Ответы (3)


Поскольку у автора нет времени на подтверждение, я могу сделать это за него, так как я только что протестировал этот случай. Если мы передаем в 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, кроме последнего, являются обязательными.

person Suncatcher    schedule 24.12.2015

Не используйте это FM

CALL FUNCTION 'CHANGE_DOCUMENT' 

Этот FM изменяет все остальные поля на начальные, если они не указаны.


CALL FUNCTION 'FI_DOCUMENT_CHANGE'

Похоже, что этот FM нельзя использовать для изменения позиции с типом учетной записи (BSEG-KOART) — «S» (учетная запись GL).


Попробуйте это FM:

'FI_ITEMS_MASS_CHANGE'
person SIDDHARTH    schedule 10.09.2018
comment
Пожалуйста, форматируйте код как код (а не как обычный текст). - person Binarus; 10.09.2018

Поле zuonr ссылается на объект, которому оно принадлежит. Например заказ на покупку.

Предположим, вы оплачиваете позицию заказа на покупку. Создается документ в bkpf/bseg (и не только). Bseg-Zuonr содержит номер этой позиции заказа на поставку.

Если бы вам разрешили изменить это поле, вы бы разрушили ссылочную целостность данных. Он будет указывать на позицию заказа на поставку, из которой он не был создан, или на позицию, которая вообще не существует.

Таким образом, с точки зрения бизнеса нет смысла изменять это поле после его создания, поэтому SAP никогда не позволит его изменить.

person Gerd Castan    schedule 29.12.2015