Автор Тема: Программное создание резервирования материалов, BAPI_RESERVATION_CREATE1  (Прочитано 11626 раз)

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

Оффлайн Xzander

  • Newbie
  • *
  • Сообщений: 38
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Приветствую!
Не нашёл на просторах интернета похожей проблемы, вынужден обратиться за помощью..
Проблема такого рода: при сохранении заказа на поставку нужно создавать документы резервирования, а также в RESB заносить дополнительные данные, такие как номер заказа, вид подтребности и т.д.
Нашёл подходящее, как мне показалось, BADi (подробности могу предоставить позже, в случае нужды, т.к. сейчас нет доступа к системам), реализовал общий алгоритм, в соответствующем расширении реализовал добавление данных в RESB, не предусмотренных интерфейсом BAPI_RESERVATION_CREATE1.
Первая проблема: данный ФМ возвращает ошибку отсутствия материала на заводе и складе, в отладке нашёл это место - отсутствие записи в таблице MCHA (Партии) для материала, завода, склада. Консультант на эту тему ничего сказать не может, потому как резервирование через MB21 проходит, таблицу считает сомнительной, т.к. записей в ней всего около 5000..
Кто-нибудь сталкивался с этим? Может, есть альтернатива вышеуказанному ФМ или что-то с настройками (проверка какая-нибудь?
Заранее благодарю!

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Нашёл подходящее, как мне показалось, BADi (подробности могу предоставить позже, в случае нужды, т.к. сейчас нет доступа к системам), реализовал общий алгоритм, в соответствующем расширении реализовал добавление данных в RESB, не предусмотренных интерфейсом BAPI_RESERVATION_CREATE1.
Ну структура EXTENSIONIN в параметрах есть, значит данные можно добавить. Про бадик MB_RES_BAPI_CREATE1, можно можно почить тут же внутри:
*   Interface to this BAdI improved and list of parameters enhanced
*   (displace pilote note 1263894 by note 1334736)
*   1.   customer's extensions
*   1.1  assign internal table "extensionin[]" to the new input parameter
*        "it_extension_in"
*   1.2  fill the data of the first entry from table "extensionin[]"
*        into structure "extension_in"
*   2.   messages
*   2.1  assign internal table "return[]" to the new changing parameter
*        "ct_return"
*   2.2  if the structure "return" is filled insert its data into the
*        internal message table "return[]"
*   3.   it is possible to change data of the reservation header RPKF
*        in this BAdI, too

You are not allowed to view links. Register or Login
Первая проблема: данный ФМ возвращает ошибку отсутствия материала на заводе и складе, в отладке нашёл это место - отсутствие записи в таблице MCHA (Партии) для материала, завода, склада. Консультант на эту тему ничего сказать не может, потому как резервирование через MB21 проходит, таблицу считает сомнительной, т.к. записей в ней всего около 5000..
Ну тут вопрос, вы партию вносите в резервирование? А код партии откуда берете? Если вносите, а партия не создана в этот момент, то система последовательно проверяет существование материала на заводе (таблица MARC), далее идет проверка на наличие записи в  MCHA причем если честно почему они так сделали я не знаю. Что можно сделать? Есть три варианта, один сделать создание партии которую вносите в документ, чтобы в таблице появилась запись, два, не указывать код партии в резервировании при создании, тогда документ будет создан, а партию внесете на момент создания документа движения со ссылкой на резервирование, ну и еще как вариант в энхансменте попробовать сбросить данную ошибку, но это не очень хорошее решение.

Оффлайн Xzander

  • Newbie
  • *
  • Сообщений: 38
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Благодарю за скорый ответ!
Да, я через EXTENSIONIN и реализовал перенос дополнительных данных в RESB, в реализации BADi MB_RES_BAPI_CREATE1 распарсил данные и добавил в RESB. :)
You are not allowed to view links. Register or Login
Ну тут вопрос, вы партию вносите в резервирование? А код партии откуда берете? Если вносите, а партия не создана в этот момент, то система последовательно проверяет существование материала на заводе (таблица MARC), далее идет проверка на наличие записи в  MCHA причем если честно почему они так сделали я не знаю. Что можно сделать? Есть три варианта, один сделать создание партии которую вносите в документ, чтобы в таблице появилась запись, два, не указывать код партии в резервировании при создании, тогда документ будет создан, а партию внесете на момент создания документа движения со ссылкой на резервирование, ну и еще как вариант в энхансменте попробовать сбросить данную ошибку, но это не очень хорошее решение.
Партия/код партии != счётчик партии? Из данных партии указываю разве что счётчик партии EKET-ETENR, который вношу в поле bapi2093_res_item-batch.
Данные для резервирования собираю в методе POSTED реализации BADi ME_PURCHDOC_POSTED (Документ закупки проведен). Т.е. если партии создаются в момент проведения документа закупики, они, скорей всего, уже созданы... По-крайней мере, В EKET уже есть данные.
Без указания счётчика партии появляются ошибки:
M7   508   Зарезервированное количество равно нулю
Ну и какая-то техническая ошибка неизвестного происхождения...
BAPI   001   Ни одной инстанции типа объекта BUS2093 не создано. Внешняя ссылка:

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
M7   508   Зарезервированное количество равно нулю
Ну это потому что вы количество не в то поле наверное заносите. Я вот такой кодик набросал, все нормально проходит с количеством, а вот если количество поставить в поле BDMNG, то будет ошибка которую вы написали.
Код: You are not allowed to view links. Register or Login
report  zebs_test_resb.

data: ls_rkpf   type rkpf,
      lt_resb   type resb occurs 1 with header line,
      lt_segm   type bapi_profitability_segment occurs 1 with header line,
      lt_return like bapiret2 occurs 1 with header line.
data: l_reservation  type bapi2093_res_key-reserv_no.

ls_rkpf-rsdat = sy-datum.
ls_rkpf-bwart = '201'.
ls_rkpf-kostl = '0000109001'.

lt_resb-rspos = '1'.
lt_resb-matnr = '000000000100000112'.
lt_resb-werks = '0900'.
lt_resb-lgort = '0001'.
lt_resb-erfmg = '10'.
lt_resb-meins = 'ST'.
lt_resb-xwaok = 'X'.
append lt_resb.

break-point.
call function 'MB_RESERVATION_CREATE_INTERNAL'
  exporting
    i_rkpf               = ls_rkpf
*   TESTRUN              =
*   ATPCHECK             =
*   CALCHECK             =
*   RESERVATION_EXTERNAL =
  importing
    reservation          = l_reservation
  tables
    it_resb              = lt_resb
    profitabilitysegment = lt_segm
    return               = lt_return.
commit work.
break-point.

Оффлайн Xzander

  • Newbie
  • *
  • Сообщений: 38
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
Ну это потому что вы количество не в то поле наверное заносите. Я вот такой кодик набросал, все нормально проходит с количеством, а вот если количество поставить в поле BDMNG, то будет ошибка которую вы написали.
В BDMNG данные заношу через структуру расширения..
У меня и в ТЗ так:
RESB-BDMNG= EKET-MENGE объем потребности  соответствует количеству в партии поставки.
Кроме него я ещё использую поле структуры фигурируемого тут BAPI - entry_qnt.
Спасибо, попробую без BDMNG..

Оффлайн Xzander

  • Newbie
  • *
  • Сообщений: 38
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Пока не уверен, что понял связь, но когда заполнил поля erfmg и bdmng через расширяющую структуру (условный термин, неохота дотошничать :) ), резервирование создалось..
Был второй вопросик.. можно ли как-то в соответствующую запись партии поставки дописать номер документа резервирования в EKET-RSNUM? Какой-нибудь модуль обновления есть, может?

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Пока не уверен, что понял связь, но когда заполнил поля erfmg и bdmng через расширяющую структуру (условный термин, неохота дотошничать :) ), резервирование создалось..
Был второй вопросик.. можно ли как-то в соответствующую запись партии поставки дописать номер документа резервирования в EKET-RSNUM? Какой-нибудь модуль обновления есть, может?
Если правильно понял что вам надо, то это наверное: BAPI_BATCH_CHANGE - Изменение записи партии.

Оффлайн Xzander

  • Newbie
  • *
  • Сообщений: 38
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
Если правильно понял что вам надо, то это наверное: BAPI_BATCH_CHANGE - Изменение записи партии.
Благодарю! Надеюсь, то, что нужно.
Сегодня получил консультацию от нашего ММщика, одна из моих ошибок была в том, что счётчик партии поставки (EKET-ETENR) я передавал и в bapi2093_res_item-batch, а это какие-то другие партии, в таблице MCHA которые.
Завтра проверю работу BAPI_BATCH_CHANGE, правда, "batch", как бы это немножко не то оказалось, не относящееся к партиям поставки EKET. :)

Оффлайн Uukrul

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

Оффлайн Xzander

  • Newbie
  • *
  • Сообщений: 38
  • Репутация: +2/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
You are not allowed to view links. Register or Login
Так, партии поставки в заказе, это просто счетчик позиций в графике поставок, это не объект системы к которому можно присвоить какие-то поля/признаки, т.е. присвоить к счетчику позиций номер резервирования нельзя, ну если только не сделать свою таблицу с ключами: Заказ / Позиция заказа / Счетчик графика поставок и туда уже писать полученные номера резервирований. А партии, ну похоже у вас создаются на каждую поставку в момент прихода, хотя может и нет, но это вы у ММ-щика узнавайте.
Да, я понял, что это счётчик позиций в графике поставок. И вот как-то по ТЗ в EKET-RSNUM надо записывать номер резервирований.
Благодарю за помощь!

Sapforum.Biz