《2022年sap开发者指导之三四 .pdf》由会员分享,可在线阅读,更多相关《2022年sap开发者指导之三四 .pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、SAP 开发者指导11 AnBoS 第三章 创建消息交互程序免不了利用MessageBox 反馈信息。 SAP 系统中的消息与其他开发环境中消息很类似。下面对他们来个对比:SAP 开发其他开发环境(C#为例)调用方法MESSAGE ID id TYPE mtype NUMBER n WITH par1 par2 par3 par4. MessageBox.Show(text,caption,buttons,icon);消息类型 A-终止, E-错误, I-信息, S-成功, W-警告,X- 退出并产生short dumpError ,Exclamation ,Hand,Information
2、,Question,Stop,Warning 存储位置存储在表T100 中自己找地方放吧SAP 中的消息能够完成很多默认的功能(例如:退出系统、终止程序并产生Short Dump) ,很适合信息系统的开发。而C#中的消息更灵活(灵活是有代价的,系统提供标准的功能,至于其他功能,都需要自己写),更美观。这样的对比也许没有意义,因为他们的开发对象本来就不同。用久了ABAP环境,你会觉得它很适合做信息系统的开发。美中不足是不能提供快速信息、参数信息, 也就是下图所示的内容。下面步入正题,说说SAP 开发中,消息的定义和调用。1、 运行 SE91,屏幕如下:输入欲创建的消息类名称,点击“Create”
3、按钮。屏幕如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - SAP 开发者指导12 AnBoS 2、 进入“ Messages ”视图,消息都在这里定义:一条消息能够含有4 个参数,用 &1 - &4表示,对应的Message调用时的 With &1 。如果这条消息需要Long text ,则不能选中“self-explanatory ” 。3、 点击“ Long Text”按钮,进入如下界面:名师资料总结 - - -精品
4、资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - SAP 开发者指导13 AnBoS 填写希望显示的信息。Long text 是什么呢?就是系统向GUI 反馈 Message, 用户双击Message或者点击按钮出现的详细消息。如果还不是很明白,接下来我会举例说明Message 的应用。1、 新建程序ZTest。程序内容为:MESSAGE ID Z001 TYPE I NUMBER 001. 2、 测试运行,系统会弹出一个对话框,结果如下:3、 点击按钮,
5、现在你该明白什么是“Long Text ”吧。除了利用 SE91 外,进入消息维护界面的另外一个途径是: ABAP编辑器中,菜单“转到-消息” 。调用 Message最简单的格式为: Message 消息内容 TYPE E. Message e000(Z001). 关于系统消息,有一个初学者容易犯的错误:写 Report 时,运用Message 并且指定了Message type,而系统表现出来的却不是这一个Message type 应该有的现象,这时,你就应该查看ABAP Keyword Documentation中关于Message 的说明,各种消息类型在不同的事件中表现不同。例如:在事件
6、 START-OF-SELECTION 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - SAP 开发者指导14 AnBoS 中调用警告信息,系统会产生一个错误信息,并直接退出程序。最后,我想知道一个问题:系统能够配置消息类型,例如,运行OMT4 ,能够配置采购方面的消息类型,使系统按照配置的消息类型显示。我们的自定义消息能否实现的呢?= 本章完成于20060623= 名师资料总结 - - -精品资料欢迎下载 - - - - -
7、 - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - SAP 开发者指导15 AnBoS 第四章 创建函数(方法)本章的标题本来定为“创建函数”,因为 Function 我们称为“函数” 。但是,现在谁不是OO编程呀,为了方便理解,把“方法”也写入标题。免得大家笑我老土。SAP 规定,所有函数都在函数组中。所以,我们应该先创建一个函数组。运行SE80,进入综合开发界面,下拉框中选择“函数组”。输入欲创建的函数组名称“Z_FUNGROUP ” ,回车,系统询问是否创建函数组。创建函数组后,我们
8、就能够着手写函数了。这次举例的函数功能如下:名称 Z_GENERATE_TLB 所属函数组 Z_FunGroup 功能根据输入的成品和数量,结合BOM 计算出需要的子物料和数量输入成品,需求数量输出子物料需求数量1、 运行 SE37,屏幕如下:输入欲创建的函数名称,点击“Create”按钮。系统弹出对话框,屏幕如下:输入函数组和短文本,点击“Save”按钮,进入函数创建界面,“Attributes ”视图如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 -
9、- - - - - - - - SAP 开发者指导16 AnBoS “Import ”视图如下:填写各个输入参数。Pass Value 指定参数传递形式。默认为“引用传递”可选的 指定此参数是否为可选参数“Export ”视图和“ Changing”视图都没有内容,下面是“Tables”视图:在这里填写我们的输出参数。Import、 Export、Changing、Tables 这四个视图用来填写输入输出参数,我们能够灵活运用。其中 Import 用来填写输入参数。Export 用来填写输出参数。Changing 用来填写输入输出参数。 Tables用来填写输入输出表格。2、 下面是关键部分“
10、Source Code”视图,其中的代码如下:- 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - - - - - - - - SAP 开发者指导17 AnBoS INCLUDE zincform. FUNCTION z_generate_tlb. DATA: BEGIN OF selpool. INCLUDE STRUCTURE cstmat. DATA: END OF selpool. DATA: dstst_flg LIKE csdata-xfeld
11、. YHG132854 DATA: BEGIN OF stb OCCURS 3000. INCLUDE STRUCTURE stpox. DATA: END OF stb. DATA: BEGIN OF matcat OCCURS 50. YHG133914 INCLUDE STRUCTURE cscmat. YHG133914 DATA: END OF matcat. YHG133914 DATA tmp_rdprf LIKE marc-rdprf. DATA tmp_cp LIKE marc-matnr. DATA tmp_i TYPE i. * 清空itab_entry CLEAR p_
12、entry. REFRESH p_entry. tmp_cp = p_cp. UNPACK tmp_cp TO tmp_cp. * 获得成品的 BOM CALL FUNCTION CS_BOM_EXPL_MAT_V2 EXPORTING capid = PP01 datuv = sy-datum ehndl = 1 zkexuan HGA108310 mtnrv = tmp_cp mehrs = X werks = BP01 stlal = 1 IMPORTING topmat = selpool dstst = dstst_flg YHG132854 TABLES stb = stb mat
13、cat = matcat EXCEPTIONS material_not_found = 4 no_plant_data = 8 no_bom_found = 12 no_suitable_bom_found = 16 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - SAP 开发者指导18 AnBoS alt_not_found = 24 *d missing_authorization = 28. HGD059252 mis
14、sing_authorization = 28 HGD059252 conversion_error = 36. HGD059252 * 删除子 BOM ,删除损耗 BOM ,删除 BOM 上的非物料项 DELETE stb WHERE stufe 1. DELETE stb WHERE mtart = 999. DELETE stb WHERE postp L. * 套料计算、单位换算、取整、获得默认的库位和发货单位 LOOP AT stb. SELECT SINGLE ausme lgfsb rdprf INTO (stb-romei,stb-lgpro,tmp_rdprf) FROM m
15、arc WHERE matnr = stb-idnrk. IF stb-romei = . stb-romei = stb-mmein. ENDIF. stb-menge = stb-menge * p_sl. IF stb-romei stb-meins. CALL FUNCTION MATERIAL_UNIT_CONVERSION EXPORTING input = stb-menge kzmeinh = X - umrechnen in MARA-MEINS matnr = stb-idnrk meinh = stb-meins IMPORTING output = stb-menge
16、EXCEPTIONS conversion_not_found = 1 input_invalid = 2 material_not_found = 3 meinh_not_found = 4 meins_missing = 5 no_meinh = 6 output_invalid = 7 overflow = 8 error_message = 9 Alle Fehler abfangen OTHERS = 10. ENDIF. CALL FUNCTION CHECK_ROUNDING_PROFILE EXPORTING plant = BP01 名师资料总结 - - -精品资料欢迎下载
17、- - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 11 页 - - - - - - - - - SAP 开发者指导19 AnBoS profile = tmp_rdprf quantity_in = stb-menge * KZ_USE_IRDPR = XFLAG IMPORTING quantity_out = stb-menge * TABLES * IRDPR = L_RUNDUNGSPROFIL_TAB EXCEPTIONS profile_not_found = 01. IF stb-romei stb-
18、meins. CALL FUNCTION MATERIAL_UNIT_CONVERSION EXPORTING input = stb-menge kzmeinh = space matnr = stb-idnrk meinh = stb-romei meins = stb-mmein IMPORTING output = stb-menge EXCEPTIONS conversion_not_found = 1 input_invalid = 2 material_not_found = 3 meinh_not_found = 4 meins_missing = 5 no_meinh = 6
19、 output_invalid = 7 overflow = 8 error_message = 9 Alle Fehler abfangen OTHERS = 10. ENDIF. MODIFY stb. tmp_i = tmp_i + 1. p_entry-fflh = tmp_i. stb-index. p_entry-flh = stb-idnrk. REPLACE 0000000000 WITH INTO p_entry-flh. CONDENSE p_entry-flh. PERFORM get_matename USING p_entry-flh CHANGING p_entry
20、-fms. p_entry-fsl = stb-menge. p_entry-fdw = stb-romei. P_ENTRY-FCK = stb-lgpro. APPEND p_entry. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 11 页 - - - - - - - - - SAP 开发者指导20 AnBoS ENDLOOP. ENDFUNCTION.- 这段程序有几个注意点:a.Include 关键字只能出现在Function 之外。b.利用系统函数 CS_
21、BOM_EXPL_MAT_V2来获得 BOM 的当前信息。c.利用系统函数MATERIAL_UNIT_CONVERSION进行计量单位转换。d.利用系统函数 CHECK_ROUNDING_PROFILE计算物料的取整参数文件。3、 保存并激活该函数。在程序中调用函数的格式如下:CALL FUNCTION func. EXPORTING p1 = f1 . pn = fn IMPORTING p1 = f1 . pn = fn TABLES p1 = itab1 . pn = itabn CHANGING p1 = f1 . pn = fn EXCEPTIONS except1 = rc1 .
22、exceptn = rcn 注意:函数编辑器中的Import 参数,在调用函数时,就变成了EXPORTING 参数。例如:对于Z_GENERATE_TLB的调用 CALL FUNCTION Z_GENERATE_TLB EXPORTING p_cp = head-fcp p_sl = head-fsl TABLES p_entry = itab_entry. 对于物料计量单位的转换,我们还能够利用CF_UT_UNIT_CONVERSION函数,不过,其输入参数“ VALUE_OLD_IMP”数据类型是 Quan 9(3) ,如果你在调用参数时数据长度长过9位(即使实际值的长度没有超过9位),系
23、统就会出错。 常用的函数还有:币别转换 CONVERT_TO_LOCAL_CURRENCY。最后提醒各位:SAP 系统内置了大量的函数,需要某些基本功能时,现在系统中找一找,系统常常会给你惊喜。打印过程中,常常存在数字转换成带千分位的问题,该函数要求如下:函数名称 Z_Quan_to_string 输入 P_Quan 数字P_Decimals 希望显示的小数位数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - SAP 开发者指导21 AnBoS 输出 P_string 带有千分位且符合指定小数位数的字符串有兴趣的同学能练练手,最好能mail 给我,我们评比出最规范的代码。= 本章完成于20060623= 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -