Sapforum.Biz

Логистика => Управление материальными потоками (MM) => Тема начата: abaper от Октябрь 24, 2011, 01:42:08 pm

Название: Подстановка фиктивных FM-контировок в заявке MM
Отправлено: abaper от Октябрь 24, 2011, 01:42:08 pm
   Добрый день.

 Для заполнения полей FM-контировок в заявке (фин.поз, фонд, ПФМ, функ.сфера и бюдж.период)
использую метод PROCESS_ACCOUNT     BADI ME_PROCESS_REQ_CUST.
Запускаю тр. ME52N. При изменении полей на вкладке контировка  попадаю в свой код в методе.
Проблема в том, что поля контировки все равно не изменяются.

Код: You are not allowed to view links. Register or Login
* Пример кода в методе PROCESS_ACCOUNT.
*  fmderive-commit_item   - финансовая позиция.
*  fmderive-fund          - фонд.
*  fmderive-fund_center   - ПФМ.
*  fmderive-function_area - функциональная сфера.
*  fmderive-BUDGET_PERIOD - бюджетный период.

 "получаем данные контировок (параметр - IM_ACCOUNT)
    LS_EXKN  = IM_ACCOUNT->get_exkn( ).
    LS_EXKNX = IM_ACCOUNT->get_exknx( ).

 "заменяем новыми значениями
    LS_EXKN-fipos     = fmderive-COMMIT_ITEM.
    LS_EXKN-FISTL     = fmderive-FUND_CENTER. "ПФМ
    LS_EXKN-GEBER     = fmderive-FUND.
    LS_EXKN-FKBER     = fmderive-FUNCTION_AREA.
    LS_EXKN-BUDGET_PD = fmderive-BUDGET_PERIOD.

    LS_EXKNX-fipos     = 'X'.
    LS_EXKNX-FISTL     = 'X'.
    LS_EXKNX-GEBER     = 'X'.
    LS_EXKNX-FKBER     = 'X'.
    LS_EXKNX-BUDGET_PD = 'X'.

* сохраняем данные контировок
    IM_ACCOUNT->set_exkn( LS_EXKN ).
    IM_ACCOUNT->set_exknx( LS_EXKNX ).

* получаем данные контировок (параметр - IM_ACCOUNT_REF
    LS_EXKN = IM_ACCOUNT_REF->GET_DATA( ).

    LS_EXKN-fipos     = fmderive-COMMIT_ITEM.
    LS_EXKN-FISTL     = fmderive-FUND_CENTER.
    LS_EXKN-GEBER     = fmderive-FUND.
    LS_EXKN-FKBER     = fmderive-FUNCTION_AREA.
    LS_EXKN-BUDGET_PD = fmderive-BUDGET_PERIOD.

* сохраняем данные контировок
    IM_ACCOUNT_REF->set_data( LS_EXKN ).

Может кто сталкивался с подобной проблемой?
Название: Re: Подстановка фиктивных FM-контировок в заявке MM
Отправлено: Uukrul от Октябрь 25, 2011, 03:17:29 am
You are not allowed to view links. Register or Login
Может кто сталкивался с подобной проблемой?
Да вообще у меня оно как-то странно работает это расширение... надо поковырять чуть подробнее...
Название: Re: Подстановка фиктивных FM-контировок в заявке MM
Отправлено: Uukrul от Октябрь 25, 2011, 01:13:10 pm
Ну в общем с этим BADI что-то у меня завести ничего нормально не вышло. но есть userexit ACCOBL01, который срабатывает на блок контировки в заявке. Одна проблема в нем к возврату ожидаются только пользовательские поля контировки, а если их нет, то данный экзит не отрабатывает. Ну если надо сделать, а не помучиться, то есть два варианта:

1.1 Делаем пользовательское поле в контировке, путем расширения структуры ci_cobl, поле любое хоть CHAR(1).
1.2 Далее активируем экзит ACCOBL01 через транзакцию SMOD.
1.3 Используя технологию FIELD-SYMBOLS в функции экзита получаем доступ к переменной (SAPLKACB)COBL меняем там требуемые нам поля, я проверил для ПФМ, все красиво сработало. Описание как это делается можно посмотреть: http://sapforum.biz/index.php/topic,430.msg2386.html#msg2386

2.1 Используем технологию Enhancement Spot  (http://sapforum.biz/index.php/topic,546.0.html) идем в модуль SE38: LKACBF03.
2.2 Далее находим там сразу же подпрограмму FORM customer_exit_pbo CHANGING p_cobl TYPE cobl. и внедряем в самом начале подпрограммы неявный Enhancement Spot в этом расширении меняем нужные нам переменные в структуре p_cobl, и получаем требуемый нам эффект.

И в том и другом случае это все вызывается для каждой позиции заявки, так что как делать ваше дело, но отлаживаемся аккуратно. Кстати, я бы наверное использовал сценарий 1.
Название: Re: Подстановка фиктивных FM-контировок в заявке MM
Отправлено: abaper от Октябрь 25, 2011, 02:53:32 pm
спасибо, буду пробовать
Название: Re: Подстановка фиктивных FM-контировок в заявке MM
Отправлено: abaper от Октябрь 26, 2011, 12:34:17 pm
 Да, все сработало.
Использовал первый из предложенных вариантов. Думаю, и второй будет работать.
Спасибо Uukrul за помощь и обстоятельный ответ.