SAP MM模块:如何查找PO采购订单配置的打印form
在诸多SAP Global Rollout项目实施过程中,我们有一个Fit&Gap的分析阶段,各个模块都需要在熟悉了global template之后,根据对应业务部门的需求调研的结果,基本可以确定所在模块的GAP,也就是本地化的东西。这些GAP是global template所不具备的,需要我们在Rollout实施过程中进行本地化建设。
SAP模块有一个很常见的本地化就是PO form的开发与实现。一般而言,global 项目中,有一个固定的支持多种语言的PO 打印表单。但是这个PO form在中国的工厂实施的时候,不仅仅面临着翻译的问题,更多的是格式之调整,甚至是新Form之设计。
很多跨国企业的中国分支机构/工厂等,其采购订单是中英文双语的。在表单上,用中英文双语显示诸多与采购订单有关的内容,比如供应商的名称,地址,联系人;购买方的名称和地址,联系人等信息,还有一些法律性的条款。 这些中国特定的需求,global template肯定不支持。所以在实施SAP的过程中,结合业务部门的实际需求,开发一个支持双语,切合现行业务要求的采购订单表单,是在所难免的。
当然,这种开发,也是要基于global template的基础的,在global template格式上稍作调整,大致格式不变,增加或者减少若干信息;同时以中英文形式显示相应信息。这样,一方面,尽量往global template方向靠拢,而不是完全重新设计格式,保证项目实施后整个系统PO form 的整体一致性;另一方面,减少本地化开发的工作量,降低项目实施的成本。
如何查找PO采购订单配置的打印form
1.前台 T-CODE ,NACE 找到PO配置的output type
2.找到output type对应的processing routines
3.Print output 对应的form就是打印form
PO打印
通常企业打印PO有两种方式,一是套打(由印刷厂商印制好一式多联的格式以备打印的PO送给相关部门,比如采购部,供应商,财务部,仓库等保存),另一种就是直接打印在A4纸上.不管哪种方式,可直接写一个外挂程序或使用SAP配置来打印,谁优谁劣无可非议只要能正确将东西打印出来就行.
在打印报表的问题上我个人很喜欢Crystal report因为能很容易定义所需要的各种复杂格式,遗憾的是SAP系统似乎要装插件才支持Crystal report.
使用外挂程序或配置,就要使用到所谓的Form(SAPscript)或Smartform,当然另外一种方法就是使用OLE to Excel,在Excel定义好格式然后填充数据.
好了,下面就PO打印配置谈谈如何设置PO打印.
PO打印设置难吗?显然是非常容易的,从某种意义上讲,你不做任何配置实际SAP已经提供了default的output NEU打印PO了.
让我们看看图1.(Tcode:ME21N|ME22N)
[1]首先必须让此PO输出一个所谓的Message,在此此message是print output.
[2]打印预览
按Messages进入图2.
[1]按Communication method进入图3.
[2]Processing log你能看到调用的程序名称如是打印能看到产生的Spool no.号(有一种case是系统hang up了上万个打印请求结果造成Spool buffer溢出,所以basis有必要定期去清理下)SAP默认是使用程序SAPFM06P的子程序ENTRY_NEU处理打印message的,这在配置中可做适当更改如果有需要的话,毕竟SAP是程序堆起来的改改是很正常的.
[3]进去后Requested processing栏位的Dispatch time选 4 Send immediately就表示立即发送消息.
[4]通常如需要重新打印,可选择一已经存在的Output 后再按它copy一个.当然也可使用ME9F重打.
[5]NEU是打印PO,SAP default的,接下来会告诉如何自定义output type. 为什么需要自定义output type?是在一个大集团公司,可能存在有各种PO的打印格式并且可能需要各种不同的语言版本.
[6]在此选1 print output,你也可看到Message实际上可发送到printer, Fax,Mail, EDI和触发PO的workflow事件等,举个简单的例子,供应商要求建立PO后立即自动将PO数据EDI到他们的系统就可配置EDI Message ,关于EDI有专门解剖的一刀.
[7]Partner,SAP经常有sold-to,ship-to,billing-to伙伴,VN是vendor.
[8]这个语言在一些跨国集团可能用的上,假设公司间的transfer order格式相同,但是希望法国公司打印的是法文,德国打印的是德文,中国是中文,美国是英文,要么你为每种语言版本定义一个output type要么就在程序中判断这个语言字段,而后者可能更好些,因为你只要使用SO10定义标准文本就行.
让我们切换到图3.
[1]Tcode:SAPD可设置打印机
[2]立即打印出来
[3]你还可使用别的Form(通常不能在此使用smartform,除非你大肆修改后台配置)
大家可能对PO打印已有了初步了解,是的,不管是套打还是打印在A4上,都是可通过PO的message来完成的.
(1)PO header及其Item文本设置 IMG Path:Materials Management->Purchasing->Purchase Order 如图
[1]定义Header text type.
如上图,如企业需要可以增加自己的header text type,这些 text type在建立PO时可看到如图5.
[2]我们看看SAP default的header text type 06.如下图. 1表示取文本的顺序. 2表示文本能否被Fix(修理修改),空和*表示能修改,空表示修改Source object不会影响到PO text,*表示修改文本立即自动反映到PO text, N表示文本从source object自动取得不能修改.在下面将进一不描述.
[3]定义item text type.
[4]如下图,是text type 03的设置,1表示取数据顺序,Seq.为0似乎是表示不用它,特别要强调以下这个No.加前坠将会成为文本ID标识. 2.表示数据源,从图中我们能看到PO的Materiap PO text文本取数据先从物料主数据的basic data text中读取(在basic data 1视图进去维护),然后是读取Purchase order text(物料主数据专门有一个View)的数据,就是说你建立PO line text 03将自动从物料主数据将这些东西抓过来3.表示文本能否被更改.
当定义好Header 和line Text type后,在建立PO时我们就能在这些文本中填写数据.如图5,可能企业需要在PO中加入各种类型文本,并且这些文本可能被随时更改,这种情况下我想使用固定程序恐怕相当麻烦.
就需要使用相关配置,然后在程序中调用这些文本.
1根据欧美的相关合同法,PO上通常需要打印T&C(Terms*Condition),以便万一有经济纠纷时可参照当时打印出的文本条款,很明显,T&C是针对不同的Vendor是经常被修改的.另外PO上的运输方式也可能经常变更,这种复杂的业务使用文本就可解决.
2 让我们更深入了解下PO文本的保存情况,在SAP中,大多数的文本比如PO,SO,Billing等各种相关文本都保存在STXH,STXL中,我们根据一定规则将它读出来,这些规则在稍后会继续细讲,回答那个Fix 标识.N表示从source object抓出来后你不能再做修改,因此从文本STXH,STXL表中By PO item是查不到数据的,*表示文本抓出来你还能修改,当自动抓取数你去做更改后才会保存早STXH,STXL中, By PO item可以读取,这样在编程序就必须注意首先根据PO item读数据如没读到再到物料主数据中去找. 详细请看SAP文本.
(2)PO Message配置
[1]应该不会这么快就忘记建立PO header/Line text type的Seq. no.加上F前坠就是Text ID ,这步通常是不用做的除非你使用SAP标准的,因为PO将使用
[2]分配Form和相关Output程序给PO,在第[3]步讨论,因为在定义PO output type时包括了这部分的配置.
[3]打开Output control发现配置和MM/SD的定价条件相似,是的,所谓的condition技术用在在Message output,MM/SD Pricing,FI Tax IMG等,而且他们共享了很多配置表,我想SAP是因为他们逻辑上相似所以将他们组织在一起. 通常的情况下是比如要设置PO一建立好就自动打印,否则就需要想第一步更改PO哪些重要字段后会自动重打PO,兼于篇幅,在此就不讨论了,这个问题留给读者自己去考虑,在这里只讨论如何Copy出新的output type .因为用户可能需求不同的打印格式.
一.新增Output type Message .
IMG Path:Output Control->Message Types->Define Message Types for Purchase Order.
如图6.
[1]Copy All data from NEU to ZUSA.
[2]Output type可用在Print, Fax,EDI等上.
[3]Output调用的程序,默认是SAPFM06P
[4]使用的子程序,默认是ENTRY_NEU
[5]打印调用的FORM
[6]在此我加了个Smartform,很明显默认是不会认Smartform的,除非你将第3步的SAPFM06P Copy出(比如是ZSAPFM06P)再将ENTRY_NEU修改,这要费点事情,还是使用Form吧
二.Define (定义)Message Schema for Purchase Order
IMG Path:Output Control->Message Determination Schemas
[1]选定procedure RMBEF1.
[2]将ZUSA加上.
[3]特别要强调一下,关于这个requirement在MM/SD的pricing配置中将会重点介绍,这个将对应到一个子程序比如你可设置子程序返回值为True打印否则不打印.
使用Tcode VOFM>菜单Requirements->output control|OMFT|V/27可自定义requirements,简单理解就是Control message,只有需求满足才输出消息.
三.建立条件记录MN04
OK,是否现在就可使用这个output type了呢?回答是不能的,我们想象SD pricing后台配好了你要还使用VK11呀,同样,你必须使用MN04为此output type建立一条件记录.
这些基础工作都搞定了,下面来吹下如何coding …Coding是TMD世界上最无聊的工作之一,Salary有低,,哎….
To be continued .
….改天继续将所有的打印给屠宰一遍.
(3)物料主数据文本
BADI也是enhancemnet的一种,可以在SE19中建立自定义的Implementation name激活系统自带的badis,系统的badis可以在SE18中看。这个东东很好玩哟,要不要我教你玩呀?
SE75可看到所有的相关文本.
物料主数据中有很多Text(文本),比如有两个视图Purchase order text和Sales text,在basic data1视图中单击Basic data text按钮或直接点击Additional data按钮能看见Basic data text和Inspection text两tab页,在此可写入一些相关信息,这些信息没别的,就是将来可用在打印PO或SO上而已(更详细请看MM相关单据打印).
如图3.2.3-1,在purchase order text中保存了9行数据,每行使用回车键分开.
当物料保存时,SE16检查STXH和STXL, 图3.2.3-2是STXL表的结果,注意画红圈的字段,数据以binary格式保存在STXL字段CLUSTR里.
1.其实STXL就是一个所谓的簇式数据库(一个有特定结构的透明表),详情请看第一篇的第12节簇数据库和逻辑数据库.
2.注意簇数据库和簇表的区别.簇数据库(ABAP层的概念)是透明表对应一个SAP系统用的数据库的一个物理表,
data: itab_head like thead ,
CALL FUNCTION ‘READ_TEXT’
***ID: 1.BSET:Purchase Order Text(物料视图)
***
***
***
***对1.2.3是Name就是mat. no.
***4sales text对应的name是Mat. no+sales org.+dist.chann.
***1.2.3是MATERIAL,4是MVKE.