У меня есть приведенный ниже код, выполнение которого занимает более 200 минут, не могли бы вы помочь мне улучшить производительность.
Этот код запускается по команде пользователя. Скажем, пользователи выбирают все записи (около 300 тыс. Записей) на выходе первого уровня для детализированного отчета следующего уровня:
Динамическая c внутренняя таблица <OI_TABLE>
имеет около 300 тыс. Записей с полем компонент с именем BOX
помечен как 'X' для выбранных пользователем строк.
Программа считывает выбранные строки из внутренней таблицы dynamici c (<OI_TABLE>
), сравните их с другой стандартной внутренней таблицей (GT_BSIS
), которая содержит около 300 КБ записей, значение очищающего ключа должно быть одинаковым для обеих внутренних таблиц (1:N
кардинальность).
It затем вставляет эти общие записи в третью стандартную внутреннюю таблицу (GT_L2_DISP
) для дальнейшей обработки / отображения.
Код:
LOOP AT <oi_table> ASSIGNING <oi_line>.
ASSIGN COMPONENT 'BOX' OF STRUCTURE <oi_line> TO <oi_field>.
IF <oi_field> = 'X'.
ASSIGN COMPONENT 'CLEARING_KEY' OF STRUCTURE <oi_line> TO <oi_field>.
LOOP AT gt_bsis WHERE clearing_key = <oi_field>.
MOVE-CORRESPONDING gt_bsis TO gt_l2_disp.
APPEND gt_l2_disp.
ENDLOOP.
ENDIF.
ENDLOOP.
Здесь, <oi_table>
содержит данные для выхода ALV первого уровня, а GT_BSIS
будет содержать данные для выхода ALV 2-го уровня.
Мое понимание:
Если мы можем заполнить стандартную внутреннюю таблицу GT_BSIS
и маркировку / прохождение 'X' к столбцу (с) ay FLAG
) в GT_BSIS
, , пока пользователь выбирает строки из выходных данных первого уровня ALV , это может помочь в производительности, поскольку можно избежать ОДНОГО Loop .. Endloop
.
Индексированный внутренний стол также может быть вариантом. Пожалуйста, предложите способ повышения производительности.
Примечание: наша система SAP E CC, ABA 7.31, поэтому, пожалуйста, не предлагайте встроенный код / объявление.