SAPфорум.RU
https://www.sapboard.ru/forum/

BAPI для добавления материалов в заказ ТОРО
https://www.sapboard.ru/forum/viewtopic.php?f=8&t=98830
Страница 1 из 1

Автор:  Maksimka [ Вт, июл 07 2020, 15:22 ]
Заголовок сообщения:  BAPI для добавления материалов в заказ ТОРО

Добрый день уважаемые PM консультанты.

Столкнулся со следующей проблемой: необходимо сделать пакетник по созданию заказов ТОРО. Попытался сделать через стандарт, т.е. через BDC, но вот проблема, транзакция IW31 позволяет в пакетнике добавлять ровно столько материалов сколько видно на экране, ну т.е. на экран допустим поместится 19 материалов, чтобы добавить ещё надо полосой прокрутки двигать экран, пакетник этого не понимает. Пытался использовать BAPI BAPI_ALM_ORDER_MAINTAIN для изменения уже созданного заказа и добавления в него нужное мне количество материалов, но вот проблема, там есть структура BAPI_ALM_ORDER_COMPONENT, в которую нужно передавать номер резервирования RESERV_NO. Вот здесь и не понятно, резервирование автоматически создаётся при деблокировании заказа, тогда что я должен передавать в поле RESERV_NO, если резервирование ещё не создалось. Пытался смотреть ФМ BAPI_ALM_COMPONENT_GET_DETAIL, там тоже надо передавать номер резервирования. Может кто делал что то похожее и подскажет какое нибудь другое BAPI или ещё что?

Автор:  Alexey Zhandarov [ Вт, июл 07 2020, 15:57 ]
Заголовок сообщения:  Re: BAPI для добавления материалов в заказ ТОРО

Делал добавление позиций в заказ ТОРО BAPI_ALM_ORDER_MAINTAIN
Резервирование создаётся автоматически внутри BAPI. Резервирование есть всегда, даже у недеблокированных закзов

Выдержки из кода по заполнению структур. Правда у меня всё на одну операцию вешалось( <fs_components_new>-activity = '0010'.) но это уже детали.


Code:
  DATA: lv_pm_order    TYPE bapi_alm_order_header_e-orderid,
        lv_item_number TYPE bapi_alm_order_component_e-item_number,
        lv_num_row     TYPE i.

  lv_num_row = 0.

      ADD 10 TO lv_item_number.
      ADD 1 TO lv_num_row.

      APPEND INITIAL LINE TO lt_components_new ASSIGNING FIELD-SYMBOL(<fs_components_new>).
      <fs_components_new>-item_number = lv_item_number.
      <fs_components_new>-material = ls_matdoc-matnr.
      <fs_components_new>-batch    = ls_matdoc-charg.
      <fs_components_new>-item_cat = 'L' .
      <fs_components_new>-requirement_quantity = ls_matdoc-menge.
      <fs_components_new>-requirement_quantity_unit = ls_matdoc-meins.
      <fs_components_new>-stge_loc = ls_matdoc-umlgo.
      <fs_components_new>-activity = '0010'.

      APPEND INITIAL LINE TO lt_components_up ASSIGNING FIELD-SYMBOL(<fs_components_up>).
      <fs_components_up>-item_number = 'X'.
      <fs_components_up>-material = 'X'.
      <fs_components_up>-batch    = 'X'.
      <fs_components_up>-item_cat = 'X'.
      <fs_components_up>-requirement_quantity = 'X'.
      <fs_components_up>-requirement_quantity_unit = 'X'.
      <fs_components_up>-stge_loc = 'X'.
      <fs_components_up>-activity = 'X'.

      APPEND INITIAL LINE TO lt_methods ASSIGNING FIELD-SYMBOL(<lt_methods>).
      <lt_methods>-refnumber = lv_num_row.
      <lt_methods>-objecttype = 'COMPONENT'.
      <lt_methods>-method = 'CREATE'.
      <lt_methods>-objectkey = lv_pm_order.

      APPEND INITIAL LINE TO lt_methods ASSIGNING <lt_methods>.
      <lt_methods>-refnumber = lv_num_row.
      <lt_methods>-method = 'SAVE'.



      CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
        TABLES
          it_methods      = it_method
          it_component    = it_component
          it_component_up = it_component_up
          return          = it_return.


Автор:  Maksimka [ Ср, июл 08 2020, 15:04 ]
Заголовок сообщения:  Re: BAPI для добавления материалов в заказ ТОРО

Alexey Zhandarov написал:
Делал добавление позиций в заказ ТОРО BAPI_ALM_ORDER_MAINTAIN
Резервирование создаётся автоматически внутри BAPI. Резервирование есть всегда, даже у недеблокированных закзов

Выдержки из кода по заполнению структур. Правда у меня всё на одну операцию вешалось( <fs_components_new>-activity = '0010'.) но это уже детали.



[/code]

Спасибо за подсказку Алексей. Попробовал Ваш пример, материал действительно добавляется, но опять же не понятно как добавлять больше одного материала, пробовал сделать так
Code:
APPEND INITIAL LINE TO lt_components_new ASSIGNING FIELD-SYMBOL(<fs_components_new>).
<fs_components_new>-item_number = '0010'.
<fs_components_new>-material = '000000000201003348'. "ls_matdoc-matnr.
<fs_components_new>-batch    = ''.
<fs_components_new>-item_cat = 'L' .
<fs_components_new>-requirement_quantity = '1'."ls_matdoc-menge.
<fs_components_new>-requirement_quantity_unit = 'KG'." ls_matdoc-meins.
<fs_components_new>-stge_loc = '0035'. "ls_matdoc-umlgo.
<fs_components_new>-activity = '0010'.
*
APPEND INITIAL LINE TO lt_components_up ASSIGNING FIELD-SYMBOL(<fs_components_up>).
<fs_components_up>-item_number = 'X'.
<fs_components_up>-material = 'X'.
<fs_components_up>-batch    = 'X'.
<fs_components_up>-item_cat = 'X'.
<fs_components_up>-requirement_quantity = 'X'.
<fs_components_up>-requirement_quantity_unit = 'X'.
<fs_components_up>-stge_loc = 'X'.
<fs_components_up>-activity = 'X'.

APPEND INITIAL LINE TO lt_components_new ASSIGNING <fs_components_new>.
<fs_components_new>-item_number = '0020'.
<fs_components_new>-material = '000000000201014445'. "ls_matdoc-matnr.
<fs_components_new>-batch    = ''.
<fs_components_new>-item_cat = 'L' .
<fs_components_new>-requirement_quantity = '1'."ls_matdoc-menge.
<fs_components_new>-requirement_quantity_unit = 'KG'." ls_matdoc-meins.
<fs_components_new>-stge_loc = '0035'. "ls_matdoc-umlgo.
<fs_components_new>-activity = '0010'.

APPEND INITIAL LINE TO lt_components_up ASSIGNING <fs_components_up>.
<fs_components_up>-item_number = 'X'.
<fs_components_up>-material = 'X'.
<fs_components_up>-batch    = 'X'.
<fs_components_up>-item_cat = 'X'.
<fs_components_up>-requirement_quantity = 'X'.
<fs_components_up>-requirement_quantity_unit = 'X'.
<fs_components_up>-stge_loc = 'X'.
<fs_components_up>-activity = 'X'.

APPEND INITIAL LINE TO lt_methods ASSIGNING FIELD-SYMBOL(<lt_methods>).
<lt_methods>-refnumber = lv_num_row.
<lt_methods>-objecttype = 'COMPONENT'.
<lt_methods>-method = 'CREATE'.
<lt_methods>-objectkey = '9010038298'."lv_pm_order'.

APPEND INITIAL LINE TO lt_methods ASSIGNING <lt_methods>.
<lt_methods>-refnumber = lv_num_row.
<lt_methods>-method = 'SAVE'.



CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
  TABLES
    it_methods      = lt_methods
    it_component    = lt_components_new
    it_component_up = lt_components_up
    return          = itab_return
    ET_NUMBERS      = itab_numbers.

call function 'BAPI_TRANSACTION_COMMIT'.

Добавляет только первый материал, второй игнорирует или тут надо запускать каждое добавление по одному материалу в заказ в цикле?

Автор:  Alexey Zhandarov [ Чт, июл 09 2020, 18:37 ]
Заголовок сообщения:  Re: BAPI для добавления материалов в заказ ТОРО  Тема решена

У меня добавляется больше одного материала.

Цикл по позициям, что нужно добавить, должен включать в себя блок.

Code:
      APPEND INITIAL LINE TO lt_methods ASSIGNING <lt_methods>.
      <lt_methods>-refnumber = lv_num_row.
      <lt_methods>-objecttype = 'COMPONENT'.
      <lt_methods>-method = 'CREATE'.
      <lt_methods>-objectkey(12)  = lv_pm_order.
      <lt_methods>-objectkey+12(4) = ls_components-res_item .

      APPEND INITIAL LINE TO lt_methods ASSIGNING <lt_methods>.
      <lt_methods>-refnumber = lv_num_row.
      <lt_methods>-method = 'SAVE'.


Возможно вы lt_methods формируете перед бапишкой и заполняете двумя строками(CREATE and SAVE), а нужно для каждой позиции наполнять по две строки.
По крайней мере я так делал.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/