Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => Тема начата: Greed от Август 29, 2010, 06:00:25 pm

Название: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Greed от Август 29, 2010, 06:00:25 pm
Все привет. Есть задачка, может кто подскажет, как ее решить?
В табице RBKP создал дополнительную структуру с парочкой полей. При создании фактуры необходимо их заполнять. Кто-нибудь может подсказать как? Я думал все будет просто: есть определение INVOICE_UPDATE, в интерфейсе 3 метода. Создал внедрение на основании сего. При создании фактуры вызывается один из методов (CHANGE_BEFORE_UPDATE) и в нем я хотел заполнять нужные поля. Но все таблицы, что там - закрыты для изменения... Подскажите, может есть другая бадишка, юзвер-экзит или какой-нить способ? Спасибо.
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Uukrul от Август 29, 2010, 10:04:47 pm
Ну если совсем по простому, то функция BAPI_INCOMINGINVOICE_CREATE, затем после ее вызова:
Код: You are not allowed to view links. Register or Login
UPDATE RBKP SET <ваше поле> = значение WHERE BELNR = l_INVOICEDOCNUMBER and GJAHR = l_FISCALYEAR.
COMMIT WORK.
Должно вроде как пройти все нормально... так как у проводки счета к сожалению нет аналогичных заказу ММ, структур для своих полей.
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Greed от Август 29, 2010, 10:21:33 pm
ну это пример для z-овской программы, как я понимаю - вызвать бапишку на создание фактуры, а после создания обновить таблицу, так? А мне нужно при создании фактуры через стандартную транзакцию (miro) что бы в поле дополнительной структуры записалось значение (к примеру текущая дата)...
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Uukrul от Август 29, 2010, 10:28:29 pm
You are not allowed to view links. Register or Login
А мне нужно при создании фактуры через стандартную транзакцию (miro) что бы в поле дополнительной структуры записалось значение (к примеру текущая дата)...
Ага ясно, тогда такой вопрос, эти поля значения откуда получают? Автоматически или пользователь должен что-то заполнить еще?
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Greed от Август 29, 2010, 10:33:26 pm
автоматически, пользователь на них никак воздействовать не будет. Т.е. по примеру текущей даты, к примеру, как я сказал - подставлять текущую дату или что-либо по какому-либо условию (если создает пользователь вася - то ставить 1, если кто-либо другй - то 0).
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Uukrul от Август 29, 2010, 10:51:27 pm
Ну тогда не вопрос, идем в код ФМ MRM_INVOICE_POST, который вызывается в конечном итоге для записи данных. Там со строки 1167, ну для версии 6.0 минимум стоит такой вот комментарий:
Код: You are not allowed to view links. Register or Login
***********************************************************************
* The invoice document is now ready for posting. Information may      *
* be displayed:                                                       *
* - RBKPV document header                                             *
* - YDRSEG temporary document line items (table)                      *
* - XEKBE PO history update (table)                                   *
* - XEKBZ PO history update (table)                                   *
* - XACCHD FI interface header (structure)                            *
* - XACCIT FI interface line items (table)                            *
* - XACCCR FI interface line items currency info (table)              *
* - XACCFI FI interface onetime vendor info (table)                   *
* - XACCBSET FI interface tax items (table)                           *
***********************************************************************
т.е. общий смысл типа все для проводки счета уже готово и я так думаю в  RBKPV уже есть номер документа каким оно будет проводится, это надо в отладчике посмотреть, но я думаю что все должно быть заполнено, так как дальше идет обновление вспомогательных данных, типа истории заказа ММ и т.д. Хотя да точно есть так как далее они сами же используют такие вещи как i_belnr = rbkpv-belnr , т.е. номер документа счета. Так вот а далее в строке 1315 у меня стоит такая вот команда:
Код: You are not allowed to view links. Register or Login
ENHANCEMENT-POINT mrm_invoice_post_10 SPOTS es_saplmrmp.Т.е. точка входа оно же энхансмент куда можно вписать свой код, в котором и вызвать обновление таблицы RBKP, как писал выше. Думаю такой вариант пройдет на ура. Это так называемый Explicit Enhancement Spot  (http://sapforum.biz/index.php/topic,546.msg3114.html#msg3114), в общем по ссылке написано как с ними работать...

PS: Если получится, то отпишись, задокументируем данное дело. Если не получится или будут какие проблемы, то пиши тут будем решить по ходу.
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Greed от Август 29, 2010, 11:00:10 pm
отпишусь обязательно. Сегодня как раз читал про Explicit Enhancement Spot, как чувствовал. Внедрение когда создавал, еще обратил внимание, что у меня не было некоторых пунктов, которые на форуме описывались (с картинками). Т.е. было так - нашел определение, по нему создал внедрение, запросил пакет, я его указал, потом активировал (класс создался само собой) и в методах уже делал изменения.
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Uukrul от Август 29, 2010, 11:09:18 pm
В крайнем случае в конце ФМ MRM_INVOICE_POST, есть Implicit Enhancement, ну там то точно можно будет сделать обновление, да кстати единственное, что еще, надо проверять у себя флаг переменной i_simulation = 'X'., похоже когда оно= Х, это типа режим моделирования и соответственно наверное писать ничего самому тоже не надо. Ну это я так бегло из кода вроде как рассмотрел.
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Greed от Август 30, 2010, 12:02:43 am
блин, рухнули надежды, версия компонентов: SAP ERP Central Component 5.0
фм MRM_INVOICE_POST есть, и код есть
Код: You are not allowed to view links. Register or Login
***********************************************************************
* The invoice document is now ready for posting. Information may      *
* be displayed:                                                       *
* - RBKPV document header                                             *
* - YDRSEG temporary document line items (table)                      *
* - XEKBE PO history update (table)                                   *
* - XEKBZ PO history update (table)                                   *
* - XACCHD FI interface header (structure)                            *
* - XACCIT FI interface line items (table)                            *
* - XACCCR FI interface line items currency info (table)              *
* - XACCFI FI interface onetime vendor info (table)                   *
* - XACCBSET FI interface tax items (table)                           *
***********************************************************************

*----------------------------------------------------------------------*
*      Beginn Verbuchungsbausteine - Fehlermeldung ab hier als Abbruch *
*----------------------------------------------------------------------*

*-------- RW Verbuchung -----------------------------------------------*
    CALL FUNCTION 'CKMV_AC_DOCUMENT_POST'
      EXPORTING
        i_awref       = xacchd-awref
        i_aworg       = xacchd-aworg
        i_awsys       = t000-logsys
        i_awtyp       = c_awtyp_rmrp
      EXCEPTIONS
        error_message = 1.
только с другой строки. И почему-то на точке прерывания не остановился.
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Uukrul от Август 30, 2010, 12:12:50 am
А в этой версии вообще енхансменты есть? Или это только с 6.0 появилось?
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Greed от Август 30, 2010, 12:38:03 am
в это нема
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Greed от Август 30, 2010, 12:47:53 am
пришла в голову одна дурная идея, но раз пришла, то уже озвучу: в методе CHANGE_BEFORE_UPDATE, который я упоминал в самом начале, открыть джоп и запланировать задание на событие, типа отработала программа такая-то. Данное задание будет запускать прогу зэтовскую, которая будет записывать необходимые значения в поля дополнительной структуры. (только данные значения необходимо будет где-то хранить до срабатывания задания, а то если нужно будет записывать к примеру текущее время, когда пользователь делал изменения, то оно будет не очень точным).
Но как по мне - это глупый вариант, буду надеяться, что еще у кого-нибудь появятся идеи.
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Uukrul от Август 30, 2010, 10:16:37 am
Ну это вариант конечно, но при массовом вводе и быстром последующем анализе, могут быть проблемы, так как фоновые задания имеют такую особенность как задержка старта процесса. У меня по опыту было до часа задержки старта.

Теперь еще варианты:
1. Берем ключ модификации на модуль и изображаем аля выставку энхансмента. При этом делаем корректировку с комментариями типа при миграции на 6.0 код перенести в энхансмент с указанием имени расширения.

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

PS: Я бы, не являясь сторонником модификации стандарта, наверное выбрал бы пункт 1.
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Greed от Август 30, 2010, 10:39:23 am
доброе утро. Спасибо за совет, я как раз вариант 1 и озвучил постановщику задачи, при этом сказав: или ключ модификации или давайте мне версию не ниже 6.0  ::)
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: mangetik от Август 30, 2010, 11:45:21 am
Может чего то не поняла но кто мешает в вашей BADI вставить update ФМ ? причем судя по всему лучше будет это сделать в CHANGE_IN_UPDATE.
А наверное поняла мешает то что фактура еще не создана  :)
Название: Re: заполнение полей доп структуры RBKP при создании фактуры
Отправлено: Greed от Август 30, 2010, 11:15:53 pm
сделал вот так:
Цитировать
1. Берем ключ модификации на модуль и изображаем аля выставку энхансмента. При этом делаем корректировку с комментариями типа при миграции на 6.0 код перенести в энхансмент с указанием имени расширения.
Только нужно проверять, если изменений не было в дополнительных полях, то брать значения, которые в них сейчас находятся, а то я было записал в них значения, потом поменял фактуру так, что бы сработало условие, что данные поля менять не нужно и соответственно затер старые значения на ничего...