筆者在SY項(xiàng)目中,奉命參與客戶的一只不堪使用的進(jìn)銷存報(bào)表的優(yōu)化。
在該報(bào)表中,需要顯示指定日期范圍內(nèi)相關(guān)物料的入庫(kù)與出庫(kù)的面積。
相關(guān)物料基本計(jì)量單位是PC, 而面積信息的維護(hù)方式,根據(jù)物料的不同而不同。一般物料是維護(hù)在物料主數(shù)據(jù)里(MARM表),但是客戶有許多業(yè)務(wù)是關(guān)于可配置物料的按單生產(chǎn)與銷售的。對(duì)于這部分可配置物料的面積,是維護(hù)在銷售訂單里。客戶需要按其客戶要求的尺寸比如長(zhǎng)寬等信息,維護(hù)在具體的銷售訂單里。
所以報(bào)表需要根據(jù)貨物移動(dòng)物料憑證號(hào),找到相關(guān)的銷售訂單號(hào),然后去銷售訂單號(hào)里抓取到這些特性的值,然后計(jì)算面積。
如下銷售訂單中銷售的物料是一個(gè)VC物料,


銷售訂單中的特性值如下,

要取出其長(zhǎng)度960 MM,和寬度626 MM。如何處理?
常規(guī)方法是根據(jù)銷售訂單號(hào)+行項(xiàng)目號(hào)得到VBAP-CUOBJ字段,

然后調(diào)用FM VC_I_GET_CONFIGURATION,將這個(gè)VBAP-CUOBJ傳入Instance參數(shù),

執(zhí)行這個(gè)FM,得到數(shù)據(jù)了,

看數(shù)據(jù)結(jié)果,

后續(xù)面積的計(jì)算就不再贅述。
2,可問(wèn)題是,客戶系統(tǒng)里工廠代碼數(shù)十家,且這種可配置物料的出庫(kù)業(yè)務(wù)量巨大,如果是按照這種辦法取長(zhǎng)和寬來(lái)計(jì)算面積,意味著每個(gè)銷售訂單號(hào)+行項(xiàng)目號(hào)組合都要調(diào)用一次這個(gè)FM,有十萬(wàn)個(gè)銷售訂單號(hào)+行項(xiàng)目號(hào)組合就要調(diào)用十萬(wàn)次!這會(huì)帶來(lái)嚴(yán)重的性能問(wèn)題,實(shí)際上老的進(jìn)銷存報(bào)表不堪使用的一個(gè)重要問(wèn)題就是性能慢,報(bào)表運(yùn)行很長(zhǎng)時(shí)間后直接報(bào)ABAP runtime error。
既然是做優(yōu)化,就得要在性能提升上下功夫。筆者決定不調(diào)用這個(gè)FM了,而是直接找到相關(guān)的數(shù)據(jù)庫(kù)表,通過(guò)程序傳入的VBAP-CUOBJ字段值列表,然后去相關(guān)表里做一次或者少數(shù)幾次查詢,然后去執(zhí)行相關(guān)的邏輯得到面積。
經(jīng)過(guò)上網(wǎng)查資料和反復(fù)驗(yàn)證,終于找到了相關(guān)的數(shù)據(jù)庫(kù)表了。如下表可以使用:
IBIN:中間轉(zhuǎn)換表,主要通過(guò)INSTANCE轉(zhuǎn)換。
IBINVALUES:記錄所維護(hù)的特性清單。
IBSYMBOL:存儲(chǔ)具體特性值的表(類似于AUSP)。
相關(guān)取值代碼的片段:
?SELECT?VBAP-EBELN, VBAP-POSNR,
CABN~ATINN"內(nèi)部特性
CABN
~ATNAM"特性名稱
IBSYMBOL
~ATWRT"特性值A(chǔ)PPENDING?CORRESPONDING?FIELDS?OF?TABLE?ITAB_TX
FROM?VBAP
INNER
JOIN?IBIN?ON?IBIN~INSTANCE?=?VBAP~CUOBJ
INNER
JOIN?IBINVALUES?ON?IBINVALUES~IN_RECNO?=?IBIN~IN_RECNO
INNER
JOIN?IBSYMBOL?ON?IBSYMBOL~SYMBOL_ID?=?IBINVALUES~SYMBOL_ID
INNER
JOIN?CABN?ON?CABN~ATINN?=?IBSYMBOL~ATINN
WHERE?VBAP-CUOBJ = cuobj_list.
筆者在前臺(tái)使用SE16,來(lái)查詢本文中的銷售訂單里的特性數(shù)據(jù)(根據(jù)VBAP-CUOBJ = 888905),最終得到如下結(jié)果:

這樣不必反復(fù)調(diào)用FM,實(shí)際上這個(gè)FM也是要去查詢相關(guān)的數(shù)據(jù)庫(kù)表,經(jīng)過(guò)計(jì)算后返回特性值。即是減少了大大的數(shù)據(jù)庫(kù)查詢交互次數(shù),性能當(dāng)然能得到提升了。
2018-06-22 寫(xiě)于上海市