SAP库存仓位转移
参数1
lgort_f 源库存点,lgort_t 目标库存点,lgpla 库位(BIN)
参数2 表参数
输入表et_item,输出表et_return
et_item内容,传入物料,批次,数量,其他忽略
实现
定义
DATA:
ls_header LIKE bapi2017_gm_head_01,
ls_headret LIKE bapi2017_gm_head_ret,
ls_document TYPE bapi2017_gm_head_ret-mat_doc,
ls_docyear TYPE bapi2017_gm_head_ret-doc_year,
lt_item LIKE bapi2017_gm_item_create OCCURS 0 WITH HEADER LINE,
lt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA:
lt_objectkeytable TYPE STANDARD TABLE OF bapi1003_object_keys WITH HEADER LINE,
lv_clobjectkeyout TYPE bapi1003_key-object_guid.
DATA:
lv_objectkey TYPE bapi1003_key-object,
lv_object_long TYPE bapi1003_key-object_long,
lv_objecttable TYPE bapi1003_key-objecttable,
lv_classtype TYPE bapi1003_key-classtype,
lv_classnum TYPE bapi1003_key-classnum,
lv_status TYPE bapi1003_key-status,
lt_allocvaluesnum TYPE STANDARD TABLE OF bapi1003_alloc_values_num,
lt_allocvalueschar TYPE STANDARD TABLE OF bapi1003_alloc_values_char WITH HEADER LINE,
lt_allocvaluescurr TYPE STANDARD TABLE OF bapi1003_alloc_values_curr.
DATA lv_msg(220).
赋值
SET UPDATE TASK LOCAL.
ls_header-pstng_date = sy-datum.
ls_header-doc_date = sy-datum.
LOOP AT et_item.
" perform matn1_input changing: et_item-matnr .
CALL FUNCTION ‘CONVERSION_EXIT_MATN1_INPUT’
EXPORTING
input = et_item-matnr
IMPORTING
output = et_item-matnr
EXCEPTIONS
length_error = 1
OTHERS = 2.
* perform cunit_in changing: et_item-meins .
CALL FUNCTION ‘CONVERSION_EXIT_CUNIT_INPUT’
EXPORTING
input = et_item-meins
IMPORTING
output = et_item-meins.
lt_item-material_long = et_item-matnr.
lt_item-plant = iv_werks.
lt_item-stge_loc = lgort_f .
lt_item-entry_qnt = et_item-menge .
lt_item-move_plant = iv_werks.
lt_item-move_stloc = lgort_t.
lt_item-batch = et_item-charg.
lt_item-move_type = ‘311’.
APPEND lt_item.CLEAR lt_item.
MODIFY et_item.
ENDLOOP.
调用
CALL FUNCTION ‘BAPI_GOODSMVT_CREATE’
EXPORTING
goodsmvt_header = ls_header
goodsmvt_code = ‘04’
IMPORTING
goodsmvt_headret = ls_headret
materialdocument = ls_document
matdocumentyear = ls_docyear
TABLES
goodsmvt_item = lt_item[]
return = lt_return[].
LOOP AT lt_return WHERE type CA ‘AEX’.
MOVE-CORRESPONDING lt_return TO et_return.
APPEND et_return.
ENDLOOP.
IF sy-subrc = 0 .
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.
mblnr = ls_document .
mjahr = ls_docyear .
et_return-type = ‘S’.
et_return-message = ‘goods move success’.
APPEND et_return.
更新批次特性
* 写入Bin位
LOOP AT et_item.
CLEAR:lt_return,lt_return[].
CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
EXPORTING
i_matnr = et_item-matnr
i_charg = et_item-charg
* i_werks = ls_input-werks
IMPORTING
e_objek = lv_object_long
e_obtab = lv_objecttable
e_klart = lv_classtype
e_class = lv_classnum.
* 取特性值
CLEAR:lt_return,lt_return[].
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
* objectkey = lv_objectkey
objecttable = lv_objecttable
classnum = lv_classnum
classtype = lv_classtype
objectkey_long = lv_object_long
TABLES
allocvaluesnum = lt_allocvaluesnum
allocvalueschar = lt_allocvalueschar
allocvaluescurr = lt_allocvaluescurr
return = lt_return.
LOOP AT lt_return WHERE type CA 'AEX'.
MOVE-CORRESPONDING lt_return TO et_return.
APPEND et_return.
ENDLOOP.
IF sy-subrc NE 0.
LOOP AT lt_allocvalueschar WHERE charact = 'Z_BIN'.
lt_allocvalueschar-value_char = lgpla.
lt_allocvalueschar-value_char_long = lgpla.
lt_allocvalueschar-value_neutral = lgpla.
lt_allocvalueschar-value_neutral_long = lgpla.
MODIFY lt_allocvalueschar.
ENDLOOP.
IF sy-subrc NE 0.
lt_allocvalueschar-charact = 'Z_BIN'.
lt_allocvalueschar-value_char = lgpla.
lt_allocvalueschar-value_char_long = lgpla.
lt_allocvalueschar-value_neutral = lgpla.
lt_allocvalueschar-value_neutral_long = lgpla.
APPEND lt_allocvalueschar.
ENDIF.
*修改
CLEAR:lt_return,lt_return[].
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
* objectkey = lv_objectkey
objecttable = lv_objecttable
classnum = lv_classnum
classtype = lv_classtype
objectkey_long = lv_object_long
* status = '1'
* keydate = sy-datum
IMPORTING
classif_status = lv_status
TABLES
allocvaluesnumnew = lt_allocvaluesnum
allocvaluescharnew = lt_allocvalueschar
allocvaluescurrnew = lt_allocvaluescurr
return = lt_return.
CLEAR lv_msg.
LOOP AT lt_return WHERE type CA 'AEX'.
CLEAR lv_msg.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = lt_return-id
msgnr = lt_return-number
msgv1 = lt_return-message_v1
msgv2 = lt_return-message_v2
msgv3 = lt_return-message_v3
msgv4 = lt_return-message_v4
IMPORTING
message_text_output = lv_msg.
et_item-rtype = 'E' .
et_item-rtmsg = et_item-rtmsg && lv_msg.
MOVE-CORRESPONDING lt_return TO et_return.
APPEND et_return.
ENDLOOP.
IF sy-subrc = 0 .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ev_result = 'F'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
et_return-type = 'S'.
et_return-message = 'success'.
APPEND et_return.
et_item-rtype = 'S' .
et_item-rtmsg = 'success'.
ev_result = 'S'.
ENDIF.
ENDIF.
MODIFY et_item.
ENDLOOP.
ENDIF.