ABAP增强 CMOD 通过程序查找CMOD出口
ABAP屏幕增强总结整理
ABAP屏幕增强总结整理目录一:销售订单屏幕增强 VA01/VA02/VA03 (5)1:销售订单屏幕增强抬头屏幕增强 (5)A:屏幕增强实现 (5)B:屏幕增强位置 (6)2:销售订单屏幕增强行项目屏幕增强 (7)A:屏幕增强实现 (7)B:屏幕增强位置 (8)二:交货单(内向/外向)屏幕增强 (10)1:交货单抬头屏幕增强 (10)A:屏幕增强实现 (10)B:屏幕增强的位置 (14)2:交货单行项目屏幕增强 (15)A:屏幕增强实现 (15)B:屏幕增强的位置 (19)三:采购申请(ME51N/ME52N/ME53N) (19)A:屏幕增强实现 (19)B:屏幕增强位置 (25)四:采购订单(ME21N/ME22N/ME23N) (25)1.采购订单抬头屏幕增强 (25)A:屏幕增强实现 (25)B:屏幕增强位置 (30)2.采购订单行项目屏幕增强 (30)A:屏幕增强实现 (30)B:屏幕增强位置 (35)五:合同(框架协议) ME31K/ME32K/ME33K (35)1.合同(框架协议)抬头屏幕增强 (35)A:屏幕增强实现 (35)B:屏幕增强位置 (40)2.合同(框架协议)行项目屏幕增强 (41)A:屏幕增强实现 (41)B:屏幕增强位置 (45)六:询价单/报价单 ME41/ME42/ME43 (46)1.询价单/报价单抬头屏幕增强 (47)A:屏幕增强实现 (47)B:屏幕增强位置 (51)2.询价单/报价单行项目屏幕增强 (52)A:屏幕增强实现 (52)B:屏幕增强位置 (57)七:供应商主数据屏幕增强 (58)A:屏幕增强实现 (58)LFA1 供应商主数据 (一般地区) (58)LFB1 供应商主数据 (公司代码) (65)LFM1 供应商主记录购买组织数据 (73)B:屏幕增强位置 (80)八:客户商主数据屏幕增强 (81)A:屏幕增强实现 (81)KNA1 客户主文件的一般数据 (82)KNB1 客户主数据 (公司代码) (90)KNVV 客户主记录销售数据 (98)B:屏幕增强位置 (106)九:物料主数据屏幕增强 (107)A:屏幕增强实现 (107)a)新增视图子屏幕 (112)b)在原有视图子屏幕增加新字段 (119)B:屏幕增强位置 (125)十:工单 IW31/IW32/IW33 (127)1.工单抬头屏幕增强 (127)A:屏幕增强实现 (127)B:屏幕增强位置 (131)十一:项目屏幕增强 (131)A:屏幕增强实现 (131)B:屏幕增强位置 (135)十二:WBS屏幕增强 (135)A:屏幕增强实现 (135)B:屏幕增强位置 (138)十三:网络订单 CN21/CN22/CN23 CJ20N (139)1.网络抬头屏幕增强 (139)A:屏幕增强实现 (139)B:屏幕增强位置 (142)2.网络工序行项目屏幕增强 (143)A:屏幕增强实现 (143)B:屏幕增强位置 (146)十四:生产订单 CO01/CO02/CO03 (147)1.生产订单抬头屏幕增强 (147)A:屏幕增强实现 (147)B:屏幕增强位置 (151)十五:物料BOM CS01 / CS02 / CS03 (152)1.物料BOM抬头屏幕增强 (152)A:屏幕增强实现 (152)B:屏幕增强位置 (155)2.物料BOM行项目屏幕增强 (155)A:屏幕增强实现 (155)B:屏幕增强位置 (158)十六:资产主数据屏幕增强 AS01 / AS02 / AS03 (158)A:屏幕增强实现 (158)a)作为“折旧范围”表页的一个子屏幕显示 (163)b)创建一个新的表页并且在新表页中显示 (167)B:屏幕增强位置 (174)a)作为“折旧范围”表页的一个子屏幕显示; (174)b)创建一个新的表页并且在新表页中显示 (174)十七:设备主数据屏幕增强 IE01 / IE02 / IE03 (175)A:屏幕增强实现 (175)B:屏幕增强位置 (185)十八:功能位置主数据屏幕增强 IL01 / IL02 / IL03 (186)A:屏幕增强实现 (186)B:屏幕增强位置 (197)一:销售订单屏幕增强 VA01/VA02/VA031:销售订单屏幕增强抬头屏幕增强A:屏幕增强实现在表“VBAK”中APPEND一自定义的结构,如下图TCODE:SE80 程序名:SAPMV45A 屏幕:8309 如图:直接在屏幕上增强你所要的字段就可,如下图。
如何使用SMOD和CMOD进行SD的用户增强
如何使用SMOD和CMOD进行SD的用户增强1、关于增强的简单介绍1.1 SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强.1.2 User exits (Function module exits)是sap提供出口,它的命名规则如下:EXIT_<program name><3 digit suffix>示例:sd的VA01事务,对应的程序是SAPMV45A ,你会在程序里查到(用CALL CUSTOMER-FUNCTION字符串)如下代码:CALL CUSTOMER-FUNCTION '003'exportingxvbak = vbakxvbuk = vbukxkomk = tkomkimportinglvf_subrc = lvf_subrctablesxvbfa = xvbfaxvbap = xvbapxvbup = xvbup.则exit calls function module的名称就是: EXIT_SAPMV45A_0032、先试用SMOD建立一个SAP增强2.1、选择一个增强,如:SDVFX001 ,点击修改,进入sap增强维护屏幕;2.2、点击“组件”按钮,进入组件维护屏;2.3、将光标移到“功能模块名”,输入模块名,如:EXIT_SAPLV60B_001;2.4、选择“代码修改”按钮进入函数模块;2.5、双击函数模块的包含单元,进入包含单元加入自定义代码并激活保存;3、使用CMOD建立增强项目3.1、输入自定义的项目名,点击“创建”;3.2、进入增强项目,选择“配置增强”,进入增强配置屏幕;3.3、输入增强名如:SDVFX0013.4、保存,并退出;4、使用CMOD将增强项目激活,便大工告成。
如何查找*判断是否存在相应增强的定义(SMOD)select single name from modsapa into mod0-namewhere name = 'PPCO0002'.if sy-subrc = 0.endif.select single * from tadir into ps_tadir_dbwhere pgmid = 'R3TR'and object = 'SMOD'and obj_name = 'PPCO0002'.*判断是否存在相应增强项目的定义(CMOD)SELECT SINGLE name FROM MODATTR into mod0-nameWHERE NAME = 'PPCO0002'..*提取增强的定义的组件 (可以用此反查增强定义)select * from modsapwhere name = 'PPCO0002'.*判断该增强是否移植到BADI实现*Enhancement & has already been migrated in Business Add-In definition select single migrated badi_def into (migrated, exit_name)from modsapa where name = modname.if sy-subrc = 0 and migrated = seex_true.message s621 with modname exit_name.check mode ne 'CHAM'.endif.MODTYP 类型:E : 功能退出S : 屏幕T : 表C : GUI代码sap增强存在MODSAP表内*获取增强组件的参见函数MOD_SAP_MEMBER_TEXT*获得退出功能模块的信息select single * from tftitwhere "SPRAS" = '1' AND "FUNCNAME" = 'EXIT_SAPLCORE_001' if sy-subrc = 0.endif.*值得学习的函数MOD_KUN_ACTIVATE(会操作相关报表)。
SAP 增强出口概述
SAP用户出口有几种:第一种是在系统预留的出口程序中插入自定义代码,Hard Code;第二种是使用功能组,借助TCode:CMOD和SMOD;第三种是传说中的BADI,是最新的技术。
调用方式是CALL METHOD (instance),相关的TCODE是SE18和SE19,可以通过EXIT_HANDLER这个单词查找BADI;第四种是BTE,即Business Transaction Events (Open FI),好像专给财务用的;第五种是字段增强,过时的技术,效率很低,移植不便,但是有时候也不得不用它;第六种是屏幕增强,用来对付苛刻的用户,这一种和第二种稍有重叠。
为实现某种客户功能,大部分的情形使用标准预留出来的接口即可实现,但是极端的时候我们可能不得不去更改标准程序。
如何使用SMOD和CMOD进行SD的用户增强1、关于增强的简单介绍1.1 SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强.1.2 User exits (Function module exits)是sap提供出口,它的命名规则如下:EXIT_<program name><3 digit suffix>示例:sd的VA01事务,对应的程序是SAPMV45A ,你会在程序里查到(用CALL CUSTOMER-FUNCTION字符串)如下代码:CALL CUSTOMER-FUNCTION '003'exportingxvbak = vbakxvbuk = vbukxkomk = tkomkimportinglvf_subrc = lvf_subrctablesxvbfa = xvbfaxvbap = xvbapxvbup = xvbup.则exit calls function module的名称就是: EXIT_SAPMV45A_0032、先试用SMOD建立一个SAP增强2.1、选择一个增强,如:SDVFX001 ,点击修改,进入sap增强维护屏幕;2.2、点击“组件”按钮,进入组件维护屏;2.3、将光标移到“功能模块名”,输入模块名,如:EXIT_SAPLV60B_001;2.4、选择“代码修改”按钮进入函数模块;2.5、双击函数模块的包含单元,进入包含单元加入自定义代码并激活保存。
ABAP-SAP增强应用实例
SAP增强应用实例SAP增强大家都很熟悉,在此不再详细讲解,下面只是通过一个实例来展示一下增强的应用。
系统增强实例为建立工单前进行校验,如没有进行标准成本发布则提示错误信息E。
T-code:CMOD通过增强程序我们可以控制相关应用,如果你不知道到底功能是用到的哪个增强,那么请看我附录上的列表。
我们以ppco0006举例如下:如图2.我们需要的是制定我们的组件,如图3.通过功能退出增加增强语句:如图4:双击程序后加入如下语句~~~~if sy-tcode <> 'CK11N' and sy-tcode <> 'CK40N'.data:begin of l_matnr,matnr like mbew-matnr,VPRSV like mbew-VPRSV,vjvpr like mbew-vjvpr,pprdl like mbew-pprdl,lplpr like mbew-lplpr,end of l_matnr.select single matnr vprsv vjvpr pprdl lplpr from mbew into l_matnrwhere matnr = CAUFVD_IMP-MA TNR* and pprdl <> ''* and lplpr <> ''and bwkey = CAUFVD_IMP-WERKS.* and vjvpr = 'S'.if l_matnr-vprsv = 'V'./移动平均价exit.elseif sy-subrc <> 0 or ( l_matnr-pprdl is initial and l_matnr-lplpr is initial ).message e888(sabapdocu) with '物料' CAUFVD_IMP-MATNR'没有做成本估算, 不能创建生产订单,请通知SAP 方丈,yeah~~~!'.exit.endif.endif.OK,快去看看你增强后的效果吧~~~~~¥%&%&*(*(SAP所有模块用户出口:用户出口名称短文本描述0VRF0001 客户指定路线确定AAIC0001 IM 总结: 在选择后处理数据AAIC0002 IM 总结: 在选择后处理指定的输入项AAIP0001 IM 追溯: 实际价值对预算类别的分配AAIP0002 IM 追溯: 定义用户定义的指标AAIP0003 IM 追溯: 定义用户定义的特性AAIR0001 IM-IS: 适用请求报表中的用户值字段AAIR0002 IM-FA: 拨款申请的用户字段AAIR0003 IM: 创建拨款申请中的PM 定单时工作场所的分配AAIR0004 IM 追溯: 定义用户定义的特性AAIS0003 投资计量对资产的实际结算AAIS0004 全部计划值或预算值的结算AAPM0001 资产会计和工厂维护的集成ACBAPI01 会计核算: 对BAPI 界面的客户增强功能ACCID001 会计核算的IDoc 过程ACCID002 支出会计的IDoc 处理ACCOBL01 代码块中PAI 和PBO 的客户出口AD010001 更改对象清单及其层次AD010002 定界选择和/或过滤已定数据AD010003 创建自定义动态项目特性AD010005 创建自定义资源AD010006 菜单退出:更改动态项目值AD010007 更改DI 处理信息AFAR0001 External determination of ref. value for dep. calculation AFAR0002 External determination of depreciationAFAR0003 外部转换方式AFAR0004 报废比例值的确定AINT0001 当记帐资产时进行扩展的检查AINT0002 出入流水中冲销的替代...AINT0003 定义投资支持再付款的百分比/金额AINT0004 更改某围已过帐金额AINT0005 虚拟扩展语法检查. 不使用。
ABAP增强
• ABAP增强开发简介 • ABAP增强开发的发展
– 第一代,基于源代码的增强 – 第二代,基于函数模块的增强Exit – 第三代,基于面向对象概念的增强BADI – 第四代,新BADI
ABAP增强概念介绍
• SAP作为一个配置系统,在很多情况下不能满足公司的特定业务,在 这种情况下,增强的开发就必不可少了,而且增强的开发在开发中所 占的比例也是成上升趋势。所谓增强就是在SAP标准功能满足不了客 户需求的条件,根据企业实际需求编写客户化逻辑代码。SAP系统在 设计专门留的接口,每个接口对应一个客户化函数,这些出口函数有标 准处理程序传入的参数和输出参数,用户可根据系统输入参数作为条 件编写适合本企业流程的逻辑,然后通过输出参数传回给SAP。
SE18 和 SE19
• SE18是查看BADI • SE19是为BADI接口创建一个实例,从而在里 面实现想要增加的功能。
BADI存储
• badi对象的信息存储在SXS_INTER, SXC_EXIT, SXC_CLASS 和 SXC_ATTR 这四个表中(参见SECE包)。 • sap程序都会调用cl_exithandler=>get_instance来判断对象 是否存在,并返回实例;其实get_instance就是对上述几个 表和他们的视图(V_EXT_IMP 和 V_EXT_ACT)进行查询和搜 索。 • 基于这个机理,我查用ST05来监控一个TCODE来跟踪,然 后选择查找有关上述几个表和视图的操作,就可获得相关 BADI。
SMOD和CMOD
1
SMOD包含具体的增强。 CMOD是包含一组SMOD 编写的增强,通过CMOD 激活增强程序。
2
4
1)E . Enhancement exits 2) S . Subscreens(屏幕增强) 3)C . GUI codes,(GUI增强) 4)T . Include structure增强
ABAP增强查找方法
AP 增强已经发展过几代了,可参考 SAP 标准教材 BC425 和 BC427。
简单的说SAP的用户出口总共有四代:1、第一代基于源代码的增强。
SAP提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码,控制自己的需求。
这类增强都需要修改sap的标准代码。
示例:USEREXIT.. in SAPMV45A源代码增强以子程序形式发布,在 SAP 的发行版本中,使用 PERFORM 调用这些子程序,它们在发布时都是空的,集中在一些文件名倒数第二个字符为 Z 的包含程序中。
用户增强时,应首先到 service marketplace 申请对象键,然后才能修改这些子程序,这些子程序可以使用程序中所有的全局数据。
屏幕增强以客户屏幕形式发布,它们包含在标准程序中,没有什么特别规律。
这种源代码增强和屏幕增强的说明可以从事务码 spro 后台配置中相关模块的路径里面找到。
同时使用的针对数据表的增强是 append structure,可以在事务码 se11 中打开透明表,点击应用工具栏最右边的那个 append structure 按钮就能为数据表追加新的字段。
2、第二代基于函数模块的增强。
SAP提供的是CUSTOMER-FUNCTION,它是通过SMOD和CMOD完成实现。
源代码增强以函数模块形式发布,在 SAP 的发行版本中,使用 CALL CUSTOMER-FUNCTION 调用这些函数模块,它们在发布时只有一句代码 INCLUDE xxxxxxx。
用户增强时,无需申请对象键,直接双击这个包含,然后回车,就可以创建相关的包含文件,编写相应的代码了。
这些函数模块中只能使用接口中传递的参数,不能使用调用程序的全局变量。
屏幕增强也包含在函数模块所属的函数组中。
针对数据表的增强是 CI_ 结构,这些结构以 .INCLUDE 结构的形式包含在 SAP 发布的数据表中,用户可以通过向这些结构中添加字段而对数据表进行增强。
SAP增强讲解
第一代增强:用户增强该增强主要存在于Sales and Distribution查找该增强点有两种方法:以T-CODE:V A02为例第一种方法:打开T-CODE:V A02菜单栏:System->Status 弹出对话框复制Program(screen)进入SE38点击Display 显示程序一般为Module Pool属性的程序,在这样的程序里有很多include程序,一般第一代增强都存在于include程序中,其include程序名特点是程序名倒数第二为为‘Z’。
一般运用搜索功能输入’ userexit*’搜索结果会找到很多以’ userexit’为开头的FORM子程序,以include程序‘MV45AFZZ‘中的增强点’FORM USEREXIT_SA VE_DOCUMENT.‘为例继续往下翻点击‘FORM USEREXIT_SA VE_DOCUMENT.’进入这样我们可以在这个FORM中写相应的代码来进行增强,在做增强选择‘更改’按钮时,需要申请ACCESS KEY然后既可以在这个子程序这个增强点里面写一个相应的代码第二种查找增强点的方法:T-CODE:SPRO选择该按钮进入一下画面找到Sales and Distribution:点击一下图中按钮弹出文本对话框,看到很多INCLUDE程序名我们找到第一种方法找到的INCLUDE程序名进入SE38输入include程序名‘MV45AFZZ’找到第一种方法找到的增强点在增强点输入相关代码后,即可对V A02增强如图中支付条件VBKD- ZTERM行项目类型VBAP- PSTYV行项目数量VBAP- KWMENG If VBAP- PSTYV = ‘tan’.If VBAP- KWMENG > 100.Message ‘数量不能大于100’ TYPE ‘E’.Endif.Endif.进行条件限制,做相关增强。
第二代增强个人理解的介绍:第二代增强是基于FUNCATION的增强,如果把T-CODE在运行时会触发一些SAP预留的没有代码的FUNCATION,可以把这些FUNCA TION称作为CALL FUNCTION-CUSTOMER。
SAP中寻找增强的实现方法
SAP中寻找增强的实现方法在SAP系统中,增强是一种常见的功能扩展方法。
增强允许开发人员在不修改标准SAP源代码的情况下,对应用程序进行定制和扩展。
本文将介绍一些在SAP中寻找增强的实现方法。
一、用户退出BAdIsBAdI(Business Add-Ins)是SAP系统中使用的一种增强方式。
BAdIs允许开发人员在标准程序的适当位置插入自定义代码。
要寻找可用的BAdI,可以通过事务码“SE18”或“SE19”来查找。
这些事务码提供了对SAP系统中可用BAdI的详细信息以及如何激活和实施BAdI的说明。
二、用户退出隐含出口隐含出口是指SAP标准程序中预留给用户定义代码的位置。
它们通常以“USEREXIT_”开头,并且可以用于进行自定义业务逻辑。
要找到可用的隐含出口,可以使用事务码“CMOD”或“SMOD”。
这些事务码提供了对SAP系统中可用隐含出口的详细信息以及如何激活和实施这些出口的说明。
三、自定义表(Z表)在SAP系统中,可以创建自定义表(Z表)来存储特定于业务需求的数据。
这些表可以在标准SAP表的基础上进行扩展或根据需要完全独立创建。
在自定义表中,可以定义自己的字段、索引和约束等。
自定义表可以通过使用数据字典(SE11事务码)和自定义程序(SE38事务码)进行创建和维护。
四、用户范围字段SAP允许在标准表中添加用户范围字段(USR02-SCOLL)。
这些字段可以用于存储特定用户的个性化数据。
用户范围字段可以通过使用数据字典(SE11事务码)来添加和维护。
五、隐含输出如果想要在标准SAP报表或打印程序中添加自定义输出,可以使用隐含输出。
隐含输出允许在标准输出之前或之后插入自定义数据和格式。
要了解如何添加隐含输出,可以参考相应的报表或打印程序的文档。
在输出表或打印模板中,可以添加自己的输出字段和格式,并使用ABAP逻辑进行处理。
总结:在SAP中寻找增强的实现方法有许多选择。
这些方法包括使用BAdIs、隐含出口、自定义表、用户范围字段和隐含输出。
abap mod用法 -回复
abap mod用法-回复ABAP MOD用法详解ABAP(Advanced Business Application Programming)是一种针对SAP系统开发的编程语言。
MOD是ABAP语言中的一个关键字,用于对给定变量进行取模操作。
在本文中,我们将详细讨论ABAP MOD关键字的用法和应用场景。
首先,让我们了解一下MOD关键字的基本语法。
MOD的语法结构如下:MOD divisor.以上语法表示对给定变量进行取模运算,并将结果返回。
divisor是一个整数值,表示取模运算的除数。
接下来,我们将通过一些示例来说明MOD的用法。
假设我们有一个整数变量num,并且想要将num对某个除数进行取模运算。
下面是一个示例代码片段:DATA: num TYPE i,divisor TYPE i,result TYPE i.num = 10.divisor = 3.result = num MOD divisor.在上述代码中,变量num被赋值为10,divisor被赋值为3。
然后,MOD 关键字被用于对num进行取模运算,结果保存在result变量中。
在这个例子中,result的值将为1,因为10除以3的余数是1。
除了基本的用法外,ABAP MOD关键字还可以与其他算术运算符结合使用,如加法、减法和乘法。
下面是一个示例代码片段,展示了MOD关键字与其他算术运算符的组合使用:DATA: num TYPE i,divisor TYPE i,addend TYPE i,result TYPE i.num = 10.divisor = 3.addend = 5.result = (num + addend) MOD divisor.在上述示例中,我们先将num和addend相加,然后对结果进行取模运算,最后将结果保存在result变量中。
在这个例子中,result的值将为0,因为(10 + 5)除以3的余数是0。
abap mod用法
abap mod用法ABAP MOD用法引言:ABAP(Advanced Business Application Programming)是一种面向SAP应用程序开发的编程语言。
在ABAP中,MOD是一个重要的操作符,用于计算两个数相除后的余数。
本文将详细介绍ABAP MOD的用法,并逐步回答相关问题。
一、什么是ABAP MOD?ABAP MOD是一种数学操作符,用于计算两个数相除后的余数。
它可以用于整数和浮点数之间的运算,并产生一个整数型的余数值。
MOD操作符的使用方式为`x MOD y`,其中x和y为需要相除的两个数。
二、MOD的用途是什么?MOD操作符在实际编程中有广泛的应用。
下面列举几个常见的用途:1. 判断一个数是否能被另一个数整除:可以使用MOD操作符判断一个数是否能够被另一个数整除。
如果两个数相除后的余数为零,说明能整除;否则,不能整除。
2. 计算日期之间的差值:在处理日期和时间相关的逻辑时,我们经常需要计算两个日期之间的差值,例如计算两个日期之间相差的天数、小时数等。
使用MOD操作符可以方便地计算时间差中的余数,以便进一步进行业务逻辑的处理。
3. 实现循环计数器:在循环的迭代过程中,经常需要使用一个计数器来记录当前迭代的次数。
MOD操作符可以帮助我们实现循环计数器,每当计数器达到指定的值时,执行某个特定的逻辑。
三、如何在ABAP中使用MOD操作符?在ABAP中使用MOD操作符非常简单。
下面是一个示例代码,演示了如何在ABAP中使用MOD操作符:DATA: num1 TYPE i,num2 TYPE i,remainder TYPE i.num1 = 10.num2 = 3.remainder = num1 MOD num2.WRITE: 'The remainder of', num1, 'divided by', num2, 'is', remainder.在上述代码中,我们首先声明了三个整数型的变量`num1`、`num2`和`remainder`。
ABAP增强查找方法
ABAP增强查找方法隐式增强是指通过SAP提供的特定点,直接在标准程序中添加代码进行修改和扩展。
这种增强方式通常是在SAP扩展点上加入自定义代码,无需修改标准程序的源代码。
根据增强点的位置不同,隐式增强又可以分为前隐式增强和后隐式增强。
前隐式增强是指在标准程序执行之前进行增强,通常用于在数据读取前进行一些预处理操作,比如数据过滤、默认值设置等。
在前隐式增强中,最常用的增强点是SMOD/CMOD中的Enhancement Spot,在这里可以添加新的函数模块、加入BAdI或修改ABAP代码片段。
后隐式增强是指在标准程序执行后进行增强,通常用于在数据处理结果输出前进行一些后处理操作,比如数据修改、输出格式控制等。
在后隐式增强中,最常用的增强点是SMOD/CMOD中的Enhancement Spot和Exit调用函数接口(Exit-CIF)。
Enhancement Spot在这里可以增加函数模块,而Exit-CIF是一种可以通过调用函数接口替代特定输出的标准程序的技术。
显式增强是指通过修改标准程序的源代码,对其进行扩展。
这种增强方式通常是通过创建新的函数模块或类方法,并将其集成到标准程序中来实现。
显式增强的主要特点是修改了标准程序的源代码,因此需要谨慎操作,并进行严格的测试和验证。
在ABAP中,可以使用增强框架来管理和控制增强的使用。
增强框架提供了增强的创建、显示和分发功能,可以帮助开发人员更加方便地进行增强的管理和维护。
通过增强框架,开发人员可以轻松地找到所有的增强点,并查看和管理相关的增强对象。
总结起来,ABAP增强是一种对SAP系统中标准程序进行修改和扩展的技术手段。
通过隐式增强和显式增强的方式,可以满足特定业务需求,增强程序的功能和灵活性。
在使用增强技术时,需要合理选择增强点,根据具体情况选择隐式增强或显式增强,并通过增强框架进行管理和维护,以确保系统的稳定和可维护性。
sap abap查找增强的方法和程序查找增强方法
1、通过程序——查找第二代、第三代增强方法。
找到出口名称,在smod里面查找相应的增强组件,再去cmod里面创建包含多个组件的增强项目,再去实现这些增强(屏幕增强、结构增强字段增强等)。
其他方法:***方法一****************************************通过SE30,运行TCODE后,点Evaluate后,查看运行时间分析评估:命中清单。
找以“exit”开头的SAP程序,如:EXIT_SAPLIE01_007,这个FUNCTION就是TCODE提供的一个出口。
至于如何查看这个增强是属于哪个SMOD,能够查阅MODSAP这个表(SAP Enhancements).***方法二****************************************通过SE37中的:MODX_FUNCTION_ACTIVE_CHECK 函数来找,在函数的最后一行打个断点,再运行TCODE的,如果有增强则会跳入DEBUG界面,在DEBUG界面中,查看L_FUNCNAME字段对应的值,此值就是就是要找的出口,再去SE11中通过MODSAP来查看出口对就的是那个SMOD,接下来就可以在CMOD中创建增强组了,把找到的增强填入,最后根据实际的业务进行处理。
以上的两种方法是用来找第二代增强。
***方法三****************************************找BADI的方法。
先运行SE24,查看类对象CL_EXITHANDLER, 在其方法:GET_INSTANCE的14行(CALL METHOD CL_EXITHANDLER=>GET_CLASS_NAME_BY_INTERFACE)打上一个断点。
接下来运行事务代码,当有BADI是将会被执行,这时在DEBUG模式下,会进入类CL_EXITHANDLER 的GET_INSTANCE 方法,按F6执行这个方法之后,点参数EXIT_NAME查看其对应的值,所有的方法实现都在此类对象中,此时就是我们所要找的BADI。
增强的时候cmod和smod的区别
增强的时候cmod和smod的区别⼀、研究界⾯comd界⾯如下:smod界⾯如下:⼤致⼀看,界⾯基本⼀样,查看“对象组件”这个,comd多了“增强分配”这个项⽬,由此可见comd管理⽅⾯更规范。
cmod⾸先进⼊的是项⽬的编辑界⾯,要么创建⼀个新项⽬,要么修改原有的项⽬,然后将项⽬分配给增强⽂件rsap0001和激活出⼝函数以后,才能通过出⼝函数进⼊到function module界⾯进⾏abap代码编辑,⽽smod直接进⼊的就是增强⽂件rsap0001的输⼊界⾯,⽆需再次进⾏项⽬编辑,然后点进去以后可以双击相应的出⼝函数,直接进⼊到function module界⾯进⾏abap代码编辑,完成功能增强的操作。
⼆、权限不⼀样smod的权限很⼤,通常情况下在项⽬上我们只有cmod的权限,⽽没有smod的权限,虽然smod和cmod都可以调⽤增强⽂件rsap0001,最终也都可以实现功能增强的操作,但是smod是对所有的出⼝函数的操作,⽽cmod只可以为部分特定的出⼝函数做⼀个项⽬,也就是说在⼀个建⽴好的项⽬中所⽤到的出⼝函数就不能再被另外⼀个项⽬⽤了,⽐如我再建⽴⼀个新项⽬,⽤到rsap0001的时候,就会提⽰⼀⾏德⽂,它的意思是已经被某某项⽬⽤掉了三、注意事项ABAP程序员或者BI开发顾问,⼀般都会⽤到系统增强的CMOD,对于CMOD的增强使⽤有以下⼏点需要注意:1.CMOD与SMOD的区别:CMOD⽤于字段增强,ABAP,BW都会⽤到。
SMOD主要⽤于ABAP中的增强出⼝程序,BW中⼀般⽤不到2.CMOD中组件项⽬对应的增强内容:EXIT_SAPLRSAP_001:交易数据信息增强出⼝EXIT_SAPLRSAP_002:主数据信息增强出⼝EXIT_SAPLRSAP_003:主数据中的⽂本信息的增强出⼝EXIT_SAPLRSAP_004:hiberarchy信息增强出⼝注意:在BI7.0,EXIT_SAPLRSAP_003,作为过时的出⼝,已经不在⽤了,⽂本可⽤于EXIT_SAPLRSAP_002。
ABAP程序、增强开发逻辑
ABAP程序、增强开发逻辑⼀、创建报表(TCODE:SE80)1、确定报表的输⼊和输出字段2、了解前台操作,找到开发时需要⽤到的字段(⽅法:F1帮助;通过相关⽂档查询数据库表;ST05跟踪;/H跟踪SAP标准程序)3、根据输⼊字段确定报表逻辑流4、确定逻辑流后写出代码程序初稿5、进⾏测试6、数据没有问题则进⾏翻译和分配TCODE7、若测试后数据不正确,回到数据库表中查看是否取数错误或有逻辑运算处出错8、修改错误并翻译和分配TCODE⼆、修改已存在报表(TCODE:SE80或SE38)1、了解报表的基本逻辑流(⽅法:设置断点跟踪)2、找到出错的字段值或内表处3、根据出错处倒查报表逻辑在哪⾥出现问题4、修正错误三、WORKFLOW开发(TCODE:SE80,SWDD,SWU3,PPOMW)1、必须现在SWU3中定义Prefix number,否则WF不能在SWDD编辑器中激活2、了解WORKFLOW的程序代码的逻辑(⽅法:使⽤断点跟踪)3、根据已制定的业务来画出⼯作流的初稿4、进⼊SWDD⼯作流编辑器5、逻辑流中ACTIVITY查看每⼀步之中的TASK字段(在这中含有和此个ACTIVITY的具体执⾏事件),再检查AGENTS处,此处表明由哪些⼈员或群组执⾏此个ACTIVITY6、根据已定的业务流程画出业务中循环,条件的⼯作流步骤,并根据需求,将⼯作流程序的OBJECT中字段赋给循环和条件步骤的参数7、进⾏⼯作流测试,可在SWDD中直接进⾏执⾏测试8、若测试没有问题,创建⼯作流的开始点(触发点),通常,此处会与⼯作流程序的代码相对应,函数是:SWE_EVENT_CREATE9、进⾏测试10、测试没有问题后,使⽤TCODE:PPOMW 定义ACTIVITY的⾓⾊和⼈物四、BAPI和FUNCTION(TCODE:SE37,BAPI)BAPI和FUNCTION类似与普通程序的PERFORM,不同之处在于,BAPI和FUNTION已经被封装好,有独⽴和标准的输⼊输出1、寻找BAPI和FUNCTION,可以使⽤SE37中输⼊“*函数名*”来寻找或者直接在⽹上搜索相关的函数2、找到函数后,先查看他的IMPORT,了解函数的输⼊设置和每⼀个输⼊字段的意思3、查看完输⼊流的字段后,进⼊EXPORT和TABLES两个选项,⼀般输出时使⽤内表较多,所以TABLES选项需要查看更为仔细4、在SE37中点击运⾏进⾏测试,将预先找到的输⼊值填⼊相应的字段,运⾏,查看结果,如果结果和在SAP系统标准TCODE中有差异,则回到输⼊状态,检查输⼊值是否填错;也可以在已开发程序或标准程序中跟踪查看被调⽤函数的输⼊情况进⾏更改5、在⾃定义的程序中定义完输⼊输出值进⾏系统测试6、部分BAPI或FUNCTION可能不能被连续调⽤,之间可以加上WAIT语句进⾏等待五、ENHANCEMENT开发(TCODE:CMOD,SMOD,SE37)1、了解业务需求,知道是需要编写的是增强中的哪⼀种开发(菜单出⼝,屏幕出⼝,功能模块出⼝,关键字出⼝)2、根据需求通过MODX_FUNCTION_ACTIVE_CHECK函数中设置断点查看到已经存在的⽤户出⼝(增强);也可根据现在《SAP出⼝(增强)》⽂档进⾏查找⽤户所需要的出⼝增强3、找到增强以后,进⼊CMOD创建⼀个PROJECT,并把增强分配到创建的PROJECT中,再使⽤部件组,填⼊函数的出⼝名,并双击函数进⼊SE37界⾯进⾏增强代码的编写4、若通过⽂档直接找到了出⼝名称(USER EXIT),则可在CMOD中填⼊名称,查看到⽤户出⼝下的所有增强,选中需要的增强函数进⾏代码的编写六IDOC开发IDOC是⼀种类似XML的SAP系统与SAP系统或其他系统之间相互传递消息的⼯具1、设置IDOC类型WE31创建SEGMENT(类似XML的结点属性),WE30创建IDOC类型(定义结点之间的关系)2、创建消息类型(MESSAGE TYPE)WE81创建消息类型,WE82关联消息类型和IDOC类型3、创建对⽅的端⼝⾸先需要确定系统内已有R/3的连接,可⽤SM59进⾏检查和添加4、创建逻辑系统使⽤TCODE:SALE创建和分配逻辑系统(这将和后来的公司间传递⽤到的PARTNER有关)5、使⽤WE20定义需要传输的PARTNER PROFILE,并未每个PARTNER定义好INBOUND数据或者OUTBOUND数据的消息类型6、同时,为INBOUND和OUTBOUND的输⼊输出数据进⾏配置IDOC传输时的逻辑(如VOE4定义销售INBOUND的配置和VOE2定义转换成销售单后的基本销售区域等值)7、当配置都完成后,使⽤SAP增强,则根据<<SPAN style="FONT-FAMILY: 宋体">五、ENHANCEMENT增强>中查找增强并进⾏代码的编写七、BADI开发(TCODE:SE18,SE19)BADI对象的信息⼀般存储在SXS_INTER,SXC_EXIT,SXC_CLASS和SXC_ATTR这四个表⾥,SAP程序使⽤CL_EXITHANDLER=>GET INSTANCE来判断BADI对象是否存在(GET INSTANCE就是对上⾯四张表的视图V_EXT_IMP和V_EXT_ACT)进⾏查询和搜索1、BADI的寻找,先⽤SE38进⼊标准程序,全局搜索CL_EXITHANDLER,可以找到BADI相关的值(即可能需要⽤到的BADI),也可以通过SPRO中的帮助⽂档进⾏查找2、找到BADI后,使⽤SE18创建增强点(ENHANCEMENT SPOT)3、在创建'增强点元素定义'中创建'BADI DEFINITION和相对应的描述',4、并未BADI的接⼝创建描述5、创建完接⼝之后,为BADI创建METHODS事件,并为METHODS事件创建传输值(以上步骤即为BADI的定义,均可在SE18中定义完成)6、进⼊SE19,为刚刚创建的BADI增强点创建BADI的执⾏(Enhancement Implementation),创建完保存后,回到SE18中,能够看到BADI的Implementation已经被创建完成7、为BADI Implementation创建执⾏类,如正确,则能在实例类中看到刚刚在METHODS创建的输⼊数据,双击执⾏类中的MOTHODS,便进⼊了BADI的代码增强界⾯,在这之中输⼊需要增加的代码即可。
【ABAP增强】基于源代码的增强
【ABAP增强】基于源代码的增强基于源代码的增强实质上是对SAP所预留的空的⼦过程进⾏编码,⽤户可以编辑此⼦过程,并在这个⼦过程中添加⾃定义的代码,以增加SAP标准程序的控制功能。
1、通过系统IMG信息查找基于源代码的⽤户出⼝⼀般相近的功能的⼦程序出⼝都会放在⼀个统⼀的INCLUDE程序中,SAP的程序执⾏会调⽤该⼦程序,可以通过SAP的IMG(系统配置⼯具)获取相关的出⼝程序的信息。
输⼊事务代码SPRO进⼊IMG界⾯,以查找销售相关的出⼝信息为例,可依次选择“销售与分销”-“系统修正”-“⽤户出⼝”命令,如下图所⽰:单击菜单中的按钮,可以看到SAP所提供的该节点所对应的功能介绍,类似于F1的帮助,会对所提供的⽤户出⼝程序类型、名称和功能做简单的介绍,如下图所⽰:通过说明⽂档可以获取SAP预定义的出⼝名称,如上图在IMG可以看到包含的源码出⼝Include包括MV45ATZZ、MV45AOZZ、MV45AIZZ、MV45AFZZ等。
2、通过开发类来查找基于源代码的⽤户出⼝⼤部分销售及分销的程序都是基于源码控制来实现增强的,该类增强包含在开发类VMOD中,通过SE80可以查找该开发类所包含的所有对象。
执⾏事务代码SE80,在对象类型下⾯选择Package表⽰以开发类为条件,在对象名称中输⼊开发类名称VMOD,回车,可以看到在列表中将带出该开发类所包含的所有对象,包括字典对象、函数组、Include程序等等,该开发类所对应的出⼝程序都在“包含”列表中,具体如下图所⽰:3、基于源码的⽤户出⼝应⽤以出⼝程序MV45AFZZ为例,该出⼝程序主要是在销售订单执⾏时候被调⽤,通过ABAP编辑打开并查看源代码,可以发现该程序中包含了很多空的⼦程序,在程序中会对这些⼦程序做⼀些简单的注释说明,具体代码如下:***INCLUDE MV45AFZZ .************************************************************************* ** This include is reserved for user modifications ** ** Forms for sales document processing ** ** The name of modification modules should begin with 'ZZ'. ** **************************************************************************---------------------------------------------------------------------** FORM ZZEXAMPLE **---------------------------------------------------------------------** text...................................... **---------------------------------------------------------------------**FORM ZZEXAMPLE.* ...*ENDFORM.*eject*---------------------------------------------------------------------** FORM USEREXIT_DELETE_DOCUMENT **---------------------------------------------------------------------** This userexit can be used to delete data in additional tables ** when a sales document is deleted. ** ** This form is called in dialog at the end of form BELEG_LOESCHEN* * just before form BELEG_SICHERN is performed to delete the * * datas on the database. ** **---------------------------------------------------------------------*FORM USEREXIT_DELETE_DOCUMENT.ENDFORM.*eject*---------------------------------------------------------------------** FORM USEREXIT_FIELD_MODIFICATION **---------------------------------------------------------------------** This userexit can be used to modify the attributes of ** screen fields. ** This form is processed for each field in the screen. ** ** The use of the fields screen-group1 to screen-group4 is: ** ** Screen-group1: Automatic modification contolles by transaction** MFAW. ** Screen-group2: Contents 'LOO' for steploop-fields. ** Screen-group3: Used for modififaction, which are dependent on * * control tables or other fix information. ** Screen-group4: Unused ** ** For field mofifications, which are dependent on the document ** status, you can use the status field in the workareas ** XVBAP for item status and XVBUK for header status. ** ** This form is called from module FELDAUSWAHL. ** **---------------------------------------------------------------------*FORM USEREXIT_FIELD_MODIFICATION.* CASE SCREEN-GROUP3.* WHEN '900'.* WHEN '900'.* IF VBAK-VBTYP NE 'A'.* SCREEN-ACTIVE = 0.* ENDIF.* ENDCASE.* CASE SCREEN-NAME.* WHEN 'VBAK-VBELN'.* SCREEN-ACTIVE = 0.* ENDCASE.ENDFORM.*eject*---------------------------------------------------------------------** FORM USEREXIT_MOVE_FIELD_TO_VBAK * *---------------------------------------------------------------------** This userexit can be used to move some fields into the sales * * dokument header workaerea VBAK. ** ** SVBAK-TABIX = 0: Create header ** SVBAK-TABIX > 0: Change header ** ** This form is called at the end of form VBAK_FUELLEN. * * **---------------------------------------------------------------------*FORM USEREXIT_MOVE_FIELD_TO_VBAK.* vbak-zzfield = xxxx-zzfield2.ENDFORM.*eject*---------------------------------------------------------------------** FORM USEREXIT_MOVE_FIELD_TO_VBAP * *---------------------------------------------------------------------** This userexit can be used to move some fields into the sales * * dokument item workaerea VBAP ** ** SVBAP-TABIX = 0: Create item ** SVBAP-TABIX > 0: Change item ** ** This form is called at the end of form VBAP_FUELLEN. * * **---------------------------------------------------------------------*FORM USEREXIT_MOVE_FIELD_TO_VBAP.* VBAP-zzfield = xxxx-zzfield2.ENDFORM.*eject*---------------------------------------------------------------------** FORM USEREXIT_MOVE_FIELD_TO_VBEP * *---------------------------------------------------------------------** This userexit can be used to move some fields into the sales * * dokument schedule line workaerea VBEP ** ** SVBEP-TABIX = 0: Create schedule line ** SVBEP-TABIX > 0: Change schedule line ** ** This form is called at the end of form VBEP_FUELLEN. * * **---------------------------------------------------------------------*FORM USEREXIT_MOVE_FIELD_TO_VBEP.* VBEP-zzfield = xxxx-zzfield2.ENDFORM.*eject*---------------------------------------------------------------------** FORM USEREXIT_MOVE_FIELD_TO_VBKD **---------------------------------------------------------------------** This userexit can be used to move some fields into the sales ** dokument business data workaerea VBKD ** ** SVBKD-TABIX = 0: Create data ** SVBKD-TABIX > 0: Change data ** ** This form is called at the end of form VBKD_FUELLEN. ** **---------------------------------------------------------------------*FORM USEREXIT_MOVE_FIELD_TO_VBKD.* VBKD-zzfield = xxxx-zzfield2.ENDFORM.*eject*---------------------------------------------------------------------** FORM USEREXIT_NUMBER_RANGE **---------------------------------------------------------------------** This userexit can be used to determine the numberranges for ** the internal document number. ** ** US_RANGE_INTERN - internal number range ** ** This form is called from form BELEG_SICHERN ** **---------------------------------------------------------------------*FORM USEREXIT_NUMBER_RANGE USING US_RANGE_INTERN.* Example: Numer range from TVAK like in standard* US_RANGE_INTERN = TVAK-NUMKI.ENDFORM.*eject*---------------------------------------------------------------------** FORM USEREXIT_PRICING_PREPARE_TKOMK * *---------------------------------------------------------------------** This userexit can be used to move additional fields into the ** communication table which is used for pricing: ** ** TKOMK for header fields ** ** This form is called from form PREISFINDUNG_VORBEREITEN. * * **---------------------------------------------------------------------*FORM USEREXIT_PRICING_PREPARE_TKOMK.* TKOMK-zzfield = xxxx-zzfield2.ENDFORM.*eject*---------------------------------------------------------------------** FORM USEREXIT_PRICING_PREPARE_TKOMP * *---------------------------------------------------------------------** This userexit can be used to move additional fields into the ** This userexit can be used to move additional fields into the ** communication table which is used for pricing: ** ** TKOMP for item fields ** ** This form is called from form PREISFINDUNG_VORBEREITEN. * * **---------------------------------------------------------------------*FORM USEREXIT_PRICING_PREPARE_TKOMP.ENDFORM.*eject*---------------------------------------------------------------------** FORM USEREXIT_READ_DOCUMENT **---------------------------------------------------------------------** This userexit can be used to read data in additional tables ** when the program reads a sales document. ** ** This form is called at the end of form BELEG_LESEN. ** **---------------------------------------------------------------------*FORM USEREXIT_READ_DOCUMENT.ENDFORM.*eject*---------------------------------------------------------------------** FORM USEREXIT_SAVE_DOCUMENT **---------------------------------------------------------------------** This userexit can be used to save data in additional tables ** when a document is saved. ** ** If field T180-TRTYP contents 'H', the document will be ** created, else it will be changed. ** ** This form is called at from form BELEG_SICHERN, before COMMIT * * **---------------------------------------------------------------------*FORM USEREXIT_SAVE_DOCUMENT.* Example:* CALL FUNCTION 'ZZ_EXAMPLE'* IN UPDATE TASK* EXPORTING* ZZTAB = ZZTAB.ENDFORM.*eject*---------------------------------------------------------------------** FORM USEREXIT_SAVE_DOCUMENT_PREPARE * *---------------------------------------------------------------------** This userexit can be used for changes or checks, before a ** document is saved. ** ** If field T180-TRTYP contents 'H', the document will be ** created, else it will be changed. ** ** This form is called at the beginning of form BELEG_SICHERN ** **---------------------------------------------------------------------*FORM USEREXIT_SAVE_DOCUMENT_PREPARE.ENDFORM.*eject*eject双击某⼀个⼦程序名,如USEREXIT_MOVE_FIELD_TO_VBAK,可以看到其在主程序中被调⽤的具体位置,如下图所⽰:(现在好像该功能已经失效)4、如何查找基于源码的⽤户出⼝的默认参数出⼝程序通过通过ABAP来进⾏修改,在ABAP编辑器中可以直接在所定义的⼦程序中添加代码。
abap中mod用法 -回复
abap中mod用法-回复ABAP中MOD用法MOD函数是ABAP语言中的一个函数,用于计算两个数相除后的余数。
在ABAP中,MOD函数可用于整型、浮点型、小数型和货币型字段。
本文将一步一步回答关于ABAP中MOD函数的使用。
第一步:了解MOD函数的语法与参数MOD函数的语法如下:MOD( dividend, divisor )其中,dividend为被除数,divisor为除数。
函数的返回值为被除数除以除数的余数。
需要注意的是,MOD函数只支持两个整数之间的余数运算。
如果两个参数中至少有一个为小数或浮点数,或者是小数型或货币型字段,则MOD 函数会引发运行时错误。
第二步:理解MOD函数的使用方法MOD函数可以用于各种情况。
以下是MOD函数在ABAP中的常见用途之一:1. 判断一个数是否能被另一个数整除MOD函数可以判断一个数是否能被另一个数整除。
如果两个数通过MOD 函数计算的余数为0,则被除数可以整除除数,否则不能整除。
例如,我们想要判断一个数n是否能被3整除,可以使用MOD函数进行如下判断:IF MOD( n, 3 ) = 0.WRITE: 'n可以被3整除'.ELSE.WRITE: 'n不能被3整除'.ENDIF.第三步:举例说明MOD函数的应用场景以下是MOD函数在实际应用中的几个典型场景:1. 针对一组数进行分类假设我们有一组整数,想要根据这组数与3的余数进行分类。
可以使用MOD函数将这组数分成三个类别:余数为0、余数为1和余数为2。
DATA: numbers TYPE TABLE OF i,zeroes TYPE TABLE OF i,ones TYPE TABLE OF i,twos TYPE TABLE OF i.numbers = VALUE #( (1), (2), (3), (4), (5), (6), (7), (8), (9) ).LOOP AT numbers ASSIGNING FIELD-SYMBOL(<num>).CASE MOD( <num>, 3 ).WHEN 0.APPEND <num> TO zeroes.WHEN 1.APPEND <num> TO ones.WHEN 2.APPEND <num> TO twos.ENDCASE.ENDLOOP.这样,我们可以将这组数分成余数为0的集合zeroes=[3,6,9],余数为1的集合ones=[1,4,7],余数为2的集合twos=[2,5,8]。
abap中mod用法
abap中mod用法在ABAP编程语言中,MOD是一个常用的函数,用于求两个数的模。
它的用法非常简单,只需要将两个数作为参数传递给MOD函数,函数将返回两个数相除的余数。
MOD函数有以下语法结构:MOD ( dividend , divisor )其中,dividend是被除数,divisor是除数。
MOD函数将返回dividend除以divisor的余数。
可以使用MOD函数在ABAP中执行各种数学运算,例如计算某个数是否为另一个数的倍数。
下面是一些具体的例子来说明MOD函数的用法。
例子1:假设我们想要判断一个数字是否为偶数。
我们可以使用MOD函数将这个数字与2进行取模。
如果结果为0,则说明这个数字是偶数;如果结果不为0,则说明这个数字是奇数。
```DATA: num TYPE i.num = 10.IF MOD(num, 2) = 0.WRITE: '这个数字是偶数。
'.ELSE.WRITE: '这个数字是奇数。
'.ENDIF.```输出结果:这个数字是偶数。
例子2:考虑一个更复杂的例子,我们想要判断一个年份是否为闰年。
闰年是指可以被4整除但不能被100整除的年份,或者可以被400整除的年份。
```DATA: year TYPE i.year = 2024.IF MOD(year, 4) = 0 AND MOD(year, 100) <> 0 OR MOD(year, 400) = 0.WRITE: '这一年是闰年。
'.ELSE.WRITE: '这一年不是闰年。
'.ENDIF.```输出结果:这一年是闰年。
通过上述例子,我们可以看到MOD函数的用法非常灵活,可以根据具体需求来执行各种数学运算。
在ABAP编程中,了解和掌握MOD函数的使用可以提高代码的表达能力和灵活性。
需要注意的是,MOD函数对于除数为0的情况会引发一个异常。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
21 SY-VLINE,
22 'Description',
95 SY-VLINE.
WRITE:/(95) SY-ULINE.
LOOP AT JTAB.
SELECT SINGLE * FROM MODSAPT
SELECT SINGLE * FROM TADIR WHERE PGMID = 'R3TR'
AND OBJECT = 'FQ ENLFDIR-AREA.
MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
45(50) TSTCT-TTEXT.
SKIP.
IF JTAB[] IS NOT INITIAL.
WRITE:(95) SY-VLINE.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
WRITE:/1 SY-VLINE,
21 SY-VLINE,
22 MODSAPT-MODTEXT,
95 SY-VLINE.
ENDLOOP.
WRITE:/(95) SY-ULINE.
DESCRIBE TABLE JTAB.
CHECK FIELD1(4) EQ 'JTAB'.
SET PARAMETER ID 'MON' FIELD SY-LISEL+1(10).
CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.
AND OBJECT = 'PROG'
AND OBJ_NAME = TSTC-PGMNA.
MOVE : TADIR-DEVCLASS TO V_DEVCLASS.
IF SY-SUBRC NE 0.
WHERE SPRSL EQ SY-LANGU AND TCODE EQ P_TCODE.
FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
WRITE:/(19) 'Transaction Code - ',
20(20) P_TCODE,
TABLES:TSTC,TADIR,MODSAPT,TRDIR,TFDIR,ENLFDIR.
TABLES:TSTCT.
DATA:JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE.
DATA:FIELD1(30).
DATA:V_DEVCLASS LIKE TADIR-DEVCLASS.
WHERE SPRSL = SY-LANGU AND NAME = JTAB-OBJ_NAME.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE:/1 SY-VLINE,
2 JTAB-OBJ_NAME HOTSPOT ON,
ENDIF.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(95) 'Transaction Code Does Not Exist'.
ENDIF.
AT LINE-SELECTION.
GET CURSOR FIELD FIELD1.
SELECT SINGLE * FROM TRDIR WHERE NAME = TSTC-PGMNA.
IF TRDIR-SUBC EQ 'G'.
SELECT SINGLE * FROM TFDIR WHERE PNAME = TSTC-PGMNA.
SELECT SINGLE * FROM ENLFDIR WHERE FUNCNAME = TFDIR-FUNCNAME.
SKIP.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE:/ 'NO of Exits:',SY-TFILL.
ELSE.
FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
WRITE:/(95) 'No User Exit Exists'.
ENDIF.
ENDIF.
SELECT * FROM TADIR INTO TABLE JTAB WHERE PGMID = 'R3TR'
AND OBJECT = 'SMOD' AND DEVCLASS = V_DEVCLASS.
SELECT SINGLE * FROM TSTCT
PARAMETERS:P_TCODE LIKE TSTC-TCODE OBLIGATORY.
SELECT SINGLE * FROM TSTC WHERE TCODE EQ P_TCODE.
IF SY-SUBRC EQ 0.
SELECT SINGLE * FROM TADIR WHERE PGMID = 'R3TR'