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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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