Вы находитесь на странице: 1из 9

Создание расширения для транзакции MIGO

Вопрос был в следующем, есть два завода на одно из них материал оцениваемый, на
другом не оцениваемый, если делать проводку перемещения с завода где материал без
стоимости, на завод где у него стоимость есть, то цена материала будет браться из ОЗМ
ракурс БухУчет1 для оцениваемого завода. По условиям же стоимость должна была
браться из плановой инфо-записи закупки. Вот для этого и используем BADI, в котором
будем подменять цену движения. Из ограничений, цена по стандарту вводится в поле
«Внешняя сумма во ВВ», которое было открыто для вида движения перемещения запаса,
т.е. пользователь вводит документ а сумма должна быть заполнена правильным значением
из инфо-записи, а ограничением является то, что если оценка ведется в нескольких
валютах, то данная реализация будет работать не совсем корректно, так как поля для
ввода второй валюты в документах ММ нет и вторая валюта будет формироваться из
валюты один по курсу на дату проводки документа.

Используем транзакцию SE19 – Badi Builder, в нем у нас есть два вариант новый BADI
Badi или классический, берем новый, так как даже если вы выберите классический, на
следующем шаге придется пройти по пути миграции его в новый BADI. Причина в том,
что все BADI с версии 6.0, кажется, сделаны уже через так называемые энхансменты
(подробнее написано тут: http://sapforum.biz/index.php/topic,546.0.html), а поэтому, чем
делать лишние шаги, лучше сразу идем по правильной новой дороге. Нас интересует
BADI для MIGO, ищем его само собой по маске *MIGO*, будет найдена одна запись
MB_MIGO_BADI, которая нас и интересует.

Рисунок 1

Выбираем режим создания, после чего появится диалог, где надо будет сказать, какое
будет название у нашего расширения и описание, пример ниже.

http://www.sapforum.biz
Рисунок 2

Я рекомендую оставлять в названии, если это возможно имя внедрения, например как в
этом случае, потом проще будет искать, какие уже сделаны расширения к интересующей
BADI.

Затем нажимаем ОК и переходим к следующему экрану где спросят имя реализации, имя
класса реализации и к какому определению BADI все это будем создавать. В нашем
случае у нас одно определение BADI, поэтому имя реализации оставляем такое же как и
на предыдущем шаге, класс реализации, ну я назвал как на рисунке ниже, а определение
BADI получено из выпадающего списка, оно там одно.

Рисунок 3

После чего жмем снова ОК и переходим к следующему шагу, где нам будет предложено
то, как создавать наше определение, вариантов три, унаследовать из примере класса,
скопировать пример класса и просто создать чистый класс. Чтобы не тянуть весь пример я
выбрал режим «Пустой класс». А примеры, ну это когда изучаешь, то можно копировать
пример класса реализации.

http://www.sapforum.biz
Рисунок 4

После копирования/создания попадаем в саму реализацию нашего расширения, должно


быть похожее что-то на рисунке ниже. Собственно говоря, практически реализация класса
с методами.

http://www.sapforum.biz
Рисунок 5

Открываем дерево слева и делаем клик мышью на ветке «Реализующий класс», после чего
откроются все методы класса которые мы можем начать реализовывать и которые
определены нам в классе, пример ниже.

http://www.sapforum.biz
Рисунок 6

Так как задача подставить правильную сумму в поле позиции документа материала, то нас
интересуют метод LINE_MODIFY, выделено на рисунке, делаем по этому методу двойной
клик мышью и система сообщит, что типа реализация не найдена и тут же по дружески
предложит ее создать.

Рисунок 7

Соглашаемся на создание внедрения и попадаем в редактор где можем уже писать наш
код, объявление будет такое:

method if_ex_mb_migo_badi~line_modify.
endmethod.

Но перед тем как что-то писать, не плохо бы узнать что нам передают на вход и что хотя узнать на выходе.
Для этого идем на закладку Technical Details и там находим наш класс и делаем двойной клик мышью на
имени класса.

http://www.sapforum.biz
Рисунок 8

Попадаем в привычную реализацию классов, находим наш метод, ставим на него курсор и
нажимаем кнопку «Параметры».

Рисунок 9

Как видим два параметра номер строки и изменяемый параметр сама строка позиции
документа.

http://www.sapforum.biz
Рисунок 10

Саму структуру можно посмотреть сделав клик мышью на поле ссылочного типа… полей
там много, в общем типа все что есть в MSEG и еще даже больше. Нас интересует поле
EXBWR – Сумма проводки внешний ввод. Вот его то мы и будем заполнять из инфо-
записи.

Рисунок 11

Ну типа в коде будет что-то такое как на рисунке ниже, однако по правильному конечно
надо бы проверить заводы, вид движения и там уже определять нужно или нет выполнять
замещение поля суммы. Как минимум поставьте там точку останова и посмотрите что
передается в структурах.

http://www.sapforum.biz
Рисунок 12

После ввода кода надо еще бы все это активировать. Количество объектов само собой
будет большим, поэтому выбираем выделить все после чего жмем кнопку активации. Если
ошибок нет, а я рекомендую, прежде чем что-то писать в коде, сделать общую активацию,
то наше расширение будет рабочим и система начнет туда каждый раз заходить как
только что-то будет изменяться в позиции документа при вводе через транзакцию MIGO.

http://www.sapforum.biz
Рисунок 13

Собственно говоря все, и это о хорошем, а еще немного о плохом. Как видим, полей
передается много, но вот изменять значения в них можно не во всех, если поле изменять
нельзя, то будет выдаваться сообщение, что-то типа изменение поля запрещено, и ваши
правки будут сбрасываться после выхода из метода. Какое есть решение этой проблемы,
ну можно воспользоваться решением от такого человека как printfalex
(http://sapforum.biz/index.php?action=profile;u=358), на форуме он показал как можно
сбросить флаги запрета модификации полей для расширения:
http://sapforum.biz/index.php/topic,375.msg7311.html#msg7311.

http://www.sapforum.biz

Вам также может понравиться