SAP-生产订单工序修改

没有找到生产订单在工序修改时的增强点,有大神发现好的修改方案请私信交流。

一、在生产订单保存增强调用后台程序

生产订单保存增强

SMOD:PPCO0001

ZXCO1U01:

* 生产订单保存-工序修改
READ TABLE header_table INDEX 1.
CALL FUNCTION 'ZPP_OPERATION_UPDATE'
  IN BACKGROUND TASK
  EXPORTING
    aufnr           = header_table-aufnr
    auart           = header_table-auart
    matnr           = header_table-matnr
    werks           = header_table-werks
    gamng           = header_table-gamng
  TABLES
    operation_table = operation_table
    component_table = component_table.

二、在后台程序首先判断生产订单是否已修改完成,等待修改完成,调用工序修改bapi对工序进行修改。

ZPP_OPERATION_UPDATE:

FUNCTION zpp_operation_update.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(AUFNR) TYPE  AUFNR OPTIONAL
*"     VALUE(AUART) TYPE  AUFART OPTIONAL
*"     VALUE(MATNR) TYPE  MATNR OPTIONAL
*"     VALUE(WERKS) TYPE  WERKS_D OPTIONAL
*"     VALUE(GAMNG) TYPE  GAMNG OPTIONAL
*"  TABLES
*"      OPERATION_TABLE STRUCTURE  AFVGB
*"      COMPONENT_TABLE STRUCTURE  RESBB
*"----------------------------------------------------------------------
  DATA:lv_flag,
       lv_vgw TYPE afvgb-vgw02.

  "检查工单是否需要修改工时
  PERFORM frm_check_order TABLES operation_table
                           USING auart
                                 matnr
                        CHANGING lv_flag.
  IF lv_flag = ''.
    RETURN.
  ENDIF.

  "获取修改工时
  PERFORM frm_get_vgw TABLES operation_table
                             component_table
                       USING matnr
                             werks
                             gamng
                    CHANGING lv_vgw.
  "检查工单是否被占用
  PERFORM frm_check_order_status USING aufnr
                              CHANGING lv_flag.
  IF lv_flag = ''.
    RETURN.
  ENDIF.
  "修改工时
  PERFORM frm_update_operation TABLES operation_table
                                USING aufnr
                                      lv_vgw.

ENDFUNCTION.

*&      Form  FRM_CHECK_ORDER_STATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_AUFNR  text
*      <--P_LV_FLAG  text
*----------------------------------------------------------------------*
FORM frm_check_order_status  USING    p_aufnr TYPE aufnr
                             CHANGING p_flag.
  CLEAR p_flag.
  DO 60 TIMES.
    CALL FUNCTION 'CO_ZF_ORDER_LOCK'
      EXPORTING
        aufnr                = p_aufnr
      EXCEPTIONS
        order_already_locked = 1
        system_failure       = 2
        OTHERS               = 3.
    IF sy-subrc = 0.
      p_flag = 'X'.
      EXIT.
    ELSE.
      WAIT UP TO 1 SECONDS.
    ENDIF.
  ENDDO.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_UPDATE_OPERATION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_OPERATION_TABLE  text
*      -->P_LV_VGW  text
*----------------------------------------------------------------------*
FORM frm_update_operation  TABLES p_operation_table STRUCTURE afvgb
                           USING  p_aufnr TYPE aufnr
                                  p_vgw TYPE afvgb-vgw02.

  DATA:lt_operation TYPE cose_t_operation,
       lw_operation TYPE cose_s_operation,
       lw_return    TYPE bapiret2.

  LOOP AT p_operation_table WHERE vornr = '0010'.
    lw_operation-operation = p_operation_table-vornr.
    lw_operation-standard_value_02  = p_vgw.
    lw_operation-standard_value_02_x = 'X'.
    lw_operation-standard_value_03  = p_vgw.
    lw_operation-standard_value_03_x = 'X'.
    APPEND lw_operation TO lt_operation.
  ENDLOOP.

  CALL FUNCTION 'CO_SE_PRODORD_CHANGE'
    EXPORTING
      iv_order_number = p_aufnr
*     IS_HEADER       =
*     IT_HDR_USER_STATUS       =
*     IT_SEQUENCE     =
      it_operation    = lt_operation
*     IT_OPR_USER_STATUS       =
*     IT_PRT          =
      iv_commit       = 'X'
    IMPORTING
      es_return       = lw_return.

ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值