SAP CA01/CA02 创建及更新工艺路线BAPI

前言

最近需要做一个routing的批导,初步查过资料后,发现下面几个BAPI:

BAPI_ROUTING_CREATE:最常用的BAPI,只支持创建,没有对应的CHANGE BAPI;

ROUTING_MAINTAIN:不支持创建,只支持更改;

CPCC_S_TASK_LIST_MAINTAIN:同时支持创建及更改。

刚好项目上的需求是既需要创建也需要变更,所以简单测试了下CPCC_S_TASK_LIST_MAINTAIN该如何传参来支持创建及更新。


正文

一开始写批导函数的时候,使用的是ROUTING_MAINTAIN,发现该函数没有提供task_maintain_mode参数,所以无法进行创建routing,但是里面调用的函数CPCC_S_TASK_LIST_MAINTAIN是支持这个参数的,所以就改用该函数来实现routing的创建及变更,关于函数的一些说明,也可以查看官方note:1558192。

测试的时候发现有几个小的注意点:

  1. task_maintain_mode(C创建,M变更,D删除);
  2. 如果是变更,需要给对应结构中的FLAG_BAR_POINTER字段赋值(如果有);
  3. sequence_no需要赋值000000;
  4. 工序字段operations-activity,如果要变更工序的编号(PLPO-VORNR),比如将10改为20,则需要给activity赋值为20,activity_old赋值为10,同时给activity打上'X'标记,否则无需打'X'标记,不然程序会判定以activity_old的值去找历史数据,如果未给activity_old传值的话就会报错;
  5. material_task_allocations结构是将物料工厂和工序绑定,需要传值,否则MAPL表中不会有数据。 

工序相关底表

MAPL:分配工序给物料

PLKO:工序表头

PLAS:工序选择 

PLPO :工序明细


测试源码

*&---------------------------------------------------------------------*
*& Form FRM_ROUTING_MAINTAIN
*&---------------------------------------------------------------------*
*& Using BAPI to maintain routing
*&---------------------------------------------------------------------*
FORM frm_routing_maintain USING us_req  TYPE zprppsrouting_inCHANGING cs_resp TYPE zprbcsrest_out.DATA:lv_maintain_mode   TYPE cp_task_list_maint_mode,lv_flag_bar        TYPE cp_task_list_maint_pointer,lv_change_no       TYPE cps_task_list_maint_hdr-change_no,lv_key_date        TYPE cps_task_list_maint_hdr-key_date,lv_task_list_group TYPE cps_task_list_maint_hdr-task_list_group,lv_group_counter   TYPE cps_task_list_maint_hdr-group_counter,lv_material        TYPE cps_task_list_maint_hdr-material,lv_plant           TYPE cps_task_list_maint_hdr-plant,ls_task            TYPE cps_task_list_maint_tsk,ls_task_x          TYPE cps_task_list_maint_tsk_x,lv_bom_usage       TYPE stlan,lt_material_task   TYPE cpt_task_list_maint_mtk,ls_material_task   TYPE cps_task_list_maint_mtk,lt_material_task_x TYPE cpt_task_list_maint_mtk_x,ls_material_task_x TYPE cps_task_list_maint_mtk_x,lt_operations      TYPE cpt_task_list_maint_opr,ls_operations      TYPE cps_task_list_maint_opr,lt_operations_x    TYPE cpt_task_list_maint_opr_x,ls_operations_x    TYPE cps_task_list_maint_opr_x,lt_return          TYPE bapiret2_t,ls_return          TYPE bapiret2.* Head datalv_change_no       = us_req-head-aennr.lv_key_date        = us_req-head-datuv.lv_task_list_group = us_req-head-plnnr.lv_group_counter   = us_req-head-plnal.lv_material        = us_req-head-matnr.lv_plant           = us_req-head-werks.IF us_req-head-plnnr IS INITIAL.lv_maintain_mode = 'C'.ELSE.lv_maintain_mode = 'M'.ENDIF.IF us_req-head-verwe IS NOT INITIAL.ls_task-task_list_usage     = us_req-head-verwe.ls_task_x-task_list_usage   = abap_true.ENDIF.IF us_req-head-werks IS NOT INITIAL.ls_task-plant               = us_req-head-werks.ls_task_x-plant             = abap_true.ENDIF.IF us_req-head-statu IS NOT INITIAL.ls_task-task_list_status    = us_req-head-statu.ls_task_x-task_list_status  = abap_true.ENDIF.IF us_req-head-plnme IS NOT INITIAL.ls_task-task_measure_unit   = us_req-head-plnme.ls_task_x-task_measure_unit = abap_true.ENDIF.IF us_req-head-ktext IS NOT INITIAL.ls_task-description         = us_req-head-ktext.ls_task_x-description       = abap_true.ENDIF.IF us_req-head-loekz_plko IS NOT INITIAL.ls_task-del_flag            = us_req-head-loekz_plko.ls_task_x-del_flag          = abap_true.ENDIF.ls_task-lot_size_to         = '99999999'.ls_task_x-lot_size_to       = abap_true.IF lv_maintain_mode = 'C'.CLEAR ls_task_x.*   Material routing assignmentls_material_task-maintain_mode = lv_maintain_mode.ls_material_task-material      = us_req-head-matnr.ls_material_task-plant         = us_req-head-werks.APPEND ls_material_task TO lt_material_task.ENDIF.* OperationsLOOP AT us_req-operations INTO DATA(ls_operations_in).ls_operations-maintain_mode            = ls_operations_in-maintain_mode.ls_operations-sequence_no              = '000000'.IF ls_operations_in-maintain_mode = 'M'.ADD 1 TO lv_flag_bar.ls_operations-flag_bar_pointer = lv_flag_bar.ENDIF.*   If the maintain_mode was 'M', and you set the flag abap_true for it,
*   The system considers the current activity is new value,at the same time,
*   You nedd set the original value for the fields 'ACTIVITY_OLD'ls_operations-activity                 = ls_operations_in-vornr.IF ls_operations_in-arbpl IS NOT INITIAL.ls_operations-work_cntr                = ls_operations_in-arbpl.ls_operations_x-work_cntr              = abap_true.ENDIF.IF us_req-head-werks IS NOT INITIAL.ls_operations-plant                    = us_req-head-werks.ls_operations_x-plant                  = abap_true.ENDIF.IF ls_operations_in-steus IS NOT INITIAL.ls_operations-control_key              = ls_operations_in-steus.ls_operations_x-control_key            = abap_true.ENDIF.IF ls_operations_in-ktsch IS NOT INITIAL.ls_operations-standard_text_key        = ls_operations_in-ktsch.ls_operations_x-standard_text_key      = abap_true.ENDIF.IF ls_operations_in-ltxa1 IS NOT INITIAL.ls_operations-description              = ls_operations_in-ltxa1.ls_operations_x-description            = abap_true.ENDIF.IF ls_operations_in-vgw01 IS NOT INITIAL.ls_operations-std_unit_01              = ls_operations_in-vge01.ls_operations_x-std_unit_01            = abap_true.ls_operations-std_value_01             = ls_operations_in-vgw01.ls_operations_x-std_value_01           = abap_true.ENDIF.IF ls_operations_in-vgw02 IS NOT INITIAL.ls_operations-std_unit_02              = ls_operations_in-vge01.ls_operations_x-std_unit_02            = abap_true.ls_operations-std_value_02             = ls_operations_in-vgw02.ls_operations_x-std_value_02           = abap_true.ENDIF.IF ls_operations_in-vgw03 IS NOT INITIAL.ls_operations-std_unit_03              = ls_operations_in-vge01.ls_operations_x-std_unit_03            = abap_true.ls_operations-std_value_03             = ls_operations_in-vgw03.ls_operations_x-std_value_03           = abap_true.ENDIF.IF ls_operations_in-vgw04 IS NOT INITIAL.ls_operations-std_unit_04              = ls_operations_in-vge01.ls_operations_x-std_unit_04            = abap_true.ls_operations-std_value_04             = ls_operations_in-vgw04.ls_operations_x-std_value_04           = abap_true.ENDIF.IF ls_operations_in-vgw05 IS NOT INITIAL.ls_operations-std_unit_05              = ls_operations_in-vge01.ls_operations_x-std_unit_05            = abap_true.ls_operations-std_value_05             = ls_operations_in-vgw05.ls_operations_x-std_value_05           = abap_true.ENDIF.IF ls_operations_in-vgw06 IS NOT INITIAL.ls_operations-std_unit_06              = ls_operations_in-vge01.ls_operations_x-std_unit_06            = abap_true.ls_operations-std_value_06             = ls_operations_in-vgw06.ls_operations_x-std_value_06           = abap_true.ENDIF.IF ls_operations_in-bmsch IS NOT INITIAL.ls_operations-base_quantity            = ls_operations_in-bmsch.ls_operations_x-base_quantity          = abap_true.ENDIF.IF ls_operations_in-meinh IS NOT INITIAL.ls_operations-operation_measure_unit   = ls_operations_in-meinh.ls_operations_x-operation_measure_unit = abap_true.ENDIF.IF ls_operations_in-umren IS NOT INITIAL.ls_operations-denominator              = ls_operations_in-umren.ls_operations_x-denominator            = abap_true.ENDIF.IF ls_operations_in-umrez IS NOT INITIAL.ls_operations-nominator                = ls_operations_in-umrez.ls_operations_x-nominator              = abap_true.ENDIF.IF ls_operations_in-infnr IS NOT INITIAL.ls_operations-info_rec                 = ls_operations_in-infnr.ls_operations_x-info_rec               = abap_true.ENDIF.IF ls_operations_in-ekorg IS NOT INITIAL.ls_operations-purch_org                = ls_operations_in-ekorg.ls_operations_x-purch_org              = abap_true.ENDIF.IF ls_operations_in-plifz IS NOT INITIAL.ls_operations-plnd_delry               = ls_operations_in-plifz.ls_operations_x-plnd_delry             = abap_true.ENDIF.IF ls_operations_in-sortl IS NOT INITIAL.ls_operations-sorted_by                = ls_operations_in-sortl.ls_operations_x-sorted_by              = abap_true.ENDIF.IF ls_operations_in-matkl IS NOT INITIAL.ls_operations-matl_group               = ls_operations_in-matkl.ls_operations_x-matl_group             = abap_true.ENDIF.IF ls_operations_in-ckselkz IS NOT INITIAL.ls_operations-cost_relevant            = ls_operations_in-ckselkz.ls_operations_x-cost_relevant          = abap_true.ENDIF.IF ls_operations_in-sakto IS NOT INITIAL.ls_operations-cost_elem                = ls_operations_in-sakto.ls_operations_x-cost_elem              = abap_true.ENDIF.IF ls_operations_in-frdlb IS NOT INITIAL.ls_operations-ext_proc_with_subcontract_ind   = ls_operations_in-frdlb.ls_operations_x-ext_proc_with_subcontract_ind = abap_true.ENDIF.APPEND ls_operations TO lt_operations.APPEND ls_operations_x TO lt_operations_x.CLEAR:ls_operations,ls_operations_x.ENDLOOP.**********************************************************************
* Function 'ROUTING_MAINTAIN' can't import maintain_mode,you can only
* use it to modify routing,if you wan't create & change routing,you
* can use below function.
**********************************************************************CALL FUNCTION 'CPCC_S_TASK_LIST_MAINTAIN'EXPORTINGchange_no                   = lv_change_nokey_date                    = lv_key_datetask_list_type              = 'N'task_list_group             = lv_task_list_groupgroup_counter               = lv_group_countermaterial                    = lv_materialplant                       = lv_planttask_maintain_mode          = lv_maintain_modetask                        = ls_tasktask_x                      = ls_task_x
*     APPLICATION                 =
*     BOM_USAGE                   =TABLESmaterial_task_allocations   = lt_material_taskmaterial_task_allocations_x = lt_material_task_x
*     SEQUENCES                   =
*     SEQUENCES_X                 =operations                  = lt_operationsoperations_x                = lt_operations_x
*     SUBOPERATIONS               =
*     SUBOPERATIONS_X             =
*     PRODUCTION_RESOURCES_TOOLS  =
*     PRODUCTION_RESOURCES_TOOLS_X       =
*     COMPONENT_ALLOCATIONS       =
*     COMPONENT_ALLOCATIONS_X     =
*     INSPECTION_CHARACTERISTICS  =
*     INSPECTION_CHARACTERISTICS_X       =
*     INSPECTION_VALUES           =
*     INSPECTION_VALUES_X         =
*     REFERENCED_OPERATIONS       =
*     TEXT                        =
*     TEXT_ALLOCATIONS            =return                      = lt_return
*     SEGMENT_TASK_MAINTAIN       =.LOOP AT lt_return INTO ls_returnWHERE type CA 'EAX'.cs_resp-msgty = 'E'.CONCATENATE cs_resp-msgtx ls_return-message INTO cs_resp-msgtx.ENDLOOP.IF cs_resp-msgtx IS INITIAL.cs_resp-msgty = 'S'.LOOP AT lt_return INTO ls_returnWHERE type = 'S'AND ( number = '059' OR number = '068' ).cs_resp-msgtx = ls_return-message.EXIT.ENDLOOP.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ENDIF.ENDFORM.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++,优化算法——使用遗传算法的旅行商问题(traveling-salesman-problem)的源程序

1 文本格式 #include <bits/stdc.h> #include <limits.h> using namespace std; // Number of cities in TSP #define V 5 // Names of the cities #define GENES ABCDE // Starting Node Value #define START 0 // Initial population size for the algorith…

HDFS 3.x 数据存储新特性-纠删码

HDFS是⼀个⾼吞吐、⾼容错的分布式⽂件系统,但是HDFS在保证⾼容错的同时也带来⾼昂的存储成本,⽐如有5T的数据存储在HDFS上,按照HDFS的默认3副本机制,将会占⽤15T的存储空间。那么有没有⼀种能达到和副本机制相同的容错能⼒但是能⼤幅度降低存储成本的机制呢,有,就是在HD…

ahk系列-windows超级运行框-表达式计算(12)—功能汇总

1、环境准备 windows 7&#xff0c;8&#xff0c;10&#xff0c;11操作系统ahk 2.x_64位翻译功能需要联网使用 2、使用方式 输入winR打开windows运行框 get/getpath 命令获取配置文件环境变量set/sets 设置 “用户/系统” 环境变量或者pathencode/decode 中文编码和解码len…

【算法题】一种字符串压缩表示的解压(js)

输入&#xff1a;2dff 输出 !error 两个d不需要压缩&#xff0c;故输入不合法 输入:4eA 输出:!error 全部由小写英文字母组成&#xff0c;压缩后不会出现&#xff0c;故输出不合法 function solution(str) {const error "!error";// 只能包含小写字母和数字 [^a-z0…

详解线段树

前段时间写过一篇关于树状数组的博客树状数组&#xff0c;今天我们要介绍的是线段树&#xff0c;线段树比树状数组中的应用场景更加的广泛。这些问题也是在leetcode 11月的每日一题频繁遇到的问题&#xff0c;实际上线段树就和红黑树 、堆一样是一类模板&#xff0c;但是标准库…

【荣誉】科东软件荣获广州市软件行业协会双料大奖!

软件产业在数字经济中扮演着基础支撑的角色&#xff0c;对于优化产业结构、提高自主可控、赋能整体经济高质量发展具有关键作用。 近日&#xff0c;广州市软件行业第七届会员大会第三次会议成功召开&#xff01;此次会议旨在回顾过去一年的行业发展&#xff0c;展望未来的趋势和…

React useCallback 详解

在 React 中&#xff0c;useCallback 是一个非常实用的 Hook&#xff0c;它可以帮助我们避免在每次渲染时都创建新的函数&#xff0c;从而提高性能。useCallback 返回一个记忆化的回调函数&#xff0c;它只在其依赖项改变时才会改变。 下面是一个详细的 React useCallback 教程…

nginx编译安装及配置文件的修改

编译安装nginx 1.关闭防火墙&#xff0c;安全机制&#xff0c;去官网下载nginx压缩包&#xff0c;并进行解压 systemctl stop firewalld #关闭防火墙 systemctl disable --now firewalld #开机不自启并立即关闭防火墙 setenforce 0 #关闭安全机制 2.安装依赖包&#xff0…

CSU计算机学院2023秋C语言期中题目思路分享(前三道题)

文章目录 写在前面A&#xff1a;个税计算——阅读理解与数据类型转换原题输入输出样例输入样例输出 题目分析题目理解代码实现与问题解决 我的代码 B&#xff1a;时制转换——问题是一点点解决的原题输入输出样例输入样例输出 题目分析我的代码 C&#xff1a;统计进位——人教版…

编程语言分类

如果要将编程语言分成两大类&#xff0c;可以考虑以下分类方式&#xff1a; 编译型语言&#xff08;Compiled Languages&#xff09;&#xff1a;这类语言在运行之前需要通过编译器将源代码转换为机器码或类似形式的可执行代码。编译型语言的特点包括&#xff1a; 需要显式的编…

用PHP与html做一个简单的登录页面

用PHP与html做一个简单的登录页面 login.html的设计 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&…

我一人全干!之二,vue3后台管理系统树形目录的实现。

一个完整的后台管理系统需要一个树形结构的目录&#xff0c;方便用户切换页面。 因为使用的是element-plus的ui库&#xff0c;所以首选el-menu组件&#xff0c;点击查看文档。 因为此组件不是树形结构的&#xff0c;所以需要封装成系统需要的树形结构组件。可以使用vue的递归组…

探索鸿蒙_ArkTs开发语言

ArkTs 在正常的网页开发中&#xff0c;实现一个效果&#xff0c;需要htmlcssjs三种语言实现。 但是使用ArkTs语言&#xff0c;就能全部实现了。 ArkTs是基于TypeScript的&#xff0c;但是呢&#xff0c;TypeScript是基于javascript的&#xff0c;所以ArkTs不但能完成js的工作&a…

传导电流密度方向与磁矢位方向相同

矢量位 A ⃗ \vec A A 由于磁感应强度 B ⃗ \vec B B 是无源场&#xff0c;散度为0&#xff0c; ∇ ⋅ B ⃗ 0 \nabla \cdot \vec B 0 ∇⋅B 0, 因此引入矢量位 A ⃗ \vec A A , 满足 ∇ A ⃗ B ⃗ \begin{align} \nabla \times \vec A &\vec B \end{align} ∇A ​B ​…

Vue3 Element-Plus 一站式生成动态表单:简化前端开发流程

文章目录 1. 引言2. Vue3 和 Element-Plus 简介2.1 Vue32.2 Element-Plus 3. 动态表单的需求与挑战4. Vue3 和 Element-Plus 动态表单的优势4.1 Vue3的组合式API4.2 Element-Plus的表单组件 5. 一站式生成动态表单的实现5.1 准备工作5.2 创建动态表单组件5.3 使用动态表单组件 …

在开发软件KEIL MDK和IAR开发工程里面打印行号、文件名、函数名、时间

最近应用固件没有时间记录&#xff0c;分别请那个是最新的&#xff08;在没有版本区别的情况下&#xff09;&#xff0c;有个办法记录编译时间即可&#xff0c;记录笔记以便查看 在软件工程里面直接用宏 __FILE __ 当前程序文件名的字符串 __FUNCTION __ 当前函数的名字字符串 …

2023年2月8日 Go生态洞察:Profile-Guided Optimization预览

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

优化的 MCM-GPU 比具有相同 SM 总数和 DRAM 带宽的同等配备的多 GPU 系统快 26.8%。

MCM-GPU: Multi-chip-module GPUs for Continued Performance Scalability 抽象&#xff1a; 从历史上看&#xff0c;基于 GPU 的高性能计算的改进与晶体管缩放紧密相连。随着摩尔定律的减慢&#xff0c;每个芯片的晶体管数量不再以历史速度增长&#xff0c;单个单片GPU的性能…

易点易动设备管理系统--提升设备能耗管理效率的工具

在当今的节能环保意识日益增强的社会背景下&#xff0c;设备能耗管理成为了市场推广人员关注的焦点之一。为了帮助市场推广人员提升设备能耗管理效率&#xff0c;易点易动设备管理系统应运而生。本文将详细介绍易点易动设备管理系统的功能和优势&#xff0c;以及如何借助该系统…

Python-元组详解

注意&#xff1a;列表是方括号【】&#xff0c;元组是圆括号&#xff08;&#xff09;&#xff0c;这里要分清。 创建元组 1、a () 2、b tuple() a () b tuple() 2、可以指定初始值 a (1,2,3,4) a (1,2,3,4) 3、元素可以是任意类型 a (1,2,3,4,hello) a (1,2,3,4…