Текущее время: Пн, июл 21 2025, 23:54

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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