SAP PO相关打印编程
1.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系統用的數據庫的一個物理表,
REPORT? ZMATTXT? .
data: itab_head like thead ,
????? itab_line like tline occurs 0 with header line .
CALL FUNCTION 'READ_TEXT'
? EXPORTING
***ID: 1.BSET:Purchase Order Text(物料視圖)
***??? 2.GRUN:Basic Data Text(從additional data按鈕進去)
***??? 3.PRUE:Inspection Text
***??? 4.0001:Sales Text
??? ID?????????????????????????? = 'BEST'
??? LANGUAGE???????????????????? = SY-LANGU
***對1.2.3是Name就是mat. no.
***4sales text對應的name是Mat. no+sales org.+dist.chann.
??? NAME???????????????????????? = 'SL62ABPLS49H1535'
***1.2.3是MATERIAL,4是MVKE.
??? OBJECT?????????????????????? = 'MATERIAL'
?IMPORTING
?? HEADER??????????????????????? = itab_head
? TABLES
??? LINES??????????????????????? = itab_line
?EXCEPTIONS
?? ID??????????????????????????? = 1
?? LANGUAGE????????????????????? = 2
?? NAME????????????????????????? = 3
?? NOT_FOUND???????????????????? = 4
?? OBJECT??????????????????????? = 5
?? REFERENCE_CHECK?????????????? = 6
?? WRONG_ACCESS_TO_ARCHIVE?????? = 7
?? OTHERS??????????????????????? = 8 .
*check sy-subrc eq 0 .
***此例是讀出materail master data的purchase order text .
***PO text可有多行,使用Enter鍵分行,所以使用內表.??
Loop at itab_line.
?? write :/ itab_line-tdformat,'|',itab_line-tdline.
endloop .
***下面是讀出mat. master data的sales text的例子.
***注意NAME是物料(補滿18位)+Sales org.+dist. chann.????
data: itab_sohead like thead ,
????? itab_soline like tline occurs 0 with header line .
CALL FUNCTION 'READ_TEXT'
? EXPORTING
??? ID?????????????????????????? = '0001'
??? LANGUAGE???????????????????? = SY-LANGU
??? NAME???????????????????????? = 'SL62ABPLS49H1535? 510001'
??? OBJECT?????????????????????? = 'MVKE' "Sales text是MVKE
?IMPORTING
?? HEADER??????????????????????? = itab_sohead
? TABLES
??? LINES??????????????????????? = itab_soline
?EXCEPTIONS
?? ID??????????????????????????? = 1
?? LANGUAGE????????????????????? = 2
?? NAME????????????????????????? = 3
?? NOT_FOUND???????????????????? = 4
?? OBJECT??????????????????????? = 5
?? REFERENCE_CHECK?????????????? = 6
?? WRONG_ACCESS_TO_ARCHIVE?????? = 7
?? OTHERS??????????????????????? = 8 .
Loop at itab_soline.
?? write :/ itab_soline-tdformat,'|',itab_soline-tdline.
endloop .??
總結
以上是生活随笔為你收集整理的SAP PO相关打印编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP入门话题
- 下一篇: SAP RFC-RFC概述