从函数开始学习ABAP01

从函数开始学习ABAP01

  • 函数接口创建步骤
  • 实例1:供应商信息同步
  • 相关知识
    • 函数的属性
    • DATA定义时TYPE 和LIKE的区别
    • IN CORRESPONDING FIELDS OF TABLE
    • 表连接
    • 判断内表是否不为空
    • FOR ALL ENTRIES IN
    • READ TABLE
    • SY-SUBRC
    • SELECT 关键字
    • 运算符
    • CONVERSION_EXIT_ALPHA_OUTPUT
    • CALL FUNCTION

函数接口创建步骤

  1. SE11定义接口导入导出参数的结构
  2. 创建函数,定义好接口参数等,写代码

实例1:供应商信息同步

SE11定义接口同步字段结构ZOA_VENDOR
供应商信息同步函数接口参数设置:
导入:BURKS TYPE BURKS
表:T_VENDOR LIKE ZOA_VENDOR

代码:
用到的表:LFA1,LFB1,LFBK,BANK

FUNCTION sync_vendor_info_by_company_code DATA: it_vendor TYPE TABLE OF zoa_vendor, " 供应商数据表is_vendor TYPE zoa_vendor. " 供应商数据结构,表头it_lfbk TYPE TABLE OF lfbk, " 供应商银行信息数据表is_lfbk TYPE lfbk. " 供应商银行信息数据结构,表头*"----------------------------------------------------------------------
*" 通过公司代码获取供应商信息
*"----------------------------------------------------------------------SELECT DISTINCTlfa1~ lifnrlfa1~ name1 lfa1~bankl   lfa1~bankaIN CORRESPONDING FIELDS OF TABLE it_vendorFROM lfa1 INNER JOIN lfb1 ON lfa1~bukrs=lfb1~bukrsWHERE lfb1~bukrs = lv_company_code.*"----------------------------------------------------------------------
*" 根据输入参数已筛选出来的供应商信息查询银行信息
*"----------------------------------------------------------------------IF it_vendor[] IS NOT INNITIAL.SELECT * INTO TABLE it_lfbkFROM lfbk FOR ALL ENTRIES IN it_vendorWHERE lifnr=it_vendor~lifnr.*"----------------------------------------------------------------------
*" 关联供应商的银行信息并将供应商信息存储到输出表
*"----------------------------------------------------------------------LOOP AT it_vendor INTO is_vendor.CLEAR lt_vendor_output.READ TABLE it_lfbk INTO is_lfbk WITH KEY lifnr=is_vendor_lifnr.IF SY-SUBRC=0.is_vendor~bankl=is_lfbk~bankl.ENDIF.IF is_vendor~bankl <> ''.SELECT SINGLE banka FROM bnka INTO is_vendor~bnkaWHERE bankl=is_vendor~bankl.ENDIF.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'EXPORTINGINPUT=is_vendor~lifnrIMPORTINGOUTPUT=is_vendor~lifnr.APPEND it_vendor TO t_vendor.ENDLOOP.ENDFUNCTION.

相关知识

函数的属性

导入(Importing):这个属性用于指定函数模块的输入参数。当函数模块被调用时,调用者可以向这些输入参数传递数值或数据。在函数模块内部,这些参数是只读的,用于接收外部传入的数据供函数模块内部使用。

导出(Exporting):这个属性用于指定函数模块的输出参数。当函数模块执行完毕后,它可以把一些计算结果或处理后的数据通过这些输出参数返回给调用者。在函数模块内部,这些参数是只写的,用于向外部返回数据。

正在更改(Changing):这个属性用于指定函数模块的输入输出参数。调用者可以向这些参数传递数据,并且函数模块内部也可以修改它们。这样的参数通常用于既是输入又是输出的情况。

表(Tables):这个属性用于指定函数模块的表参数,通常用于传递类似数据库表格的结构化数据。表参数可以是导入、导出或者正在更改的。

例外(Exceptions):这个属性用于指定函数模块可能会抛出的异常情况。如果函数模块在执行过程中遇到了某种错误或者不符合预期的情况,就可以抛出一个例外,以便在调用函数模块的地方进行适当的处理。

DATA定义时TYPE 和LIKE的区别

在ABAP中,TYPE和LIKE都是用于定义数据对象的关键字,它们有一些区别:

  1. TYPE:使用 TYPE 时,你可以将数据对象的类型声明为预定义的数据类型、表类型、结构或类。例如,你可以这样声明一个内部表:
TYPES: BEGIN OF ty_customer,customer_id TYPE c LENGTH 10,customer_name TYPE string,END OF ty_customer.DATA: lt_customers TYPE TABLE OF ty_customer.

在这个例子中,我们使用了 TYPE 关键字将 lt_customers 声明为一个表类型的数据对象,其类型是我们在 TYPES 区块中预先定义的 ty_customer 结构类型。

  1. LIKE:使用 LIKE 时,你可以基于另一个数据对象的结构定义新的数据对象。例如,你可以这样声明一个变量:
DATA: ls_source TYPE ty_customer,ls_target LIKE ls_source.

在这个例子中,ls_target 被声明为与 ls_source 相同类型的结构。这意味着 ls_target 将具有与 ls_source 相同的字段和长度。

总的来说,TYPE 用于引用预定义的类型或自定义类型,而 LIKE 用于基于已存在对象的类型来定义新的对象。

IN CORRESPONDING FIELDS OF TABLE

是一种在 ABAP 编程语言中使用的特殊运算符,它用于在两个表之间进行比较和数据传输。当使用该运算符时,ABAP 会自动比较两个表的相应字段,并将值从一个表传输到另一个表中。

表连接

在 ABAP 中,表连接用于在 SELECT 语句中联接多个数据库表,以便检索相关联的数据。ABAP 提供了几种不同类型的表连接关键字,以满足不同的需求。以下是一些常用的表连接关键字及其用法:

  1. INNER JOIN:内连接,只返回两个表中共有的行。
  2. LEFT OUTER JOIN:左外连接,返回左表中的所有行,以及右表中与左表中行匹配的行(如果有的话)。
  3. RIGHT OUTER JOIN:右外连接,与左外连接相反,返回右表中的所有行,以及左表中与右表中行匹配的行(如果有的话)。
  4. FULL OUTER JOIN:全外连接,返回左表和右表中的所有行,无论是否有匹配的行。如果没有匹配的行,则对应的列会包含空值。

判断内表是否不为空

IF itab[] IS NOT INITIAL.
ENDIF.

少了中括号[] 就变成判断内表表头是否为空,如果该内表恰好没有表头,那么永远为空。

FOR ALL ENTRIES IN

FOR ALL ENTRIES ININNER JOIN 是用于在 ABAP 中检索数据的两种不同方法,它们有一些区别和适用场景。

  1. FOR ALL ENTRIES IN

    • FOR ALL ENTRIES IN 是一种在 SELECT 语句中使用的特殊语法,允许我们根据一个内部表中的值来动态地筛选另一个数据库表中的数据。
    • 适用于当我们需要根据一个动态的、不固定的条件来检索数据时,特别是当我们需要根据内部表中的值来进行筛选时,FOR ALL ENTRIES IN 是非常有用的。
    • 通常用于在不同表之间进行关联,但是关联的条件是动态的,而不是固定的字段之间的关系。
  2. INNER JOIN

    • INNER JOIN 是用于将两个表中相关联的数据连接在一起的操作,返回两个表中共有的行。
    • 适用于在已知两个表之间存在某种固定的关联条件,并且我们希望将这两个表中相关联的数据连接在一起时使用。
    • 通常用于在 SELECT 语句中直接执行表连接,从而一次性检索出相关联的数据。

总的来说,FOR ALL ENTRIES IN 适用于动态条件下的数据检索,而 INNER JOIN 适用于已知条件下的数据连接。在实际应用中,我们可以根据具体的需求和条件选择合适的方法来检索和处理数据。

READ TABLE

在ABAP中,读取内部表的数据可以通过以下几种常见的方法:

  1. 使用READ TABLE语句READ TABLE语句可以用于按行索引或按键值来检索内部表的数据。例如:

    READ TABLE itab INDEX 5 INTO wa.
    READ TABLE itab WITH KEY field1 = value1 INTO wa.
    
  2. 使用LOOP AT语句遍历内部表:通过LOOP AT语句,您可以遍历整个内部表并处理每个元素的数据。例如:

    LOOP AT itab INTO wa." 在这里处理wa中的数据
    ENDLOOP.
    
  3. 使用ASSIGN语句ASSIGN语句可以将内部表的行赋值给一个字段符号或字段符号表。例如:

    ASSIGN itab[5] TO <fs>.
    
  4. 使用DESCRIBE TABLE语句DESCRIBE TABLE语句可以用于获取内部表的信息,如行数、行大小等。虽然它本身不直接用于读取内部表的数据,但可以用于确定循环的次数等信息。

SY-SUBRC

在ABAP中,SY-SUBRC是一个特殊的系统变量,用于表示最近一次数据操作的结果代码。当执行某些特定的数据操作后,系统会将相应的结果代码存储在SY-SUBRC中。而SY-SUBRC等于0表示最近的数据操作成功完成,没有发生错误。

下面是一些常见的情况,SY-SUBRC等于0的含义:

  • SELECT语句中,如果查询成功找到了匹配的数据行,SY-SUBRC会被设置为0。
  • READ TABLE语句中,如果成功找到了指定的行,SY-SUBRC也会被设置为0。
  • 在其他一些数据操作语句中,比如MODIFY, INSERT, DELETE等,如果操作成功完成,SY-SUBRC同样会被设置为0。

通过检查SY-SUBRC的值,程序可以根据数据操作的结果来采取相应的处理逻辑。通常,当SY-SUBRC等于0时,表示数据操作成功,可以继续进行后续的逻辑处理;而当SY-SUBRC不等于0时,表示可能出现了错误或者操作没有成功,需要进行相应的错误处理。

总之,SY-SUBRC=0表示最近的数据操作成功完成,这个特性在ABAP中经常被用来进行错误处理和流程控制。

SELECT 关键字

在ABAP中,SELECT语句用于从数据库表中检索数据。除了常规的SELECT语句外,还有一些相关的关键字可以增强SELECT语句的功能,其中包括以下几个常见的关键字:

  1. DISTINCTDISTINCT关键字用于指定只返回不同的值,即去重。在SELECT语句中使用DISTINCT关键字可以确保结果集中不含有重复的数据行。

  2. SINGLESINGLE关键字用于在SELECT语句中只获取一条符合条件的数据行。如果查询条件返回多条匹配数据,SINGLE将返回第一条匹配的数据行。

  3. FOR ALL ENTRIES INFOR ALL ENTRIES IN关键字用于在SELECT语句中使用内部表的值作为查询条件。通过FOR ALL ENTRIES IN可以实现根据内部表中的值来筛选数据库表中的数据。

  4. UP TO n ROWSUP TO n ROWS关键字用于限制SELECT语句返回的最大数据行数,其中n表示要返回的最大行数。

  5. ORDER BYORDER BY关键字用于在SELECT语句中指定排序顺序。通过ORDER BY可以按照指定的字段对结果集进行升序或降序排序。

  6. GROUP BYGROUP BY关键字用于在SELECT语句中对结果集进行分组。通常与聚合函数一起使用,用于对数据进行分组统计。

运算符

在ABAP中,有许多运算符可用于执行各种算术、逻辑和比较操作。以下是ABAP中常见的一些运算符及其功能:

算术运算符

  1. +-*/:加法、减法、乘法、除法运算符,用于执行基本的算术运算。

比较运算符

  1. =<><<=>>=:等于、不等于、小于、小于或等于、大于、大于或等于运算符,用于比较两个值的大小或相等性。

逻辑运算符

  1. ANDORNOT:逻辑与、逻辑或、逻辑非运算符,用于执行逻辑运算。

字符串连接运算符

  1. &:字符串连接运算符,用于连接两个字符串。

空值检查运算符

  1. IS INITIALIS NOT INITIAL:用于检查字段是否为空或初始化。

赋值运算符

  1. =:赋值运算符,用于将一个值赋给一个变量或字段。

类型转换运算符

  1. CAST:用于将一个值转换为另一种数据类型。

范围运算符

  1. BETWEENIN:用于检查值是否在指定范围内。

其他运算符

  1. MOD:取模运算符,用于获取除法的余数。
  2. **:幂运算符,用于计算一个数的指数。

这些是ABAP中常见的一些运算符,它们用于执行各种类型的操作,包括算术、逻辑、比较等。熟悉这些运算符可以帮助您更好地编写和理解ABAP程序。

CONVERSION_EXIT_ALPHA_OUTPUT

CONVERSION_EXIT_ALPHA_OUTPUT是一个标准的SAP函数,用于将输入的数据从内部格式转换为外部格式。通常情况下,这个函数用于将内部编号或代码转换为适合于显示或输出的格式。

这个函数在SAP中的主要作用是执行以下任务:

  1. 数据转换: 将输入的数据从内部格式转换为外部格式。例如,将一个内部编号转换为可读的、适合于显示的格式。

  2. 格式化输出: 将转换后的数据返回给调用程序,以便用于显示或输出。通常情况下,转换后的数据会更容易被用户理解或处理。

  3. 数据验证: 在转换数据之前,这个函数可能会对输入数据进行验证,以确保其符合特定的格式要求或规范。

代码中,CONVERSION_EXIT_ALPHA_OUTPUT函数被用于将is_vendor~lifnr字段的值从内部格式转换为外部格式,并将转换后的值存储回is_vendor~lifnr字段中。这样做的目的可能是为了确保供应商编号的格式符合特定的要求或标准,以便在显示或输出时能够正确地被处理和识别。

我们可以调这个函数来实现补0这个功能。

CONVERSION_EXIT_ALPHA_INPUT 对话退出ALPHA,外部->内部 这个是补0函数

CONVERSION_EXIT_ALPHA_OUTPUT 对话退出ALPHA,内部->外部 这个是除0函数

CALL FUNCTION

在function中,EXPORTINGIMPORTING关键字用于定义函数参数的传递方向。

  • EXPORTING关键字表示将参数的数值传递给被调用的函数。在函数调用时,这些参数的值会从调用者处传递给被调用的函数。

  • IMPORTING关键字表示将参数的数值从被调用的函数传递回调用者处。在函数调用之后,这些参数的值会从被调用的函数返回给调用者。

CALL FUNCTION适用于调用独立的函数模块,而PERFORM适用于在同一程序内部调用子例程或子程序

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

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

相关文章

攻防世界---web---Web_php_unserialize

1、题目描述 2、 3、分析代码 class Demo { private $file fl4g.php; }&#xff1a;定义了一个名为Demo的类&#xff0c;该类有一个私有属性$file&#xff0c;默认值为fl4g.php。 $a serialize(new Demo);&#xff1a;创建了一个Demo类的实例&#xff0c;并对其进行序列化&a…

智能监测,无忧续航!Battery Indicator for Mac,让电池状态尽在掌握

Battery Indicator for Mac 是一款设计精良的电池状态监测软件&#xff0c;它极大地增强了Mac用户对电池使用情况的感知和管理能力。 首先&#xff0c;Battery Indicator for Mac 能够实时显示电池电量百分比。这意味着&#xff0c;无论你是在处理文件、浏览网页还是观看视频&…

【栈】736. Lisp 语法解析

本文涉及知识点 栈 LeetCode736. Lisp 语法解析 给你一个类似 Lisp 语句的字符串表达式 expression&#xff0c;求出其计算结果。 表达式语法如下所示: 表达式可以为整数&#xff0c;let 表达式&#xff0c;add 表达式&#xff0c;mult 表达式&#xff0c;或赋值的变量。表达…

电影推荐系统配置运行

电影推荐系统配置运行 代码地址项目介绍&#xff08;引自原文&#xff09; 环境创建新环境激活环境安装包创建管理员用户(可选)启动 代码地址 movie 项目介绍&#xff08;引自原文&#xff09; 本推荐系统采用的是分层模型设计思想&#xff0c;第一层为前端页面模型设计&…

C++ primer例子1实现

问题 代码 Sales_item.h #include<iostream> #include<string> class Sales_item {public:Sales_item(){};Sales_item(std::string insid, int num, double price);friend std::istream& operator>>(std::istream& is, Sales_item& item);frie…

springboot 图形验证码 前后端分离解决方案 easy-captcha

easy-captcha介绍 easy-captcha&#xff0c;提供了Java图形验证码&#xff0c;支持gif、中文、算术等类型&#xff0c;可用于Java Web、JavaSE等项目&#xff0c;是个很好用的工具库&#xff0c;文档比较完备。 用法 添加maven依赖 <!--图形验证码--><dependency&g…

支付系统-业务账单

target&#xff1a;离开柬埔寨倒计时-210day 前言 最近不知道该写什么了&#xff0c;很多东西要写起来非常耗时间&#xff0c;写作是真的不容易呀 我们的支付系统账单有两大类&#xff0c;一个是业务账单还有一个就是资金记录&#xff0c;都是引发资金流后的资金变动表现&…

高效数据处理的前沿:【C++】、【Redis】、【人工智能】与【大数据】的深度整合

目录 1.为什么选择 C 和 Redis&#xff1f; 2.人工智能与大数据的背景 1.大数据的挑战 2.人工智能的需求 3.C 与 Redis 的完美结合 1.安装 Redis 和 Redis C 客户端 2.连接 Redis 并进行数据操作 高级数据操作 列表操作 哈希操作 4.与大数据和人工智能结合 5.实际应…

机器学习18个核心算法模型

1. 线性回归&#xff08;Linear Regression&#xff09; 用于建立自变量&#xff08;特征&#xff09;和因变量&#xff08;目标&#xff09;之间的线性关系。 核心公式&#xff1a; 简单线性回归的公式为&#xff1a; , 其中 是预测值&#xff0c; 是截距&#xff0c; 是斜…

【C语言】结构体(及位段)

你好&#xff01;感谢支持孔乙己的新作&#xff0c;本文就结构体与大家分析我的思路。 希望能大佬们多多纠正及支持 &#xff01;&#xff01;&#xff01; 个人主页&#xff1a;爱摸鱼的孔乙己-CSDN博客 欢迎 互粉哦&#x1f648;&#x1f648;&#xff01; 目录 1. 声明结构…

解锁财富新篇章:消费增值模式引领未来消费趋势

你是否曾对日常消费感到一丝单调&#xff0c;认为它仅仅是一种物质上的交换&#xff0c;而非财富增长的途径&#xff1f;那么&#xff0c;让我们为你打开一扇全新的消费之门——消费增值模式。这不仅是一种全新的消费体验&#xff0c;更是一种让你的资金在消费过程中不断积累与…

Oracle 19c linux安装

下载Oracle Database Preinstallation RPM&#xff0c;该包会自动下载依赖&#xff0c;创建oracle用户&#xff0c; 手动下载地址&#xff1a;https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/index.html wget http://yum.oracle.com/repo/OracleLinux/OL7/latest…

百度地图API 教程使用 嵌套到vue3项目中使用,能够定位并且搜索地点名称位置,反向解析获取经度和维度

文章目录 目录 文章目录 流程 小结 概要安装流程技术细节小结 概要 注册百度地图成为开发者&#xff1a; 登录百度账号 注册成功开始下一步 百度地图API是百度提供的一组开发接口&#xff0c;用于在自己的应用程序中集成地图功能。通过百度地图API&#xff0c;您可以实现地图…

PS的抠图算法原理剖析 1

以这个抠tree为例子 在PS里&#xff0c;操作过程是让你开启R G B三个通道 分别看一下 哪一个的对比最明显 上面的图片 树叶肯定B最少 天空B富裕&#xff0c;所以对比最明显的就用B通道 然后使用一些奇怪的函数&#xff0c;把texture.bbb这张图片变成黑白&#xff0c;纯黑纯白 那…

mysql连接不上可能的原因:防火墙放行mysql的3306端口 全库复制:data目录替换即可 mysql查看版本

1.看本地localhost能否连接 2.在本地看IP能否连接 能说明本地正常 权限也够 都能的话&#xff0c;ip能否ping通 能就说明可能是防火墙原因了。关闭防火墙及杀毒试试。 我这里关防火墙就能访问了。 windows如何开启防火墙&#xff0c;又放行mysql的3306端口&#xff1f; 在 …

微信小程序动画

微信小程序动画属性&#xff1a;提升用户体验的利器 引言 随着移动互联网技术的快速发展&#xff0c;微信小程序已经成为开发者和用户的热门选择。其轻便、快捷、即用即走的特点使得它在各种场景中都有广泛的应用。而动画作为一种重要的视觉元素&#xff0c;在增强用户体验方…

银行从业者心声:银行工作,是围城还是试炼场?

我的一个朋友&#xff0c;曾经对银行工作抱有美好的幻想&#xff0c;觉得那是一个光鲜亮丽、稳定无忧的职业。然而&#xff0c;当他真正踏入银行的大门&#xff0c;成为一名柜员后&#xff0c;才深刻体会到了其中的艰辛与不易。 他告诉我&#xff0c;银行的工作远非他想象中的…

十二、配置注解执行SQL

简化一下流程&#xff0c;主要可以分为下面几步&#xff1a; 1.解析配置&#xff0c;写入配置项 2.执行SQL 3.封装结果 通过注解配置SQL主要体现在解析部分&#xff0c;这部分要分别做解析XML还是配置注解的接口&#xff0c;拿到sql以后&#xff0c;select的处理和insert/upda…

【经典算法】LeetCode 392 判断子序列(Java/C/Python3/Go实现含注释说明,Easy)

作者主页&#xff1a; &#x1f517;进朱者赤的博客 精选专栏&#xff1a;&#x1f517;经典算法 作者简介&#xff1a;阿里非典型程序员一枚 &#xff0c;记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法&#xff08;公众号同名&#xff09; ❤️觉得文章还…

excel打开只显示菜单栏内容却不显示改如何处理

最近使用 excel 出现不显示内容的情况&#xff0c;双击文件后显示灰色&#xff0c;有两种情况会导致这种情况出现。 一、如果是隐藏了工作表&#xff0c;可采用如下方法操作 1、首先&#xff0c;打开需要操作的 excel 表格&#xff0c;可以看到表格内容是没有显示的。 2、接着…