以前寫循環時,都是一條記錄一條記錄的比較,代碼示例如下:
loop at S_VAL_CHAR into VAL_CHAR.
??? if VAL_CHAR-CHARACT eq 'P0008_7'."箱型
??????? IT_ITEM-BOX = VAL_CHAR-VALUE_CHAR.
??? ELSEIF VAL_CHAR-CHARACT eq 'S0012'."客戶編號
??????? IT_ITEM-CLIENT_CODE = VAL_CHAR-VALUE_CHAR.
??? ELSEIF VAL_CHAR-CHARACT eq 'CP_CW'."客戶編號
??????? IT_ITEM-CP_CW = VAL_CHAR-VALUE_CHAR.
??? ENDIF.
ENDLOOP.
這樣的話要循環lines(? S_VAL_CHAR ).
應該改成如下,效率應該會好一點.
loop at S_VAL_CHAR into VAL_CHAR WHERE CHARACT eq 'P0008_7' OR CHARACT eq 'S0012' OR CHARACT eq 'CP_CW'.
??? if VAL_CHAR-CHARACT eq 'P0008_7'."箱型
??????? IT_ITEM-BOX = VAL_CHAR-VALUE_CHAR.
??? ELSEIF VAL_CHAR-CHARACT eq 'S0012'."客戶編號
??????? IT_ITEM-CLIENT_CODE = VAL_CHAR-VALUE_CHAR.
??? ELSEIF VAL_CHAR-CHARACT eq 'CP_CW'."客戶編號
??????? IT_ITEM-CP_CW = VAL_CHAR-VALUE_CHAR.
??? ENDIF.
ENDLOOP.
?若條件很多,條件語句寫起來太長,可用range,代碼如下:
data:lr_character type range of BAPI1003_ALLOC_VALUES_CHAR-CHARACT,
lr_character_line like line of lr_character.
CLEAR: lr_character_line,lr_character[].
lr_character_line = 'IEQ'.
lr_character_line-low = 'P0008_7'.
append lr_character_line to lr_character.
CLEAR: lr_character_line.
lr_character_line = 'IEQ'.
lr_character_line-low = 'S0012'.
append lr_character_line to lr_character.
CLEAR: lr_character_line.
lr_character_line = 'IEQ'.
lr_character_line-low = 'CP_CW'.
append lr_character_line to lr_character.
loop at S_VAL_CHAR into VAL_CHAR WHERE CHARACT in lr_character.
??? if VAL_CHAR-CHARACT eq 'P0008_7'."箱型
??????? IT_ITEM-BOX = VAL_CHAR-VALUE_CHAR.
??? ELSEIF VAL_CHAR-CHARACT eq 'S0012'."客戶編號
??????? IT_ITEM-CLIENT_CODE = VAL_CHAR-VALUE_CHAR.
??? ELSEIF VAL_CHAR-CHARACT eq 'CP_CW'."客戶編號
??????? IT_ITEM-CP_CW = VAL_CHAR-VALUE_CHAR.
??? ENDIF.
ENDLOOP.
?
繼續優化一下,把那些重復的代碼提取出來,最后如下:
data:?? ?lr_character type range of BAPI1003_ALLOC_VALUES_CHAR-CHARACT,
?? ??? ??? ?lr_character_line like line of lr_character.
?? ??? ??? ?
form ADD_CHARACTER_TO_RANGE USING value(s) CHANGING r.
??? clear lr_character_line.
??? lr_character_line = 'IEQ'.
??? lr_character_line-low = s.
??? append lr_character_line to lr_character.
ENDFORM.
CLEAR: lr_character[].
perform ADD_CHARACTER_TO_RANGE using 'P0008_7' changing lr_character.
perform ADD_CHARACTER_TO_RANGE using 'S0012' changing lr_character.
perform ADD_CHARACTER_TO_RANGE using 'CP_CW' changing lr_character.
loop at S_VAL_CHAR into VAL_CHAR WHERE CHARACT in lr_character.
??? if VAL_CHAR-CHARACT eq 'P0008_7'."箱型
??????? IT_ITEM-BOX = VAL_CHAR-VALUE_CHAR.
??? ELSEIF VAL_CHAR-CHARACT eq 'S0012'."客戶編號
??????? IT_ITEM-CLIENT_CODE = VAL_CHAR-VALUE_CHAR.
??? ELSEIF VAL_CHAR-CHARACT eq 'CP_CW'."客戶編號
??????? IT_ITEM-CP_CW = VAL_CHAR-VALUE_CHAR.
??? ENDIF.
ENDLOOP.?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
