SAP RFC库存仓位转移

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.

结束

猜你喜欢

转载自blog.csdn.net/hcsdny895/article/details/105826691
今日推荐