Автор Тема: заполнение полей доп структуры RBKP при создании фактуры  (Прочитано 13356 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Greed

  • Гость
Все привет. Есть задачка, может кто подскажет, как ее решить?
В табице RBKP создал дополнительную структуру с парочкой полей. При создании фактуры необходимо их заполнять. Кто-нибудь может подсказать как? Я думал все будет просто: есть определение INVOICE_UPDATE, в интерфейсе 3 метода. Создал внедрение на основании сего. При создании фактуры вызывается один из методов (CHANGE_BEFORE_UPDATE) и в нем я хотел заполнять нужные поля. Но все таблицы, что там - закрыты для изменения... Подскажите, может есть другая бадишка, юзвер-экзит или какой-нить способ? Спасибо.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Ну если совсем по простому, то функция 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.
Должно вроде как пройти все нормально... так как у проводки счета к сожалению нет аналогичных заказу ММ, структур для своих полей.

Greed

  • Гость
ну это пример для z-овской программы, как я понимаю - вызвать бапишку на создание фактуры, а после создания обновить таблицу, так? А мне нужно при создании фактуры через стандартную транзакцию (miro) что бы в поле дополнительной структуры записалось значение (к примеру текущая дата)...

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
А мне нужно при создании фактуры через стандартную транзакцию (miro) что бы в поле дополнительной структуры записалось значение (к примеру текущая дата)...
Ага ясно, тогда такой вопрос, эти поля значения откуда получают? Автоматически или пользователь должен что-то заполнить еще?

Greed

  • Гость
автоматически, пользователь на них никак воздействовать не будет. Т.е. по примеру текущей даты, к примеру, как я сказал - подставлять текущую дату или что-либо по какому-либо условию (если создает пользователь вася - то ставить 1, если кто-либо другй - то 0).

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Ну тогда не вопрос, идем в код ФМ 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  (You are not allowed to view links. Register or Login), в общем по ссылке написано как с ними работать...

PS: Если получится, то отпишись, задокументируем данное дело. Если не получится или будут какие проблемы, то пиши тут будем решить по ходу.

Greed

  • Гость
отпишусь обязательно. Сегодня как раз читал про Explicit Enhancement Spot, как чувствовал. Внедрение когда создавал, еще обратил внимание, что у меня не было некоторых пунктов, которые на форуме описывались (с картинками). Т.е. было так - нашел определение, по нему создал внедрение, запросил пакет, я его указал, потом активировал (класс создался само собой) и в методах уже делал изменения.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
В крайнем случае в конце ФМ MRM_INVOICE_POST, есть Implicit Enhancement, ну там то точно можно будет сделать обновление, да кстати единственное, что еще, надо проверять у себя флаг переменной i_simulation = 'X'., похоже когда оно= Х, это типа режим моделирования и соответственно наверное писать ничего самому тоже не надо. Ну это я так бегло из кода вроде как рассмотрел.

Greed

  • Гость
блин, рухнули надежды, версия компонентов: 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.
только с другой строки. И почему-то на точке прерывания не остановился.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
А в этой версии вообще енхансменты есть? Или это только с 6.0 появилось?

Greed

  • Гость
в это нема

Greed

  • Гость
пришла в голову одна дурная идея, но раз пришла, то уже озвучу: в методе CHANGE_BEFORE_UPDATE, который я упоминал в самом начале, открыть джоп и запланировать задание на событие, типа отработала программа такая-то. Данное задание будет запускать прогу зэтовскую, которая будет записывать необходимые значения в поля дополнительной структуры. (только данные значения необходимо будет где-то хранить до срабатывания задания, а то если нужно будет записывать к примеру текущее время, когда пользователь делал изменения, то оно будет не очень точным).
Но как по мне - это глупый вариант, буду надеяться, что еще у кого-нибудь появятся идеи.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Ну это вариант конечно, но при массовом вводе и быстром последующем анализе, могут быть проблемы, так как фоновые задания имеют такую особенность как задержка старта процесса. У меня по опыту было до часа задержки старта.

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

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

PS: Я бы, не являясь сторонником модификации стандарта, наверное выбрал бы пункт 1.

Greed

  • Гость
доброе утро. Спасибо за совет, я как раз вариант 1 и озвучил постановщику задачи, при этом сказав: или ключ модификации или давайте мне версию не ниже 6.0  ::)

Оффлайн mangetik

  • Newbie
  • *
  • Сообщений: 11
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Может чего то не поняла но кто мешает в вашей BADI вставить update ФМ ? причем судя по всему лучше будет это сделать в CHANGE_IN_UPDATE.
А наверное поняла мешает то что фактура еще не создана  :)
« Последнее редактирование: Август 30, 2010, 11:49:09 am от mangetik »

Greed

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