在sap的定價配置中,我們常常會使用到參考結構和參考欄位(條件表和儲存順序),這些欄位是如何使用的呢,我帶著這個好奇閱讀了sap的源碼(函數SD_COND_ACCESS),並將我的理解記錄下來供大家參考。
Step 1 調用t682z_select子過程從T682Z讀取儲存順序儲存到t682z_tab
PERFORM t682z_select TABLES t682z_tab
USING t682i_i
CHANGING subrc.
並根據參考結構和參考欄位拼接存放到內表的欄位kommfield中
CONCATENATE t682z_buf-qustr '-' t682z_buf-qufna
INTO t682z_buf-kommfield.
Step 2 在子常式sel_kondtab中根據儲存順序裡的參考結構和欄位名提取參考結構的對應欄位值
ASSIGN TABLE FIELD (proto_fld_tab-kommfield) TO <f>.
proto_fld_tab-wert = <f>.
註:proto_fld_tab-kommfield的值,如:KOMP-PRODH1
Step 3 在子常式sel_kondtab中拼接查詢條件(放在coding_tab內表中)
* buffered with wrong value -> replace value
coding_template-value = proto_fld_tab-wert.
REPLACE ALL OCCURRENCES OF '''' IN proto_fld_tab-wert
WITH '''''' IN CHARACTER MODE.
CONCATENATE '''' proto_fld_tab-wert '''' INTO h_value.
CONCATENATE <t682z>-zifna '=' h_value
INTO coding_template-line
SEPARATED BY ' '.
MODIFY coding_template INDEX sy-tabix TRANSPORTING value line.
IF first = yes.
first = no.
coding_tab = coding_template-line.
ELSE.
CONCATENATE 'AND' coding_template-line INTO coding_tab
SEPARATED BY ' '.
ENDIF.
ENDIF.
APPEND coding_tab.
Step 4 在子常式sel_kondtab中根據拼接(放在coding_tab內表中)出查詢條件取讀取條件記錄。
SELECT * FROM (t681-kotab) APPENDING TABLE <cond_tab>
UP TO 1 ROWS
WHERE kappl = se_kappl
AND kschl = se_kschl
AND (coding_tab).
註:t681-kotab為條件表名稱如:A802 ;coding_tab內容參見
有了這些,我們對參考欄位和參考結構的使用的理解就應該很容易了。