Текущее время: Вт, авг 26 2025, 09:37

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Абап - улучшение кода
СообщениеДобавлено: Чт, авг 02 2012, 12:49 
Ассистент
Ассистент

Зарегистрирован:
Пт, июл 29 2011, 11:43
Сообщения: 47
Добрый всем день

у меня такой вопрос, можно ли етот код как-нибудь улучшить?

чтобы он быстрее обрабатывался
13 мио данных - 275 пакетов данних

каждый пакет 50.000 и он обрабатывается за 3 минуты это много!

Большое спасибо


Transformation 7.0
Code:
lt_wfbm[] = SOURCE_PACKAGE[].


* считать все районы 051/053
SELECT * FROM /BIC/PZ_ORG INTO TABLE tmp_einr
WHERE ( /BIC/ZGKZ NOT BETWEEN '05100000' AND '05199999' ) OR
      ( /BIC/ZGKZ NOT BETWEEN '05300000' AND '05399999' ) AND
       objvers = 'A'.

LOOP AT tmp_einr INTO tmp_s_einr.
  ls_einr-sign = 'I'.
  ls_einr-Opt = 'EQ'.
  ls_einr-low = tmp_s_einr-/BIC/Z_GP_ORG.
  APPEND ls_einr to lr_einr.
ENDLOOP.

*удалить все районы, кроме 051 oder 053
DELETE lt_wfbm WHERE /BIC/Z_GP_EINR NOT IN lr_einr.

lt_wfbm[] = lt_wfbm2[].

DELETE lt_wfbm where WBS_ELEMT NOT BETWEEN 'A0170400000000' AND
'A0170499999999'.


LOOP AT lt_wfbm INTO ls_wfbm.
  LOOP AT lt_wfbm2 INTO ls_wfbm2
    WHERE CALMONTH = ls_wfbm-CALMONTH AND /BIC/Z_GP_LB_A =
      ls_wfbm-/BIC/Z_GP_LB_A.
    IF ls_wfbm2-/BIC/ZOBJ_CLS <> '1280' AND ls_wfbm2-/BIC/ZOBJ_CLS
    <> '1000' AND
      ls_wfbm2-/BIC/ZOBJ_CLS <> '1105' AND ls_wfbm2-/BIC/ZOBJ_CLS
      <> '1050' AND
      ls_wfbm2-/BIC/ZOBJ_CLS <> '1080' AND ls_wfbm2-/BIC/ZOBJ_CLS
      <> '1350' AND
      ls_wfbm2-/BIC/ZOBJ_CLS <> '1200' AND ls_wfbm2-/BIC/ZOBJ_CLS
      <> '1160' AND
      ls_wfbm2-/BIC/ZOBJ_CLS <> '1190' AND ls_wfbm2-/BIC/ZOBJ_CLS
      <> '1070' AND
      ls_wfbm2-/BIC/ZOBJ_CLS <> '1220' AND ls_wfbm2-/BIC/ZOBJ_CLS
      <> '1150'.

        ls_wfbm2-/BIC/Z_FEHLART = 'RPA'.
        ls_wfbm2-/BIC/Z_FEHLNUM = '005'.
        ls_wfbm2-/BIC/Z_FEHLBES =error_txt_5.

        ls_wfbm-/BIC/Z_FEHLART = 'RPA'.
        ls_wfbm-/BIC/Z_FEHLNUM = '005'.
        ls_wfbm-/BIC/Z_FEHLBES = error_txt_5.
    ENDIF.

  ENDLOOP.
ENDLOOP.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Абап - улучшение кода
СообщениеДобавлено: Чт, авг 02 2012, 14:25 
Специалист
Специалист

Зарегистрирован:
Чт, фев 24 2005, 17:48
Сообщения: 160
Откуда: Красногорск
Мягко говоря, да.

Для полноты картины лучше приведите весь текст, но могу дать направление:

Удалять можно по части ключа, т.е. не надо считывать все значения районов.
DELETE lt_wfbm WHERE /BIC/Z_GP_EINR+0(3) <> '051' AND /BIC/Z_GP_EINR+0(3) <> '053'

Но т.к. у Вас удаление идет через отрицание, то попробуйте вообще не удалять, укажите соответствующие ограчения в DTP.

В цикле используете field_symbol, а не структуры.

Таблицу lt_wfbm2 сделайте сортированной, с ключами которые у Вас в WHERE
Используйте семантические группы в DTP по этим ключам.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Абап - улучшение кода
СообщениеДобавлено: Чт, авг 02 2012, 16:09 
Ассистент
Ассистент

Зарегистрирован:
Чт, фев 26 2009, 00:21
Сообщения: 41
посмотрел бы еще эти вложенные циклы - точно нужна вложенность?
LOOP AT lt_wfbm INTO ls_wfbm.
LOOP AT lt_wfbm2 INTO ls_wfbm2
.....
ENDLOOP.
ENDLOOP.

что опущено в коде - неясно, но поначалу lt_wfbm[] - это часть из lt_wfbm2[], и если в обоих таблицах осталось после удаления около 10000 строк, то выполняться будет 100 000 000 раз на пакет, да? если опишите задачу хотя бы словами - наверняка коллеги подскажут тут более оптимальный алгоритм


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Абап - улучшение кода
СообщениеДобавлено: Пт, авг 03 2012, 08:25 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, янв 25 2007, 09:57
Сообщения: 276
Я бы еще табличку tmp_einr сделал глобальной переменной, и проверял ее заполненность перед селектом, чтобы не лазить в таблицы на каждом пакете, мелочь, а приятно. Вдруг там большая таблица.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB