SAP CU65 OD与FUNCTION应用小例
上文我们介绍了VC中值与函数的应用本文介绍另一个常用的场景OD语句中的FUNCTION语句与函数的应用。一般步骤①业务顾问确认好函数逻辑确认函数的入参和出参提供FS②开发顾问根据逻辑FS创建函数③业务顾问CU65创建功能设置好相关特性与入参④写OD调用FUNCTION写好特征的入参特性值。一、确认逻辑假设入参为长和宽两个特征返回面积函数逻辑 长乘宽。创建对应的长、宽和面积特征并把它们放在一个类里分给对应的物料等等这些是VC的最基本操作我们就不在这里做赘述了有需要的小伙伴可以留言后面我们抽空专栏做一篇VC的使用。二、函数创建FUNCTION zpp_test2. *---------------------------------------------------------------------- **本地接口 * IMPORTING * REFERENCE(GLOBALS) TYPE CUOV_00 * EXPORTING * REFERENCE(VALUE_EX) TYPE CAWN-ATWRT * TABLES * MATCH STRUCTURE CUOV_01 * QUERY STRUCTURE CUOV_01 * EXCEPTIONS * FAIL * INTERNAL_ERROR *----------------------------------------------------------------------本函数主要需要关心TABLES中的MATCH和QUERY其中QUERY为后面CU65定义的入参以本文案例为长和宽两个特征MATCH为CU65定义的出参以本文案例为面积这个特征。函数中需要用到两个常用的功能函数CUOV_GET_FUNCTION_ARGUMENT这个函数对QUERY表的入参的特征(长和宽)返回其对应的特征值。CALL FUNCTION CUOV_GET_FUNCTION_ARGUMENT EXPORTING argument l_varnam IMPORTING * vtype Value format sym_val l_mat Alphanumeric value * num_val Numeric value * io_flag Input/output parameter indicator TABLES query query Table of input and output parameters EXCEPTIONS arg_not_found 1 Parameter not found OTHERS 2.CUOV_SET_FUNCTION_ARGUMENT这个函数对要修改的特征(面积)返回其对应的结果特征值。* CALL FUNCTION CUOV_SET_FUNCTION_ARGUMENT * EXPORTING * argument XXX * vtype CHAR * sym_val l_value ** NUM_VAL * TABLES * match match * EXCEPTIONS * existing_value_replaced 1 * OTHERS 2. * * IF sy-subrc 0. ** Implement suitable error handling here * ENDIF.当然两个函数都不是必须的只是查询和返回的标准函数直接查表或其它方式也可以的。文章的最后 PART 五 会介绍一种方式就没有用到CUOV_SET_FUNCTION_ARGUMENT函数文章样例中的代码也是我直接copy过来的注释掉的。三、CU65创建功能功能名称与函数名称保持一致添加用到的特征并勾选入参注意修改状态进行保存。考虑四、FUNCTION的OD语句PFUNCTION ZPP_GET_MATNR02 (长度的特征 输入特征或具体值, 宽度的特征 输入特征或具体值)五、一种特殊用法举例笔者项目中遇到另一个情况包材在不同工厂中用到的不同是工厂性数据但是选择特征的时候又是按物料组选择物料为集团性数据所以会存在销售选了包材但是不在BOM中的情况。逻辑根据入参的工厂和包材料号查询包材是否在对应的工厂包材超级BOM中。函数如下FUNCTION zpp_get_matnr02. *---------------------------------------------------------------------- **本地接口 * IMPORTING * REFERENCE(GLOBALS) TYPE CUOV_00 * EXPORTING * REFERENCE(VALUE_EX) TYPE CAWN-ATWRT * TABLES * MATCH STRUCTURE CUOV_01 * QUERY STRUCTURE CUOV_01 * EXCEPTIONS * FAIL * INTERNAL_ERROR *---------------------------------------------------------------------- DATA: l_mat LIKE cuov_01-atwrt, l_werks LIKE cuov_01-atwrt, l_varnam LIKE cuov_01-varnam, l_varnam1 LIKE cuov_01-varnam, lv_matnr TYPE matnr, ls_idnrk LIKE stpo-idnrk, l_atbez LIKE cabnt-atbez, gv_message(64) TYPE c VALUE message. LOOP AT query. CASE query-varnam. WHEN ZCT_WERKS. Get value of Input Characteristic CALL FUNCTION CUOV_GET_FUNCTION_ARGUMENT EXPORTING argument ZCT_WERKS IMPORTING * vtype Value format sym_val l_werks Alphanumeric value * num_val Numeric value * io_flag Input/output parameter indicator TABLES query query Table of input and output parameters EXCEPTIONS arg_not_found 1 Parameter not found OTHERS 2. IF sy-subrc 0. RAISE internal_error. ENDIF. WHEN OTHERS. l_varnam query-varnam. CALL FUNCTION CUOV_GET_FUNCTION_ARGUMENT EXPORTING argument l_varnam IMPORTING * vtype Value format sym_val l_mat Alphanumeric value * num_val Numeric value * io_flag Input/output parameter indicator TABLES query query Table of input and output parameters EXCEPTIONS arg_not_found 1 Parameter not found OTHERS 2. IF sy-subrc 0. RAISE internal_error. ENDIF. ENDCASE. IF l_mat OR l_mat 无. ELSE. CALL FUNCTION CONVERSION_EXIT_MATN1_INPUT EXPORTING input l_mat IMPORTING output lv_matnr EXCEPTIONS length_error 1 OTHERS 2. IF sy-subrc 0. * Implement suitable error handling here ENDIF. SELECT stpo~idnrk INTO ls_idnrk FROM mast INNER JOIN stpo ON mast~stlnr stpo~stlnr WHERE mast~matnr 00000000000XXXXXXX 保密原因就不展示具体料号了 AND mast~werks l_werks AND stpo~idnrk lv_matnr. ENDSELECT. IF sy-subrc 0. CALL FUNCTION CONVERSION_EXIT_ATINN_INPUT EXPORTING input l_varnam IMPORTING output l_varnam1 EXCEPTIONS OTHERS 1. IF sy-subrc 0. MESSAGE 特征内外码转换失败请联系开发人员检查处理 TYPE E. ENDIF. SELECT SINGLE atbez INTO l_atbez FROM cabnt WHERE atinn l_varnam1 AND spras sy-langu. IF sy-subrc 0. ENDIF. gv_message l_atbez 选项输入的物料 l_mat 未维护包材BOM无法使用请联系集团数据岗维护BOM. MESSAGE gv_message TYPE I. * MESSAGE 输入物料未维护包材BOM无法使用请联系集团数据岗维护BOM TYPE E. ENDIF. lv_matnr . ENDIF. ENDLOOP. * CALL FUNCTION CUOV_SET_FUNCTION_ARGUMENT * EXPORTING * argument XXXX * vtype CHAR * sym_val l_value ** NUM_VAL * TABLES * match match * EXCEPTIONS * existing_value_replaced 1 * OTHERS 2. * * IF sy-subrc 0. ** Implement suitable error handling here * ENDIF. ENDFUNCTION.OD相关性语句如下PFUNCTION ZPP_GET_MATNR02 (ZCT_WERKS $PARENT.ZCT_WERKS, ZCT_GX $SELF.ZCT_GX, ZCT_FKT 无, ZCT_TD 无, ZCT_DT 无, ZCT_ZXSG 无, ZCT_ZXXG 无, ZCT_HGZ 无, ZCT_CB 无, ZCT_FWT 无, ZCT_ZBK 无, ZCT_FXJD 无, ZCT_WXYS 无, ZCT_VTWEG $PARENT.ZCT_VTWEG )对每个输入的特征调用具体的输入值其它全都做“无”的输入这样儿每类不在BOM中都会做一个弹窗MESSAGE提醒但是没用到CUOV_SET_FUNCTION_ARGUMENT函数MATCH表也为空只是利用这段逻辑起到一个提醒的作用仅供参考。

相关新闻

硬件与软件是如何进行连接的

硬件与软件是如何进行连接的

目录 一、硬件与软件连接的基础认知 二、常见硬件设备与软件连接场景 (一)智能家居系统 (二)工业自动化控制 (三)移动设备与外接配件 三、Java 实现硬件连接的技术手段 (一)网络…

2026/7/21 16:49:29 阅读更多 →
node-cobol开源社区与支持:如何获取帮助与贡献代码

node-cobol开源社区与支持:如何获取帮助与贡献代码

node-cobol开源社区与支持:如何获取帮助与贡献代码 【免费下载链接】node-cobol :tv: COBOL bridge for NodeJS which allows you to run COBOL code from NodeJS. 项目地址: https://gitcode.com/gh_mirrors/no/node-cobol node-cobol是一个为NodeJS构建的C…

2026/7/21 16:49:29 阅读更多 →
Windows 11安装全流程:DG分区与Dism++部署

Windows 11安装全流程:DG分区与Dism++部署

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

2026/7/21 16:49:29 阅读更多 →

最新新闻

CuPy实战指南:GPU加速NumPy计算,从入门到性能优化

CuPy实战指南:GPU加速NumPy计算,从入门到性能优化

在深度学习、科学计算和大规模数据处理领域,GPU加速已成为提升性能的关键。然而,直接使用CUDA C进行开发门槛高、周期长。如果你正在寻找一种既能利用GPU强大算力,又能保持像NumPy一样简洁优雅的Python开发体验的方案,那么CuPy无疑…

2026/7/21 21:25:47 阅读更多 →
Spring AI 2.0的Tool Calling功能详解与应用实践

Spring AI 2.0的Tool Calling功能详解与应用实践

1. Spring AI 2.0的Tool/Function Calling核心概念 在AI应用开发中,Tool Calling(也称为Function Calling)是一种常见模式,它允许AI模型与一组API或工具进行交互。Spring AI 2.0对这一功能进行了全面升级,提供了更强大…

2026/7/21 21:25:47 阅读更多 →
C++累乘算法实战:从整数溢出到工程实践,信息素养大赛真题解析

C++累乘算法实战:从整数溢出到工程实践,信息素养大赛真题解析

1. 这篇文章真正要解决的问题如果你正在准备信息素养大赛,或者刚开始学习C编程,面对一道看似简单的“累乘”题目,你是否曾有过这样的困惑:不就是从1乘到n吗?为什么还要专门写一篇文章?直接一个for循环不就好…

2026/7/21 21:25:47 阅读更多 →
研发接口文档怎么长期维护:zyplayer-doc把API、Markdown和变更记录放进同一个知识库

研发接口文档怎么长期维护:zyplayer-doc把API、Markdown和变更记录放进同一个知识库

研发接口文档怎么长期维护:zyplayer-doc把API、Markdown和变更记录放进同一个知识库 接口文档难维护,通常不是因为研发不愿意写文档。 真实原因往往是:接口说明在一个系统,需求文档在另一个系统,部署文档在文件夹里&am…

2026/7/21 21:25:47 阅读更多 →
OpenZeppelin Contracts 完全指南:从入门到精通,构建安全的智能合约

OpenZeppelin Contracts 完全指南:从入门到精通,构建安全的智能合约

引言:为什么需要 OpenZeppelin Contracts? 在区块链应用开发,尤其是以太坊生态中,智能合约的安全性是重中之重。一次微小的代码漏洞就可能导致数百万甚至上亿美元资产的永久损失。然而,从零开始编写安全、高效且符合标…

2026/7/21 21:25:47 阅读更多 →
Jafka日志管理与清理策略:优化存储空间的10个技巧

Jafka日志管理与清理策略:优化存储空间的10个技巧

Jafka日志管理与清理策略:优化存储空间的10个技巧 【免费下载链接】jafka a fast and simple distributed publish-subscribe messaging system (mq) 项目地址: https://gitcode.com/gh_mirrors/ja/jafka Jafka作为一个高性能的分布式消息队列系统&#xff0…

2026/7/21 21:24:47 阅读更多 →

日新闻

Octane Render与C4D汉化版安装与优化指南

Octane Render与C4D汉化版安装与优化指南

1. Octane Render与C4D的黄金组合:为什么选择这个方案?在三维创作领域,渲染器的选择往往决定了作品的最终呈现质量和工作效率。作为Cinema 4D(C4D)用户,Octane Render的GPU加速特性与实时预览功能&#xff…

2026/7/21 0:00:19 阅读更多 →
GPMC接口设计:异步/同步模式与多路复用配置实战

GPMC接口设计:异步/同步模式与多路复用配置实战

1. GPMC接口设计:从硬件连接到软件配置的全局视角在嵌入式系统开发中,尤其是基于TI Sitara系列如AM263x这类高性能微控制器的项目里,外部存储器的扩展几乎是绕不开的一环。无论是存放大量非易失性代码的NOR Flash,还是作为高速数据…

2026/7/21 0:00:19 阅读更多 →
UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

UE5 GAS框架下RPG被动技能系统:从核心原理到实战实现

1. 项目概述:UE5 GAS RPG被动技能的核心价值在UE5里用GAS(Gameplay Ability System)做RPG游戏,主动技能像是你手里的武器,按一下打一下,逻辑直接,反馈也快。但被动技能,它更像是你身…

2026/7/21 0:00:19 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 8:48:31 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 8:25:39 阅读更多 →

月新闻