Вот простой пример как это сделать (расширить материал на склад) с помошью BAPI_MATERIAL_SAVEDATA (хотя конечно и пакетники и LSMW здесь должны работать без проблем):
Code:
REPORT zpm_BAPI_MATERIAL_SAVEDATA.
tables: mara,
marc.
data: headdata type BAPIMATHEAD,
stlocdata type bapi_mard,
stlocdatax type bapi_mardx,
plantdata type BAPI_MARC,
plantdatax type BAPI_MARCX.
data: mtart type mtart,
mbrsh type mbrsh.
data: return type BAPIRET2,
RETURNMESSAGES type BAPI_MATRETURN2 occurs 0 with header line,
error_occured.
parameters: matnr type matnr, " Материал
plant type WERKS_D, " Примем, что уровень оценки = Завод
lgort type lgort_d.
end-of-selection.
* Убеждаемся, что материал на заводе создан
select single mara~mtart mara~mbrsh into (mtart, mbrsh)
from marc inner join mara on mara~matnr = marc~matnr
where marc~matnr eq matnr
and marc~werks eq plant.
check sy-subrc = 0.
move: matnr to headdata-material,
mbrsh to headdata-ind_sector,
mtart to headdata-matl_type,
'X' to headdata-STORAGE_VIEW.
move: plant to stlocdata-plant,
lgort to stlocdata-stge_loc.
move: plant to stlocdatax-plant,
lgort to stlocdatax-stge_loc.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = headdata
STORAGELOCATIONDATA = stlocdata
STORAGELOCATIONDATAX = stlocdatax
IMPORTING
return = return
TABLES
RETURNMESSAGES = RETURNMESSAGES.
loop at RETURNMESSAGES.
check RETURNMESSAGES-type = 'E' or
RETURNMESSAGES-type = 'A'.
error_occured = 'X'.
exit.
endloop.
if error_occured is initial.
call function 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.
else.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
endif.