Пример использования BAPI_MATERIAL_BOM_GROUP_CREATE.
TYPES:
BEGIN OF ty_s_data,
werks TYPE werks_d, " Завод
matnr_p TYPE matnr, " Производимый материал
matnr TYPE matnr, " Компонент
menge TYPE menge_d, " Кол-во
meins TYPE meins, " ЕИ
valid_from TYPE datuv, " Дата начала действия
aennr TYPE aennr, " Номер изменения
END OF ty_s_data,
ty_t_data TYPE TABLE OF ty_s_data.
FORM process_data USING ut_data TYPE ty_t_data
uv_testrun TYPE char01
CHANGING ct_return TYPE bapiret2_tab.
DATA:
lv_werks TYPE werks_d,
lv_matnr_p TYPE mara-matnr,
lv_aennr TYPE aennr,
lv_valid_from TYPE d,
lv_stlan TYPE mast-stlan VALUE '1',
ls_testrun TYPE bapiflag,
lt_bomgroup TYPE TABLE OF bapi1080_bgr_c,
lt_variants TYPE TABLE OF bapi1080_bom_c,
lt_items TYPE TABLE OF bapi1080_itm_c,
lt_relations TYPE TABLE OF bapi1080_mbm_c,
lt_assigments TYPE TABLE OF bapi1080_rel_itm_bom_c,
lt_texts TYPE TABLE OF bapi1080_txt_c,
lt_return TYPE TABLE OF bapiret2,
lv_stlal_pr TYPE mast-stlal,
lv_stlal TYPE mast-stlal,
lv_n2(2) TYPE n,
lv_stlnr TYPE mast-stlnr,
lv_exstl TYPE stzu-exstl,
lv_group(20),
lv_item_no(4) TYPE n,
lv_object_id TYPE cs_object_id.
FIELD-SYMBOLS:
<lfs_data> LIKE LINE OF ut_data,
<lfs_bomgroup> LIKE LINE OF lt_bomgroup,
<lfs_variants> LIKE LINE OF lt_variants,
<lfs_items> LIKE LINE OF lt_items,
<lfs_relations> LIKE LINE OF lt_relations,
<lfs_assigments> LIKE LINE OF lt_assigments,
<lfs_texts> LIKE LINE OF lt_texts,
<lfs_return> LIKE LINE OF lt_return.
" Создание BOM
READ TABLE ut_data ASSIGNING <lfs_data> INDEX 1.
CHECK sy-subrc EQ 0.
lv_werks = <lfs_data>-werks.
lv_matnr_p = <lfs_data>-matnr_p.
lv_aennr = <lfs_data>-aennr.
lv_valid_from = <lfs_data>-valid_from.
IF lv_matnr_p IS INITIAL.
EXIT.
ENDIF.
" Определение номера альтернативы
lv_stlal = '01'.
SELECT SINGLE MAX( stlal )
FROM mast
INTO lv_stlal_pr
WHERE matnr EQ lv_matnr_p
AND werks EQ lv_werks
AND stlan EQ lv_stlan.
IF sy-subrc NE 0.
lv_stlal = '01'.
ELSE.
TRY .
lv_n2 = lv_stlal_pr.
CATCH cx_root.
lv_n2 = '00'.
ENDTRY.
ADD 1 TO lv_n2.
lv_stlal = lv_n2.
ENDIF.
" Определение группы спецификаций
SELECT SINGLE stlnr
FROM mast
INTO lv_stlnr
WHERE matnr EQ lv_matnr_p
AND werks EQ lv_werks
AND stlan EQ lv_stlan.
IF sy-subrc EQ 0.
SELECT SINGLE exstl
FROM stzu
INTO lv_exstl
WHERE stlty EQ 'M'
AND stlnr EQ lv_stlnr.
IF sy-subrc EQ 0.
lv_group = lv_exstl.
ELSE.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = lv_matnr_p
IMPORTING
output = lv_group.
ENDIF.
ELSE.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = lv_matnr_p
IMPORTING
output = lv_group.
ENDIF.
INSERT INITIAL LINE INTO TABLE lt_bomgroup ASSIGNING <lfs_bomgroup>.
<lfs_bomgroup>-bom_group_identification = lv_group.
<lfs_bomgroup>-object_type = 'BGR'.
<lfs_bomgroup>-object_id = lv_group.
<lfs_bomgroup>-technical_type = 'M'.
<lfs_bomgroup>-bom_usage = lv_stlan.
<lfs_bomgroup>-bom_group = lv_group.
<lfs_bomgroup>-created_in_plant = lv_werks.
<lfs_bomgroup>-ltxt_lang = 'RU'.
<lfs_bomgroup>-bom_text = ''.
INSERT INITIAL LINE INTO TABLE lt_variants ASSIGNING <lfs_variants>.
<lfs_variants>-bom_group_identification = lv_group.
<lfs_variants>-object_type = 'BOM'.
<lfs_variants>-object_id = lv_group.
<lfs_variants>-alternative_bom = lv_stlal.
<lfs_variants>-bom_status = '03'.
<lfs_variants>-base_qty = 1.
<lfs_variants>-base_unit = 'ST'.
<lfs_variants>-ltxt_lang = 'RU'.
<lfs_variants>-alt_text = ''.
<lfs_variants>-valid_from_date = lv_valid_from.
<lfs_variants>-change_no = lv_aennr.
<lfs_variants>-function = 'NEW'.
CLEAR:
lv_item_no.
LOOP AT ut_data ASSIGNING <lfs_data>.
ADD 10 TO lv_item_no.
CONCATENATE lv_group lv_item_no INTO lv_object_id SEPARATED BY '-'.
INSERT INITIAL LINE INTO TABLE lt_items ASSIGNING <lfs_items>.
<lfs_items>-bom_group_identification = lv_group.
<lfs_items>-object_type = 'ITM'.
<lfs_items>-object_id = lv_object_id.
<lfs_items>-item_no = lv_item_no.
<lfs_items>-item_cat = 'L'.
<lfs_items>-component = <lfs_data>-matnr.
<lfs_items>-comp_qty = <lfs_data>-menge.
<lfs_items>-comp_unit = <lfs_data>-meins.
<lfs_items>-ltxt_lang = 'R'.
<lfs_items>-valid_from_date = lv_valid_from.
<lfs_items>-change_no = lv_aennr.
INSERT INITIAL LINE INTO TABLE lt_assigments ASSIGNING <lfs_assigments>.
<lfs_assigments>-bom_group_identification = lv_group.
<lfs_assigments>-sub_object_type = 'ITM'.
<lfs_assigments>-sub_object_id = lv_object_id.
<lfs_assigments>-super_object_type = 'BOM'.
<lfs_assigments>-super_object_id = lv_group.
<lfs_assigments>-valid_from_date = lv_valid_from.
<lfs_assigments>-change_no = lv_aennr.
<lfs_assigments>-function = 'NEW'.
ENDLOOP.
INSERT INITIAL LINE INTO TABLE lt_relations ASSIGNING <lfs_relations>.
<lfs_relations>-bom_group_identification = lv_group.
<lfs_relations>-material = lv_matnr_p.
<lfs_relations>-plant = lv_werks.
<lfs_relations>-bom_usage = lv_stlan.
<lfs_relations>-alternative_bom = lv_stlal.
<lfs_relations>-lot_size_from = 0.
<lfs_relations>-lot_size_to = 0.
ls_testrun-bapiflag = uv_testrun.
CALL FUNCTION 'BAPI_MATERIAL_BOM_GROUP_CREATE'
EXPORTING
testrun = ls_testrun
* all_error = ' '
TABLES
bomgroup = lt_bomgroup
variants = lt_variants
items = lt_items
* subitems =
materialrelations = lt_relations
itemassignments = lt_assigments
* subitemassignments =
texts = lt_texts
return = lt_return.
IF uv_testrun IS INITIAL.
LOOP AT lt_return ASSIGNING <lfs_return>
WHERE type CA 'EAX'.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
" Ошибка
PERFORM bapi_rollback.
INSERT LINES OF lt_return INTO TABLE ct_return.
ELSE.
" Успешно
PERFORM bapi_commit.
INSERT LINES OF lt_return INTO TABLE ct_return.
ENDIF.
ELSE.
IF lt_return[] IS INITIAL.
" Нет ошибок
ELSE.
" Есть ошибки
INSERT LINES OF lt_return INTO TABLE ct_return.
ENDIF.
ENDIF.
ENDFORM. " PROCESS_DATA
Комментариев нет:
Отправить комментарий