Коллеги! В свое время я отказался от BAPI в пользу MATERIAL_MAINTAIN_DARK, потому что BAPI по-моему как раз и не могла расширить материал. Вот пример добавления вида оценки (работает уже пару лет):
Code:
FORM add_bwtar TABLES return STRUCTURE bapiret2
USING value(p_matnr)
value(p_bwtar)
value(p_bklas).
REFRESH: tmara_ueb, tmakt_ueb, tmarm_ueb, tmean_ueb,
tmarc_ueb, tmard_ueb, tmpop_ueb, tmpgd_ueb,
tsteu_ueb, tstmm_ueb, tmbew_ueb, tmvke_ueb,
tmlgn_ueb, tmlgt_ueb, tmfhm_ueb, tmltx_ueb,
tmfieldres, tmerrdat, h_tmerrdat.
g_material_ctx-bklas = p_bklas.
g_material_ctx-bwtar = p_bwtar.
CLEAR tmara_ueb.
tmara_ueb-tranc = 1.
tmara_ueb-mandt = sy-mandt.
tmara_ueb-matnr = p_matnr.
tmara_ueb-tcode = 'MM01'.
APPEND tmara_ueb.
CLEAR tmbew_ueb.
tmbew_ueb-tranc = tmara_ueb-tranc.
tmbew_ueb-mandt = sy-mandt.
tmbew_ueb-matnr = p_matnr.
tmbew_ueb-bwkey = '1000'.
tmbew_ueb-bwtar = p_bwtar.
tmbew_ueb-bklas = p_bklas.
tmbew_ueb-verpr = 1.
tmbew_ueb-peinh = 1.
APPEND tmbew_ueb.
PERFORM call_material_maintain_dark
TABLES return
CHANGING p_matnr.
ENDFORM.
FORM call_material_maintain_dark TABLES p_return STRUCTURE bapiret2
CHANGING p_matnr.
* Создание материала и партий к нему
* через стандартный ФМ
SET UPDATE TASK LOCAL.
CALL FUNCTION 'MATERIAL_MAINTAIN_DARK'
EXPORTING
flag_muss_pruefen = 'X'
sperrmodus = 'E'
max_errors = 0
p_kz_no_warn = 'X'
kz_prf = 'E'
kz_verw = 'X'
kz_aend = space
kz_dispo = space
call_mode = 'RMD'
user = sy-uname
flg_mass = space
IMPORTING
matnr_last = p_matnr
TABLES
amara_ueb = tmara_ueb
amakt_ueb = tmakt_ueb
amarc_ueb = tmarc_ueb
amard_ueb = tmard_ueb
amfhm_ueb = tmfhm_ueb
amarm_ueb = tmarm_ueb
amea1_ueb = tmean_ueb
ambew_ueb = tmbew_ueb
asteu_ueb = tsteu_ueb
astmm_ueb = tstmm_ueb
amlgn_ueb = tmlgn_ueb
amlgt_ueb = tmlgt_ueb
ampgd_ueb = tmpgd_ueb
ampop_ueb = tmpop_ueb
amvke_ueb = tmvke_ueb
altx1_ueb = tmltx_ueb
amfieldres = tmfieldres
amerrdat = tmerrdat
EXCEPTIONS
kstatus_empty = 1
tkstatus_empty = 2
t130m_error = 3
internal_error = 4
too_many_errors = 5
update_error = 6
error_message = 8
OTHERS = 7.
IF sy-subrc = 0.
COMMIT WORK.
else.
* PBEREZIN - контроль ошибок внутри ФМ
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2
sy-msgv3 sy-msgv4
INTO g_msg.
PERFORM msg_to_bapiret TABLES p_return.
CALL METHOD g_log->add_message.
ENDIF.
IF g_material_ctx-matnr IS INITIAL.
g_material_ctx-matnr = p_matnr.
ENDIF.
CHECK NOT g_log IS INITIAL.
LOOP AT tmerrdat.
IF tmerrdat-msgty NA 'SIWEAX'.
tmerrdat-msgty = 'S'.
ENDIF.
MESSAGE ID tmerrdat-msgid
TYPE tmerrdat-msgty
NUMBER tmerrdat-msgno
WITH tmerrdat-msgv1 tmerrdat-msgv2
tmerrdat-msgv3 tmerrdat-msgv4
INTO g_msg.
PERFORM msg_to_bapiret TABLES p_return.
CALL METHOD g_log->add_message.
ENDLOOP.
ENDFORM. " call_material_maintain_dark
Кстати, MATERIAL_MAINTAIN_DARK хорошо документирована.