MIGO生产订单入库写入批次特性增强

本文介绍了一种在特定条件下通过MIGO进行生产订单入库的方法,并详细解释了如何使用BADI MB_MIGO_BADI来实现产品编号等信息写入批次特性的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、生产订单入库

MIGO根据生产订单入库时,将生产订单中的字段,写入到批次特性中

二、BADI:MB_MIGO_BADI

调用BADI中的IF_EX_MB_MIGO_BADI~POST_DOCUMENT方法

"-----------------------------------------@斌将军--------------------------------------------
METHOD if_ex_mb_migo_badi~post_document.
    "MIGO生产订单入库时产品编号写入批次特性

    DATA: ls_mseg TYPE mseg.
    DATA: lv_object             TYPE bapi1003_key-object.
    DATA:gv_objek          TYPE cuobn,
         gs_objek          TYPE bapi1003_key-object,
         gv_obtab          TYPE tabelle,
         gv_klart          TYPE klassenart,
         gv_class          TYPE klasse_d,

         objectkey         TYPE bapi1003_key-object,
         gs_objectkeytable TYPE bapi1003_object_keys,
         gt_objectkeytable TYPE STANDARD TABLE OF bapi1003_object_keys,

         gt_values_char    TYPE TABLE OF bapi1003_alloc_values_char,
         gs_values_char    TYPE bapi1003_alloc_values_char,
         gt_values_num     TYPE TABLE OF bapi1003_alloc_values_num,
         gs_values_num     TYPE bapi1003_alloc_values_num,
         gt_values_curr    TYPE TABLE OF bapi1003_alloc_values_curr,
         gs_values_curr    TYPE bapi1003_alloc_values_curr,
         gs_status         TYPE bapi1003_key-status,

         gt_return         TYPE STANDARD TABLE OF bapiret2,
         gt_return2        TYPE STANDARD TABLE OF bapiret2,
         gt_return3        TYPE STANDARD TABLE OF bapiret2,
         gt_return4        TYPE STANDARD TABLE OF bapiret2,
         gs_return         TYPE bapiret2.

    DATA:return_message TYPE char200, "返回消息
         lv_value       TYPE char70,
         lv_check       TYPE char2.

    IF it_mseg[] IS NOT INITIAL.
      SELECT
        aufnr,
        zgh,
        zxz
      FROM aufk
      INTO TABLE @DATA(lt_aufk)
      FOR ALL ENTRIES IN @it_mseg
      WHERE aufnr = @it_mseg-aufnr.
    ENDIF.

    LOOP AT it_mseg INTO ls_mseg WHERE charg IS NOT INITIAL
      AND aufnr IS NOT INITIAL AND bwart = '101'
      AND ( werks = 'XXXX' OR werks =  'XXXX' ).

      READ TABLE lt_aufk INTO DATA(ls_aufk) WITH KEY aufnr = ls_mseg-aufnr.
      IF sy-subrc EQ 0.
        CLEAR:gv_objek,gv_obtab,gv_klart,gv_class.
        CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
          EXPORTING
            i_matnr = ls_mseg-matnr
            i_charg = ls_mseg-charg "批次
            i_werks = ls_mseg-werks
          IMPORTING
            e_objek = gv_objek
            e_obtab = gv_obtab
            e_klart = gv_klart
            e_class = gv_class.

        IF gv_objek IS INITIAL AND gv_obtab IS INITIAL AND gv_klart IS INITIAL AND gv_class IS INITIAL.
          return_message = '批次维护失败:未查询到相关类别'.
          MESSAGE e001(00) WITH return_message.
        ENDIF.

        "当批次创建成功,获取物料和批次,获取key值
        FREE:gt_objectkeytable.
        CLEAR : gs_objectkeytable.
        gs_objectkeytable-key_field = 'MATNR'.
        gs_objectkeytable-value_int = ls_mseg-matnr."物料
        APPEND gs_objectkeytable TO gt_objectkeytable.

        CLEAR : gs_objectkeytable.
        gs_objectkeytable-key_field = 'WERKS'.
        gs_objectkeytable-value_int = ls_mseg-werks.
        APPEND gs_objectkeytable TO gt_objectkeytable.

        CLEAR : gs_objectkeytable.
        gs_objectkeytable-key_field = 'CHARG'.
        gs_objectkeytable-value_int = ls_mseg-charg.
        APPEND gs_objectkeytable TO gt_objectkeytable.

        FREE gt_return.
        CLEAR:objectkey.
        CALL FUNCTION 'BAPI_OBJCL_CONCATENATEKEY'
          EXPORTING
            objecttable    = gv_obtab "表名
          IMPORTING
            objectkey_conc = objectkey
          TABLES
            objectkeytable = gt_objectkeytable
            return         = gt_return.

        LOOP AT gt_return INTO gs_return WHERE type CA 'EAX'.
          return_message = '批次维护失败:未查询到分类密钥'.
          MESSAGE e001(00) WITH return_message.
        ENDLOOP.

        "获取特征
        REFRESH:gt_values_num[], gt_values_char[], gt_values_curr[],gt_return[].
        gs_objek = objectkey.
        CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
          EXPORTING
            objectkey       = gs_objek
            objecttable     = gv_obtab
            classnum        = gv_class
            classtype       = gv_klart
*      IMPORTING
*           status          = gs_status
          TABLES
            allocvaluesnum  = gt_values_num
            allocvalueschar = gt_values_char
            allocvaluescurr = gt_values_curr
            return          = gt_return.

        READ TABLE gt_values_char ASSIGNING FIELD-SYMBOL(<fs_char>) WITH KEY charact = 'ZPP_ZGH'.
        IF sy-subrc EQ 0.
          CLEAR:lv_value.
          lv_value = ls_aufk-zgh.
          <fs_char>-value_char = lv_value.
          <fs_char>-value_neutral = lv_value.
          <fs_char>-value_char_long = lv_value.
          <fs_char>-value_neutral_long = lv_value.
        ELSE.
          CLEAR gs_values_char.
          gs_values_char-charact = 'ZPP_ZGH'."产品编号
          gs_values_char-value_char = ls_aufk-zgh.
          APPEND gs_values_char TO gt_values_char.
        ENDIF.

        READ TABLE gt_values_char ASSIGNING <fs_char> WITH KEY charact = 'ZPP_ZXZ'.
        IF sy-subrc EQ 0.
          CLEAR:lv_value.
          lv_value = ls_aufk-zxz.
          <fs_char>-value_char = lv_value.
          <fs_char>-value_neutral = lv_value.
          <fs_char>-value_char_long = lv_value.
          <fs_char>-value_neutral_long = lv_value.
        ELSE.
          CLEAR gs_values_char.
          gs_values_char-charact = 'ZPP_ZXZ'."行走机构编号
          gs_values_char-value_char = ls_aufk-zxz.
          APPEND gs_values_char TO gt_values_char.
        ENDIF.

        "更新特征值
        FREE:gt_return.
        CALL FUNCTION 'BAPI_OBJCL_CHANGE'
          EXPORTING
            objectkey          = objectkey
            objecttable        = gv_obtab
            classnum           = gv_class
            classtype          = gv_klart
*           status             = gs_status
          TABLES
            allocvaluesnumnew  = gt_values_num
            allocvaluescharnew = gt_values_char
            allocvaluescurrnew = gt_values_curr
            return             = gt_return.

        lv_check = 'S'.
        return_message = '批次维护失败:'.
        LOOP AT gt_return INTO gs_return WHERE type CA 'AEX'.
          CONCATENATE return_message gs_return-message INTO return_message.
          lv_check = 'E'.
          CLEAR:gs_return.
        ENDLOOP.

        IF lv_check = 'S'.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          MESSAGE e001(00) WITH return_message.
        ENDIF.
      ENDIF.
    ENDLOOP.

  ENDMETHOD.
"-----------------------------------------@斌将军--------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值