EWB更改工艺路线

REPORT ZPP_CHANGE_ROUTING.

* global fields, declarations
* ================================================
INCLUDE FC27DATE.

TYPE-POOLS:   CC01,
              CPSC,
              CPCL,
              CMCL,
              CZCL,
              CSSC,
              CSCL.

* selection screen
* ================================================
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-T01.
PARAMETERS: P_PLNTY TYPE PLKO-PLNTY DEFAULT 'N',
            "task list type
            P_PLNNR TYPE PLKO-PLNNR,
            "task list group number
            P_PLNAL TYPE PLKO-PLNAL DEFAULT '1',
            "group counter
            P_STTAG TYPE PLKO-DATUV DEFAULT SY-DATUM.
"keydate
SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-T02.
PARAMETERS: P_VORNR TYPE PLPO-VORNR.
PARAMETERS: P_BMSCH TYPE PLPO-BMSCH.
SELECTION-SCREEN END OF BLOCK B2.

START-OF-SELECTION.
* main program
* ================================================

* 1. load task list into internal EWB-buffer
  PERFORM LOAD_TASK_LIST
    USING
      P_PLNTY
      P_PLNNR
      P_PLNAL
      P_STTAG
      P_VORNR.

* 2. change the loaded task list
  PERFORM CHANGE_TASK_LIST
    USING
      P_STTAG.

* 3. save changed task list to database
  PERFORM SAVE_TO_DATABASE.

  COMMIT WORK AND WAIT.

  CALL FUNCTION 'CP_CL_S_OPR_UNLOCK'
    EXPORTING
      I_PLNTY             = P_PLNTY
      I_PLNNR             = P_PLNNR
      I_PLNAL             = P_PLNAL
    EXCEPTIONS
      WRONG_PARAMETERS    = 1
      FOREIGN_LOCK        = 2
      SYSTEM_FAILURE_LOCK = 3
      UPDATE_REQUIRED     = 4
      OTHERS              = 5.

  WRITE: / 'program ready.'.

*&———————————————————————*
*&      Form  LOAD_TASK_LIST
*&———————————————————————*
*       load task listr into internal EWB-BUFFER
*———————————————————————-*
*      –>I_PLNTY  task list type
*      –>I_PLNNR  task list number = group number
*      –>I_PLNAL  group counter
*      –>I_STTAG  keydate
*      –>I_VORNR  Activity Number
*———————————————————————-*
FORM LOAD_TASK_LIST
  USING
    I_PLNTY LIKE PLKO-PLNTY
    I_PLNNR LIKE PLKO-PLNNR
    I_PLNAL LIKE PLKO-PLNAL
    I_STTAG LIKE PLKO-DATUV
    I_VORNR LIKE PLPO-VORNR.

  DATA: L_CLASSES_IN_WORKAREA TYPE CLASSES_IN_WORKAREA.
  DATA: L_TSK_PLNTY_SELECTION  TYPE CPSC_PLNTY_TYPE,
        LT_TSK_PLNTY_SELECTION TYPE CPSC_PLNTY_TYPE OCCURS 0,
        L_TSK_PLNNR_SELECTION  TYPE CPSC_PLNNR_TYPE,
        LT_TSK_PLNNR_SELECTION TYPE CPSC_PLNNR_TYPE OCCURS 0,
        L_TSK_PLNAL_SELECTION  TYPE CPSC_PLNAL_TYPE,
        LT_TSK_PLNAL_SELECTION TYPE CPSC_PLNAL_TYPE OCCURS 0,
        L_TSK_SELECTION        TYPE CPSC_TSK_SEL_TYPE.

  DATA: L_OPR_VORNR_SELECTION  TYPE CPSC_VORNR_TYPE,
        LT_OPR_VORNR_SELECTION TYPE CPSC_VORNR_TYPE OCCURS 0,
        L_OPR_SELECTION        TYPE CPSC_OPR_SEL_TYPE.

* objects for loading
  L_CLASSES_IN_WORKAREA-MTK_INAREA = 'X'.
  L_CLASSES_IN_WORKAREA-TSK_INAREA = 'X'.
  L_CLASSES_IN_WORKAREA-SEQ_INAREA = 'X'.
  L_CLASSES_IN_WORKAREA-OPR_INAREA = 'X'.
  L_CLASSES_IN_WORKAREA-SUO_INAREA = 'X'.
  L_CLASSES_IN_WORKAREA-PRT_INAREA = 'X'.

* fill selection conditions – TSK
  CONCATENATE 'I' 'EQ' I_PLNTY INTO L_TSK_PLNTY_SELECTION.
  APPEND L_TSK_PLNTY_SELECTION TO LT_TSK_PLNTY_SELECTION.
  L_TSK_SELECTION-PLNTY = LT_TSK_PLNTY_SELECTION.

  CONCATENATE 'I' 'EQ' I_PLNNR INTO L_TSK_PLNNR_SELECTION.
  APPEND L_TSK_PLNNR_SELECTION TO LT_TSK_PLNNR_SELECTION.
  L_TSK_SELECTION-PLNNR = LT_TSK_PLNNR_SELECTION.

  CONCATENATE 'I' 'EQ' I_PLNAL INTO L_TSK_PLNAL_SELECTION.
  APPEND L_TSK_PLNAL_SELECTION TO LT_TSK_PLNAL_SELECTION.
  L_TSK_SELECTION-PLNAL = LT_TSK_PLNAL_SELECTION.

* fill selection conditions – OPR
  CONCATENATE 'I' 'EQ' I_VORNR INTO L_OPR_VORNR_SELECTION.
  APPEND L_OPR_VORNR_SELECTION TO LT_OPR_VORNR_SELECTION.
  L_OPR_SELECTION-VORNR = LT_OPR_VORNR_SELECTION.


  CALL FUNCTION 'CP_CC_S_LOAD_COMPLEX_BY_OPR'
    EXPORTING
      I_CLASS                        = 'P'
      I_CLASSES_IN_WORKAREA          = L_CLASSES_IN_WORKAREA
      I_CPSC_TSK_SEL                 = L_TSK_SELECTION
      I_CPSC_OPR_SEL                 = L_OPR_SELECTION
    EXCEPTIONS
      WORKAREA_NOT_FOUND             = 1
      CLASS_WRONG_TYPE               = 2
      WORKAREA_WRONG_TYPE            = 3
      CLASS_IN_WORKAREA_INCONSISTENT = 4
      WORKAREA_NOT_SPECIFIED         = 5
      OPR_NOT_FOUND                  = 6
      NO_SELECTION_CRITERIA          = 7
      INVALID_SELECTION_PERIOD       = 8
      KEY_DATE_REQUIRED_FOR_ECM      = 9
      OTHERS                         = 10.
ENDFORM.                    " load_task_list

*———————————————————————*
*       FORM change_task_list                                         *
*———————————————————————*
*         changes the short text of all operations to
*         'SIMPLE_EWB_TEST'
*———————————————————————*
*         –> i_sttag  keydate                                        *
*———————————————————————*
FORM CHANGE_TASK_LIST
USING
I_STTAG LIKE PLKO-DATUV.

  DATA: LT_OPR_CLASS_DATA TYPE TABLE OF OPR_CLASS_DATA,
        L_OPR_CLASS_DATA  TYPE OPR_CLASS_DATA,
        LT_OPR_IDENT      TYPE CPCL_OPR_TAB_TYPE,
        L_OPR_IDENT       TYPE CPCL_OPR_TYPE,
        LT_OPR_LOCK       TYPE CPCL_OPR_LOCK_TAB_TYPE.

  CALL FUNCTION 'CP_CL_S_OPR_PROVIDE'
    TABLES
      E_OPR_CLASS_DATA = LT_OPR_CLASS_DATA
    EXCEPTIONS
      WRONG_KEY        = 1
      OTHERS           = 2.

* lock the operations and reload operations
  LOOP AT LT_OPR_CLASS_DATA INTO L_OPR_CLASS_DATA.
    MOVE-CORRESPONDING L_OPR_CLASS_DATA TO L_OPR_IDENT.
    APPEND L_OPR_IDENT TO LT_OPR_IDENT.
  ENDLOOP.

  CALL FUNCTION 'CP_CC_S_RELOAD_BY_OPR'
    EXPORTING
      I_FLG_SET_LOCK        = 'X'
    IMPORTING
      E_OPR_LOCK            = LT_OPR_LOCK
    CHANGING
      C_OPR_IDENT           = LT_OPR_IDENT
    EXCEPTIONS
      RELOADING_NOT_ALLOWED = 1
      OTHERS                = 2.
  IF NOT LT_OPR_LOCK[] IS INITIAL.
    WRITE: /'error: some operations are already locked'.
    EXIT.
  ENDIF.

* again: provide all operations from EWB buffer
* reason: between first providing and locking another user can can
* change the operations
  CALL FUNCTION 'CP_CL_S_OPR_PROVIDE'
    TABLES
      E_OPR_CLASS_DATA = LT_OPR_CLASS_DATA
    EXCEPTIONS
      WRONG_KEY        = 1
      OTHERS           = 2.

* 3. change the operation list
  READ TABLE LT_OPR_CLASS_DATA INTO L_OPR_CLASS_DATA INDEX 1.
  L_OPR_CLASS_DATA-BMSCH = P_BMSCH. "修改基本数量

  CALL FUNCTION 'CP_CL_S_OPR_CHANGE'
    EXPORTING
      I_ECN_S                  = ' '
      I_KEY_DATE_S             = I_STTAG
      I_FLG_OPR_CHECK          = 'X'
      I_MARK_TXT_UPDATE        = ' '
      I_MARK_KTSCH_UPDATE      = ' '
      I_OPR_CLASS_DATA         = L_OPR_CLASS_DATA
      I_FLG_COLLECT_ALL_MSG    = ' '
    EXCEPTIONS
      OPERATION_NOT_CONSISTENT = 1
      NO_AUTHORITY             = 2
      WRONG_OPERATION_TYPE     = 3
      NO_VALID_OPERATION       = 4
      OPERATION_NOT_LOCKED     = 5
      WRONG_OPERATION_NUMBER   = 6
      ECM_DATA_NOT_SUITABLE    = 7
      OTHERS                   = 8.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.                     " change_task_list

*&———————————————————————*
*&      Form  SAVE_TO_DATABASE
*&———————————————————————*
*       save to database
*———————————————————————-*
FORM SAVE_TO_DATABASE.
  CALL FUNCTION 'CP_CC_S_SAVE'.
ENDFORM.                    " save_to_database

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值