Here is how to create a material with reference using BAPI_MATERIAL_GET_ALL and BAPI_MATERIAL_SAVEDATA.
Also contains the logic of how to find out what views to update from the reference material by using the Maintenance status field (PSTAT) from MARC
report ZSA_TEST002.
selection-screen: begin of block b1 with frame.
PARAMETERS: p_werks0 LIKE marc-werks DEFAULT '7530',
p_vkorg0 LIKE mvke-vkorg DEFAULT '7530',
p_disnso LIKE mvke-vtweg DEFAULT '01',
p_mbrsh LIKE mara-mbrsh DEFAULT 'M'.
selection-screen: end of block b1.
selection-screen: begin of block b2 with frame.
PARAMETERS: P_MATNR LIKE MARA-MATNR.
PARAMETERS: p_matcfg LIKE mara-matnr DEFAULT 'Z750-CFGPROD-SALES'.
selection-screen: end of block b2.
start-of-selection.
data: gt_marc type table of marc.
data: gt_mara type table of mara.
DATA : str_clientdata LIKE bapi_mara_ga,
str_plantdata LIKE bapi_marc_ga,
str_forecastparameters LIKE bapi_mpop_ga,
str_planningdata LIKE bapi_mpgd_ga,
str_storagelocationdata LIKE bapi_mard_ga,
str_valuationdata LIKE bapi_mbew_ga,
str_salesdata LIKE bapi_mvke_ga,
str_warehousenumberdata LIKE bapi_mlgn_ga,
str_storagetypedata LIKE bapi_mlgt_ga,
str_prtdata LIKE bapi_mfhm_ga,
str_lifovaluationdata LIKE bapi_myms_ga,
tab_get_all_r TYPE TABLE OF bapireturn.
DATA: BEGIN OF tab_head.
INCLUDE STRUCTURE bapimathead.
DATA: END OF tab_head.
DATA: BEGIN OF tab_plantdata.
INCLUDE STRUCTURE bapi_marc.
DATA: END OF tab_plantdata.
DATA: BEGIN OF tab_plantdatax.
INCLUDE STRUCTURE bapi_marcx.
DATA: END OF tab_plantdatax.
DATA: BEGIN OF tab_client.
INCLUDE STRUCTURE bapi_mara.
DATA: END OF tab_client.
DATA: BEGIN OF tab_clientx.
INCLUDE STRUCTURE bapi_marax.
DATA: END OF tab_clientx.
DATA: BEGIN OF tab_salesdata.
INCLUDE STRUCTURE bapi_mvke.
DATA: END OF tab_salesdata.
DATA: BEGIN OF tab_salesdatax.
INCLUDE STRUCTURE bapi_mvkex.
DATA: END OF tab_salesdatax.
DATA : BEGIN OF tab_return.
INCLUDE STRUCTURE bapiret2 .
DATA : END OF tab_return.
DATA : tab_return_msgs type table of BAPI_MATRETURN2 .
data: tab_forecast like BAPI_MPOP,
tab_forecastx like BAPI_MPOPX,
tab_plangdata like BAPI_MPGD,
tab_plangdatax like BAPI_MPGDX,
tab_stlocdata like BAPI_MARD,
tab_stlocdatax like BAPI_MARDX,
tab_valdata like bapi_mbew,
tab_valdatax like bapi_mbewx,
tab_warehouse like BAPI_MLGN,
tab_warehousex like BAPI_MLGNX,
tab_stortyped like BAPI_MLGT,
tab_stortypedx like BAPI_MLGTX.
data gt_makt type table of bapi_makt.
data: gv_len type i,
view,
counter type sy-index,
gv_i type i,
gv_msg(200).
field-symbols:
<fs_marc> type marc,
<f1> type any,
<f2> type any,
<fms> type BAPI_MATRETURN2,
<fstruct> type any,
<fstructx> type any.
CALL FUNCTION 'BAPI_MATERIAL_GET_ALL'
EXPORTING
material = p_matcfg
COMP_CODE = 'L153'
VAL_AREA = '7530'
* VAL_TYPE =
PLANT = p_werks0
* STGE_LOC =
SALESORG = p_vkorg0
DISTR_CHAN = p_disnso
* WHSENUMBER =
* STGE_TYPE =
* LIFO_VALUATION_LEVEL =
IMPORTING
CLIENTDATA = str_clientdata
PLANTDATA = str_plantdata
FORECASTPARAMETERS = str_forecastparameters
PLANNINGDATA = str_planningdata
STORAGELOCATIONDATA = str_storagelocationdata
VALUATIONDATA = str_valuationdata
WAREHOUSENUMBERDATA = str_warehousenumberdata
SALESDATA = str_salesdata
STORAGETYPEDATA = str_storagetypedata
PRTDATA = str_prtdata
LIFOVALUATIONDATA = str_lifovaluationdata
TABLES
* MATERIALDESCRIPTION =
* UNITSOFMEASURE =
* INTERNATIONALARTNOS =
* MATERIALLONGTEXT =
* TAXCLASSIFICATIONS =
* EXTENSIONOUT =
RETURN = tab_get_all_r.
* Material views update ---
select * from marc into table gt_marc
where matnr = p_matcfg
and werks = p_werks0.
if sy-subrc = 0.
read table gt_marc assigning <fs_marc> index 1.
if sy-subrc = 0.
counter = 0. clear view.
gv_i = strlen( <fs_marc>-pstat ).
do gv_i times.
view = <fs_marc>-pstat+counter(sy-index).
if view is initial. exit. endif.
counter = counter + 1.
case view.
when 'K'.
tab_head-basic_view = view.
when 'V'.
tab_head-sales_view = view.
when 'E'.
tab_head-purchase_view = view.
when 'D' .
tab_head-mrp_view = view.
when 'P'.
tab_head-forecast_view = view.
when 'A'.
tab_head-WORK_SCHED_VIEW = view.
when 'F'.
tab_head-PRT_VIEW = view.
when 'L'.
tab_head-storage_view = view.
when 'S'.
tab_head-warehouse_view = view.
when 'Q'.
tab_head-quality_view = view.
when 'B'.
tab_head-account_view = view.
when 'G'.
tab_head-cost_view = view.
when others.
endcase.
enddo.
endif.
endif.
tab_head-material = p_matnr.
tab_head-ind_sector = str_clientdata-ind_sector.
tab_head-matl_type = str_clientdata-matl_type.
move-corresponding str_clientdata to tab_client.
move-corresponding str_plantdata to tab_plantdata.
move-corresponding str_forecastparameters to tab_forecast.
move-corresponding str_planningdata to tab_plangdata.
move-corresponding str_storagelocationdata to tab_stlocdata.
move-corresponding str_valuationdata to tab_valdata.
move-corresponding str_warehousenumberdata to tab_warehouse.
move-corresponding str_salesdata to tab_salesdata.
move-corresponding str_storagetypedata to tab_stortyped.
* Fill the update struktur
do .
case sy-index.
when 1.
assign tab_client to <f1>.
assign tab_clientx to <f2>.
perform fill_update_struct using <f1> <f2>.
when 2.
assign tab_plantdata to <f1>.
assign tab_plantdatax to <f2>.
perform fill_update_struct using <f1> <f2>.
when 3.
assign tab_forecast to <f1>.
assign tab_forecastx to <f2>.
perform fill_update_struct using <f1> <f2>.
when 4.
assign tab_plangdata to <f1>.
assign tab_plangdatax to <f2>.
perform fill_update_struct using <f1> <f2>.
when 5.
assign tab_stlocdata to <f1>.
assign tab_stlocdatax to <f2>.
perform fill_update_struct using <f1> <f2>.
when 6.
assign tab_valdata to <f1>.
assign tab_valdatax to <f2>.
perform fill_update_struct using <f1> <f2>.
when 7.
assign tab_warehouse to <f1>.
assign tab_warehousex to <f2>.
perform fill_update_struct using <f1> <f2>.
when 8.
assign tab_salesdata to <f1>.
assign tab_salesdatax to <f2>.
perform fill_update_struct using <f1> <f2>.
when 9.
assign tab_stortyped to <f1>.
assign tab_stortypedx to <f2>.
perform fill_update_struct using <f1> <f2>.
when others.
exit.
endcase.
enddo.
tab_salesdata-sales_org = p_vkorg0.
tab_salesdata-distr_chan = p_disnso.
clear: tab_salesdatax-sales_org,
tab_salesdatax-distr_chan.
tab_salesdatax-sales_org = tab_salesdata-sales_org.
tab_salesdatax-distr_chan = tab_salesdata-distr_chan.
clear tab_plantdatax-plant.
tab_plantdatax-plant = tab_plantdata-plant.
CLEAR tab_valdatax-val_area.
tab_valdatax-val_area = tab_valdata-val_area.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = tab_head
CLIENTDATA = tab_client
CLIENTDATAX = tab_clientx
PLANTDATA = tab_plantdata
PLANTDATAX = tab_plantdatax
FORECASTPARAMETERS = tab_forecast
FORECASTPARAMETERSX = tab_forecastx
PLANNINGDATA = tab_plangdata
PLANNINGDATAX = tab_plangdatax
STORAGELOCATIONDATA = tab_stlocdata
STORAGELOCATIONDATAX = tab_stlocdatax
VALUATIONDATA = tab_valdata
VALUATIONDATAX = tab_valdatax
WAREHOUSENUMBERDATA = tab_warehouse
WAREHOUSENUMBERDATAX = tab_warehousex
SALESDATA = tab_salesdata
SALESDATAX = tab_salesdatax
STORAGETYPEDATA = tab_stortyped
STORAGETYPEDATAX = tab_stortypedx
* FLAG_ONLINE = ' '
* FLAG_CAD_CALL = ' '
* NO_DEQUEUE = ' '
IMPORTING
RETURN = tab_return
TABLES
MATERIALDESCRIPTION = gt_makt
* UNITSOFMEASURE =
* UNITSOFMEASUREX =
* INTERNATIONALARTNOS =
* MATERIALLONGTEXT =
* TAXCLASSIFICATIONS =
RETURNMESSAGES = tab_return_msgs.
* PRTDATA =
* PRTDATAX =
* EXTENSIONIN =
* EXTENSIONINX =
if tab_return-type = 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
else.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
endif.
loop at tab_return_msgs assigning <fms>.
gv_msg = <fms>.
write:/ gv_msg.
endloop.
*&---------------------------------------------------------------------*
*& Form fill_update_struct
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_<F1> text
* -->P_<F2> text
*----------------------------------------------------------------------*
FORM fill_update_struct USING P_F1 type any
P_F2 type any.
do.
assign component sy-index of structure P_F1 to <fstruct>.
if sy-subrc <> 0. exit. endif.
if <fstruct> is not initial.
assign component sy-index of structure P_F2 to <fstructx>.
if sy-subrc = 0.
<fstructx> = 'X'.
endif.
endif.
enddo.
ENDFORM. " fill_update_struct
Disclaimer: Please customize according to your specific requirements.
Thanks
Sameer
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
6 | |
5 | |
3 | |
3 | |
2 | |
2 | |
2 | |
2 | |
1 | |
1 |