BAPI для пакетника сетевых графиков

Автор themax, Березень 30, 2023, 02:51:05 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

themax

Добрый день Всем.

Есть надобность в пакетнике сетевых графиков. Нашёл такой ФМ BAPI_BUS2002_CREATE. Вроде как позволяет создавать заголовки сетевых графиков. Мне в общем то достаточно. Создал Проект и СПП элемент к нему. Далее программно пытаюсь создать сетевой график.
data:
  it_bapi_bus2002_new type standard table of bapi_bus2002_new,
  wa_bapi_bus2002_new type bapi_bus2002_new,

  it_bapiret2         type standard table of bapiret2,
  wa_bapiret2         type bapiret2.

clear : wa_bapi_bus2002_new.
wa_bapi_bus2002_new-project_definition = 'OP23070'.       
wa_bapi_bus2002_new-wbs_element        = 'OP230701'.       
wa_bapi_bus2002_new-short_text         = 'Сетевой график OP230701'.     
wa_bapi_bus2002_new-network_type       = 'PS07'.
wa_bapi_bus2002_new-plant              = '3000'.      "
wa_bapi_bus2002_new-mrp_controller     = '100'.

call function 'BAPI_PS_INITIALIZATION'.



call function 'BAPI_BUS2002_CREATE'
  exporting
    i_network = wa_bapi_bus2002_new
  tables
    et_return = it_bapiret2.

loop at it_bapiret2 into wa_bapiret2 where type ca 'AE'.


  message id wa_bapiret2-id type wa_bapiret2-type number wa_bapiret2-number
  into wa_bapiret2-message
  with wa_bapiret2-message_v1 wa_bapiret2-message_v2
  wa_bapiret2-message_v3 wa_bapiret2-message_v4.
  write:/ 'Ошибка',wa_bapiret2-message.

endloop.

if sy-subrc eq 0.

  call function 'PS_FLAG_INIT_GLOBAL_FLAGS'.

  call function 'PS_FLAG_SET_GLOBAL_FLAGS'
    exporting
      i_precommit_ok = 'Y'.

endif.


check sy-subrc ne 0.

call function 'BAPI_PS_PRECOMMIT'
  tables
    et_return = it_bapiret2.

loop at it_bapiret2 into wa_bapiret2 where type ca 'AE'.


  message id wa_bapiret2-id type wa_bapiret2-type number wa_bapiret2-number
  into wa_bapiret2-message
  with wa_bapiret2-message_v1 wa_bapiret2-message_v2
  wa_bapiret2-message_v3 wa_bapiret2-message_v4.
  write:/ 'Ошибка:',wa_bapiret2-message.

endloop.

if sy-subrc eq 0.

  call function 'BAPI_TRANSACTION_ROLLBACK'
    importing
      return = it_bapiret2.

  call function 'PS_FLAG_INIT_GLOBAL_FLAGS'.

  call function 'PS_FLAG_SET_GLOBAL_FLAGS'
    exporting
      i_precommit_ok = 'Y'.

else.

  call function 'BAPI_TRANSACTION_COMMIT'
    exporting
      wait   = 'X'
    importing
      return = wa_bapiret2.
  write:/ 'Уведомление:',wa_bapiret2-message.
*
endif.


В итоге создаёт сетевой график. Система присваивает сетевому графику внутренний номер OP3070. И тут возникает проблема. При попытке создания ещё одного сетевого графика bapi ругается и возвращает
Ошибка
Объект Сетевой график создать было невозможно
Ошибка
Сетевой график/заказ с номеромомер OP3070 уже существует

Т.е. система пытается опять создать сетевой график с этим же номером. Когда это делаешь через транзакцию CJ20N система говорит о том, что сетевой график с таким номером уже существует и предлагает в ручную ввести номер следующего сетевого графика. Введя следующий по порядку номер, график создаётся. Пытался добавить в BAPI в ручную следующий номер сетевого графика, там есть поле.
wa_bapi_bus2002_new-network = 'OP3071'.
Безрезультатно. Это как то связано с нумерацией сетевых графиков, но как это обойти?

Uukrul

#1
Цитата: themax від Березень 30, 2023, 02:51:05 ПП
Безрезультатно. Это как то связано с нумерацией сетевых графиков, но как это обойти?
Привет, а там смотри набор ФМ-ов есть может надо какие-то функции инициализации дергать перед вызовом создания?

Еще например есть такой ФМ CN2002_NETW_INIT - Сбросить таблицу карты сети.

А вообще можешь код ошибки прислать.. текст конечно круто, но по тексту что-то искать нет смысла :-)

themax

#2
Цитата: Uukrul від Квітень 03, 2023, 11:11:21 ДП

А вообще можешь код ошибки прислать.. текст конечно круто, но по тексту что-то искать нет смысла :-)
Здрасте Олег. Спасибо за наводку. Буду смотреть дальше. Текст ошибки вот


1 E CNIF_PI 007 Объект Сетевой график OP307701 создать было невозможно 000000 Сетевой график OP307701
2 E CNIF_PI 044 Сетевой график/заказ с номеромомер OP3070 уже существует 000000 OP3070


Uukrul

Цитата: themax від Квітень 12, 2023, 03:21:35 ПП

1 E CNIF_PI 007 Объект Сетевой график OP307701 создать было невозможно 000000 Сетевой график OP307701
2 E CNIF_PI 044 Сетевой график/заказ с номеромомер OP3070 уже существует 000000 OP3070

Поставль точку останова в модуле function cn2002_net_create_prepare . и посмотри на что оно ругается и что не так заполняется.