Текущее время: Чт, авг 07 2025, 20:59

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: User Exit в ME21N для правки списка партнеров
СообщениеДобавлено: Вт, ноя 08 2011, 14:45 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 15:54
Сообщения: 77
Добрый день!

Есть необходимость при создании документа в ME21N при определенных условиях добавить партнера с функцией CR в список партнеров.
В каком юзер-экзите это можно сделать?

Пробовал всякое из группы XM06: ставил брейкпойнты в ZXM06U12, ZXM06U27, ZXV09U04 - но они не выстреливали.
В гугле искал, не помогло.

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

_________________
F5-F6-F7-F8


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: User Exit в ME21N для правки списка партнеров
СообщениеДобавлено: Вт, ноя 08 2011, 14:55 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
BADI или Экзит для заказа на поставку

Из группы XM06 вот эти поглядите:
EXIT_SAPMM06E_012 - на сохранение и проверку
EXIT_SAPMM06E_016, EXIT_SAPMM06E_017 - на Enter


Последний раз редактировалось zsap Вт, ноя 08 2011, 15:04, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: User Exit в ME21N для правки списка партнеров
СообщениеДобавлено: Вт, ноя 08 2011, 15:03 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
брейк-поинты нужно ставить перед вызовом call customer-function, а не в ZX-инклюдах.
Подробнее работа с расширениями описана здесь и в курсе BC425.

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: User Exit в ME21N для правки списка партнеров
СообщениеДобавлено: Пн, ноя 14 2011, 18:42 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 15:54
Сообщения: 77
Привет еще раз.

Нашел процедуру, в которой вызывается юзер-экзит EXIT_SAPMM06E_017, это оказалось FORM custscr1_item_set_data_pai.
В процедуре притаился энхансмент - ENHANCEMENT-POINT CUSTSCR1_ITEM_SET_DATA_PAI_02, который и был немедленно задействован:

Code:
  DATA: ls_t001w TYPE t001w,
        ls_wyt3  TYPE wyt3,
        ls_ekpa  TYPE ekpa.

  CLEAR ls_t001w.
  SELECT SINGLE *
    FROM t001w
    INTO ls_t001w
    WHERE werks = ekko-reswk.

  CLEAR ls_wyt3.
  SELECT SINGLE *
    FROM wyt3
    INTO ls_wyt3
    WHERE lifnr = ls_t001w-lifnr AND ekorg = ekko-ekorg AND parvw = 'SP'.

  CLEAR ls_ekpa.
  MOVE-CORRESPONDING ls_wyt3 TO ls_ekpa.
  APPEND ls_ekpa TO xekpa.


Однако, надо записать данные в XMMPA, а их из этого энхансмента не видно.
Как можно записать что-либо в XMMPA?

Буду благодарен за любую помощь.

_________________
F5-F6-F7-F8


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: User Exit в ME21N для правки списка партнеров  Тема решена
СообщениеДобавлено: Вт, ноя 15 2011, 07:13 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
to dedzinatajs, можно конечно попробовать через assign к (SAPLEKPA)XMMPA[]... Но, имхо, этот Ваш подход в целом не очень хорош.
Я бы сделал просто проверку в бади ME_PROCESS_PO_CUST на "при определенных условиях", там есть метод get_partners, через который можно получить список партнеров и его уже проверить на CR, если нету, то ошибка, и пусть пользователи заполняют.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: User Exit в ME21N для правки списка партнеров
СообщениеДобавлено: Вт, ноя 15 2011, 11:52 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 15:54
Сообщения: 77
Спасибо за совет!

Сделал сейчас данным образом, без БАДИ, но со стандартной ФМ MM_READ_PARTNERS:

Code:
  CLEAR ls_ekpa.
  MOVE-CORRESPONDING ls_wyt3 TO ls_ekpa.

  CALL FUNCTION 'MM_READ_PARTNERS'
   EXPORTING
     APPLICATION               = 'P'
     EBELN                     = ekko-ebeln
     BSTYP                     = ekko-bstyp
     PARGR                     = t161-pargr
   TABLES
     X_EKPA                    = lt_ekpa
     Y_EKPA                    = lt_ekpa2
   EXCEPTIONS
     OTHERS                    = 1.

  CLEAR ls_ekpa_temp.
  READ TABLE lt_ekpa INTO ls_ekpa_temp WITH KEY parvw = 'SP'.
 
  IF ls_ekpa NE ls_ekpa_temp.
    DELETE lt_ekpa WHERE parvw = 'SP'.
    APPEND ls_ekpa TO lt_ekpa.
    CLEAR lt_mmpa.
    REFRESH lt_mmpa.   

    LOOP AT lt_ekpa INTO ls_ekpa_temp.
      CLEAR ls_mmpa.
      MOVE-CORRESPONDING ls_ekpa_temp TO ls_mmpa.
      APPEND ls_mmpa TO lt_mmpa.
    ENDLOOP.

    CALL FUNCTION 'MM_MAINTAIN_PARTNERS'
         EXPORTING
              application         = 'P'
              ebeln               = ekko-ebeln
              bstyp               = ekko-bstyp
              ekorg               = ekko-ekorg
              lifnr               = ekko-lifnr
              pargr               = t161-pargr
              i_llief             = ekko-llief
              i_lifre             = ekko-lifre
              aktyp               = 'A'
              subscreen_mode      = 'PBO'
              statu               = ekko-statu
         TABLES
             x_mmpa              = lt_mmpa
         EXCEPTIONS
              OTHERS                    = 1.
  ENDIF.


Вроде бы теперь работает, но - не все время она видна в табе Партнеров. Смотрю в дебаггере что таки да, добавляется запись в структуру XMMPA, но в случае с supplying plant = AA01 в табе Партнеры видна запись CR-агента, а в случае с заводом AA02 - не видна. Но руками туда ничего не добавить, такое чувство что там что-то есть, но не показывается.

В чем может быть беда?

_________________
F5-F6-F7-F8


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: User Exit в ME21N для правки списка партнеров
СообщениеДобавлено: Вт, ноя 15 2011, 21:57 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 15:54
Сообщения: 77
В общем, в конце концов увенчалось успехом. Использование встроенных фунций 'MM_MAINTAIN_PARTNERS' и 'MM_READ_PARTNERS' оказалось неудачным, поэтому все-таки пошел путем "вклинивания" в пространство переменных SAPLEKPA. При этом меняется содержимое не только самой XMMPA, но еще и вспомогательных переменных: таблицы IMMPA и TAB_LINES.

Беса, спасибо за подсказанную идею!

Публикую код, возможно кому-то еще пригодится для автодетерминации партнера:
(предполагается, что структура ls_mmpa содержит данные для добавляемого партнера)

Code:
  MOVE-CORRESPONDING ls_wyt3 TO ls_mmpa.

  CLEAR ls_mmpa-werks.

  FIELD-SYMBOLS: <fs_xmmpa> TYPE ANY TABLE,
                 <fs_immpa> TYPE ANY TABLE,
                 <fs_mmpa> TYPE ANY,
                 <fs_tablines> TYPE ANY.

  TYPES: BEGIN OF ty_immpa,
         tabix LIKE sy-tabix,
        END OF ty_immpa.
  DATA: ls_immpa TYPE ty_immpa.
  DATA: BEGIN OF lt_immpa OCCURS 20,
         tabix LIKE sy-tabix,
        END OF lt_immpa.
  DATA: lt_mmpa TYPE TABLE OF mmpa WITH HEADER LINE.

  ASSIGN ('(SAPLEKPA)XMMPA[]') TO <fs_xmmpa>.
  ASSIGN ('(SAPLEKPA)MMPA') TO <fs_mmpa>.
  ASSIGN ('(SAPLEKPA)IMMPA[]') TO <fs_immpa>.
  ASSIGN ('(SAPLEKPA)TAB_LINES') TO <fs_tablines>.

  IF <fs_xmmpa> IS ASSIGNED AND <fs_mmpa> IS ASSIGNED AND <fs_immpa> IS ASSIGNED AND <fs_tablines> IS ASSIGNED.
    CLEAR ls_mmpa_temp.
    lt_mmpa[] = <fs_xmmpa>[].
    READ TABLE lt_mmpa INTO ls_mmpa_temp WITH KEY parvw = 'SP'.   "if CR agent is not already there
    IF sy-subrc NE 0.
      MOVE-CORRESPONDING ls_mmpa TO <fs_mmpa>.
      PERFORM determine_counter IN PROGRAM SAPLEKPA USING ls_mmpa CHANGING ls_mmpa-parza.
      ls_mmpa-ernam = sy-uname.
      ls_mmpa-erdat = sy-datum.
      APPEND ls_mmpa TO lt_mmpa.
      <fs_xmmpa>[] = lt_mmpa[].
      CLEAR ls_immpa.
      READ TABLE lt_mmpa.
      ls_immpa-tabix = sy-tabix.
      lt_immpa[] = <fs_immpa>[].
      APPEND ls_immpa TO lt_immpa.
      <fs_immpa>[] = lt_immpa[].
      <fs_tablines> = <fs_tablines> + 1.
    ENDIF.
  ENDIF.


_________________
F5-F6-F7-F8


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: User Exit в ME21N для правки списка партнеров
СообщениеДобавлено: Чт, июн 25 2015, 11:18 
Начинающий
Начинающий

Зарегистрирован:
Пт, июн 10 2011, 11:15
Сообщения: 9
В BADI ME_PROCESS_PO_CUST к сожалению метода GET_PARTNERS нет, ФМ нормально работает
CALL FUNCTION 'MM_READ_PARTNERS'
TABLES
x_ekpa = lt_ekpa
* Y_EKPA =
.


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

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


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

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


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

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