LOOP AT T_DATA.
W_LOOP1 = SY-TABIX.
MOVE-CORRESPONDING T_DATA TO T_TMP.
CLEAR GROUP.
MOVE T_DATA TO GT_DATA.
MOVE-CORRESPONDING T_DATA TO T_DATA_CHK.
APPEND T_DATA_CHK.
L_COUNT = L_COUNT + 1.
APPEND GT_DATA.
SORT T_MAPL BY MATNR WERKS.
SY-TABIX = W_LOOP1.
CLEAR: OPERATION.
IF T_TMP-SUB_ACTIVITY = ''.
OPERATION-ACTIVITY = T_TMP-ACTIVITY. "Operation
OPERATION-CONTROL_KEY = 'PP01' . "Control key
OPERATION-WORK_CNTR = T_TMP-WORK_CNTR. "Work center
OPERATION-DESCRIPTION = T_TMP-DESCRIPTION. "Description
IF T_DATA-PRD_PLANT <> ''.
OPERATION-PLANT = T_TMP-PRD_PLANT.
ELSE.
OPERATION-PLANT = T_TMP-PLANT. "Plant
ENDIF.
OPERATION-DENOMINATOR = 1. "
OPERATION-NOMINATOR = 1. "
OPERATION-BASE_QUANTITY = T_TMP-BASE_QUANTITY. "Base Qty
OPERATION-STD_VALUE_01 = T_TMP-STD_VALUE_01. "Setup Time
OPERATION-STD_UNIT_01 = 'MIN'.
OPERATION-STD_VALUE_02 = T_TMP-STD_VALUE_02. "Machine
OPERATION-STD_UNIT_02 = 'MIN'.
OPERATION-STD_VALUE_03 = T_TMP-STD_VALUE_03. "Labor
OPERATION-STD_UNIT_03 = 'MIN'.
OPERATION-NO_OF_EMPLOYEE = GT_DATA-NO_OF_EMPLOYEE. "Add by Lisa wong 12/04/2012
IF T_DATA-MAX_NO_OF_SPLITS <> 0.
OPERATION-IND_SPLITTING_REQRD = 'X'. "No. of split
OPERATION-MAX_NO_OF_SPLITS = T_TMP-MAX_NO_OF_SPLITS.
ENDIF.
IF GT_DATA-REQUIRED_OVERLAPPING = 'X'.
OPERATION-REQUIRED_OVERLAPPING = GT_DATA-REQUIRED_OVERLAPPING. "Overlap
* OPERATION-MIN_OVERLAP_TIME = GT_DATA-MIN_OVERLAP_TIME.
* OPERATION-MIN_OVERLAP_TIME_UNIT = GT_DATA-MIN_OVERLAP_TIME_UNIT.
OPERATION-MIN_SEND_AHEAD_QTY = GT_DATA-MIN_SEND_AHEAD_QTY.
ENDIF.
OPERATION-STANDARD_QUEUE_TIME = GT_DATA-STANDARD_QUEUE_TIME.
OPERATION-STANDARD_QUEUE_TIME_UNIT = GT_DATA-STANDARD_QUEUE_TIME_UNIT.
OPERATION-REQUIRED_WAIT_TIME = GT_DATA-REQUIRED_WAIT_TIME.
OPERATION-REQUIRED_WAIT_TIME_UNIT = GT_DATA-REQUIRED_WAIT_TIME_UNIT.
OPERATION-COST_RELEVANT = 'X'.
APPEND OPERATION.
ELSE.
CLEAR SUBOPERATION.
* MOVE-CORRESPONDING T_TMP TO SUBOPERATION.
* SUBOPERATION-SUB_operation_id = T_TMP-SUB_OPERATION_ID.
SUBOPERATION-DESCRIPTION = T_TMP-DESCRIPTION. "Description
IF T_DATA-PRD_PLANT <> ''.
SUBOPERATION-PLANT = T_TMP-PRD_PLANT.
ELSE.
SUBOPERATION-PLANT = T_TMP-PLANT. "Plant
ENDIF.
SUBOPERATION-ACTIVITY = T_TMP-ACTIVITY.
SUBOPERATION-SUB_ACTIVITY = T_TMP-SUB_ACTIVITY.
SUBOPERATION-WORK_CNTR = T_TMP-WORK_CNTR.
SUBOPERATION-CONTROL_KEY = 'PP01' .
SUBOPERATION-DENOMINATOR = 1. "
SUBOPERATION-NOMINATOR = 1. "
SUBOPERATION-BASE_QUANTITY = T_TMP-BASE_QUANTITY. "Base Qty
SUBOPERATION-STD_VALUE_01 = T_TMP-STD_VALUE_01. "Setup Time
SUBOPERATION-STD_UNIT_01 = 'MIN'.
SUBOPERATION-STD_VALUE_02 = T_TMP-STD_VALUE_02. "Machine
SUBOPERATION-STD_UNIT_02 = 'MIN'.
SUBOPERATION-STD_VALUE_03 = T_TMP-STD_VALUE_03. "Labor
SUBOPERATION-STD_UNIT_03 = 'MIN'.
SUBOPERATION-NO_OF_EMPLOYEE = T_TMP-NO_OF_EMPLOYEE. "Add by Lisa wong 12/04/2012
APPEND SUBOPERATION.
ENDIF.
AT END OF GROUP_COUNTER. " GROUP_COUNTER.
CLEAR TASK.
PERFORM CHECK_PLNNR.
READ TABLE T_MAPL WITH KEY MATNR = T_TMP-MATERIAL WERKS = T_TMP-PLANT.
IF SY-SUBRC = 0.
TASK-TASK_LIST_GROUP = T_MAPL-PLNNR.
ENDIF.
SELECT SINGLE MEINS INTO TASK-TASK_MEASURE_UNIT
FROM MARA
WHERE MATNR = GT_DATA-MATERIAL.
TASK-TASK_LIST_USAGE = '1'. "Usage
TASK-PLANT = GT_DATA-PLANT.
TASK-TASK_LIST_STATUS = '4'. "Status
TASK-LOT_SIZE_TO = 99999999.
TASK-DESCRIPTION = GT_DATA-DESCRIPTION1.
TASK-VALID_FROM = P_DATE. "Valid from date
APPEND TASK.
MATERIAL-MATERIAL = GT_DATA-MATERIAL.
MATERIAL-PLANT = GT_DATA-PLANT.
APPEND MATERIAL.
GROUP_COUNTER = T_DATA-GROUP_COUNTER.
* LOOP AT OPERATION.
* L_LOOP = SY-TABIX.
* READ TABLE SUBOPERATION WITH KEY ACTIVITY = OPERATION-ACTIVITY BINARY SEARCH.
* IF SY-SUBRC = 0.
* CLEAR: OPERATION-STD_VALUE_01,OPERATION-STD_VALUE_02,OPERATION-STD_VALUE_03,
* OPERATION-STD_UNIT_01,OPERATION-STD_UNIT_02,OPERATION-STD_UNIT_03.
* MODIFY OPERATION INDEX L_LOOP.
* ENDIF.
* SY-TABIX = L_LOOP.
* ENDLOOP.
CALL FUNCTION 'BAPI_ROUTING_CREATE'
IMPORTING
GROUP = GROUP
GROUPCOUNTER = T_DATA-GROUP_COUNTER
TABLES
TASK = TASK
MATERIALTASKALLOCATION = MATERIAL
* SEQUENCE = SEQUENCE
OPERATION = OPERATION
SUBOPERATION = SUBOPERATION
RETURN = RETURN.
READ TABLE RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
W_FAIL = W_FAIL + L_COUNT.
LOOP AT RETURN.
IF RETURN-TYPE = 'E' OR RETURN-TYPE = 'A'.
CONCATENATE RETURN-FIELD RETURN-MESSAGE INTO L_MESSAGE.
ENDIF.
ENDLOOP.
LOOP AT T_DATA_CHK.
MOVE-CORRESPONDING T_DATA_CHK TO T_DATA_ERR.
CLEAR T_DATA_ERR-UNITKEY.
T_DATA_ERR-ERR_MSG = L_MESSAGE..
APPEND T_DATA_ERR.
ENDLOOP.
ELSE.
W_OK = W_OK + L_COUNT.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDIF.
CLEAR L_COUNT.
REFRESH TASK.
REFRESH GT_DATA.
REFRESH MATERIAL.
REFRESH OPERATION.
REFRESH SUBOPERATION.
REFRESH SEQUENCE.
REFRESH: T_MAPL,T_DATA_CHK.
ENDAT.
SY-TABIX = W_LOOP1.
ENDLOOP.
W_LOOP1 = SY-TABIX.
MOVE-CORRESPONDING T_DATA TO T_TMP.
CLEAR GROUP.
MOVE T_DATA TO GT_DATA.
MOVE-CORRESPONDING T_DATA TO T_DATA_CHK.
APPEND T_DATA_CHK.
L_COUNT = L_COUNT + 1.
APPEND GT_DATA.
SORT T_MAPL BY MATNR WERKS.
SY-TABIX = W_LOOP1.
CLEAR: OPERATION.
IF T_TMP-SUB_ACTIVITY = ''.
OPERATION-ACTIVITY = T_TMP-ACTIVITY. "Operation
OPERATION-CONTROL_KEY = 'PP01' . "Control key
OPERATION-WORK_CNTR = T_TMP-WORK_CNTR. "Work center
OPERATION-DESCRIPTION = T_TMP-DESCRIPTION. "Description
IF T_DATA-PRD_PLANT <> ''.
OPERATION-PLANT = T_TMP-PRD_PLANT.
ELSE.
OPERATION-PLANT = T_TMP-PLANT. "Plant
ENDIF.
OPERATION-DENOMINATOR = 1. "
OPERATION-NOMINATOR = 1. "
OPERATION-BASE_QUANTITY = T_TMP-BASE_QUANTITY. "Base Qty
OPERATION-STD_VALUE_01 = T_TMP-STD_VALUE_01. "Setup Time
OPERATION-STD_UNIT_01 = 'MIN'.
OPERATION-STD_VALUE_02 = T_TMP-STD_VALUE_02. "Machine
OPERATION-STD_UNIT_02 = 'MIN'.
OPERATION-STD_VALUE_03 = T_TMP-STD_VALUE_03. "Labor
OPERATION-STD_UNIT_03 = 'MIN'.
OPERATION-NO_OF_EMPLOYEE = GT_DATA-NO_OF_EMPLOYEE. "Add by Lisa wong 12/04/2012
IF T_DATA-MAX_NO_OF_SPLITS <> 0.
OPERATION-IND_SPLITTING_REQRD = 'X'. "No. of split
OPERATION-MAX_NO_OF_SPLITS = T_TMP-MAX_NO_OF_SPLITS.
ENDIF.
IF GT_DATA-REQUIRED_OVERLAPPING = 'X'.
OPERATION-REQUIRED_OVERLAPPING = GT_DATA-REQUIRED_OVERLAPPING. "Overlap
* OPERATION-MIN_OVERLAP_TIME = GT_DATA-MIN_OVERLAP_TIME.
* OPERATION-MIN_OVERLAP_TIME_UNIT = GT_DATA-MIN_OVERLAP_TIME_UNIT.
OPERATION-MIN_SEND_AHEAD_QTY = GT_DATA-MIN_SEND_AHEAD_QTY.
ENDIF.
OPERATION-STANDARD_QUEUE_TIME = GT_DATA-STANDARD_QUEUE_TIME.
OPERATION-STANDARD_QUEUE_TIME_UNIT = GT_DATA-STANDARD_QUEUE_TIME_UNIT.
OPERATION-REQUIRED_WAIT_TIME = GT_DATA-REQUIRED_WAIT_TIME.
OPERATION-REQUIRED_WAIT_TIME_UNIT = GT_DATA-REQUIRED_WAIT_TIME_UNIT.
OPERATION-COST_RELEVANT = 'X'.
APPEND OPERATION.
ELSE.
CLEAR SUBOPERATION.
* MOVE-CORRESPONDING T_TMP TO SUBOPERATION.
* SUBOPERATION-SUB_operation_id = T_TMP-SUB_OPERATION_ID.
SUBOPERATION-DESCRIPTION = T_TMP-DESCRIPTION. "Description
IF T_DATA-PRD_PLANT <> ''.
SUBOPERATION-PLANT = T_TMP-PRD_PLANT.
ELSE.
SUBOPERATION-PLANT = T_TMP-PLANT. "Plant
ENDIF.
SUBOPERATION-ACTIVITY = T_TMP-ACTIVITY.
SUBOPERATION-SUB_ACTIVITY = T_TMP-SUB_ACTIVITY.
SUBOPERATION-WORK_CNTR = T_TMP-WORK_CNTR.
SUBOPERATION-CONTROL_KEY = 'PP01' .
SUBOPERATION-DENOMINATOR = 1. "
SUBOPERATION-NOMINATOR = 1. "
SUBOPERATION-BASE_QUANTITY = T_TMP-BASE_QUANTITY. "Base Qty
SUBOPERATION-STD_VALUE_01 = T_TMP-STD_VALUE_01. "Setup Time
SUBOPERATION-STD_UNIT_01 = 'MIN'.
SUBOPERATION-STD_VALUE_02 = T_TMP-STD_VALUE_02. "Machine
SUBOPERATION-STD_UNIT_02 = 'MIN'.
SUBOPERATION-STD_VALUE_03 = T_TMP-STD_VALUE_03. "Labor
SUBOPERATION-STD_UNIT_03 = 'MIN'.
SUBOPERATION-NO_OF_EMPLOYEE = T_TMP-NO_OF_EMPLOYEE. "Add by Lisa wong 12/04/2012
APPEND SUBOPERATION.
ENDIF.
AT END OF GROUP_COUNTER. " GROUP_COUNTER.
CLEAR TASK.
PERFORM CHECK_PLNNR.
READ TABLE T_MAPL WITH KEY MATNR = T_TMP-MATERIAL WERKS = T_TMP-PLANT.
IF SY-SUBRC = 0.
TASK-TASK_LIST_GROUP = T_MAPL-PLNNR.
ENDIF.
SELECT SINGLE MEINS INTO TASK-TASK_MEASURE_UNIT
FROM MARA
WHERE MATNR = GT_DATA-MATERIAL.
TASK-TASK_LIST_USAGE = '1'. "Usage
TASK-PLANT = GT_DATA-PLANT.
TASK-TASK_LIST_STATUS = '4'. "Status
TASK-LOT_SIZE_TO = 99999999.
TASK-DESCRIPTION = GT_DATA-DESCRIPTION1.
TASK-VALID_FROM = P_DATE. "Valid from date
APPEND TASK.
MATERIAL-MATERIAL = GT_DATA-MATERIAL.
MATERIAL-PLANT = GT_DATA-PLANT.
APPEND MATERIAL.
GROUP_COUNTER = T_DATA-GROUP_COUNTER.
* LOOP AT OPERATION.
* L_LOOP = SY-TABIX.
* READ TABLE SUBOPERATION WITH KEY ACTIVITY = OPERATION-ACTIVITY BINARY SEARCH.
* IF SY-SUBRC = 0.
* CLEAR: OPERATION-STD_VALUE_01,OPERATION-STD_VALUE_02,OPERATION-STD_VALUE_03,
* OPERATION-STD_UNIT_01,OPERATION-STD_UNIT_02,OPERATION-STD_UNIT_03.
* MODIFY OPERATION INDEX L_LOOP.
* ENDIF.
* SY-TABIX = L_LOOP.
* ENDLOOP.
CALL FUNCTION 'BAPI_ROUTING_CREATE'
IMPORTING
GROUP = GROUP
GROUPCOUNTER = T_DATA-GROUP_COUNTER
TABLES
TASK = TASK
MATERIALTASKALLOCATION = MATERIAL
* SEQUENCE = SEQUENCE
OPERATION = OPERATION
SUBOPERATION = SUBOPERATION
RETURN = RETURN.
READ TABLE RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC = 0.
W_FAIL = W_FAIL + L_COUNT.
LOOP AT RETURN.
IF RETURN-TYPE = 'E' OR RETURN-TYPE = 'A'.
CONCATENATE RETURN-FIELD RETURN-MESSAGE INTO L_MESSAGE.
ENDIF.
ENDLOOP.
LOOP AT T_DATA_CHK.
MOVE-CORRESPONDING T_DATA_CHK TO T_DATA_ERR.
CLEAR T_DATA_ERR-UNITKEY.
T_DATA_ERR-ERR_MSG = L_MESSAGE..
APPEND T_DATA_ERR.
ENDLOOP.
ELSE.
W_OK = W_OK + L_COUNT.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDIF.
CLEAR L_COUNT.
REFRESH TASK.
REFRESH GT_DATA.
REFRESH MATERIAL.
REFRESH OPERATION.
REFRESH SUBOPERATION.
REFRESH SEQUENCE.
REFRESH: T_MAPL,T_DATA_CHK.
ENDAT.
SY-TABIX = W_LOOP1.
ENDLOOP.
SAP CA01: 使用BAPI创建工艺路线

该博客详细介绍了如何在SAP系统中通过BAPI Routing Create创建工艺路线。涉及了操作、子操作、任务和材料分配等关键步骤,并进行了错误处理。
788

被折叠的 条评论
为什么被折叠?



