BAPI_SALESORDER_CHANGE выдает исключение типа

У меня проблемы с использованием FM BAPI_SALESORDER_CHANGE.

Как только я выполняю свой отчет, FM выдает исключение. Ниже приведен дамп исключения.

An exception occurred that is explained in detail below.
The exception, which is assigned to class 'CX_SY_DYN_CALL_ILLEGAL_TYPE', was
 not caught and
therefore caused a runtime error.
The reason for the exception is:
The call to the function module "BAPI_SALESORDER_CHANGE" is incorrect:

In the function module interface, you can specify only
fields of a specific type and length under "ORDER_HEADER_IN".
Although the currently specified field
"LS_ORDER_HEADER_IN" is the correct type, its length is incorrect.

Теперь я понял, что длина LS_ORDER_HEADER_IN неверна. Но я не понимаю, почему это неправильно.

Ниже приведен код моего отчета:

REPORT ztesting.

DATA:
      lv_sales_document   TYPE bapivbeln-vbeln,

      ls_order_header_in  TYPE bapisdhd1,
      lt_order_header_in  TYPE TABLE OF bapisdhd1,

      ls_order_header_inx TYPE bapisdhd1x,
      lt_order_header_inx TYPE TABLE OF bapisdh1x,

      lt_return           TYPE TABLE OF bapiret2,

      ls_order_item_in    TYPE bapisditm,
      lt_order_item_in    TYPE bapisditm OCCURS 0 WITH HEADER LINE,

      ls_order_item_inx   TYPE bapisditmx,
      lt_order_item_inx   TYPE bapisditmx OCCURS 0 WITH HEADER LINE,

      ls_schedule_lines   TYPE bapischdl,
      lt_schedule_lines   TYPE STANDARD TABLE OF bapischdl WITH HEADER LINE,

      ls_schedule_linesx  TYPE bapischdlx,
      lt_schedule_linesx  TYPE STANDARD TABLE OF bapischdlx WITH HEADER LINE,

      ls_return           TYPE bapiret2.

lv_sales_document               = '5999999'.

ls_order_header_inx-updateflag  = 'U'.

ls_order_item_in-itm_number     = '10'.
ls_order_item_inx-itm_number    = 'X'.

ls_order_item_in-material       = '16'.
ls_order_item_inx-material      = 'X'.

ls_order_item_inx-updateflag    = 'U'.

ls_schedule_lines-itm_number    = '10'.
ls_schedule_linesx-itm_number   = 'X'.

ls_schedule_lines-req_qty       = '1000'.
ls_schedule_linesx-req_qty       = 'X'.


ls_schedule_linesx-req_qty    = 'X'.

APPEND:
  ls_order_header_inx TO lt_order_header_inx,
  ls_order_header_in TO lt_order_header_in,
  ls_order_item_in TO lt_order_item_in,
  ls_order_item_inx TO lt_order_item_inx,
  ls_schedule_lines TO lt_schedule_lines,
  ls_schedule_linesx TO lt_schedule_linesx.

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
  EXPORTING
    salesdocument    = lv_sales_document
    order_header_in  = ls_order_header_in
    order_header_inx = ls_order_header_inx
  TABLES
    return           = lt_return
    order_item_in    = lt_order_item_in
    order_item_inx   = lt_order_item_inx
    schedule_lines   = lt_schedule_lines
    schedule_linesx  = lt_schedule_linesx.

DATA: lt_return2 TYPE TABLE OF bapiret2.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  EXPORTING
    wait = 'X'.

LOOP AT lt_return INTO ls_return.
  WRITE: / sy-subrc, ls_return-type, ls_return-number, ls_return-id, ls_return-message.
ENDLOOP.

Кроме того, можете ли вы заметить какие-либо другие ошибки, которые я сделал? Впервые пользуюсь этой функцией. Примечание. Я скопировал код с форума SAP. Я просто изменил значения и имена переменных.

Заранее спасибо.

С уважением, Диего.


person Diego    schedule 15.12.2020    source источник
comment
Это просто опечатка в вашем коде. Не вводите имена вручную, особенно если компилятор сообщает вам, что тип неверен, скопируйте и вставьте их.   -  person Sandra Rossi    schedule 16.12.2020


Ответы (1)


Ваши типы для заголовка неверны, вам нужно:

  ls_order_header_in TYPE bapisdh1

вместо bapisdhd1 и

  ls_order_header_inx TYPE bapisdh1x

вместо bapisdhd1x. Типы таблиц также должны соответствовать этому.

Они выглядят почти одинаково, но они не совпадают, те, которые вы использовали, представляют собой структуры для общего документа SD, а не для SO.

person Suncatcher    schedule 15.12.2020