没有找到生产订单在工序修改时的增强点,有大神发现好的修改方案请私信交流。
一、在生产订单保存增强调用后台程序
生产订单保存增强
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.