Текущее время: Пт, июн 27 2025, 22:50

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Изменение заявок с помощью класса CL_PR_HANDLER_MM, альтернатива BAPI_PR_CHANGE.  Тема решена
СообщениеДобавлено: Чт, мар 24 2011, 17:42 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, окт 21 2008, 08:02
Сообщения: 71
Откуда: Moscow
Пол: Мужской
Всем привет!

ох - давненько что-то не писал ничего тут. Наверное весна подействовала - решил отметиться постом=)

Часто нужно поменять в ММ заявках какие то данные и приходится прибегать к вызовам BAPI, которые, на мой взгяд, излишне перегружены логикой, да еще и структуры эти мэппить приходится постоянно. В общем, решил для себя написать ФМничек по удалению позиций заявок, который при желании может легко трансформироваться в модуль для изменения любых полей той самой EBAN ;-)

Если кому то пригодится, буду рад. =)

Code:
FUNCTION ZMM_CANCEL_PURCHASE_REQ.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     REFERENCE(ID_BANFN) TYPE  BANFN
*"  EXPORTING
*"     REFERENCE(ET_MESSAGES) TYPE  MEPO_T_MESSAGES_BAPI
*"----------------------------------------------------------------------

  data: lo_pr       type ref to CL_PR_HANDLER_MM,
        lt_items    type PREQ_T_ITEM,
        ls_items    type PREQ_ITEM.

  " Создаем инстанцию обработчика
  lo_pr = CL_PR_HANDLER_MM=>GET_INSTANCE( ).

  " Читаем заявку
  lo_pr->OPEN( EXPORTING IM_BANFN    = id_banfn
                         IM_AKTYP    = cl_mmpur_constants=>ver
               IMPORTING EX_ITEMS    = lt_items
                         EX_MESSAGES = et_messages ).

  read table et_messages transporting no fields with key MSGTY = 'E'.
  if sy-subrc ne 0.

    " Меняем данные
    loop at lt_items into ls_items.

      " <- здесь мы можем делать абсолютные любые изменения в заявке
      ls_items-data-loekz = abap_true.

      lo_pr->SET_PR_ITEM( ls_items ).
    endloop.

    " Применяем данные
    LO_PR->PR_PROCESS( IMPORTING EX_MESSAGES = et_messages ).

    read table et_messages transporting no fields with key MSGTY = 'E'.
    if sy-subrc ne 0.

      " Сохраняем данные
      lo_pr->PR_POST( IMPORTING EX_MESSAGES = et_messages ).

    endif.

  endif.

  " Очищаем данные
  lo_pr->REFRESH( ).

ENDFUNCTION.



P.S. Стоит отметить, что внутри класса используются абсолютно те же классы и методы, что и в стандартных транзакциях ME5..N. Так что можете быть спокойными за свои badiшки из ME_PROCESS_REQ_CUST - они отработают так, как и должны отработать=)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение заявок с помощью класса CL_PR_HANDLER_MM, альтернатива BAPI_PR_CHANGE.
СообщениеДобавлено: Чт, мар 24 2011, 20:13 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, фев 04 2009, 13:46
Сообщения: 95
Пол: Мужской
Большое спасибо! Очень помогло! :pivo:


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Изменение заявок с помощью класса CL_PR_HANDLER_MM, альтернатива BAPI_PR_CHANGE.
СообщениеДобавлено: Пт, мар 25 2011, 05:54 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
to ppeter, да, с заявками туго в этом плане в старых системах, в новых терпимо т.к. появилось BAPI_PR_CHANGE, Ваш способ возможно еще сильнее упрощает работу, но вот у меня допустим даже на 6.0 нету класса CL_PR_HANDLER_MM, у Вас какая версия системы? Еще вопрос, одно из преимуществ бапи, это то что она ждет commit work, как я понял в Вашем случае commit work в методе PR_POST?

P.S. Мэпить не сложно, используйте BAPI_PR_GETDETAIL. Куча проверок в коде, это не плохо. Как поведет себя с extensions?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение заявок с помощью класса CL_PR_HANDLER_MM, альтернатива BAPI_PR_CHANGE.
СообщениеДобавлено: Пт, мар 25 2011, 10:55 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, окт 21 2008, 08:02
Сообщения: 71
Откуда: Moscow
Пол: Мужской
Я работаю на системе SAP ECC 6.0, версия базиса 701. Да, с commit work тут действительно все сложнее - он запускается в методе post, если только расшиить на свой метод.. Зато есть отдельно метод check который подойдет для симуляции( он же исполняется из Post ).

И наконец.. про extensons.. Если мы говорим о ZZ-полях.. Собственно это и послужило главной причиной для меня придумать способ, отличный от BAPI. Как всем известно, в Extensions мы не можем пихать собственные поля типа CURR b QUAN - приходится изголяться через конвертацию fltp_to_char или ее аналоги. Здесь же у нас доступна полноценная структура CI_EBANDB и даже виртуальные поля CI_EBANMEM, если кто использует у себя в расширениях их.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение заявок с помощью класса CL_PR_HANDLER_MM, альтернатива BAPI_PR_CHANGE.
СообщениеДобавлено: Ср, ноя 23 2011, 16:00 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
Подниму тему:
возникла задача менять в заявках FM-контировки (фин.поз, фонд, ПФМ).
пробовал для этой цели использовать BAPI_PR_CHANGE.
В итоге бапишка меняет контировки в позициях, которые не являются позициями услуг,а контировки в позициях услуг не меняе - пишет заявка изменена, но значения остаются первоначальные.
Ковырялся в отладке и увидел, что в случае, если позиция услуги, то
атрибут protect
класса lcl_req_accounting_state (группа функций MEREQ)
устанавливается в X. Далее этот самый атрибут проверяется в методе set_exkn класса lcl_bapi_account (группа функций 2105)
и данные не обновляются (типа защищено от изменений).
Может кто сталкивался? Вручную в тр. me52n контировки меняются без вызова данных методов данных классов (вызываются другие - без этой проверки).


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение заявок с помощью класса CL_PR_HANDLER_MM, альтернатива BAPI_PR_CHANGE.
СообщениеДобавлено: Чт, ноя 24 2011, 10:25 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, окт 21 2008, 08:02
Сообщения: 71
Откуда: Moscow
Пол: Мужской
Попробуй тип контировки 'U' использовать


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение заявок с помощью класса CL_PR_HANDLER_MM, альтернатива BAPI_PR_CHANGE.
СообщениеДобавлено: Чт, ноя 24 2011, 11:31 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
ppeter написал:
Попробуй тип контировки 'U' использовать

Т.е. предлагается дополнительно изменить тип контировки позиции на U (сейчас он V)?
Попробовал - не изменяется ни тип контировки, ни фин. позиция.
А разве в уже созданных позициях можно менять тип контировки?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение заявок с помощью класса CL_PR_HANDLER_MM, альтернатива BAPI_PR_CHANGE.
СообщениеДобавлено: Чт, ноя 24 2011, 18:55 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, окт 21 2008, 08:02
Сообщения: 71
Откуда: Moscow
Пол: Мужской
Да - похоже что нельзя.. У меня просто такая же проблема на создании заказов была. Решилась именно с контировкой U.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение заявок с помощью класса CL_PR_HANDLER_MM, альтернатива BAPI_PR_CHANGE.
СообщениеДобавлено: Пт, ноя 25 2011, 08:47 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
ppeter написал:
Да - похоже что нельзя.. У меня просто такая же проблема на создании заказов была. Решилась именно с контировкой U.

Можно, наверное, поменять удалив и заново создав позиции, но такой вариант не подходит.
ПРобовал менять финпозицию, используя предложенный CL_PR_HANDLER_MM. В итоге вызывается тот же самый метод, что и в BAPI_PR_CHANGE (Set_exkn) c проверкой, которая не дает поменять. :(


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение заявок с помощью класса CL_PR_HANDLER_MM, альтернатива BAPI_PR_CHANGE.
СообщениеДобавлено: Сб, ноя 26 2011, 14:25 
Специалист
Специалист

Зарегистрирован:
Вт, сен 15 2009, 16:41
Сообщения: 201
Пол: Мужской
Подскажите, плиз: можно ли пр помощи данного класса добавлять (копировать) строку? И если можно, то как?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Изменение заявок с помощью класса CL_PR_HANDLER_MM, альтернатива BAPI_PR_CHANGE.
СообщениеДобавлено: Ср, мар 13 2013, 15:14 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, янв 30 2007, 10:59
Сообщения: 61
Всем привет!
ppeter написал(а):
ох - давненько что-то не писал ничего тут. Наверное весна подействовала - решил отметиться постом=)

Аналогично.

Продолжу опять тему. Понадобилось как-то вставлять создание/изменение заказа в одну транзакцию с созданием других документов. Вот тут с бапишками 'BAPI_PR_...' и начались проблемы. Спасибо ppeter'у за его предложение. Но стандартное решение не давало сохранять данные контировок. Пришлось немного "поработать напильником" над классом 'CL_PR_HANDLER_MM'. Расширениями отредактировал некоторые методы и сделал ФМы для изменеия и создания заявок (как новой заявки, так и добавления позиции). Кому интересно - вот ссылка на файл с текстом: http://yadi.sk/d/KZmjW7SM4fF86.
Кстати, есть аналогичный класс 'CL_PO_HANDLER_MM' для заказов, но я его не пробовал.

_________________
Блаженны прыгающие, ибо они допрыгаются.


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

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


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

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


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

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