Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => Тема начата: Sed0Y от Январь 12, 2012, 01:23:12 pm
-
(на данный момент ;) ) - Добрый день.
Создаю Определение Проекта через BAPI_BUS2001_CREATE, потом мне нужно создать
Структурный план проекта (СПП), думаю это делается с помощью "BAPI_BUS2054_CREATE_MULTI",
так получается основной СПП, а как создавать ниже стоящие СПП?
ну и потом буду создавать Сетевой График (СГ)...
Или лучше (правильней) будет всю эту кашу создавать через BAPI_PROJECT_MAINTAIN, но заню, что через эту БАПИ скорость выполнения маленькая...?
-
Ну это... там же таблица передается: IT_WBS_ELEMENT STRUCTURE BAPI_BUS2054_NEW, а в ней есть два вот таких вот ссылочных СПП-элемента, думаю что один из них это ссылка на вышестоящий СПП и т.д.
WBS_LEFT PS_POSID CHAR 24 0 Элемент структурного плана проекта (СПП-элемент)
WBS_UP PS_POSID CHAR 24 0 Элемент структурного плана проекта (СПП-элемент)
Так что не вопрос, описываем структуру и подчиненность объектов и создаем сеть.
-
Спасибо. Так и есть.
-
Спасибо. Так и есть.
Ну с тебя пример того как это можно есть :-)
-
Примерно так:
FUNCTION Z_TEST.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" EXPORTING
*" REFERENCE(RET_MESSAGE) TYPE CHAR255
*"----------------------------------------------------------------------
DATA:
" структурный план проекта
GT_BAPI_BUS2054 TYPE TABLE OF BAPI_BUS2054_NEW,
GA_BAPI_BUS2054 TYPE BAPI_BUS2054_NEW,
PROJ_DEF TYPE BAPI_BUS2001_NEW-PROJECT_DEFINITION.
DATA:
ET_RET TYPE TABLE OF BAPIRET2,
EA_RET TYPE BAPIRET2.
DATA:
count_i TYPE i.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
PROJ_DEF = '0400000220'.
GA_BAPI_BUS2054-WBS_ELEMENT = '0400000220'.
GA_BAPI_BUS2054-DESCRIPTION = 'Локальная задача'.
GA_BAPI_BUS2054-plant = '1000'.
GA_BAPI_BUS2054-business_area = 'BS01'.
GA_BAPI_BUS2054-WBS_PLANNING_ELEMENT = 'X'.
APPEND GA_BAPI_BUS2054 TO GT_BAPI_BUS2054.
GA_BAPI_BUS2054-WBS_ELEMENT = '0400000220-10'.
GA_BAPI_BUS2054-DESCRIPTION = '0400000220-10'.
GA_BAPI_BUS2054-plant = '1000'.
GA_BAPI_BUS2054-business_area = 'BS01'.
GA_BAPI_BUS2054-WBS_UP = '0400000220'.
GA_BAPI_BUS2054-WBS_PLANNING_ELEMENT = 'X'.
GA_BAPI_BUS2054-WBS_BILLING_ELEMENT = 'X'.
APPEND GA_BAPI_BUS2054 TO GT_BAPI_BUS2054.
GA_BAPI_BUS2054-WBS_ELEMENT = '0400000220-20'.
GA_BAPI_BUS2054-DESCRIPTION = '0400000220-20'.
GA_BAPI_BUS2054-plant = '1000'.
GA_BAPI_BUS2054-business_area = 'BS01'.
GA_BAPI_BUS2054-WBS_UP = '0400000220'.
GA_BAPI_BUS2054-WBS_PLANNING_ELEMENT = 'X'.
GA_BAPI_BUS2054-WBS_BILLING_ELEMENT = 'X'.
APPEND GA_BAPI_BUS2054 TO GT_BAPI_BUS2054.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CALL FUNCTION 'BAPI_BUS2054_CREATE_MULTI'
EXPORTING
I_PROJECT_DEFINITION = PROJ_DEF
TABLES
IT_WBS_ELEMENT = GT_BAPI_BUS2054
ET_RETURN = ET_RET.
READ TABLE ET_RET WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
DESCRIBE TABLE ET_RET LINES count_i.
READ TABLE ET_RET INTO EA_RET INDEX count_i.
RET_MESSAGE = EA_RET-MESSAGE.
EXIT.
ENDIF.
REFRESH ET_RET. CLEAR EA_RET.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = ET_RET.
READ TABLE ET_RET WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc NE 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ELSE.
DESCRIBE TABLE ET_RET LINES count_i.
READ TABLE ET_RET INTO EA_RET INDEX count_i.
RET_MESSAGE = EA_RET-MESSAGE.
EXIT.
ENDIF.
ENDFUNCTION.
И в результате получается такое (см. рис cj02_01.jpg):
1 0400000220
2 0400000220-20
2 0400000220-10
а что бы было:
1 0400000220
2 0400000220-10
2 0400000220-20
то как я понял, нужно в порядке от большего к меньшему добавлять в таблицу "GT_BAPI_BUS2054":
GA_BAPI_BUS2054-WBS_ELEMENT = '0400000220'.
.....
GA_BAPI_BUS2054-WBS_ELEMENT = '0400000220-20'.
....
GA_BAPI_BUS2054-WBS_ELEMENT = '0400000220-10'.
......
-
Подскажите правильную логику?
К примеру есть у нас программа в которой идет такой вызов
1. BAPI_PS_INITIALIZATION ( "Initilize )
2. BAPI_BUS2001_SET_STATUS ( to set Project status)
3. CALL FUNCTION 'ZZZZZZ'
в функции есть такое:
3.1. BAPI_PS_INITIALIZATION ( "Initilize )
3.2. BAPI_BUS2054_SET_STATUS
3.3. BAPI_BUS2002_SET_STATUS
3.4. BAPI_PS_PRECOMMIT ( "Precommit )
3.5. BAPI_TRANSACTION_COMMIT ( "Commit ) OR BAPI_TRANSACTION_ROLLBACK (Rollback)
4. BAPI_PS_PRECOMMIT ( "Precommit )
5. BAPI_TRANSACTION_COMMIT ( "Commit )
так вот вопрос такой.
если мы с программы вызвали INITIALIZATION то нужно ли еще и в ФМе ее вызывать И если сделать Commit/Rollback в ФМе то отнесется ли этот комит/ролбек и к тому что в программе?
-
Подскажите правильную логику?
Ну в такой логике, ROOLBACK строки 3.5 откатит все что было до него и поэтому строке 5 уже коммитить будет как бы нечего.
-
здравствуйте коллеги.
у меня почему-то не получается создать иерархию спп с помощью BAPI_BUS2054_CREATE_MULTI. Вылетает с ошибкой:
E CNIF_PI 070 Заключительная проверка определения проекта и элементов СПП: Ошибка
Что де не так?
Вот код:
* str
DATA lv_prj_def TYPE bapi_bus2001_new-project_definition.
* str
DATA ls_wbs_elm TYPE bapi_bus2054_new.
* str
DATA ls_ret TYPE bapiret2.
*----------------------------------------------------------------------*
* tab
DATA lt_wbs_elm TYPE STANDARD TABLE OF bapi_bus2054_new.
* tab
DATA lt_ret TYPE STANDARD TABLE OF bapiret2.
* tab
DATA lt_ret_pr TYPE STANDARD TABLE OF bapiret2.
************************************************************************
* определение проекта
*----------------------------------------------------------------------*
lv_prj_def = 'U-D-1406-11-001'.
*----------------------------------------------------------------------*
* спп элементы
*----------------------------------------------------------------------*
*
CLEAR ls_wbs_elm.
ls_wbs_elm-wbs_element = 'U-D-1406-11-001'.
ls_wbs_elm-description = 'Оборудование профнастил (СМЦ Петровское)'.
ls_wbs_elm-proj_type = '04'.
ls_wbs_elm-priority = '1'.
ls_wbs_elm-company_code = '1400'.
ls_wbs_elm-business_area = '1405'.
ls_wbs_elm-plant = '1406'.
ls_wbs_elm-user_field_char20_1 = ''.
ls_wbs_elm-equipment = ''.
ls_wbs_elm-funct_loc = ''.
ls_wbs_elm-responsible_no = '14000001'.
ls_wbs_elm-respsbl_cctr = ''.
ls_wbs_elm-invest_profile = ''.
ls_wbs_elm-scale = '2'.
ls_wbs_elm-inv_reason = '01'.
ls_wbs_elm-wbs_basic_start_date = '20111201'.
ls_wbs_elm-wbs_basic_finish_date = '20140701'.
ls_wbs_elm-wbs_forecast_start_date = '20111201'.
ls_wbs_elm-wbs_forecast_finish_date = '20140701'.
APPEND ls_wbs_elm TO lt_wbs_elm.
*
CLEAR ls_wbs_elm.
ls_wbs_elm-wbs_element = 'U-D-1406-11-001-01'.
ls_wbs_elm-wbs_up = 'U-D-1406-11-001'.
ls_wbs_elm-description = 'Стан ПС-8'.
ls_wbs_elm-proj_type = '04'.
ls_wbs_elm-priority = '1'.
ls_wbs_elm-company_code = '1400'.
ls_wbs_elm-business_area = '1405'.
ls_wbs_elm-plant = '1406'.
ls_wbs_elm-user_field_char20_1 = ''.
ls_wbs_elm-equipment = ''.
ls_wbs_elm-funct_loc = ''.
ls_wbs_elm-responsible_no = '14000001'.
ls_wbs_elm-respsbl_cctr = ''.
ls_wbs_elm-invest_profile = '100040'.
ls_wbs_elm-scale = '2'.
ls_wbs_elm-inv_reason = '01'.
ls_wbs_elm-wbs_basic_start_date = '20111201'.
ls_wbs_elm-wbs_basic_finish_date = '20140701'.
ls_wbs_elm-wbs_forecast_start_date = '20111201'.
ls_wbs_elm-wbs_forecast_finish_date = '20140701'.
APPEND ls_wbs_elm TO lt_wbs_elm.
*
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
* создаем спп-элементы
CALL FUNCTION 'BAPI_BUS2054_CREATE_MULTI'
EXPORTING
i_project_definition = lv_prj_def
TABLES
it_wbs_element = lt_wbs_elm
et_return = lt_ret.
*
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
et_return = lt_ret_pr.
READ TABLE lt_ret_pr INTO ls_ret WITH KEY type = 'E'.
IF sy-subrc EQ 0.
EXIT.
ENDIF.
*
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
-
по идеи должно быть:
1.
WBS_PLANNING_ELEMENT = 'X'.
1.1.
WBS_PLANNING_ELEMENT = 'X'.
WBS_BILLING_ELEMENT = 'X'.
1.2.
WBS_PLANNING_ELEMENT = 'X'.
WBS_BILLING_ELEMENT = 'X'.
ну и указывать кто у него родитель:
WBS_UP
-
ну и указывать кто у него родитель:
WBS_UP
Есть одна тонкость,в BAPI содержится ошибка и все элементы создаются на первом уровне. По этому поводу есть нота от: Validity: valid since 24.06.2013 ( Note 1718799 - BAPI_BUS2054_CREATE_MULTI: Creates WBS at level 1), которая корректирует проблему. А иначе оно там флажки не правильно расставляет при построении иерархии.
-
Спасибо, но странно, что-то я не замечал, чтобы структура(иерархия) была неправильная а может в системе 7 уже нет этой ошибки...
-
Спасибо, но странно, что-то я не замечал, чтобы структура(иерархия) была неправильная а может в системе 7 уже нет этой ошибки...
Если честно я системы с номером 7 не знаю... ECC вроде все еще 6.0 но разные Ehp*, но а то что там внутри ядро уже NW 7.30, так это к этой ошибке отношения не имело, там абаповский код не правильный был:
loop at it_wbs_element into ls_wbs_element.
* move WBS element to the correct place in the hierarchy
* as there is no update structure for new objects
* note_1615195
* mark flags based on values passed
data: l_flag_up type bapiupdate value con_yes,
l_flag_left type bapiupdate value con_yes.
if ls_wbs_element-wbs_left is initial.
clear l_flag_left.
endif.
if ls_wbs_element-wbs_up is initial.
clear l_flag_up.
endif.
call function 'CJ2054_BUILD_HIERARCHY'
exporting
i_posid_source = ls_wbs_element-wbs_element
i_posid_left = ls_wbs_element-wbs_left
i_posid_up = ls_wbs_element-wbs_up
i_update_left = l_flag_left "* note_1615195
i_update_up = l_flag_up "* note_1615195
exceptions
hierarchy_error = 1.
if sy-subrc <> 0.
message e074(cnif_pi) with ls_wbs_element-wbs_element into null.
* Hierarchieaufbau für PSP-Element & nicht möglich
perform put_sy_message(saplco2o).
lv_error = con_yes.
endif.
endloop.
т.е. как видим флажки l_flag_left и l_flag_up присвоены дефолтные значения = Х, но после первого же элемента, который например имеет уровень 1, флажки больше никогда не становятся равными = Х, и соответственно, присвоения не происходит. Конечно же если у вас уровень 1 не создается, а вы присваиваете СПП уже к созданному ранее СПП вышестоящего уровня, то на эту ошибку наткнуться не должны были. В моем случае я делал сам проект и все СПП к нему, поэтому все СПП были уровня 1 и присвоения уровень/подуровень не происходило. Нота это дело исправляет.
-
Спасибо, но странно, что-то я не замечал, чтобы структура(иерархия) была неправильная а может в системе 7 уже нет этой ошибки...
Как совсем уже ни странно, но сап почему-то так и не сподобился исправить данную проблему. И даже сейчас в послдених версиях S/4HANA для OnPrem она есть?! Для исправления есть новая нота: 1934899 — Ошибка при выполнении BAPI_BUS2054_CREATE_MULTI, которую и надо поставить чтобы походу все работало.