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
EWB更改工艺路线
最新推荐文章于 2022-08-18 15:47:57 发布