четверг, 28 марта 2013 г.

Экстракция и оптимизация

Всегда поражает, что единажды написанное в примерах SAP применяется прямо и перпердикулярно.  Как пример, обработка C_T_DATA[] в расширении экстрактора.


Обычная картинка:

DATA:

  L_T_DATA type STANDARD TABLE OF mc11va0hdr.

FIELD-SYMBOLS:
  <L_S_DATA> TYPE mc11va0hdr.

L_T_DATA[] = C_T_DATA[].

LOOP AT L_T_DATA ASSIGNING <L_S_DATA>.

ENDLOOP.
C_T_DATA[] = L_T_DATA[].


При этом кроме цикла ничего нету...
Вопрос - зачем терять время и память на операции присвоения.


Да, структура C_T_DATA типа неизвестна...
Но есть же вариант проще

FIELD-SYMBOLS:
  <L_S_DATA> TYPE mc11va0hdr.

LOOP AT С_T_DATA ASSIGNING <L_S_DATA>.
ENDLOOP.

Надо знать структуру, потому что ....
Пожалуйста...
TYPES:
  LT_DATA type table of mc11va0hdr.

FIELD-SYMBOLS:
  <LT_DATA>  TYPE LT_DATA,
  <L_S_DATA> TYPE LINE OF LT_DATA.

ASSIGN C_T_DATA TO <LT_DATA>.
LOOP <LT_DATA> AT ASSIGNING <L_S_DATA>.
ENDLOOP.

Цифры:
  Было 22 сек стало 18 сек на 8000 записей
  Было 41 минут, стало 11 на 1 900 000 записях

2 комментария:

I комментирует...

Полезное замечание.

Unknown комментирует...

Спасибо, пригодилось.