Автор Тема: Ошибка "Требуемая функция MB_CREATE_GOODS_MOVEMENT не выполняется"  (Прочитано 13937 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн knopix

  • Newbie
  • *
  • Сообщений: 34
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Здравствуйте...

При проводке документа в MIGO мне необходимо создать ещё один ММ-документ. Для этого в методе "IF_EX_MB_MIGO_BADI~POST_DOCUMENT" я вызываю "BAPI_GOODSMVT_CREATE". После того как отработала БАПИ-шка sy-subrc = 0 и табличка с сообщениями тоже пустая, но в дальнейшем возникает ошибка: "Требуемая функция MB_CREATE_GOODS_MOVEMENT не выполняется № сообщения M7260". ( судя по описанию ругается на то что ФМ "MB_CREATE_GOODS_MOVEMENT" не отработал корректно и поэтому не может быть запущен ФМ "MB_POST_GOODS_MOVEMENT", что вполне логично ). Подскажите, пожалуйста, что я делаю не так и в чём тут проблема.

Код: You are not allowed to view links. Register or Login
  DATA: mm_header  TYPE bapi2017_gm_head_01,
        mm_code    TYPE bapi2017_gm_code,
        mm_item    TYPE STANDARD TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
        mm_ret     TYPE STANDARD TABLE OF bapiret2.

  mm_code = '05'.

  mm_header-pstng_date     = is_mkpf-budat.
  и т.д.

  LOOP AT it_mseg ASSIGNING <fs_mseg>.

    SELECT SINGLE * FROM zblnswrk
     WHERE werks EQ <fs_mseg>-werks AND
           bwart EQ <fs_mseg>-bwart.

    mm_item-material      = <fs_mseg>-matnr.
    mm_item-move_type     = zblnswrk-zbwart.
    и т.д.

    WRITE <fs_mseg>-ps_psp_pnr TO mm_item-wbs_elem.

    APPEND mm_item.
  ENDLOOP.

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      GOODSMVT_HEADER  = mm_header
      GOODSMVT_CODE    = mm_code
    IMPORTING
      GOODSMVT_HEADRET = mm_headret
    TABLES
      GOODSMVT_ITEM    = mm_item
      RETURN           = mm_ret.

  READ TABLE mm_ret WITH KEY type = 'E' TRANSPORTING NO FIELDS.

  IF sy-subrc IS NOT INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ENDIF.


Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Вообще-то функции создания документа ММ не являются повторно входимыми. Это значит что в рамках сессии пока не выполните коммит первого документа, второй проводить нельзя. В свое время я использовал механизм событий, чтобы провести второй документ. Можно использовать вокрфлов и т.д. Да есть вероятность что второй документ не проведется, но она меленькая по факту. К сожалению два документа ММ одним коммитом не зафиксируешь.

Оффлайн knopix

  • Newbie
  • *
  • Сообщений: 34
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Понятно... Спасибо большое за ответ. А расскажите, пожалуйста, поподробнее про "В свое время я использовал механизм событий" или ссылочку где почитать...
« Последнее редактирование: Июль 03, 2013, 11:10:41 am от knopix »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Понятно... Спасибо большое за ответ. А расскажите, пожалуйста, поподробнее про "В свое время я использовал механизм событий" или ссылочку где почитать...
Ну кажется тут было: You are not allowed to view links. Register or Login

Оффлайн knopix

  • Newbie
  • *
  • Сообщений: 34
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Добавил в реализующий класс флаг-атрибут и взвожу его в методе "IF_EX_MB_MIGO_BADI~POST_DOCUMENT". Непосредственно вызов "BAPI_GOODSMVT_CREATE" поместил в метод "IF_EX_MB_MIGO_BADI~STATUS_AND_HEADER" (с условием по флагу, естественно). Вроде, работает. Отдал тестить...

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
"IF_EX_MB_MIGO_BADI~STATUS_AND_HEADER" (с условием по флагу, естественно). Вроде, работает. Отдал тестить...
А что за флаг атрибут?

Оффлайн knopix

  • Newbie
  • *
  • Сообщений: 34
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Ну, просто в атрибуты реализующего класса добавил свой... attr_post TYPE abap_bool. В методе "IF_EX_MB_MIGO_BADI~POST_DOCUMENT" делаю attr_post = 'X' и далее в "IF_EX_MB_MIGO_BADI~STATUS_AND_HEADER" если attr_post = 'X', то запускаю BAPI (в отладчике посмотрел этот метод запускается в том числе и после метода "POST_DOCUMENT"). Только как-то кривовато получается... сейчас ещё попробую задержку поставить на пару секунд.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Только как-то кривовато получается... сейчас ещё попробую задержку поставить на пару секунд.
Ну если что-то выкрутишь интересное пиши, так как задачка такая у многих возникает, с паровозом из более чем одного документа ММ.

Оффлайн DEAD_MOROZ

  • Newbie
  • *
  • Сообщений: 63
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Удавалось создать несколько документов материала в одном коммите, если перед каждым вызовом  BAPI_GOODSMVT_CREATE очищать переменную '(SAPLMBWL)XCOMMIT' :

 field-symbols: <_xcommit> type any.
    if <_xcommit> is not assigned.
      assign ('(SAPLMBWL)XCOMMIT') to <_xcommit>.
    endif.
    if <_xcommit> is assigned.
      clear <_xcommit>.
    endif.


Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Удавалось создать несколько документов материала в одном коммите, если перед каждым вызовом  BAPI_GOODSMVT_CREATE очищать переменную '(SAPLMBWL)XCOMMIT' :

 field-symbols: <_xcommit> type any.
    if <_xcommit> is not assigned.
      assign ('(SAPLMBWL)XCOMMIT') to <_xcommit>.
    endif.
    if <_xcommit> is assigned.
      clear <_xcommit>.
    endif.
А ты где этот код использовал, после вызова BAPI или где-то внутри? Кстати последствий никаких пока не обнаржилсоь?

Оффлайн crxcrvs

  • Newbie
  • *
  • Сообщений: 10
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
Здравствуйте...

При проводке документа в MIGO мне необходимо создать ещё один ММ-документ. Для этого в методе "IF_EX_MB_MIGO_BADI~POST_DOCUMENT" я вызываю "BAPI_GOODSMVT_CREATE". После того как отработала БАПИ-шка sy-subrc = 0 и табличка с сообщениями тоже пустая, но в дальнейшем возникает ошибка: "Требуемая функция MB_CREATE_GOODS_MOVEMENT не выполняется № сообщения M7260". ( судя по описанию ругается на то что ФМ "MB_CREATE_GOODS_MOVEMENT" не отработал корректно и поэтому не может быть запущен ФМ "MB_POST_GOODS_MOVEMENT", что вполне логично ). Подскажите, пожалуйста, что я делаю не так и в чём тут проблема.
skip
Что то не пойму а почему не написать обертку в виде модуля обновления и вызывать ее в экзите,
в таком случае по комиту либо создастся все либо ничего.
Если так не сработает можно попробовать in background task запустить BAPI.

Оффлайн DEAD_MOROZ

  • Newbie
  • *
  • Сообщений: 63
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
А ты где этот код использовал, после вызова BAPI или где-то внутри? Кстати последствий никаких пока не обнаржилсоь?

Использовал данный способ при обработке входящего IDOC.
Был написан свой ФМ-обработчик айдок, в котором требовалось создавать несколько документов материала в 1 коммите.
Перед каждым вызовом   BAPI_GOODSMVT_CREATE очищал глобальную переменную (SAPLMBWL)XCOMMIT.
Проблем не обнаружилось. ;)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Если так не сработает можно попробовать in background task запустить BAPI.
Да с этим MB_CREATE_GOODS_MOVEMENT, такие танцы не выходят. Это вообще-то какой-то винегрет из кода старых и новых модулей, поэтому и работает через одно место.

Sapforum.Biz