CO02 工单修改组件

" 生产订单组件单条变更物料, 数量, 工厂, 库存等信息
PERFORM frm_update_co02.
*&---------------------------------------------------------------------*
*& Form frm_update_co02
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_update_co02.

  DATA: is_order_key               TYPE coxt_ord_key,
        is_order_component_key     TYPE coxt_s_ord_comp_key,
        is_requirement_quantity    TYPE coxt_s_quantity,
        is_requirement_quantityx   TYPE coxt_s_quantityx,
        is_confirmed_quantity      TYPE coxt_s_quantity,
        is_confirmed_quantityx     TYPE coxt_s_quantityx,
        i_material                 TYPE coxt_material,
        i_materialx                TYPE coxt_materialx,
        is_storage_location        TYPE coxt_s_storage_location,
        is_storage_locationx       TYPE coxt_s_storage_locationx,
        i_batch                    TYPE coxt_batch,
        i_batchx                   TYPE coxt_batchx,
        i_mi_configuration_object  TYPE coxt_config_object,
        i_mi_configuration_objectx TYPE coxt_config_objectx,
        i_vornr                    TYPE  coxt_vornr,
        i_vornrx                   TYPE  coxt_vornrx,
        ls_return                  TYPE bapiret2,
        lv_error                   TYPE c.

  " 锁定生产订单组件数据
  CALL FUNCTION 'ENQUEUE_EMRESB'
    EXPORTING
      rsnum          = 'RSNUM'
      rspos          = 'RSPOS'
    EXCEPTIONS
      foreign_lock   = 1
      system_failure = 2
      OTHERS         = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty
                   NUMBER sy-msgno
                   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
                   INTO DATA(lv_zmsg) .
    RETURN.
  ENDIF.

*--------------------------------------------------------------------*

  is_order_key                      = 'AUFNR'.       " 订单

  is_order_component_key-rsnum      = 'RSNUM'.       " 预留
  is_order_component_key-rspos      = 'RSPOS'.       " 预留行

  is_requirement_quantity-quantity  = 'MENGE'.       " 数量
  is_requirement_quantity-uom       = 'MEINS'.       " 单位
  is_requirement_quantityx-quantity = abap_true.
  is_requirement_quantityx-uom      = abap_true.

  i_material                        = 'IDNRK'.        " 组件
  i_materialx                       = abap_true.

  is_storage_location-werks         = 'WERKS'.       " 工厂
  is_storage_location-lgort         = 'LGORT'.       " 库存地
  is_storage_locationx-werks        = abap_true.
  is_storage_locationx-lgort        = abap_true.

  IF 'BATCH' IS NOT INITIAL.
    i_batch  = 'BATCH'.
    i_batchx = abap_true.
  ENDIF.
  
  IF 'VORNR' IS NOT INITIAL.
    i_vornr  = 'VORNR'.
    i_vornrx = abap_true.
  ENDIF.

  CALL FUNCTION 'CO_XT_COMPONENT_CHANGE'
    EXPORTING
      is_order_key               = is_order_key
      is_order_component_key     = is_order_component_key
      is_requirement_quantity    = is_requirement_quantity
      is_requirement_quantityx   = is_requirement_quantityx
      is_confirmed_quantity      = is_confirmed_quantity
      is_confirmed_quantityx     = is_confirmed_quantityx
      i_material                 = i_material
      i_materialx                = i_materialx
      is_storage_location        = is_storage_location
      is_storage_locationx       = is_storage_locationx
      i_batch                    = i_batch
      i_batchx                   = i_batchx
      i_vornr                    = i_vornr
      i_vornrx                   = i_vornrx
      i_mi_configuration_object  = i_mi_configuration_object
      i_mi_configuration_objectx = i_mi_configuration_objectx
    IMPORTING
      es_bapireturn              = ls_return
      e_error_occurred           = lv_error.

  IF lv_error IS NOT INITIAL OR ls_return-type CA 'EAX'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    lv_zmsg = '替换生产订单组件失败'.

  ELSE.

    CALL FUNCTION 'CO_XT_ORDER_PREPARE_COMMIT'
      IMPORTING
        es_bapireturn    = ls_return
        e_error_occurred = lv_error.

    IF lv_error IS NOT INITIAL OR ls_return-type CA 'EAX'.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

      lv_zmsg = '替换生产订单组件失败'.

    ELSE.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = abap_true.

      CALL FUNCTION 'CO_XT_ORDER_INITIALIZE'.

      lv_zmsg = '替换生产订单组件成功'.

    ENDIF.

  ENDIF.
*--------------------------------------------------------------------*
  CALL FUNCTION 'DEQUEUE_EMRESB'
    EXPORTING
      rsnum = 'RSNUM'
      rspos = 'RSPOS'.

ENDFORM.

SAP CO02 TECO工单增强可以通过以下步骤实现。 1. 首先,在CMOD中创建一个项目ZCO02并增加增强PPCO0001。这将允许我们修改PPCO0001的功能。 2. 查看和调试SAP源代码,了解数据流向。特别是要了解在变更工单组件和表头未保存之前,这些数据存储在哪里。根据研究结果,我们发现这些数据存储在调用出口函数参数表中的component_table和header_table中。 3. 接下来,设计数据表结构ZPCO02,用于记录更改的信息。表结构包括字段如下:MANDT(客户端)、AUFNR(工单号)、MATNR(物料号)、FILED(字段名)、AENAM(更改人员)、LAEDA(更改日期)、TCODE(事务码)、CHNID(更改指标)、HOSTIP(主机IP)、HOST(主机)、VALUE_OLD(旧值)、VALUE_NEW(新值)、TIMES(更改时间)。 4. 在EXIT_SAPLCOBT_001的ZXCO1U01中编写代码,用于比较component_table中的数据与RESB(组件需求表)中相应保护字段的值,以确定组件更改记录。对于表头的更改记录,则通过将header_table与视图CAUFV进行比较来确定。如果工单总数更改导致组件数量更改,则可以编写一个程序从ZPCO02中分离出这些记录,并为用户提供使用。其他更改情况需要进一步研究。 5. 最后,根据SAP的要求,启用FLG_DOC标记来控制是否将更改记录写入CDHDR和CDPOS。请注意,批量处理过多的组件可能会导致程序运行出错,因此要谨慎使用这个标记。 通过以上步骤,就可以实现SAP CO02 TECO工单的增强功能,使得可以记录和追踪更改记录。如果你有更好的方法和想法,欢迎分享和讨论。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值