如有轉載請註明出處:http://blog.csdn.net/donkey2004112103/archive/2009/05/03/4145450.aspx
程式中經常會要根據客戶或者供應商編號得到他們的描述資訊,或者公司代碼,分銷渠道等等,都是要根據代碼得到描述資訊,如果在select語句中做內串連是可以做到,只是比較麻煩,不是很靈活。SAP中提供了很多讀取這些資訊的函數。總結下。
1.function group APAR_MASTER
這個函數組下面有四個函數,功能名稱分別如下。
KNA1_READ_SINGLE :根據客戶編碼得到客戶的資訊
KNB1_READ_SINGLE:得到客戶主要資料 (公司代碼)資訊
LFA1_READ_SINGLE:根據供應商編碼得到供應商資訊
LFB1_READ_SINGLE:得到供應商主要資料(公司代碼)資訊
函數賞析:
這個function group下的函數寫的思路都一樣,比較巧妙的地方是用了statics變數用來儲存之前讀過的5次記錄,而且是隊列的形式插入,保證最近查詢記錄會儲存下來,從而提高命中率。這部分寫的非常不錯,摘錄下來:
INSERT ES_KNA1 INTO ST_KNA1 INDEX 1.
DESCRIBE TABLE ST_KNA1 LINES LD_BUFFER_LINES.
IF LD_BUFFER_LINES GT GC_KNA1_MAX_LINES.
DELETE ST_KNA1 INDEX LD_BUFFER_LINES.
ENDIF.
以上這部分代碼保證查詢的結果先入先出,後入後出,提高查詢命中率。
2.function group MG05
此函數組裡包含很多function module,不過目前我用到的就是T001_SINGLE_READ。和上面的命名規則有點不同,不知道是sap故意還是不小心犯的錯誤,READ和SIGNLE單詞順序發生了變化。
T001_SINGLE_READ:根據公司代碼得到公司資訊
函數賞析:
同樣用到了STATICS變數來儲存查詢結果,但是值儲存了一條記錄。不知道為什麼SAP這個時候只儲存一條記錄,從哪方面考慮的。用了FEHLER(1)這樣一個變數去記錄是否有查詢的結果存在。
3.function group MG46
此函數組下的幾乎所有function都已SINGLE_READ結束,目前用過的函數如下。
TVKOT_SINGLE_READ:根據銷售組織和語言代碼得到銷售組織的文本資訊。
TVTWT_SINGLE_READ: 根據分銷渠道代碼和語言得到分銷渠道的文本資訊。
4. 總結
為了得到文本描述資訊,可以在SE37中通過關鍵字搜尋這些函數。還有一個更通用的方法以VKORG為例,在表VBRK中點擊entry help/check,再雙擊進入VKORG的check table:TVKO。進入後選擇Goto->文本表可以找到對應的主記錄存在那張表裡。
再根據文本表去SE37中搜尋就能很快找到你要的函數了。