外挂子系统在SAP R3系统中的运用.docx
- 文档编号:3946097
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:15
- 大小:764.66KB
外挂子系统在SAP R3系统中的运用.docx
《外挂子系统在SAP R3系统中的运用.docx》由会员分享,可在线阅读,更多相关《外挂子系统在SAP R3系统中的运用.docx(15页珍藏版)》请在冰豆网上搜索。
外挂子系统在SAPR3系统中的运用
外挂子系统在SAPR/3系统中的运用
胡胜春
2006-03-22
问题的提出:
销售分公司提出,为进一步规范市场,防止跨地区域销售,需要在ERP系统中建立产品胎号数据管理。
具体流程和需要的管理功能为:
业务流程需要实现的管理功能
1、
能根据胎号查出轮胎的规格、收货单位、发出日期。
2、
根据单位每月出一张轮胎胎号汇总分析表。
3、能根据轮胎规格查出发出的轮胎胎号和相关信息。
4、
能根据客户编号查出发给客户的轮胎数量及各轮胎的胎号。
5、根据日期查询发往客户的产品规格、数量、胎号。
利用我们掌握的报表开发技术是不能达到目的的,那么如何在SAPR/3系统中实现呢?
。
SAPR/3系统的开发工具
SAP开发工具ABAP/4是高级商业应用程序设计语言,仅为系统内部使用,为应用程序员提供优化的工作环境。
经过不断的改进和修改以满足商业领域的需要。
现在,ABAP/4已成为SAP开发所有自己的应用程序的仅有工具。
SAP客户用ABAP/4进行其自身开发。
这样的开发对R/3标准解决方案适应特殊问题非常重要。
ABAP/4开发工作平台包含所有用于创建和维护ABAP/4程序的工具。
ABAP/4的可解释特性使其易于生成、测试并运行程序的中级版本,以便将来生成最终版本。
此过程也叫做早期原形处理,意味着您不必丢弃中级版本。
ABAP/4是第四代支持结构化程序设计的语言。
它合并了所有通常的控制结构和模块化概念。
通过对SAPR/3系统的学习与分析,我们了解到ABAP/4的一些基本知识。
一、ABAP/4特性包括:
●带有各种类型和结构的声明数据的声明元素
●数据制作的操作元素
●控制程序流的控制元素
●反应外部事件的事件元素
●ABAP/4支持多种语言。
文本摘要(例如,标题、页眉和其他文本)将根据程序代码分别存储。
您可以随时在不改变程序代码的情况下更改、转换和维护这些文本摘要。
●ABAP/4支持商业数据类型和操作。
您可以用特殊日期和时间字段进行计算。
系统会自动执行必需的类型转换。
●ABAP/4提供一系列功能处理字符串。
●ABAP/4包含一个叫OpenSQL的SQL子集。
用OpenSQL,您可以读取和访问数据库表,与所用的数据库系统无关。
●ABAP/4允许您定义和处理内部表,该表只在运行程序时存在。
内部表使其更容易处理数据表,并帮助使用程序中的复杂数据结构。
●ABAP/4允许您定义和调用子程序。
也可以调用其他程序的子程序。
参数能够以各种方式从子程序传递或传递到子程序。
●ABAP/4包含一种特殊子程序,叫做功能模块。
您可以在中央库中创建和维护功能模块。
在调用程序和子程序之间功能模块有一个明确定义的数据接口。
它们能够以调用程序的独立模式进行分别测试。
二、有两种主要的ABAP/4程序类型:
报表程序
这是我们在公司ERP项目实施过程中,通过项目实施顾问的培训已基本掌握的开发手段。
报表程序用于分析数据库表中的数据。
这种分析的结果可以显示在屏幕上或发送到打印机上。
逻辑数据库支持报表程序。
逻辑数据库是特殊的ABAP/4程序,使开发者不必编码所有的数据库访问。
对话程序
将对话程序组织为包含对话模块的模块池。
每个动态程序(由一个屏幕及其逻辑流组成的“动态程序”)都基于一个ABAP/4对话程序。
逻辑流包含对ABAP/4对话模块的调用。
在SAPR/3系统中实现胎号管理子系统的方法
通过对开发工具的分析,要在SAPR/3系统中实现胎号管理子系统的开发,只有采用对话程序类型才能实现管理目的。
因为,要实现这个子系统必须在系统中完成以下基本操作:
●创建表,来存放必要的管理数据。
●通过对话屏幕进行相关数据的录入。
●在系统中与相关表建立连接,防止数据冗余。
●输出分析报表。
具体实现过程:
1、在系统中运用TransactionSE11创建数据表zthgl。
其中要建立相应的(DataElement)数据元素、显示域(Domain)。
2、在系统中运用TransactionSE51创建屏幕及逻辑流(动态程序)
我们先理解PBO和PAI的意义:
PBO是屏幕输出前调用的程序模块,PAI是屏幕输入后调用的程序模块
SAP系统中的每个对话都是由动态程序控制的。
动态程序包含一个屏幕和它的流逻辑并且精确控制一个对话步骤。
逻辑流决定在显示屏幕前(PBO处理)和接收到用户在屏幕上建立的信息后(PAI处理)进行的处理。
在屏幕绘制器中固定的屏幕格式决定输入/输出字段、文本字段、单选按钮以及复选框之类的图形元素的位置。
另外,菜单绘制器允许在一个或多个GUI状态下存储菜单、图表、按钮及功能键。
动态程序和GUI状态都指向控制动态程序和GUI状态的运行顺序的ABAP/4程序。
理解了能实现的功能,我们通过TransactionSE51进行胎号管理子系统的主屏幕0100的开发。
这是屏幕0100中文本字段、按钮、表框架等元素的设置情况
屏幕0100的逻辑流:
在PBO事件中,语句MODULESTATUS_0100将控制传给相应的ABAP/4模块。
在ABAP/4模块池中,处理模块STATUS_0100后,控制返回流逻辑。
对于PBO事件,不需要进一步处理。
系统显示屏幕并从用户接收信息。
在PAI事件,PAI语句将控制传给ABAP/4模块理MODULEUSER_COMMAND_0100之后,控制返回PAI,并终止对话。
其中对屏幕设置的按钮进行检测,用户通过选定的按钮触发相应的ABAP/4模块EXIT_0100。
模块READ_TEXT_0100。
3、运用TransactionSE38创建ABAP/4模块池-------ZTHGL。
每个动态程序都精确指向一个ABAP/4对话程序。
这样的对话程序也称为模块池,原因是它包含交互模块。
这跟我们在ERP项目实施培训时学习的报表开发有本质的区别。
动态程序的逻辑流包含从相应模块池中调用模块程序。
在PBO事件中调用的交互模块依照上下文进行屏幕模板的准备,可以通过设置字段内容或通过禁止显示不需要的字段等方式准备屏幕模板。
在PAI事件中调用的交互模块用于检查用户的输入并触发合适的对话步骤,比如更新任务等。
从一个事务中调用的所有动态程序都指向一个公用模块池。
模块池的动态程序是编号的。
默认情况下,系统为每个动态程序存储下一个要显示的动态程序。
该动态程序序列(程序链)可以是线性的也可以是环型的。
在动态程序链中甚至可以调用另一个动态程序链,并且在处理它之后返回原始链。
4、运用TransactionSE93创建TransactionCode:
ZTHGL。
完成上述工作后,运用我们已掌握知识建立相应的输出报表和查询功能,然后通过SE93创建成事物码。
总结
2002年3月22日开发完成轮胎胎号管理子系统,并传输到生产服务器投入运行,解决了销售分公司提出的问题。
从上面叙述的开发过成中我们知道所建立的数据表中并没有录入公司产品和客户的相关信息,而只录入了产品编号、胎号、客户编号,通过ERP系统中MM(物料管理)和SD(销售与分销管理)模快的相关数据表的连接来实现数据共享,避免数据冗余,从而达到销售分公司的管理业务的需求。
系统的开发成功,为我们在今后的程序开发工作中解决类似问题提供了一种借鉴。
附:
动态程序代码
*&
*&模块池ZTHGL
*&
INCLUDEZTHGLT.
INCLUDEZTHGLO.
INCLUDEZTHGLI.
INCLUDEZTHGLF.
*------------------*
*INCLUDEZTHGLT*
*------------------*
PROGRAMZTHGLTMESSAGE-IDZTHGL.
TABLES:
ZTHGL,KNA1,T001W,MAKT,VBAK.
TYPES:
CNDP_URL(256)TYPEC.
*图片用变量star
dataurl_1typecndp_url.
datapicture_control_1typereftocl_gui_picture.
datacontainer_1typereftocl_gui_custom_container.
dataurl_4typecndp_url.
datapicture_control_4typereftocl_gui_picture.
datacontainer_4typereftocl_gui_custom_container.
*图片用变量end
DATA:
OK_CODE(4),
RCODE(5),
OLD_ZTHGLLIKEZTHGL,
MODE(10).
CONSTANTS:
CON_SHOW(10)VALUE'SHOW',
CON_CHANGE(10)VALUE'CHANGE',
CON_CREATE(10)VALUE'CREATE',
CON_DELETE(10)VALUE'DELETE',
CON_QUERY(10)VALUE'QUERY',
CON_REPORT(10)VALUE'REPORT'.
*------------------*
*INCLUDEZTHGLO*
*------------------*
MODULESTATUS_0100OUTPUT.
includeZTHGL_pic."图片显示子程序
SETPF-STATUS'TD0100'.
SETTITLEBAR'100'.
ENDMODULE."STATUS_0100OUTPUT
MODULESTATUS_0200OUTPUT.
IFMODE=CON_SHOWORMODE=CON_DELETE.
SETPF-STATUS'TD0200S'.
SETTITLEBAR'20S'.
ELSE.
SETPF-STATUS'TD0200M'.
SETTITLEBAR'20M'.
ENDIF.
ENDMODULE."STATUS_0100OUTPUT
*&------------------------------------*
*&ModuleMODIFY_SCREENOUTPUT
*&------------------------------------*
*text*
*-------------------------------------*
MODULEMODIFY_SCREENOUTPUT.
CHECKMODE=CON_SHOWORMODE=CON_DELETE.
LOOPATSCREEN.
CHECKSCREEN-GROUP1='MOD'.
SCREEN-INPUT='0'.
MODIFYSCREEN.
ENDLOOP.
ENDMODULE."MODIFY_SCREENOUTPUT
*----------------------
*INCLUDEZGBKQI
*----------------------
MODULEUSER_COMMAND_0100INPUT.
CASEOK_CODE.
WHEN'SHOW'.
MODE=CON_SHOW.
SELECTSINGLE*FROMZTHGL
WHERECPBH=ZTHGL-CPBH.
IFSY-SUBRCNE0.
MESSAGEE005WITHZTHGL-CPBH.
ENDIF.
CLEAROK_CODE.
SETSCREEN200.
WHEN'CHNG'.
MODE=CON_CHANGE.
SELECTSINGLE*FROMZTHGL
WHERECPBH=ZTHGL-CPBH.
IFSY-SUBRCNE0.
MESSAGEE005WITHZTHGL-CPBH.
ENDIF.
OLD_ZTHGL=ZTHGL.
CLEAROK_CODE.
SETSCREEN200.
WHEN'CRET'."创建纪录
MODE=CON_CREATE.
SELECTSINGLE*FROMZTHGL
WHERECPBH=ZTHGL-CPBH.
IFSY-SUBRC=0.
MESSAGEE006WITHZTHGL-CPBH.
CLEARZTHGL.
ELSE.
CLEAROK_CODE.
CALLSCREEN400STARTINGAT4010.
CASEOK_CODE.
WHEN'SAVE'.
OLD_ZTHGL-CPBH=ZTHGL-CPBH.
INSERTZTHGL.
SETSCREEN200.
WHEN'CANC'.CLEARZTHGL.
ENDCASE.
ENDIF.
WHEN'DELE'."删除纪录
MODE=CON_DELETE.
SELECTSINGLE*FROMZTHGL
WHERECPBH=ZTHGL-CPBH.
IFSY-SUBRCNE0.
MESSAGEE006WITHZTHGL-CPBH.
CLEARZTHGL.
ELSE.
CLEAROK_CODE.
SETSCREEN200.
*CALLSCREEN400STARTINGAT4010.
*CASEOK_CODE.
*WHEN'SAVE'.
*OLD_ZTHGL-CPBH=ZTHGL-CPBH.
*DELETEZTHGL.
*WHEN'CANC'.CLEARZTHGL.
*ENDCASE.
ENDIF.
WHEN'QUER'."查询纪录
MODE=CON_QUERY.
CALLTRANSACTION'ZTHCX'.
WHEN'REPO'."报表输出
MODE=CON_REPORT.
CALLTRANSACTION'ZTHBB'.
ENDCASE.
ENDMODULE."USER_COMMAND_0100INPUT
MODULEUSER_COMMAND_0200INPUT.
CASEOK_CODE.
WHEN'SAVE'.
UPDATEZTHGL.
IFSY-SUBRC=0.
MESSAGES001WITHZTHGL-CPBH.
ELSE.
MESSAGEA002WITHZTHGL-CPBH.
ENDIF.
CLEAROK_CODE.
WHEN'EXIT'.
CLEAROK_CODE.
PERFORMSAFETY_CHECKUSINGRCODE.
IFRCODE='EXIT'.SETSCREEN0.LEAVESCREEN.ENDIF.
SETSCREEN0.LEAVESCREEN.
WHEN'BACK'.
CLEAROK_CODE.
PERFORMSAFETY_CHECKUSINGRCODE.
IFRCODE='EXIT'.SETSCREEN100.LEAVESCREEN.ENDIF.
ENDCASE.
ENDMODULE."USER_COMMAND_0100INPUT
*&----------------------------------
*&ModuleCHECK_AIRPORTINPUT
*&----------------------------------
MODULECHECK_FR_AIRPORTINPUT.
SELECTSINGLE*FROMZTHGL
WHERECPBH=ZTHGL-CPBH.
IFSY-SUBRCNE0.MESSAGEE003.ENDIF.
ENDMODULE."CHECK_AIRPORTINPUT
MODULECHECK_TO_AIRPORTINPUT.
SELECTSINGLE*FROMZTHGL
WHERECPBH=ZTHGL-CPBH.
IFSY-SUBRCNE0.MESSAGEE004.ENDIF.
ENDMODULE."CHECK_AIRPORTINPUT
*&----------------------------
*&ModuleEXITINPUT
*&----------------------------
MODULEEXIT_0100INPUT.
CASEOK_CODE.
WHEN'CANC'.
CLEAROK_CODE.
SETSCREEN0.LEAVESCREEN.
WHEN'EXIT'.
CLEAROK_CODE.
SETSCREEN0.LEAVESCREEN.
WHEN'BACK'.
CLEAROK_CODE.
SETSCREEN0.LEAVESCREEN.
ENDCASE.
ENDMODULE."EXITINPUT
MODULEEXIT_0200INPUT.
CASEOK_CODE.
WHEN'CANC'.
CLEAROK_CODE.
SETSCREEN100.LEAVESCREEN.
ENDCASE.
ENDMODULE.
*&---------------------------------------
*&ModuleUSER_COMMAND_0300INPUT
*&---------------------------------------
MODULEUSER_COMMAND_0300INPUT.
CASEOK_CODE.
WHEN'SAVE'.SETSCREEN0.LEAVESCREEN.
WHEN'EXIT'.SETSCREEN0.LEAVESCREEN.
WHEN'CANC'.SETSCREEN0.LEAVESCREEN.
ENDCASE.
ENDMODULE."USER_COMMAND_0300INPUT
*&---------------------------------------
*&ModuleREAD_TEXT_0100INPUT
*&---------------------------------------
MODULEREAD_TEXT_0100INPUT.
SELECTSINGLE*FROMzTHGLWHERECPBH=ZTHGL-CPBH.
ENDMODULE."READ_TEXT_0100INPUT
*----------------------------------------------------------------------*
*INCLUDEZGBKQF*
*----------------------------------------------------------------------*
FORMSAFETY_CHECKUSINGRCODE.
LOCALOK_CODE.
RCODE='EXIT'.
CHECKMODENECON_SHOW.
*CHECKMODE=CON_CHANGE.
CHECKZTHGLNEOLD_ZTHGL.
CLEAROK_CODE.
IFMODE=CON_DELETE.
CALLSCREEN400STARTINGAT4010.
CASEOK_CODE.
WHEN'SAVE'.
OLD_ZTHGL-CPBH=ZTHGL-CPBH.
DELETEZTHGL.
WHEN'CANC'.CLEARZTHGL.
ENDCASE.
ELSE.
CALLSCREEN300STARTINGAT3514.
ENDIF.
CASEOK_CODE.
WHEN'SAVE'.
ZTHGL-ERNAM=SY-UNAME.
ZTHGL-ERSDA=SY-DATUM.
SELECTSINGLE*FROMKNA1WHEREKUNNR=ZTHGL-KUNNR.
ZTHGL-NAME1=KNA1-NAME1.
SELECTSINGLE*FROMT001WWHEREWERKS=ZTHGL-WERKS.
ZTHGL-NAME2=T001W-NAME1.
SELECTSINGLE*FROMMAKTWHEREMATNR=ZTHGL-MATNR.
ZTHGL-MAKTX=MAKT-MAKTX.
*break-point.
UPDATEZTHGL.
WHEN'EXIT'.
WHEN'CANC'.CLEARZTHGL.
ENDCASE.
ENDFORM.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 外挂子系统在SAP R3系统中的运用 外挂 子系统 SAP R3 系统 中的 运用