點(diǎn)擊藍(lán)字 關(guān)注我們
一
前言
行表轉(zhuǎn)列表在某些特定行業(yè),比如鞋服行業(yè)應(yīng)用較多. 相比行表,列表呈現(xiàn)方式更直觀,便于數(shù)據(jù)的比較.
比如,圖二的列表呈現(xiàn)形式可以更直觀的看出每個人員電視銷量的對比或同一個人員不同產(chǎn)品銷量的對比.
前文介紹了一個通用ALV行表轉(zhuǎn)列表顯示的類.
詳見連接無峰诺苹,公眾號:ABAP 技巧與實(shí)戰(zhàn)SAP工具箱 通用ALV行轉(zhuǎn)列
本文主要介紹怎么把ALV轉(zhuǎn)列表后調(diào)整的數(shù)量回寫到源ALV中
二
調(diào)用方式的調(diào)整
因?yàn)閭鬟f的內(nèi)表內(nèi)容涉及到修改內(nèi)容. 所以類方法的參數(shù)類型做了調(diào)整. 由importing參數(shù)調(diào)整為 changing 參數(shù)
全屏ALV
函數(shù) REUSE_ALV_GRID_DISPLAY_LVC
在ALV添加自定義功能,調(diào)用類方法 ,傳入ALV顯示的內(nèi)表.
CALL METHOD zcl_rep_comm_line_col=>convert_line_to_col_full_alv changing it_data = gt_alv
對象ALV
在ALV添加自定義功能, 調(diào)用類方法,傳入ALV顯示的內(nèi)表及ALV對象.
CALL METHOD zcl_rep_comm_line_col=>convert_line_to_col_full_alv changing ct_data = gt_alv .
同時(shí)補(bǔ)充參數(shù)
IV_EDIT? ? ? 用于強(qiáng)制列表指標(biāo)可編輯
IV_DECAN? 分?jǐn)倳r(shí)保留的小數(shù)位數(shù)
三
列表編輯狀態(tài)
兩種情況下,列表顯示允許修改指標(biāo)字段內(nèi)容
源ALV的指標(biāo)字段存在編輯屬性
源ALV的指標(biāo)字段沒有編輯屬性, 但是轉(zhuǎn)列表時(shí)傳遞了參數(shù)IV_EDIT = 'X'. (該參數(shù)為可選參數(shù),默認(rèn)為空)
四
操作步驟
ALV行表轉(zhuǎn)列表的詳細(xì)處理步驟見前文. 這里只補(bǔ)充關(guān)鍵步驟及數(shù)據(jù)回寫步驟
01
進(jìn)入列表顯示
源ALV選中行/列進(jìn)入列表顯示
02
設(shè)置關(guān)鍵要素
03
列表編輯模式
列表顯示時(shí)如果允許修改指標(biāo), 功能區(qū)會多一個保存按鈕.同時(shí)指標(biāo)字段允許修改內(nèi)容
04
數(shù)據(jù)保存
修改數(shù)據(jù)后,點(diǎn)擊保存按鈕.
05
原表被更新
再點(diǎn)擊返回按鈕返回源ALV時(shí),源內(nèi)表值會被更新
五
更新規(guī)則
如果源內(nèi)表中一個單元格對應(yīng)列表中的一個單元格(下圖中的6121地點(diǎn)),直接回寫
如果源內(nèi)表多個單元格匯總成列表中的一個單元格, 按照占比回寫(下圖中的G495/G499地點(diǎn)).
六
關(guān)于分?jǐn)倳r(shí)整除問題的設(shè)置
分配時(shí)的最小拆分?jǐn)?shù)量通過傳入?yún)?shù)確定 IV_DECAN(分?jǐn)倳r(shí)保留的小數(shù)位數(shù))確定,該參數(shù)默認(rèn)值0
示例:
金額允許分拆到0.01 傳入?yún)?shù)IV_DECAN = 2 .
數(shù)量允許分拆到1 傳入?yún)?shù)IV_DECAN = 0 .
設(shè)置IV_DECAN=0后,會確保分配的數(shù)量不會出現(xiàn)小數(shù),分?jǐn)傊挟a(chǎn)生的余數(shù)會回寫到最后一行中.
七
邏輯實(shí)現(xiàn)過程
傳入內(nèi)表如果選中了行,則只有選中行參數(shù)轉(zhuǎn)列.
選中行或全部行寫入子內(nèi)表. 并記錄子內(nèi)表與源內(nèi)表的行對應(yīng)關(guān)系(全部行轉(zhuǎn)列表無需該關(guān)系)
行表轉(zhuǎn)列表的同時(shí), 記錄列表中的每個指標(biāo)字段與行表指標(biāo)字段的對應(yīng)關(guān)系.
行表轉(zhuǎn)列表的同時(shí),定義與列表同結(jié)構(gòu)的嵌套哈希內(nèi)表,記錄每個單元格與傳入的子行表的行號對應(yīng)關(guān)系.
列表中修改的單元格需要記錄下來. 后續(xù)只處理這些修改了的單元格.
對于修改的單元格,讀取同到單元格與傳入子行表的行號,再次讀取對應(yīng)的源內(nèi)表的行號.
對于修改的單元格字段,讀取到對應(yīng)的源內(nèi)表字段.
如果源內(nèi)表對應(yīng)的行號只有一個,回寫內(nèi)容
如果源內(nèi)表行號有多個, 則把調(diào)整的單元格的內(nèi)容分配到多個行號中.再回寫內(nèi)容
八
總結(jié)
實(shí)際處理回寫邏輯的時(shí)候發(fā)現(xiàn),回寫邏輯比行表轉(zhuǎn)列表邏輯復(fù)雜.
為了回寫性能考慮,記錄了列表中改變的單元格信息,同時(shí)在行表轉(zhuǎn)列表時(shí)補(bǔ)充記錄了多個對應(yīng)關(guān)系表, 這些對應(yīng)關(guān)系表記錄了源表單元格與列表單元格的對應(yīng)關(guān)系.
回寫時(shí),通過這些對應(yīng)關(guān)系表快速獲取源表單元格信息后,分配并回寫數(shù)量.
THE
END