БОЛЬШОЕ Спасибо за документ по оптимизации... Было очень познавательно почитать и почерпнуть мудрость.
Хотелось бы внести некоторые доработки в пример e8 (страница 32):
- перевести алгоритм на field-symbol
- использовать временный буфер на одну строку //занимаюсь BI и там достаточно часто возникает ситуация, что данные идут последовательно. Хотя в общем случае, из серии, повезет\неповезет
- буферизировать ситуацию, когда в таблице в которой делаем select single запись не будет найдена //да я понимаю, что в примере не найти что то в t006 - это больше смахивает на какую то исключительную ситуацию, но в общем случае это полезно
Итак E9
DATA:
l_rowbuffer TYPE i.
FIELD-SYMBOLS:
<ls_mseg_short> LIKE LINE OF lt_mseg_short
<ls_t006a> TYPE t006a .
LOOP AT lt_mseg_short
ASSIGNING <ls_mseg_short>.
l_rowbuffer = 0.
IF <ls_t006a> IS ASSIGNED.
IF <ls_t006a>-msehi = <ls_mseg_short>-meins AND
<ls_t006a>-spras = sy-lang.
l_rowbuffer = 1.
ENDIF.
ENDIF.
IF l_rowbuffer = 0.
READ TABLE lt_t006a INTO ls_t006a
WITH KEY msehi = <ls_mseg_short>-meins
BINARY SEARCH.
IF sy-subrc <> 0.
SELECT SINGLE msehi mseht msehl INTO ls_t006a
FROM t006a WHERE spras = sy-langu AND
msehi = <ls_mseg_short>-meins.
IF sy-subrc <> 0.
CLEAR: ls_t006a.
ls_t006a-spras = sy-lang.
ls_t006a-msehi = <ls_mseg_short>-meins.
ENDIF.
INSERT ls_t006a INTO lt_t006a INDEX sy-tabix
ASSIGNING <ls_t006a>.
ENDIF.
ENDIF.
<ls_mseg_short>-mseht = <ls_t006a>-mseht.
<ls_mseg_short>-msehl = <ls_t006a>-msehl.
ENDLOOP.
p.s. Вроде ошибок в коде не сделал... но если что не пинайте сильно...
Да, ещё почему то не отображаются картинки в скаченном файле Оптимизация ABAP v1-2.pdf
Рисунок 11: INDEX-TBL-1.png
Рисунок 12: Index-Tree-1.png