Текущее время: Сб, июн 28 2025, 01:33

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


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

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


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

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