ABAP 创建批次并更新批次特性

复制代码
      "创建批次
            SELECT COUNT(*) FROM marc
              WHERE matnr = ls_out-matnr AND werks = lv_plant AND xchar = 'X'.
            IF sy-subrc = 0."批次管理
              CALL FUNCTION 'NUMBER_GET_NEXT'
                EXPORTING
                  nr_range_nr = '01'
                  object      = 'ZMM001'
                IMPORTING
                  number      = number.
              UNPACK number TO number.
              CONCATENATE sy-datum+2(6) number INTO ls_out-charg.
              lv_matnr = ls_out-matnr.
              lv_batch = ls_out-charg.
              CALL FUNCTION 'BAPI_BATCH_CREATE'
                EXPORTING
                  material = lv_matnr
                  batch    = lv_batch
                  plant    = lv_plant
                TABLES
                  return   = return.
              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  wait = 'X'.
              REFRESH return.
            ENDIF.

            "批次特性增强
            CLEAR: e_objek,e_obtab,e_klart,e_class.
            CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
              EXPORTING
                i_matnr = ls_out-matnr
                i_charg = ls_out-charg
                i_werks = lv_plant
              IMPORTING
                e_objek = e_objek
                e_obtab = e_obtab
                e_klart = e_klart
                e_class = e_class.

            CHECK e_obtab IS NOT INITIAL.

            "获取key值
            REFRESH lt_objectkeytable.
            CLEAR ls_objectkeytable.
            ls_objectkeytable-key_field = 'MATNR'.
            ls_objectkeytable-value_int = ls_out-matnr.
            APPEND ls_objectkeytable TO lt_objectkeytable.
            CLEAR ls_objectkeytable.
            ls_objectkeytable-key_field = 'WERKS'.
            ls_objectkeytable-value_int = lv_plant.
            APPEND ls_objectkeytable TO lt_objectkeytable.
            CLEAR ls_objectkeytable.
            ls_objectkeytable-key_field = 'CHARG'.
            ls_objectkeytable-value_int = ls_out-charg.
            APPEND ls_objectkeytable TO lt_objectkeytable.

            CLEAR objectkey_conc.
            REFRESH lt_return.
            CALL FUNCTION 'BAPI_OBJCL_CONCATENATEKEY'
              EXPORTING
                objecttable    = e_obtab
              IMPORTING
                objectkey_conc = objectkey_conc
              TABLES
                objectkeytable = lt_objectkeytable
                return         = lt_return.

            LOOP AT lt_return INTO ls_return WHERE type CA 'EAX'.
            ENDLOOP.
            CHECK sy-subrc <> 0.

            "获取特征
            REFRESH: lt_allocvaluesnum,lt_allocvalueschar,lt_allocvaluescurr,lt_return.
            CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
              EXPORTING
                objectkey       = objectkey_conc
                objecttable     = e_obtab
                classnum        = e_class
                classtype       = e_klart
              TABLES
                allocvaluesnum  = lt_allocvaluesnum
                allocvalueschar = lt_allocvalueschar
                allocvaluescurr = lt_allocvaluescurr
                return          = lt_return.

            READ TABLE lt_allocvalueschar INTO ls_allocvalueschar WITH KEY charact = 'Z_BATCH_VENDOR1'.
            IF sy-subrc = 0.
              ls_allocvalueschar-value_char = ls_out-lifnr.
              MODIFY lt_allocvalueschar FROM ls_allocvalueschar INDEX sy-tabix.
            ELSE.
              ls_allocvalueschar-charact = 'Z_BATCH_VENDOR1'.
              ls_allocvalueschar-value_char = ls_out-lifnr.
              APPEND ls_allocvalueschar TO lt_allocvalueschar.
            ENDIF.

            "更新特征值
            REFRESH lt_return.
            CALL FUNCTION 'BAPI_OBJCL_CHANGE'
              EXPORTING
                objectkey          = objectkey_conc
                objecttable        = e_obtab
                classnum           = e_class
                classtype          = e_klart
              TABLES
                allocvaluesnumnew  = lt_allocvaluesnum
                allocvaluescharnew = lt_allocvalueschar
                allocvaluescurrnew = lt_allocvaluescurr
                return             = lt_return.

            LOOP AT lt_return INTO ls_return WHERE type CA 'EAX'.
            ENDLOOP.
            IF sy-subrc = 0.
              CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
              MESSAGE e001(00) WITH ls_return-message.
            ELSE.
              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  wait = 'X'.
            ENDIF.
复制代码
posted @   Delaine  阅读(1205)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示