Текущее время: Вт, июл 22 2025, 04:28

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос по расширению me5*n
СообщениеДобавлено: Пт, сен 07 2012, 09:54 
Ассистент
Ассистент

Зарегистрирован:
Вт, фев 15 2011, 22:44
Сообщения: 33
Добрый день.

Расширяю транзакции me5*n через MEREQ001. Мне необходимо при измении/добавлеии позиции на экране делать анализ по всем уже созданным позициям. Подскажите как в экзите EXIT_SAPLMEREQ_005 получить доступ ко всем позициям в гриде, а не только к той которую добавил/изменил(как предлагает мне стандарт).

Спасибо.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопрос по расширению me5*n
СообщениеДобавлено: Пт, сен 07 2012, 10:17 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, апр 18 2012, 14:20
Сообщения: 252
Откуда: РБ, г. Гомель
Пол: Мужской
EXIT_SAPLMEREQ_010 не устраивает?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по расширению me5*n
СообщениеДобавлено: Пт, сен 07 2012, 10:25 
Ассистент
Ассистент

Зарегистрирован:
Вт, фев 15 2011, 22:44
Сообщения: 33
он только при сохранении отрабатывает, а мне надо непосредственно при обработке позиций


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопрос по расширению me5*n
СообщениеДобавлено: Пт, сен 07 2012, 12:19 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
IM_REQ_ITEM(параметр)->GET_REQUISITION()->GET_ITEMS(), далее метод GET_DATA


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по расширению me5*n
СообщениеДобавлено: Пт, сен 07 2012, 13:54 
Ассистент
Ассистент

Зарегистрирован:
Вт, фев 15 2011, 22:44
Сообщения: 33
Оно! Спасибо!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопрос по расширению me5*n
СообщениеДобавлено: Пн, ноя 26 2012, 16:22 
Ассистент
Ассистент

Зарегистрирован:
Вт, фев 15 2011, 22:44
Сообщения: 33
Еще вопрос по EXIT_SAPLMEREQ_005.
Можно ли из этого экзита вывести сообщение в другую позицию. Например курсор у меня стоит на 1-й позиции, я нажимаю на экране кнопку "Поверить" и по какому-либо признаку в 1-й позиции выводится красное сообщение для 2-й позиции.

Пробовал добавлять записи в ex_messages(log_no/og_msg_no) - не получается.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопрос по расширению me5*n
СообщениеДобавлено: Пн, ноя 26 2012, 17:16 
Ассистент
Ассистент

Зарегистрирован:
Вт, фев 15 2011, 22:44
Сообщения: 33
ну или как вообще реализовать проверку как у SAPа, чтобы в журнал заносились ошибки и предупреждения по каждой позиции :roll:


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопрос по расширению me5*n
СообщениеДобавлено: Пн, ноя 26 2012, 17:39 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Необходимо правильно задать контекст для сохранения сообщений, и сохранить сообщения. Но возможно не будет работать(вообще говоря некорректно так делать)
Попробуйте вот так: см. include LMEREQF05.
Code:
    CALL METHOD cl_message_handler_mm=>get_handler
      IMPORTING
        ex_handler = l_msg_hdler.

    l_msgobj  ?= l_context->model.

    CALL METHOD cl_message_mm=>set_current_business_obj
      EXPORTING
        im_business_obj = l_msgobj.


Этот код нужно выполнить для позиции, к которой нужно занести сообщения.
И сохранить с помощью макроса
Code:
mmpur_message_forced


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по расширению me5*n
СообщениеДобавлено: Вт, ноя 27 2012, 08:11 
Ассистент
Ассистент

Зарегистрирован:
Вт, фев 15 2011, 22:44
Сообщения: 33
В EXIT_SAPLMEREQ_005 я из класса дергаю все позиции из заявки, затем в цикле выполняю свои проверки. На форуме есть примеры удаления всех сообщений из списка, а вот как добавить - не понимаю.
По поводу
Code:
mmpur_message_forced

В ME_PROCESS_PO_CUST, например, есть параметр ch_failed, а вот в EXIT_SAPLMEREQ_005 его нет. Получается красное сообщение я вывожу, но сохранаять заявку всеравно дает.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопрос по расширению me5*n
СообщениеДобавлено: Вт, ноя 27 2012, 14:15 
Ассистент
Ассистент

Зарегистрирован:
Вт, фев 15 2011, 22:44
Сообщения: 33
Пробую реализовать формирование журнала в BADI ME_PROCESS_REQ_CUST - тоже не получается. Метод CHECK там работает для всей заявке, а не по позиционно. В MB_MIGO_BADI, например есть CHECK_ITEM, он отрабатывает по каждой позиции...

Неужели никто не сталкивался с подобной задачей?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопрос по расширению me5*n
СообщениеДобавлено: Вт, ноя 27 2012, 14:24 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
EXIT_SAPLMEREQ_005 и BADI ME_PROCESS_REQ_CUST вызываются последовательно из метода process_user_exit класса lcl_req_item.
Code:
  METHOD process_user_exit.
    DATA: l_full_check      TYPE syst-calld,
          l_item_has_errors TYPE syst-calld,
          ls_data_new       TYPE mereq_item,
          ls_data_old       TYPE mereq_item,
          ls_data_persistent TYPE mereq_item,
          lt_cust_messages  TYPE mereq_t_bapiret2,
          l_badi_recheck    TYPE sy-calld,
          l_ce_recheck      TYPE sy-calld,
          l_recheck         TYPE sy-calld,
          ls_message        LIKE LINE OF lt_cust_messages,
          l_msgobj          TYPE REF TO if_message_obj_mm,
          l_msg_hdler       TYPE REF TO cl_message_handler_mm,
          l_dummy(1)        TYPE x,
          l_rc              TYPE sy-subrc.

*
* clear bit_broken_rules for the user-exit
*
    SET BIT my_offset_user_exit_005 OF
        me->my_state->broken_rules TO 0.
    IF sy-subrc NE 0.
      DO.
        CONCATENATE me->my_state->broken_rules l_dummy
          INTO me->my_state->broken_rules IN BYTE MODE. "unicode
        SET BIT my_offset_user_exit_005 OF
          me->my_state->broken_rules TO 0.
        IF sy-subrc IS INITIAL.
          EXIT.                        "from do
        ENDIF.
      ENDDO.
    ENDIF.

*
*     remove & set business object, context
*
    CALL METHOD cl_message_handler_mm=>get_handler
      IMPORTING
        ex_handler = l_msg_hdler.

    l_msgobj  ?= im_context->model.
    CALL METHOD l_msg_hdler->remove_by_bo
      EXPORTING
        im_business_obj          = l_msgobj
        im_context               = my_offset_user_exit_005
        im_include_child_objects = mmpur_no.

    CALL METHOD cl_message_mm=>set_current_business_obj
      EXPORTING
        im_business_obj = l_msgobj.

    CALL METHOD cl_message_mm=>set_current_context(
      my_offset_user_exit_005 ).

    IF im_context->scope EQ mmpur_scope_full.
      l_full_check = 'X'.
    ENDIF.

    IF im_success = mmpur_no.
      l_item_has_errors = 'X'.
    ENDIF.

    ex_success = mmpur_yes.
    ex_recheck = mmpur_no.

    MOVE-CORRESPONDING:
        me->my_state->item                   TO ls_data_new,
        im_context->item_before_checks->item TO ls_data_old,
        my_persistent_eban                   TO ls_data_persistent.

    IF NOT me->my_state->ref_item IS INITIAL.
      ls_data_new-ref_banfn =
      me->my_state->ref_item->my_state->header->my_state->header-banfn.
      ls_data_new-ref_bnfpo =
      me->my_state->ref_item->my_state->item-bnfpo.
    ENDIF.

* call IBS version of BAdI
    CALL FUNCTION 'MEREQBADI_PROCESS_ITEM'
      EXPORTING
        im_item       = me
        im_count      = my_iteration_count
        im_ibs        = mmpur_yes
        im_cust       = mmpur_no
        im_ref_item   = me->my_state->ref_item
      EXCEPTIONS
        error_message = 1
        OTHERS        = 2.
    IF NOT sy-subrc IS INITIAL.
      l_rc = sy-subrc.
    ENDIF.


    CALL METHOD set_firewall( mmpur_yes ).

*- BAdI ME_PROCESS_REQ_CUST-----------------------------------------*
    CALL FUNCTION 'MEREQBADI_PROCESS_ITEM'
      EXPORTING
        im_item       = me
        im_count      = my_iteration_count
        im_ibs        = mmpur_no
        im_cust       = mmpur_yes
        im_ref_item   = me->my_state->ref_item
      EXCEPTIONS
        error_message = 1
        OTHERS        = 2.

    IF NOT sy-subrc IS INITIAL.
      l_rc = sy-subrc.
    ENDIF.

    IF me->my_state->input_buffer_changed EQ mmpur_yes.
      l_badi_recheck = mmpur_yes.
    ENDIF.

    CALL CUSTOMER-FUNCTION '005'
      EXPORTING
        im_req_item           = me
        im_data_new           = ls_data_new
        im_data_old           = ls_data_old
        im_data_persistent    = ls_data_persistent
        im_full_check         = l_full_check
        im_item_has_errors    = l_item_has_errors
       IMPORTING
        ex_messages           = lt_cust_messages
        ex_recheck_item       = l_ce_recheck
       EXCEPTIONS
        error_message         = 1
        OTHERS                = 0.

    IF NOT sy-subrc IS INITIAL.
      l_rc = sy-subrc.
    ENDIF.

    CALL METHOD set_firewall( mmpur_no ).

    IF l_ce_recheck EQ mmpur_yes OR l_badi_recheck EQ mmpur_yes.
      l_recheck = mmpur_yes.
    ENDIF.

    IF NOT l_rc IS INITIAL.

      mmpur_metafield mmmfd_item_userexit.
*
* customer function triggered a message, store it in
* the log and do nothing
*
      mmpur_message_forced sy-msgty sy-msgid sy-msgno
        sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

      ex_success = mmpur_no.

    ELSEIF sy-subrc IS INITIAL AND
           NOT l_recheck IS INITIAL.

      ex_recheck = mmpur_yes.          "recheck !!!

    ENDIF.

    LOOP AT lt_cust_messages INTO ls_message.

      mmpur_message_forced ls_message-type ls_message-id
              ls_message-number
              ls_message-message_v1
              ls_message-message_v2
              ls_message-message_v3
              ls_message-message_v4.

      IF ls_message-type EQ 'A' OR
         ls_message-type EQ 'E'.

        ex_success = mmpur_no.
      ENDIF.

    ENDLOOP.

*
* set bit_broken_rules for the user-exit in case of error
*
    IF ex_success EQ mmpur_no.
      SET BIT my_offset_user_exit_005 OF
          me->my_state->broken_rules.
    ENDIF.

  ENDMETHOD.                    "lcl_req_item


Как видно из кода - для ошибок задается контекст
Code:
    CALL METHOD cl_message_mm=>set_current_business_obj
      EXPORTING
        im_business_obj = l_msgobj.

    CALL METHOD cl_message_mm=>set_current_context(
      my_offset_user_exit_005 ).

и вызывается
Code:
mmpur_message_forced


Попробуйте повторить логику для нужной позиции.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос по расширению me5*n  Тема решена
СообщениеДобавлено: Вт, ноя 27 2012, 17:54 
Ассистент
Ассистент

Зарегистрирован:
Вт, фев 15 2011, 22:44
Сообщения: 33
Реализовал следующим образом: в EXIT_SAPLMEREQ_005 сформировал табличку с ошибками в позициях, потом в ME_PROCESS_REQ_CUST-CHECK вывел ее списком в журнал через mmpur_message_forced

Спасибо за помощь!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB