Автор Тема: Пакетный ввод IE01  (Прочитано 8354 раз)

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

Оффлайн themax

  • Newbie
  • *
  • Сообщений: 346
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Пакетный ввод IE01
« : Сентябрь 18, 2017, 09:25:44 am »
Доброго времени суток уважаемые консультанты PM.

Хочу сделать пакетник для создание множества ЕО. Нашёл вроде бы нужное БАПИ Bapi_eqmt_create, но вот вопрос: можно ли заполнить с помощью этого BAPI z-овские поля, которые я добавил с помощью user-exit в транзакцию IE01. Может кто делал?

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 808
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Пакетный ввод IE01
« Ответ #1 : Сентябрь 18, 2017, 11:30:31 am »
You are not allowed to view links. Register or Login
Доброго времени суток уважаемые консультанты PM.

Хочу сделать пакетник для создание множества ЕО. Нашёл вроде бы нужное БАПИ Bapi_eqmt_create, но вот вопрос: можно ли заполнить с помощью этого BAPI z-овские поля, которые я добавил с помощью user-exit в транзакцию IE01. Может кто делал?
Этой функцией пользоваться нельзя, так как у тебя вряд ли система младше 4.6. А с 4.6с надо использовать модуль BAPI_EQUI_CREATE, примеры есть на форуме, по поводу своих Z-полей, то исходя из того что в параметрах есть структура
Код: You are not allowed to view links. Register or Login
EXTENSIONIN LIKE BAPIPAREX Bezugsstruktur für BAPI-Parameter ExtensionIn / ExtensionOutто можно передать свои поля и корректно их обновить. Для этого нужно корректно реализовать точку расширения ES_EAM_ITOB_BAPI_CUST_FIELDS, в которой нужно переложить поля из структуры EXTENSIONIN в структуру таблицы EQUI. Примеры как работать с параметром EXTENSIONIN, тоже есть на форуме, это сейчас основной метод передачи пользовательских параметров в BAPI функции.

Оффлайн themax

  • Newbie
  • *
  • Сообщений: 346
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Пакетный ввод IE01
« Ответ #2 : Февраль 14, 2018, 12:25:35 pm »
You are not allowed to view links. Register or Login
Этой функцией пользоваться нельзя, так как у тебя вряд ли система младше 4.6. А с 4.6с надо использовать модуль BAPI_EQUI_CREATE, примеры есть на форуме, по поводу своих Z-полей, то исходя из того что в параметрах есть структура
Код: You are not allowed to view links. Register or Login
EXTENSIONIN LIKE BAPIPAREX Bezugsstruktur für BAPI-Parameter ExtensionIn / ExtensionOutто можно передать свои поля и корректно их обновить. Для этого нужно корректно реализовать точку расширения ES_EAM_ITOB_BAPI_CUST_FIELDS, в которой нужно переложить поля из структуры EXTENSIONIN в структуру таблицы EQUI. Примеры как работать с параметром EXTENSIONIN, тоже есть на форуме, это сейчас основной метод передачи пользовательских параметров в BAPI функции.
Добрый день Олег.

Поздновато пишу, но только начал реализовывать. В общем пытаюсь сделать пакетник для изменения с помощью Bapi BAPI_EQUI_CHANGE, все поля изменять удаётся кроме z-овских, сделал что то вроде:
Код: You are not allowed to view links. Register or Login
data:
    extensionin type table of bapiparex with header line,
    e_item      type itobapi_create_eq.
  e_item-equnr = wa-equnr.
  e_item-zzito_loc = wa-zzito_loc.
  extensionin-structure = 'ITOBAPI_CREATE_EQ'.
  extensionin-valuepart1 = e_item.
  append extensionin.

call function 'BAPI_EQUI_CHANGE'
    exporting
      equipment        = bapi_itob_parms-equipment
      data_general     = bapi_itob
      data_generalx    = bapi_itobx
      data_specific    = zbapi_itob_eq_only
      data_specificx   = zbapi_itob_eq_onlyx
    importing
      data_general_exp = bapi_itob
*     DATA_SPECIFIC_EXP       =
*     DATA_FLEET_EXP   =
      return           = ps_return
  tables
    extensionin             =  extensionin[].
*   EXTENSIONOUT            =
  if ps_return-type = space.
    commit work and wait.
Не пойму, что я делаю не так. Може ли это не работать, потому что z-овские поля были добавлены мной с помощью user-exit ITOB0001, а не с помощью ES_EAM_ITOB_BAPI_CUST_FIELDS ?

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 808
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Пакетный ввод IE01
« Ответ #3 : Февраль 14, 2018, 01:56:45 pm »
Свои поля передаете в структуре:
EXTENSIONIN   LIKE   BAPIPAREX   Bezugsstruktur für BAPI-Parameter ExtensionIn / ExtensionOut

Дальше реализуете BADI
badi_eam_itob_bapi_cust_fields и метод extensionin_equi_change

Где заполняете данные из структуры/таблицы EXTENSIONIN в данные cs_object и cs_fleet.



Оффлайн themax

  • Newbie
  • *
  • Сообщений: 346
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Пакетный ввод IE01
« Ответ #4 : Февраль 15, 2018, 06:50:03 am »
You are not allowed to view links. Register or Login
Свои поля передаете в структуре:
EXTENSIONIN   LIKE   BAPIPAREX   Bezugsstruktur für BAPI-Parameter ExtensionIn / ExtensionOut

Дальше реализуете BADI
badi_eam_itob_bapi_cust_fields и метод extensionin_equi_change

Где заполняете данные из структуры/таблицы EXTENSIONIN в данные cs_object и cs_fleet.
Не совсем понятно как в эту структуру BAPIPAREX передавать значения полей в программе, т.к. я использую BAPi BAPI_EQUI_CHANGE, то и структуру пытаюсь использовать itobapi_modify_eq, но при попытке передать туда значения выходит ошибка, что "EXTENSIONIN-VALUEPART1" и "E_ITEM" в программе уникода не могут быть преобразованы друг в друга program. 
Код: You are not allowed to view links. Register or Login
data:
    extensionin type table of bapiparex with header line,
    e_item      type  itobapi_modify_eq.
  e_item-zzito_loc = wa-zzito_loc.
  extensionin-structure = 'ITOBAPI_MODIFY_EQ'.
  extensionin-valuepart1 = e_item.
  append extensionin.
Как её заполнять не понятно.

Оффлайн themax

  • Newbie
  • *
  • Сообщений: 346
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Пакетный ввод IE01
« Ответ #5 : Февраль 15, 2018, 10:57:20 am »
В общем сделал вот так
Код: You are not allowed to view links. Register or Login
data t_extensionin type bapiparex occurs 0 with header line.
  data ls_extensionin type bapiparex.
  data e_item type itobapi_modify_eq.
  clear:  t_extensionin.
  " доп поля
  clear: e_item.
  e_item-zzito_loc = wa-zzito_loc.
  ls_extensionin-structure = 'ITOBAPI_MODIFY_EQ'.
  call method cl_abap_container_utilities=>fill_container_c
    exporting
      im_value     = e_item
    importing
      ex_container = ls_extensionin+30.
*  append ls_extensionin to t_extensionin.
  t_extensionin = ls_extensionin.
call function 'BAPI_EQUI_CHANGE'
    exporting
      equipment        = bapi_itob_parms-equipment
      data_general     = bapi_itob
      data_generalx    = bapi_itobx
      data_specific    = zbapi_itob_eq_only
      data_specificx   = zbapi_itob_eq_onlyx
    importing
      data_general_exp = bapi_itob
*     DATA_SPECIFIC_EXP       =
*     DATA_FLEET_EXP   =
      return           = ps_return
    tables
      extensionin      = t_extensionin[].
*   EXTENSIONOUT            =
  if ps_return-type = space.
    commit work and wait.
else.
    rollback work.
  endif.
В отладчике видно, что в структуре t_extensionin есть заполненное значение. Если я правильно понял, то дальше надо создать расширение для BADi badi_eam_itob_bapi_cust_fields, а вот как именно передать значение t_extensionin в  cs_object чот мне не понятно?

Оффлайн themax

  • Newbie
  • *
  • Сообщений: 346
  • Репутация: +5/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Пакетный ввод IE01
« Ответ #6 : Февраль 15, 2018, 01:16:43 pm »
В общем если кому надо будет создать пакетник через BAPI на изменение основных данных ЕО, в том числе и z-овских полей вот рабочая реализация через BAPI_EQUI_CHANGE
Код: You are not allowed to view links. Register or Login
data t_extensionin type bapiparex occurs 0 with header line.
  data ls_extensionin type bapiparex.
  data: e_item type itobapi_modify_eq
      , ls_item type ci_equi
      .
  clear:  t_extensionin.
  " доп поля
  clear: e_item.
  ls_item-zzito_loc = wa-zzito_loc.
  ls_extensionin-structure = 'CI_EQUI'.
  call method cl_abap_container_utilities=>fill_container_c
    exporting
      im_value     = ls_item
    importing
      ex_container = ls_extensionin+30.
  t_extensionin = ls_extensionin.
  append t_extensionin.

  bapi_itob_parms-equipment = wa-equipment2.
  if wa-objecttype is not initial.
    bapi_itob-objecttype = wa-objecttype.
    bapi_itobx-objecttype = 'X'.
  else.
  endif.
  if wa-inventory is not initial.
    bapi_itob-inventory = wa-inventory.
    bapi_itobx-inventory = 'X'.
  else.
  endif.
  if wa-manfacture is not initial.
    bapi_itob-manfacture = wa-manfacture.
    bapi_itobx-manfacture = 'X'.
  else.
  endif.

call function 'BAPI_EQUI_CHANGE'
    exporting
      equipment        = bapi_itob_parms-equipment
      data_general     = bapi_itob
      data_generalx    = bapi_itobx
      data_specific    = zbapi_itob_eq_only
      data_specificx   = zbapi_itob_eq_onlyx
    importing
      data_general_exp = bapi_itob
*     DATA_SPECIFIC_EXP       =
*     DATA_FLEET_EXP   =
      return           = ps_return
    tables
      extensionin      = t_extensionin[].
*   EXTENSIONOUT            =
  if ps_return-type = space.
    commit work and wait.
    if sy-subrc = 0.
*      perform status.
      if   wa-status2 = icon_checked or wa-status2 is initial.
        wa-status2 = icon_checked.
      endif.
    else.
*     Ошибка выполнения COMMIT WORK!!!
      ps_return-type = 'E'.
      wa-status2 = icon_failure.
    endif.
  else.
    wa-status2 = icon_failure.
    rollback work.
  endif.
Далее идём в BADi и создаём там реализацию, т.е. Enhancement Implementation типа ZEI_EAMS_ITOB_BAPI_CUST_FIELDS с классом Z_PM_EO и в методе, как и рекомендовал Олег, EXTENSIONIN_EQUI_CHANGE пишем код
Код: You are not allowed to view links. Register or Login
data: ls_extensionin type bapiparex
        , ls_item type ci_equi
        .
      loop at it_extensionin into ls_extensionin.
      call method cl_abap_container_utilities=>read_container_c
        exporting
          im_container = ls_extensionin+30
        importing
          ex_value     = ls_item.
    endloop.

      cs_object-zzito_loc = ls_item-zzito_loc.
Вроде бы работает и z-овские поля изменяются.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 808
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Пакетный ввод IE01
« Ответ #7 : Февраль 15, 2018, 01:50:26 pm »
Как работать с таблицей extensionin[] можно посмотреть темы:

You are not allowed to view links. Register or Login (собственно пример реализации)
You are not allowed to view links. Register or Login (работы с контейнером)


Sapforum.Biz

Re: Пакетный ввод IE01
« Ответ #7 : Февраль 15, 2018, 01:50:26 pm »