zoukankan      html  css  js  c++  java
  • MIGO生产订单入库写入批次特性增强

    一、生产订单入库

    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.
  • 相关阅读:
    Json -- 语法和示例,javascript 解析Json
    平衡二叉树的实现原理
    递归:汉诺塔
    递归:这帮坑爹的小兔崽子
    函数:递归是神马
    函数:lambda表达式
    函数:内嵌函数和闭包
    函数:我的地盘听我的
    函数:灵活即强大
    函数:Python的乐高积木
  • 原文地址:https://www.cnblogs.com/BinGeneral/p/15457566.html
Copyright © 2011-2022 走看看