Автор Тема: Оптимизация ABAP-а  (Прочитано 283332 раз)

0 Пользователей и 5 Гостей просматривают эту тему.

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #150 : Сентябрь 10, 2009, 11:47:59 pm »
You are not allowed to view links. Register or Login
есть код, в котором прописаны константы. как оптимально их убрать?
(как вариант  - завести внутреннюю таблицу , доступную избранному человеку или есть другой хороший способ)
 например:
Код: You are not allowed to view links. Register or Login
SELECT * FROM A596
          into table ia596
        WHERE KAPPL = '# ' AND
                KSCHL = '####' AND
                VKORG = '####' AND  PLTYP = '##'
                AND WAERK = '###' AND MATNR =  MATNR .

и просто в коде много всяких констанкт для исключений и пр.

вообще стоит ли их куда-нибудь в отдельное место перемещать?
Собственно, варианты «устранения» хардкода уже перечислены, резюмируем...

1. Вынос на селекционный экран. Заполнение/изменение: сохранение варианта отчета и последующий его вызов запуском транзакции, или программно до вывода экрана (коррелирует с п.2). Поля можно сделать нередактируемыми или скрыть для обычных пользователей (выводить для редактирования только при наличии полномочий) и т.п., т.е. существуют вариации. Изменение константы может быть завязано как на ответственного ("избранного" ;D) пользователя, так и на абапера.
2. Вынос в константы. Изменение завязано исключительно на абапера.
3. Вынос в таблицу БД, генерация диалога её ведения, интерфейса загрузки из файла для первоначального заполнения, если данных много (пример: таблица "статья - счета" для баланса, отчета о ПиУ в бухгалтерии и др.), создание объекта полномочий для ответственных пользователей. Изменение завязано на ответственного пользователя.

Выбор варианта зависит от условий каждой конкретной задачи.

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #151 : Сентябрь 12, 2009, 09:42:29 am »
Привет всем.

Извиняюсь что не так часто сейчас захожу теперь в эту интересную тему, тут просто проект стартанунл, тут и спать некогда :).

Спасибо за идеии, как только освобожусь, возьмусь снова за абапчик, задачу то сделать надо.

Теперь правда проблема не с bsis, а с первой выборкой по mkpf+mseg, не успевает зараза отработать.

Думаю попробовать пару идей подкинутых вами:

- SELECT .. PACKAGE SIZE - вдруг валится из-за памяти (хотя ошибка TIME_OUT)
- может попробовать SELECT .... ENDSELECT.


Кстати, тут уже говорили что можно сбрасывать время тайоута, используя commit work, как Вы думаете: можно ли использовать его в SELECT .... ENDSELECT, будет ли работать?


- попробую использовать mkol + mkolh - правда еще не копал, каким же образом юзать эту связку, нету ли у кого-то примера?
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #152 : Сентябрь 17, 2009, 11:56:34 am »
Посмотри решения в нотах You are not allowed to view links. Register or Login и You are not allowed to view links. Register or Login.

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Re: Оптимизация ABAP-а
« Ответ #153 : Сентябрь 17, 2009, 03:48:01 pm »
You are not allowed to view links. Register or Login
Посмотри решения в нотах You are not allowed to view links. Register or Login и You are not allowed to view links. Register or Login.

Спасибо, почитаю
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Репутация: +1/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #154 : Сентябрь 23, 2009, 09:54:50 am »
мои 20 тугриков  :)
--
select в sorted table намного быстрее, чем
select в standard (или не дай бог with header line) + sort
только что замерял:
sorted 1774,
standard+sort 75479,
замерял на AUFK (~15000 записей)
--
для чего сортировка? - что потом read....binary search
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #155 : Сентябрь 23, 2009, 10:24:46 am »
Welcome, darth!
Здрав будь, ждем от тебя дальнейших сообщений для ликбеза по матчасти. ;)

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Репутация: +1/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #156 : Сентябрь 23, 2009, 11:21:28 am »
еще интересная фича...
в случае когда нам в цикле (например по fi-документам, очень много записей) нужно к каждому кредитору вытащить наименование (причем кредиторов заведомо намного меньше чем документов).
в принципе есть несколько вариантов реализации, наиболее быстрым мне кажется следующий:
Код: You are not allowed to view links. Register or Login
* Наименование кредитора
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_report TYPE TABLE OF bseg,
      gs_report TYPE bseg.
FIELD-SYMBOLS: <fs_lfa1> LIKE LINE OF gt_lfa1.
* --------------------------------------------
LOOP AT gt_report INTO gs_report.
* Какой-либо код
* ..............
* Какой-либо код
  IF 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.
        INSERT <fs_lfa1> INTO gt_lfa1 INDEX sy-tabix.
      ENDIF.
    ENDIF.
    gs_report-lifname = <fs_lfa1>-name1.
  ENDIF.
* Какой-либо код
* Модификация основной таблицы GT_REPORT
* Какой-либо код
ENDLOOP.
« Последнее редактирование: Сентябрь 23, 2009, 03:21:37 pm от Dmitriy »
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #157 : Сентябрь 23, 2009, 11:37:48 am »
Т.е. смысл в том, что мы не выбираем сразу всю таблицу LFA1 во внутреннюю gt_lfa1 (как этому учил нас ну ты помнишь кто ;)), а делаем это по необходимости, постепенно, в процессе цикла по позициям д-тов FI, экономя тем самым время и память, поскольку все кредиторы не понадобятся...

P.S. Уже не помню, писал или нет, что для экономии памяти после обработки делать FREE уже "ненужных" вн. таблиц со вспомогательными данными (наименования и пр.). Если, конечно, это критично.

Добавлено: надо будет откатать решение и подредактировать свой пост про это дело...
« Последнее редактирование: Сентябрь 23, 2009, 11:48:11 am от Dmitriy »

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Репутация: +1/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #158 : Сентябрь 23, 2009, 11:46:09 am »
да, выбирать всю немного накладно - вдруг их там много (например у меня 40тысяч),
выбирать с for all enrtyes - тоже геморно, т.к. в таблице доков (по которой будет for all enrtyes)
например 200 тысяч позиций, да еще и ПОВТОРЯЮТСЯ кредиторы (это очень важно что они повторяются - вышеупомянутым кодом мы уходим от повторения!)
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Репутация: +1/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #159 : Сентябрь 23, 2009, 11:59:43 am »
еще интересная возможность...
иногда берет сомнение какой вариант кода отработает быстрее...
можно довольно быстро и корректно замерить (например два варианта одного селекта)
в транзакции SE30,
заходим в нее и нажимаем сверху кнопку "советы",
видим два окошечка - в каждом можно написать (вставить из буфера) кусок кода,
нажав кнопку наверху "Измерить время выполнения" мы увидим над каждым из окон время выполнения.
--
причем можно сравнивать не только свои проги, но и выбрать в дереве слева примеры по быстродействия SAP...
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Репутация: +1/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #160 : Сентябрь 23, 2009, 12:25:16 pm »
кхм... в коде косячок есть небольшой - а поправить свое сообщение я не могу - страннаааа...  ???

Dmitriy: подправил, структурировал немного. Просто время, отпущенное для редактирования своего сообщения ограничено. ;)
« Последнее редактирование: Сентябрь 23, 2009, 02:13:22 pm от Dmitriy »
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #161 : Сентябрь 23, 2009, 04:00:05 pm »
You are not allowed to view links. Register or Login
еще интересная фича...
в случае когда нам в цикле (например по fi-документам, очень много записей) нужно к каждому кредитору вытащить наименование (причем кредиторов заведомо намного меньше чем документов).
Самым быстрым будет использование сортированной таблицы (SORTED TABLE) с уникальным ключом
Тогда не придется дополнительно искать, куда вставить запись. ;)

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Репутация: +1/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #162 : Сентябрь 23, 2009, 04:29:33 pm »
она и так сортированная и с уникальным ключом (см код)...
при sy-subrc <> 0 после чтения из нее..
sy-tabix содежит тот индекс где должна была б находиться запись - это очень интересный момент (специально сегодня этот прикол проверял)! вставка по индексу быстрее просто вставки в сортированную таблицу.
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #163 : Сентябрь 24, 2009, 10:27:45 am »
настолько, что выгоднее писать дополнительный код? :)

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Репутация: +1/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #164 : Сентябрь 24, 2009, 10:39:36 am »
время будет - замеряю  ;)
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Репутация: +1/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #165 : Сентябрь 25, 2009, 01:44:09 pm »
только что проверил:
1. insert без инекса в сортированную таблицу не работает!
2. append работает, но только в том случае, если данные выбираются в порядке сортировки,
   т.е. таблица по которой loop остортирована также как предполагается в sorted table,
   попробовав отсортировать gt_report descending (тогда как sorted gt_lifnr1 ascending) попал
   в дамп. (это связано с тем, что аппенд добавляет в конец таблицы, не смотря на то что она
   sorted, и байнари серч найдя значение 5, уже ек идет дальше в поиске нужного значения 4,
   и пото пытается вставить 4, сортировать же gt_report как раз не хочется - ибо он очень
   большой, так что insert по индексу мне видится наиболее разумным решением).
см код...
Код: You are not allowed to view links. Register or Login
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.
« Последнее редактирование: Сентябрь 25, 2009, 01:51:04 pm от darth »
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн Удав

  • Newbie
  • *
  • Сообщений: 44
  • Репутация: +7/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #166 : Сентябрь 25, 2009, 02:26:36 pm »
Я имел в виду, что нужно сразу работать с таблицей типа SORTED TABLE  :)
С такой INSERT .. INTO TABLE работает на "ура".

Оффлайн darth

  • Newbie
  • *
  • Сообщений: 11
  • Репутация: +1/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #167 : Декабрь 14, 2009, 01:44:11 pm »
как правильнее организовать цикл по большой внутренней таблице с условиями:
Код:
Код: You are not allowed to view links. Register or Login
tables: bkpf.

data: itab type sorted table of bkpf
                with unique key bukrs belnr gjahr.

field-symbols: <itab> like line of itab.


select * into table itab from bkpf
                         where bukrs eq 'SNNG'
                           and gjahr eq '2007'.

data: t1 type i,
      t2 type i,
      t3 type i,
      t4 type i.

data: delta type i.

* ВАРИАНТ 1 ---------------------------------------------------------&
get run time field t1.
loop at itab assigning <itab>
             where bukrs eq 'SNNG'
               and belnr cp '55*'.
endloop.

* ВАРИАНТ 2 ---------------------------------------------------------&
get run time field t2.
read table itab transporting no fields
                with key bukrs = 'SNNG'
                         belnr = '5500000000'
                binary search.

loop at itab assigning <itab> from sy-tabix.
  if <itab>-belnr+0(2) <> '55'.
    exit.
  endif.
endloop.

* ВАРИАНТ 3 ---------------------------------------------------------&
get run time field t3.
read table itab transporting no fields
                with key bukrs = 'SNNG'
                         belnr = '5500000000'
                binary search.

loop at itab assigning <itab>
             from sy-tabix
             where bukrs eq 'SNNG'
               and belnr cp '55*'.
endloop.

get run time field t4.

* результат сравнения -----------------------------------------------&
delta = t2 - t1.
write: / 'ASSIGNING + WHERE: ', delta.

delta = t3 - t2.
write: / 'ASSIGNING + FROM + IF: ', delta.

delta = t4 - t3.
write: / 'ASSIGNING + FROM + WHERE: ', delta.
как не странно но очень большая разница между этими тремя реализациями...
loop по сортированный таблице работает не так быстро как думается...
лучший по быстродействию вариант - 2, причем на порядки!!!
при объеме таблицы в 40 000 записей
ASSIGNING + WHERE:      43.548       
ASSIGNING + FROM + IF:       727   
ASSIGNING + FROM + WHERE:       1.849
I am the master of the C.L.I.T. Remember this fucking face. Whenever you see C.L.I.T., you'll see this fucking face. I make that shit work. It does whatever the fuck I tell it to. No one rules the C.L.I.T like me.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #168 : Октябрь 25, 2010, 12:14:24 am »
В общем-то, так как тема оказалась большая и интересная, то все что можно было собрать, собрано, посчитано и описано в документе: "Оптимизация ABAP v1-0.pdf", первая версия данного документа выложена в первом посте данной темы: You are not allowed to view links. Register or Login и в случае обновлений файл будет так же изменяться по этому же адресу.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #169 : Март 21, 2011, 05:31:38 pm »
Подготовлена новая версия документа 1.1 по оптимизации ABAP. Файл выложен в первом посте данной темы: You are not allowed to view links. Register or Login. Так что если есть замечания и комментарии, пишем  ::)

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #170 : Апрель 25, 2011, 02:48:52 pm »
Некоторые ссылки в помощь...
You are not allowed to view links. Register or Login - оптимизация на SDN
You are not allowed to view links. Register or Login - полезная инфа
You are not allowed to view links. Register or Login - транзакция SAT
Цитировать
SAT is the transaction name of the new ABAP Runtime Analysis Tool, which is one of the most significant improvements in ABAP in the NetWeaver 7.0 EhP2. For those of you who are already familiar with the transaction SE30, the former ABAP Runtime Analysis Tool, transaction SAT is the successor of SE30. In SAT, ABAP's Runtime Analysis has been reworked by SAP's R&D department and has been enhanced with effective new analysis tools and features.

SAT offers benefits such as a modern state-of-the art UI, new analysis tools, easy navigation between tools and so on. This first blog of the series about SAT gives overview of the most useful SAT improvements (particularly in comparison with the former SE30) and gives a quick guideline how to use new features and tools of the SAT to execute effective runtime analysis of any ABAP application.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #171 : Май 20, 2011, 09:40:28 pm »
Наверное это я вставлю в самом начале следующей версии документа:
Цитировать
В финансах как и в жизни, есть так называемый принцип уместности или в народе, овчинка должна стоит выделки, или если еще ближе к теме, то не надо оптимизировать то, что в оптимизации не нуждается. Хотите пример.. ну что ж никто не оценит если вы потратите пару дней на оптимизацию в результате которой программа вместо часа будет работать 55 минут, поверьте - пользователи этого не поймут и не оценят, а вот два дня вашей работы... ну как по мне они этого не стоят, хотя если вам больше нечем заняться, то оптимизируйте конечно  ::)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Простая транзакция, которая позволяет быстро выполнить проверку качества написанного кода для программы. Стандартно можно быстро проверить простые отчеты, если нужно проверить что-то более глобальное, то следует использовать транзакцию «Инспектор кода SAP». Программу можно проверить или запустив отдельно транзакцию SLIN или же находясь в инспекторе кода, например транзакция SE38 – ABAP редактор, выполнить по меню следующий пункт: «Программа» – «Проверить» – «Расширенная проверка программы».  При этом если вы находитесь в одном из модулей программы, то система проверку начнем с базового модуля. Например, имеем отчет, который определенным способом выбирает документы резервирований, программа типа отчет, включает в себя несколько модулей, по которым разнесена логика работы. Находясь в редакторе кода, выбираем расширенную проверку программы, рисунок SE38-1.png. Будет запущена транзакция SLIN, куда будет автоматически подставлено имя программы находящейся в редакторе кода в текущий момент. По умолчанию большинство позиций будет отмечено для расширенной проверки, рисунок SLIN-0.png. Любая расширенная проверка вашей программы, покажет, что с точки зрения системы SAP, вы писать правильно не умеете, если до этого у вас нет привычки, запускать расширенную проверку для всех своих текстов. 

Запустим проверку, отметив все галки в блоке «Проверки». Получим таблицу со списком данных проверки. Так как сам по себе проверяемый отчет не слишком большой, то в данном случае совсем уже критических предупреждений сравнительно не много, рисунок SLIN-1.png. Данные в таблице сгруппированы в три колонки, первая колонка содержит операции, которые с точки зрения системы являются критическими, далее идет колонка предупреждений и последняя колонка содержит информационные сообщения, когда вроде как все хорошо, но системе есть что вам сказать интересного. Для просмотра детальной информации нужно сделать двойной клик мышью в интересующем поле и система перейдет к экрану детальной информации по проблемам.

  • Тестовая среда – Ошибки тестовой среды возникают в случае тестирования стандартных программ SAP, для которых компания разработчик запретила выполнение тестов, например тестирование программы  SAPMM07M – Пул модулей для движений материала, выдает такую ошибку и соответственно далее все тесты пропускаются, что в принципе правильно, а то ведь протестируешь стандартную SAP-программу и боюсь там такого будет… что нечего вводить в искушение не окрепшие умы, а окрепшие, они и так знают через что и как оно местами написано.
  • PERFORM/FORM-интерфейсы – критические ошибки в данном случае не встречал, а из предупреждений, система предполагает, что если тексте программы нет явного вызова объявленной подпрограммы, то скорее всего, такая подпрограмма не используется, хотя возможно есть динамический вызов, рисунок. Далее в колонке информации система покажет список параметров подпрограмм, для которых при вызове не указан явный тип параметра. В общем виде если тип не важнее рекомендуется указать директиву TYPE ANY, хотя в данном случае наверное более правильно было бы указать TYPE matnr, т.е. явно сказать системе, что в данном параметре будет передаваться код материала. В принципе, объявление параметров без явного указания типа, тянется со старых версий. В новых версиях системы, настоятельно рекомендуется указывать типы параметров, что позволит, на этапе компиляции получить ошибки не правильной передачи параметров при вызове такой подпрограммы и избежать проблем в работе.
  • CALL FUNCTION – интерфейсы – Выполняется проверка вызовов функциональных модулей. Критические ошибки не попадались, так как обычно я использую вставку вызова функционального модуля через шаблоны, поэтому остаются только предупреждения связанные с отсутствием обработки SY-SUBRC кода после вызова функции, других предупреждений мне не попадалось,
  • Внешние программные интерфейсы – не встречал.
  • Непротиворечивость экранов – не встречал.
  • Полномочия – не встречал, возможны предупреждения в случае не правильной передачи параметров для проверки в объекты авторизации.
  • GUI-статус и TITLEBAR – не встречал.
  • Ид. SET/GET-параметров – не встречал.
  • MESSAGE (сообщение) – не встречал.
  • Цепочки знаков – данная проверка считает ошибкой использование прямых текстовых цепочек знаков в коде программы, т.е. например такой код считается ошибочным: fieldcat_ln-seltext_m = '№ Позциии', т.е. когда текст явно задан. Рекомендуется использовать текстовые переменные вида TEXT–xxx, ведение текстов к программе выполняется через меню: «Перейти» – «Текстовые элементы» – «СимволыТекстПеременн». Предупреждения в данном поле, возникают, в том случае, если в программе объявлены текстовые переменные, которые нигде не используются
  • Вывод CURR/QUAN-полей – в системе SAP количество дробных знаков для полей типа сумма определяется в настройке, поэтому например, при выводе такого поля на экран, система требует, чтобы был указан код валюты, который и определит, как выводить число. Кстати, именно по этому, при создании, например собственной таблицы в базе данных, если вы объявляете поле сумма или количество, то не можете активировать таблицу, пока не укажите для таких полей ссылочное поле, которое будет содержать тип единицы измерения. Более подробно как система работает с данными типа CURR можно прочитать по ссылке: You are not allowed to view links. Register or Login. Вывод строки суммы или количества без указания ссылочной величины считается ошибкой и требует исправления.
  • Свойства полей – Ошибочные ситуации я не встречал, а вот предупреждения в большинстве случаев относятся к переменным, которые объявлены в коде, но не используются нигде в тексте программы. В 99% случаев так оно и есть, так как вы просто забыли про объявленную переменную или перестали ее использовать, и 1% оставляем на переменные, доступ к которым, выполняется не явно, например? через переменные типа FIELD-SYMBOLS.
  • Избыточные операторы – В данную проверку, попадают блоки операций, которые не используются в программе, например это макросы которые нигде не используются или, объявленные подпрограммы, которые не содержат вообще никакого кода внутри себя
  • Расширения структур – С версии, наверное ECC 5.0, ну уж точно что в текущей ECC 6.0 при объявлении структур или собственных таблиц в базе данных, система требует при активации определить категорию расширения создаваемой структуры/таблицы. Так вот если при создании разрешить расширение структуры, то при использовании переменной типа созданной структуры система будет выдать ошибку при расширенной проверке, суть которой сводится к тому, что в случае расширения структуры или таблицы может произойти проблема с размерами структур в программе, которые имеют тип созданной в словаре структуры. В общем виде раньше, когда программы в системе были не компилированные, такой проблемы быть в принципе не могло. Сейчас же по факту дополнения структуры, возможно, придется в ручном режиме перегенерировать исходные коды, в которых встречается объявления переменных типа расширенной структуры
  • Направления программирования – предупреждения данного типа не попадались.
  • Устаревшие операторы – наверное, будет содержать самый большой список ошибок и предупреждений, что логично, так как языку уже лет и лет… и со временем SAP начинает считать некоторые конструкции устаревшими. Поддержка таких элементов языка похоже отменяться не будет, так как кроме нового кода, есть большой груз старых текстов. Лично я например, все никак не привыкну перестать использовать такие конструкции как STRUCTURE или LIKE или объявления таблиц с заголовком и т.д. Кстати, к быстродействию данный раздел проверки тоже имеет прямое отношение. Например, если нужно прочитать строку внутренней таблицы по индексу, используя READ TABLE, и при этом значения вы не передаете ни в какую структуру, то SAP рекомендует использовать расширение команды TRANSPORTING NO FIELDS, чтобы лишний раз не гонять данные.
  • Пакетная проверка – предупреждения данного типа не попадались.
  • Общие для программ тесты – предупреждения данного типа не попадались.
PS: Если у кого есть примеры ошибок которые не описаны дополняйте.
PSS: В файл по оптимизации данная информация будет перенесена чуть позже в более расширенном виде.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: Оптимизация ABAP-а
« Ответ #173 : Сентябрь 21, 2011, 04:44:04 pm »
Выложена промежуточная версия Оптимизация ABAP 1.2, в которой частично расширено описание раздела 10 – Тестирование программ, дополнено описанием использования транзакций расширенной проверки программы SLIN и анализатора код транзакции SCI / SCII. Как обычно файлик прикреплен в первом посте данной темы.

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: Оптимизация ABAP-а
« Ответ #174 : Сентябрь 21, 2011, 04:47:45 pm »
You are not allowed to view links. Register or Login
Выложена промежуточная версия Оптимизация ABAP 1.2 В которой частично расширено описание раздела 10 – Тестирование программ, дополнено описанием использования транзакций расширенной проверки программы SLIN и анализатора код транзакции SCI / SCII.
Всё пишешь, брат... 8)

P.S. Надо бы подъехать к тебе, успокоить, так тЕбе же фиг успокоишь)))

Sapforum.Biz

Re: Оптимизация ABAP-а
« Ответ #174 : Сентябрь 21, 2011, 04:47:45 pm »