随笔分类 -  SAP系统研究

史上最强大最有前途的ERP系统
摘要:ALV报表在SAP系统里面几乎随处可见,只要跟报表有关的系统都会制作成ALV的形式。像SE11里面查看表格的内容,系统就以ALV的形式体现,在报表里面可以对任何的栏位进行排序,还可以对任何的列进行筛选,也可以导出成Excel文档,也能对数值列进行汇总。可以说ALV的报表在实际报表的开发中占有非常重要的地位。学会它是每个ABAPer必须要经过的一关。 目前实现ALV的形式报表主要有2种:调用函数REUSE_ALV_GRID_DISPLAY和用面向对象的方法实现。前一种比较普遍,不过性能好像不太高,如果查询语句写得不太精妙,很容易出现卡的情况。后者是采用面向对象的形式,事先在画面上画出一... 阅读全文
posted @ 2012-03-04 21:15 SAP梦心 阅读(3791) 评论(7) 推荐(1) 编辑
摘要:今天在本机想开启SAP使用,没想到在链接的时候SAP给我提示: 点击“是”,出现以下信息: 而在SAP服务,MMC里面出现了这种情况: 上网搜,无果。于是自己动手解决。看log,应该是数据库的问题。于是打开MiscroSoft SQL Server Managerment Studio,连接数据库,系统提示如下错误信息: 于是在开始菜单中打开SQL配置信息,查看服务运行情况: 打开配置管理器: 服务居然都是停止状态,于是果断开之: 这个时候登陆数据库就一切OK了: 于是,在此打开SAP服务台,重启服务,这个时候就一片绿灯了: 在此链... 阅读全文
posted @ 2012-02-12 22:43 SAP梦心 阅读(5977) 评论(3) 推荐(2) 编辑
摘要:上周TW总公司的IT按照董事长的指示,但凡杂项请购单里面内部订单号如果没有开立开发执行单的需做卡控,限制开单。于是TW IT就在系统画面ME51N里面做了用户出口开发,如果系统检测到内部订单没有开发执行单,则提示并不继续往下。因为TW那边的卡控文字说明是繁体的,所以OA调用了RFC申请开立请购单之后就会返回这个错误信息,而且是乱码,如下图: 看到这个乱码我还以为是出了什么异常,因为系统抛出异常类是:RfcCommunicationException,到处找原因,搞得满头包。后面只好到正式环境试着用OA的数据开立请购单试试,结果系统提示开发执行单不存在,这才知道原因所在,因此对这... 阅读全文
posted @ 2012-02-09 22:16 SAP梦心 阅读(3608) 评论(3) 推荐(1) 编辑
摘要:在SAP的标准画面中,树控件都是随处可见,在一些特殊的应用中更有用处, 显得专业。在SE51设计界面里,并没有直观的树控件,只是一个容器,要实现树功能还得在程序中用面向对象的方法实现。本文就简要介绍一下应用。定义部分:*内表部分DATA:IT_TREELIKESTANDARDTABLEOFZOA_REGWITHHEADERLINE. DATAIT_TREE1LIKEIT_TREE. FIELD-SYMBOLS<FS1>LIKELINEOFIT_TREE. *----->TREECLASSLCL_APPLICATIONDEFINITIONDEFERRED. CLASSCL_GU 阅读全文
posted @ 2011-12-11 15:09 SAP梦心 阅读(2984) 评论(0) 推荐(1) 编辑
摘要:内文这个东西就像长篇大论的描述,跟在WORD里面一样可以输入无数个字。如果在sap中输入事务码进去可以维护多少个字都可以,但是如果是用.NET调用BAPI传进去内文的话,会将内文超过132个字符的内容全部截掉。要怎么样才能全部导入所有内文呢? 以下以导入请购单的程序来描述: //表头内文 转换多笔实现超长文本插入...... PRHEADERTEXT.Insert(); // 这个是BAPI里面导入内文的参数 if (txtQG07.Text.Trim().Length > 120) //txtQG07.Text的内容就是所有内文,这里用120个字符判... 阅读全文
posted @ 2011-11-12 01:12 SAP梦心 阅读(1704) 评论(0) 推荐(1) 编辑
摘要:为什么.net调用SAP的BAPI接口需要调用BAPI_TRANSACTION_COMMIT呢?首先得明白BAPI_TRANSACTION_COMMIT这个BAPI的作用。它功劳很大,在SAP里面很多的BAPI直接调用是不会有结果的,因为需要COMMIT一下才能生效,比如生成资产编号的BAPI:BAPI_FIXEDASSET_CREATE1,如果对他直接在SE37中调用运行或者使用SE38调用它,虽然可以得到一个资产编号,但是在AS03里面查询,系统会很白痴得提示你:该资产编号不存在于XX公司。更搞的是当你在AS01中新建资产编号时,新建的资产编号会跳过之前用BAPI生成“失败”的号码。 .. 阅读全文
posted @ 2011-11-01 23:46 SAP梦心 阅读(2971) 评论(2) 推荐(1) 编辑
摘要:当所有一切代码准备就绪之后,如果是ASP.NET那就是要发布网站到服务器了。如果服务器上的系统是WIN2003,那很不幸,系统会提示这样的“红脸”过来:意思是说sapnco_utils.dll和sapnco.dll这两个文件不能载入。Could not load file or assembly "sapnco_utils,Version=3.0.0.42,...网上查找了方法也不尽然,各说纷纭。但是在WIN2008下的IIS7跟WinXP下的IIS5.1都可以完全正常,但是这个WIN2003就不行。后来在对这两个DLL进行分析的时候发现它们是用VC++2005开发的,想到WIN20 阅读全文
posted @ 2011-10-24 23:22 SAP梦心 阅读(3723) 评论(1) 推荐(2) 编辑
摘要:前几天上网无意中看到一条消息说SAP GUI代码编写器跟VS.NET比跟上古时代没啥差别。很多人是从.NET或者JAVA转过来做SAP的,一接触到SAP GUI的代码编写器总觉得非常不满意,但其实实用的多了会发现它在某些方面要比VS.NET优秀的多了。且不说那个双击浏览,单单那个“模式”自动载入函数的功能就让人兴奋不已。省去了很多的麻烦,同时在设置短点方面很人性化,而且Debug的时候还能看到内表的内容出来,真的很方便。 双击一个方法可以自动调出这个方法的主体,如果是INClude,则可以跳入这个程序里面对应的方法体,看完之后则点击“返回”按钮则可以回到上一步操作的地方。貌似这个功能在V... 阅读全文
posted @ 2011-09-19 23:36 SAP梦心 阅读(2702) 评论(5) 推荐(1) 编辑
摘要:接上篇博文。 上篇博文讲到C#调用BAPIBAPI_USER_CREATE来生成SAP账户,但是新建的账户一点权限也没有,现在我们就再次利用BAPI给账户授予权限。 首先,我们在BAPI画面里查找出相关的BAPI出来,利用角色去给用户添加权限: 双击此BAPI,进入到BAPI预览画面: Table属性页: 第一个ACTIVITYGROUPS是指我们要传进去的表格内容,不再是一个栏位和结构内容了。第二个的RETURN则是返回调用结果。 双击BAPIAGR的结构,进入结构详情画面: 以上AGR_NAME是角色名,应该是必须要的。 那么,接下去就是在C#中编写相应... 阅读全文
posted @ 2011-08-28 01:09 SAP梦心 阅读(2929) 评论(9) 推荐(2) 编辑
摘要:上面博文可知BAPI_USER_CREATE的一些结构和参数。所以在C#中要调用它就很清楚了要输入哪些参数了。 1、首先引用dll,然后在程序开头:using SAP.Middleware.Connector; 2、接下去就是设置登陆参数了,以前相关博文都有说明: public class MyBackendConfig : IDestinationConfiguration { public RfcConfigParameters GetParameters(String destinationName) { if ("PRD_000".... 阅读全文
posted @ 2011-08-25 22:41 SAP梦心 阅读(3408) 评论(2) 推荐(2) 编辑
摘要:既然BAPI是一些特殊的RFC,封装了业务逻辑,使得将业务都变成一个一个对象,使用者只需要传入传出参数就可以了。 NCO3连接BAPI之前先来看看BAPI的一些参数规则。我们以 BAPI_USER_CREATE 为例子。此BAPI调用了可以生成一个用户,它当然不是仅仅对USR02进行写入那么简单。生成之后该账户什么权限也没有。 输入T-CODE:BAPI,然后在第二个页签下找到该BAPI: 上图中的红色框框里就是我们要调用的BAPI的名称。双击它,进入到该BAPI的一些说明里: 看到了,在属性页里它勾选了Remote... 说明它是可以远程操控的! 上图里,注意到红色框框... 阅读全文
posted @ 2011-08-24 22:43 SAP梦心 阅读(3292) 评论(0) 推荐(2) 编辑
摘要:周六加班,翻看以前写OA程序的时候无意中发现了当初的一个案子,就是让用户现在OA上申请一个SAP用户,然后提交给相关人员审核,通过之后直接在SAP中生成这个用户,不必在登陆到SAP中请系统管理员来做了。至于这一步,当然是使用BAPI来实现了,不可能对用户表进行新增数据,这样少了很多的关联表和一些逻辑判断,会是一场灾难。 前几篇讲的都是C#去调用RFC的东西,既然BAPI也是属于RFC,如果标准的勾选了那个remote的话,那按道理来说是应该可以实现调用的了。但难点是BAPI里面很多的参数都是引用结构的,而不是单纯的string和int的类型,这点有点困难。在C#中翻看了NCO3是否有相关... 阅读全文
posted @ 2011-08-21 23:03 SAP梦心 阅读(2785) 评论(0) 推荐(1) 编辑
摘要:有的时候我们需要在RFC中抛出一些自定义的异常,比如输入一个不存在的品号,我们需要抛出一个异常,告知用户品号不存在。有一个笨笨的做法就是通过返回值来判断,但是这样不灵活,同时也会因为品号不存在而继续之行RFC。如果我们能自己抛出异常,程序自动停止执行RFC,那将是两全其美! 现在设定一个功能:输入两个数,第一个数除以第二个数。2个异常:被除数不能为0和除数不能为100。 首先,在SE37中建立一个RFC,就用上篇博文的RFC吧。 在IMPORT页设置如下: Export页面设置如下: Changing和Table页面放空 Exceptions页面设置如下: 然后就是源码咯:... 阅读全文
posted @ 2011-08-19 23:04 SAP梦心 阅读(3720) 评论(1) 推荐(1) 编辑
摘要:本文就说明在C#中如何编写代码来调用SAP中的RFC函数获取数据。(Winform32) 首先需要引用两个NCO3.0的DLL,下载地址在文后。 然后在程序代码页面引用: using SAP.Middleware.Connector; 然后所有的代码如下:namespace SAP_RFC{ public partial class Form1 : Form { string MATNR = string.Empty; public Form1() { InitializeComponent(); } public void nco() ... 阅读全文
posted @ 2011-08-11 22:36 SAP梦心 阅读(12749) 评论(95) 推荐(2) 编辑
摘要:何谓RFC,就是一个Function,可以被非SAP系统调用,比如VB,C#,Java等。如果我们在RFC中INCLUDE了相关的业务逻辑,那么我们就可以完全操控SAP中的业务数据了。就像在TTE里,有一只程序,前端是在OA开发,设计了相关的客户提领库存,然后还要到SAP系统中去执行程序扣减相应的库存,这样是挺费劲的,如果能够在OA中放一个按钮,点击这个按钮就自动执行了这个程序,方便省事。而这一切,可以利用C#调用RFC来实现。 要实现整个过程,则必须要现在SAP中建立好相应的RFC函数,然后用VS建立好相应的程序,写代码调用就可以了。两者关联就是使用NCO3.0这个东西了。 OK,本节主要. 阅读全文
posted @ 2011-08-10 23:06 SAP梦心 阅读(7209) 评论(1) 推荐(7) 编辑
摘要:本来今天是要写一篇关于NCO3.0的东西,就是关乎.NET调用SAP的RFC的,支持VS2010和.NET 4.0等。现在网上到处都是充斥着NCO1.X和NCO2.0,需要用VS2003来使用,都是一些没什么大用的东西,连.NET 2.0的不能支持,只能算是废材一个。而且相关的资料非常的少,转来转去全部都是那么一个例子,丝毫没有直观的DEMO,更搞笑的是SAP里面的RFC是怎么建立的都没有说明,只有该死的C#代码。同时还有微软发布的Data Provider for mySAP Business Suite这个,开始用的时候觉得还挺有趣,后来试了一下很失望,抓出来的字段居然是断码,不知道是.. 阅读全文
posted @ 2011-08-09 23:02 SAP梦心 阅读(6365) 评论(4) 推荐(2) 编辑
摘要:SO,此篇随笔用来讲解SAP屏幕中页签控件的使用。 一、运行SE38,新建一只程序 Z_SCREEN3,不用写任何代码,保存激活。 二、运行SE51,新建屏幕号0100,输入说明,点击“格式”,弹出屏幕设计器。 三、点击如下按钮,然后在屏幕上拖动: 四、弹出如下对话框: 五、设计器上会出现三个页签,就是刚才新建的。于是,关闭设计器,激活。六、进入101画面:这些101、102、103等屏幕都必须要是子屏幕,否则会出错!!!七、对102和103屏幕分别设置如下:八、回到se38,打开程序,发现程序被系统添加了很多代码。不能改这些。同时,务必在程序中加入我们这段代码:START-OF-S... 阅读全文
posted @ 2011-07-15 22:08 SAP梦心 阅读(3133) 评论(3) 推荐(1) 编辑
摘要:上篇讲到了如何设计一个表格控件出来,实现我们需要的功能。本篇来谈谈让表格更专业点。 一、选择框 本例通过选择品号之后按下Enter自动带出品名出来。 相应的程序中代码如下: 这样当程序在运行的时候就可以点击旁边的小按钮或者按下F4调用品号选择框啦! 二、选择品号之后按下Enter带出品名。 首先,将昨天自动载入所有品号的那段代码去掉,同时,在程序中新建一个按钮: 程序中对用户事件的代码如下: 首先说明一下,为何需要用到这个新增的按钮。因为默认的时候表格里是没有任何记录的,内表也是一张空表,如果一开始对表格控件输入东西,按下Enter之后,输入的任何东西都会被清空,那是因为内表本身就是空的。所. 阅读全文
posted @ 2011-06-30 22:44 SAP梦心 阅读(2524) 评论(1) 推荐(3) 编辑
摘要:话说SAP里面做报表等开发还是挺多的,在屏幕控件上不得不说的一个重要的控件就是表格控件了,Table Control。这篇随便就来谈谈怎么使用表格控件和一些技巧功能。 首先在SE38中新建一个报表程序,Z_SCREEN2,并Key入如下代码并激活: REPORTZ_SCREEN2. TABLES:MARA,MAKT. DATA:BEGINOFIT_MARAOCCURS0, CHKTYPEC, MATNRLIKEMARA-MATNR, MAKTXLIKEMAKT-MAKTX, QTYTYPEPDECIMALS2, MARK(50)TYPEC, ENDOFIT_MARA. 打开SE51,为此程序. 阅读全文
posted @ 2011-06-29 22:59 SAP梦心 阅读(3660) 评论(0) 推荐(2) 编辑
摘要:在开发的过程中经常要用到日期和时间,这个东西自然不能让用户纯手工KEY入,要是能有办法进行选择就好了。 1、日期选择器: 首先SE38新建程序,SE51新建屏幕0100,画出如下控件: 日期控件属性页如下: F4搜寻辅助的功能代码是:BU_DATE_CHAR 时间控件的属性页如下: 在屏幕的逻辑函数里,PAI需要添加如下代码: PROCESSONVALUE-REQUEST. FIELDTIME1MODULECHOOSE_TIME1. PROCESSONVALUE-REQUEST. 代表拥有F4功能,因为时间控件的F4属性没有设置,故需要此代码。 主程序声明变量如下: DATA:TIME1(8. 阅读全文
posted @ 2011-05-25 19:30 SAP梦心 阅读(2144) 评论(1) 推荐(2) 编辑

鄙视一切不懂技术又装懂的小人!