только что проверил:
1. insert без инекса в сортированную таблицу не работает!
2. append работает, но только в том случае, если данные выбираются в порядке сортировки,
т.е. таблица по которой loop остортирована также как предполагается в sorted table,
попробовав отсортировать gt_report descending (тогда как sorted gt_lifnr1 ascending) попал
в дамп. (это связано с тем, что аппенд добавляет в конец таблицы, не смотря на то что она
sorted, и байнари серч найдя значение 5, уже ек идет дальше в поиске нужного значения 4,
и пото пытается вставить 4, сортировать же gt_report как раз не хочется - ибо он очень
большой, так что insert по индексу мне видится наиболее разумным решением).
см код...
REPORT ZTEST_12 .
.
* Наименование кредитора
TYPES: BEGIN OF t_lfa1,
lifnr TYPE lifnr,
name1 TYPE name1_gp,
END OF t_lfa1.
DATA: gs_lfa1 TYPE t_lfa1,
gt_lfa1 TYPE SORTED TABLE OF t_lfa1
WITH UNIQUE KEY lifnr.
DATA: gt_lfa_main TYPE standard TABLE OF t_lfa1,
gs_report TYPE t_lfa1.
FIELD-SYMBOLS: <fs_lfa1> LIKE LINE OF gt_lfa1.
* --------------------------------------------
select lifnr
into table gt_lfa_main
from lfa1
* up to 10000 rows
.
sort gt_lfa_main by lifnr DESCENDING.
LOOP AT gt_lfa_main INTO gs_report.
* Какой-либо код
* ..............
* Какой-либо код
IF gs_report-lifnr IS NOT INITIAL.
* тут SELECT SINGLE заменим на хитрую конструкцию
UNASSIGN <fs_lfa1>. " Dump off
READ TABLE gt_lfa1 ASSIGNING <fs_lfa1> WITH KEY
lifnr = gs_report-lifnr BINARY SEARCH.
IF sy-subrc <> 0.
* Не нашли однако! надо селектнуть и добавить по индексу,
* который определил read (он установил SY-TABIX именно в то место,
* где в сортированной таблице должна была быть запись)!
IF <fs_lfa1> IS NOT ASSIGNED.
ASSIGN gs_lfa1 TO <fs_lfa1>.
ENDIF.
SELECT SINGLE name1 INTO <fs_lfa1>-name1 FROM lfa1
WHERE lifnr = gs_report-lifnr.
IF sy-subrc = 0.
<fs_lfa1>-lifnr = gs_report-lifnr.
append <fs_lfa1> TO gt_lfa1.
ENDIF.
ENDIF.
gs_report-name1 = <fs_lfa1>-name1.
ENDIF.
* Какой-либо код
* Модификация основной таблицы GT_REPORT
* Какой-либо код
ENDLOOP.