接口创建工艺路线
FUNCTION zplm_routing.
*"----------------------------------------------------------------------
*"*"本地接口:
*" TABLES
*" IT_ROUTING STRUCTURE ZPLM_ROUTING OPTIONAL
*" IT_RETURN STRUCTURE BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------
DATA:ls_zplm_routinglog TYPE zplm_routinglog,
lt_zplm_routinglog LIKE STANDARD TABLE OF ls_zplm_routinglog.
ls_zplm_routinglog-datum = sy-datum.
ls_zplm_routinglog-uzeit = sy-uzeit.
LOOP AT it_routing INTO DATA(ls_log).
MOVE-CORRESPONDING ls_log TO ls_zplm_routinglog.
ADD 1 TO ls_zplm_routinglog-zsn.
APPEND ls_zplm_routinglog TO lt_zplm_routinglog.
ENDLOOP.
MODIFY zplm_routinglog FROM TABLE lt_zplm_routinglog.
DATA:l_plnnr TYPE plnnr, "任务清单组键值
l_plnal TYPE plnal. "组计数器
DATA:lt_tsk TYPE TABLE OF bapi1012_tsk_c, "任务清单头数据
ls_tsk LIKE LINE OF lt_tsk,
lt_mtk TYPE TABLE OF bapi1012_mtk_c, "物料任务清单分配
ls_mtk LIKE LINE OF lt_mtk,
lt_opr TYPE TABLE OF bapi1012_opr_c, "工序
ls_opr LIKE LINE OF lt_opr,
lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE. "返回参数
LOOP AT it_routing INTO DATA(ls_routing).
IF l_plnnr NE ls_routing-plnnr AND l_plnal NE ls_routing-plnal.
ls_tsk-task_list_group = ls_routing-plnnr. "任务清单组码
l_plnnr = ls_tsk-task_list_group.
l_plnal = ls_routing-plnal.
ls_tsk-plant = ls_routing-werks . "工厂
ls_tsk-task_list_usage = ls_routing-verwe. "用途
ls_tsk-task_list_status = ls_routing-statu. "状态
ls_tsk-valid_from = ls_routing-sttag. "有效起始日期
ls_tsk-description = ls_routing-matnr. "工艺描述
ls_tsk-task_measure_unit = 'PC'. "计量单位
APPEND ls_tsk TO lt_tsk.
ls_mtk-plant = ls_routing-werks. "工厂
ls_mtk-material = ls_routing-matnr. "产品编号
ls_mtk-material_external = ls_routing-matnr. "产品编号
ls_mtk-valid_from = ls_routing-sttag. "有效起始日期
* lt_mtk-valid_to_date = '99991231'. "有效截止日期
APPEND ls_mtk TO lt_mtk.
ENDIF.
" 工序
CLEAR ls_opr.
ls_opr-sequence_no = '000000'. "序列
ls_opr-activity = ls_routing-vornr. "工序编码
ls_opr-control_key = ls_routing-steus. "控制码
ls_opr-work_cntr = ls_routing-arbpl. "工作中心
ls_opr-plant = ls_routing-werks. "工厂
ls_opr-description = ls_routing-ltxa1. "工序描述
ls_opr-base_quantity = ls_routing-bmsch. "基础数量
ls_opr-cost_relevant = 'X'. "与成本核算相关标志
ls_opr-std_unit_01 = ls_routing-vge01."时间单位
ls_opr-std_value_01 = ls_routing-vgw01."机器时间
ls_opr-std_unit_02 = ls_routing-vge02."时间单位
ls_opr-std_value_02 = ls_routing-vgw02."人工时间
ls_opr-std_unit_03 = ls_routing-vge03."时间单位
ls_opr-std_value_03 = ls_routing-vgw03."模具或动力
ls_opr-std_unit_04 = ls_routing-vge04."时间单位
ls_opr-std_value_04 = ls_routing-vgw04."动力或维修
ls_opr-std_unit_05 = ls_routing-vge05."时间单位
ls_opr-std_value_05 = ls_routing-vgw05."维修或其他
ls_opr-std_unit_06 = ls_routing-vge06."时间单位
ls_opr-std_value_06 = ls_routing-vgw06."其他
ls_opr-valid_from = ls_routing-sttag. "有效起始日期
* lt_opr-valid_to_date = '99991231'."有效截止日期
ls_opr-denominator = 1.
ls_opr-nominator = 1.
ls_opr-operation_measure_unit = 'PC'. "计量单位
ls_opr-ind_splitting_reqrd = 'X'. "是否拆分
ls_opr-max_no_of_splits = ls_routing-splim. "最大拆分数
ls_opr-ind_cont_flow_production = 'X'. "标志: 流水生产
ls_opr-cost_relevant = 'X'. "与成本核算相关标志
APPEND ls_opr TO lt_opr.
AT END OF plnal.
CALL FUNCTION 'BAPI_ROUTING_CREATE'
IMPORTING
group = l_plnnr
groupcounter = l_plnal
TABLES
task = lt_tsk
materialtaskallocation = lt_mtk
operation = lt_opr
return = lt_return.
LOOP AT lt_return WHERE type EQ 'E' OR type EQ 'A'.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
APPEND LINES OF lt_return TO it_return.
CLEAR:l_plnnr,l_plnal,lt_tsk,lt_mtk,lt_opr,lt_return.
ENDAT.
ENDLOOP.
ENDFUNCTION.