Небольшой примерчик использования BAPI_OBJCL_CHANGE
и ФМ для получения уровня партии и таблиц VB_BATCH_DEFINITION.
Оформлен как FORM fill_classifications, на вход передаются 2 структуры (данные позиции материала, в т.ч. партия и материал, и данные значений признаков).
" Значения признаков
DATA: BEGIN OF items.
DATA: dhsdat TYPE string.
DATA: lifnr type lifnr.
DATA: END OF items.
DATA: gt_mseg TYPE STANDARD TABLE OF mseg WITH HEADER LINE.
DATA: l_mseg type mseg.
START-OF-SELECTION.
items-dhsdat = '01.10.2010'.
SELECT * FROM mseg
INTO CORRESPONDING FIELDS OF TABLE gt_mseg
WHERE mblnr = '4900000591'
LOOP AT gt_mseg INTO ls_mseg.
PERFORM fill_classifications USING ls_mseg items.
ENDLOOP.
FORM do_fill_classifications
USING rs_mseg LIKE mseg
rs_items type items.
DATA: git_bapi1003 TYPE TABLE OF bapi1003_alloc_values_num,
git_values_char TYPE TABLE OF bapi1003_alloc_values_char,
git_values_curr TYPE TABLE OF bapi1003_alloc_values_curr,
git_bapiret2 TYPE TABLE OF bapiret2,
ls_bapiret2 TYPE bapiret2.
DATA: gs_bapi1003 TYPE bapi1003_alloc_values_num,
gs_values_char TYPE bapi1003_alloc_values_char,
gs_values_curr TYPE bapi1003_alloc_values_char,
gc_flag_x(1) TYPE c VALUE 'X'.
DATA: l_objectkey TYPE bapi1003_key-object.
* CHARACT Имя признака
* VALUE_CHAR Значение признака
* VALUE_NEUTRAL Значение признака
* CHARACT_DESCR Название признака
" Определяем уровень партии (тр. OMCT) spro- Общая логистика - Управление партиями - Уровень партии
" 0 - Партии однозначно ведутся на уровне завода - MCHA
" 1 - Партия однозначно ведется на уровне материала - MCH1
" 2 - Партия однозначно ведется на уровне манданта - MCH1
" KZDCH Уровень TCUCH-KZDCH
" KLART Класс TCLA-KLART
" OBTAB Таблица TCLT-OBTAB
DATA: l_objecttable TYPE bapi1003_key-objecttable. " OBTAB Таблица TCLT-OBTAB
DATA: gv_batch_level LIKE tcuch-kzdch. "Batch-Level
DATA: classtype TYPE tcla-klart.
CALL FUNCTION 'VB_BATCH_DEFINITION'
IMPORTING
kzdch = gv_batch_level
klart = classtype
obtab = l_objecttable.
CASE gv_batch_level.
WHEN 0.
"l_objecttable = 'MCHA'.
ext_to_int: rs_mseg-matnr l_objectkey(18),
rs_mseg-werks l_objectkey+18(4),
rs_mseg-charg l_objectkey+18(10).
WHEN 1.
"l_objecttable = 'MCH1'.
ext_to_int: rs_mseg-matnr l_objectkey(18),
rs_mseg-charg l_objectkey+18(10).
WHEN 2.
"l_objecttable = 'MCH1'.
ext_to_int: rs_mseg-charg l_objectkey+18.
ENDCASE.
REFRESH git_values_char.
gs_values_char-charact = 'ZMM_BATH_DHSDAT'.
gs_values_char-value_neutral = rs_items-dhsdat.
APPEND gs_values_char TO git_values_char.
gs_values_char-charact = 'ZMM_LIFNR'.
gs_values_char-value_neutral = rs_items-lifnr.
APPEND gs_values_char TO git_values_char.
APPEND gs_values_char TO git_values_char.
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
objectkey = l_objectkey
objecttable = l_objecttable " MCHA или MCH1
classnum = 'ZMM_BATCH_SEARCH' "Class Number
classtype = classtype " 022, 023
* STATUS = '1'
* STANDARDCLASS =
* CHANGENUMBER =
* KEYDATE = SY-DATUM
* NO_DEFAULT_VALUES = ' '
* IMPORTING
* CLASSIF_STATUS =
TABLES
allocvaluesnumnew = git_bapi1003
allocvaluescharnew = git_values_char
allocvaluescurrnew = git_values_curr
return = git_bapiret2.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = ls_bapiret2.
ENDFORM. " DO_CHANGE_CHARACTERISIC