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

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


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

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


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

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