Текущее время: Вт, июл 08 2025, 07:19

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


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 09:15 
Специалист
Специалист

Зарегистрирован:
Пн, дек 21 2009, 11:07
Сообщения: 167
Здравствуйте.

Вопрос снова касается сторно.
Есть вн. таблица c неопределенным количеством записей (записей много).
Code:
LOOP AT ft_out INTO fl_out.
...
SELECT SINGLE belnr INTO f_belnr FROM bkpf
   WHERE bukrs = fl_out-bukrs AND stblg = fl_out-belnr AND stjah = fl_out-gjahr.
...
APPEND it_out.
ENDLOOP.

В части выборки из BKPF производительность сильно падает, закоментировав же эту часть кода программа отрабатывает за секунды. Есть ли красивое решение поднять производительность?
Создал (не уникальный всех систем БД) индекс к таблице BKPF для полей STBLG STJAH. Не совсем помогло...


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 09:28 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 10:34
Сообщения: 716
Откуда: Moscow
Пол: Мужской
DarZ написал(а):
Здравствуйте.

Вопрос снова касается сторно.
Есть вн. таблица c неопределенным количеством записей (записей много).
Code:
LOOP AT ft_out INTO fl_out.
...
SELECT SINGLE belnr INTO f_belnr FROM bkpf
   WHERE bukrs = fl_out-bukrs AND stblg = fl_out-belnr AND stjah = fl_out-gjahr.
...
APPEND it_out.
ENDLOOP.

В части выборки из BKPF производительность сильно падает, закоментировав же эту часть кода программа отрабатывает за секунды. Есть ли красивое решение поднять производительность?
Создал (не уникальный всех систем БД) индекс к таблице BKPF для полей STBLG STJAH. Не совсем помогло...


лучше использовать select single при полном первичном ключе, иначе select... endselect с дополнением UP TO 1 ROWS

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 09:31 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Попробуйте так:
Code:
LOOP AT ft_out INTO fl_out.
...
SELECT SINGLE stblg INTO f_belnr FROM bkpf
   WHERE bukrs = fl_out-bukrs AND belnr = fl_out-belnr AND gjahr = fl_out-gjahr.
...
APPEND it_out.
ENDLOOP.

А вообще вариантов тут несколько и зависят от вашей конкретной задачи.
А индекс ваш пока лучше удалите от греха подальше

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 09:32 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
DarZ написал(а):
Здравствуйте.

Вопрос снова касается сторно.
Есть вн. таблица c неопределенным количеством записей (записей много).
Code:
LOOP AT ft_out INTO fl_out.
...
SELECT SINGLE belnr INTO f_belnr FROM bkpf
   WHERE bukrs = fl_out-bukrs AND stblg = fl_out-belnr AND stjah = fl_out-gjahr.
...
APPEND it_out.
ENDLOOP.

В части выборки из BKPF производительность сильно падает, закоментировав же эту часть кода программа отрабатывает за секунды. Есть ли красивое решение поднять производительность?
Создал (не уникальный всех систем БД) индекс к таблице BKPF для полей STBLG STJAH. Не совсем помогло...

Традиционный рецепт - вынесите выборку из цикла, чтобы все необходимые данные выбирались одним select-ом

_________________
"После" - не значит "вследствие"


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 10:16 
Специалист
Специалист

Зарегистрирован:
Пн, дек 21 2009, 11:07
Сообщения: 167
Чтоб внести ястность,
Code:
TYPES: BEGIN OF fs_out,
    belnr LIKE bkpf-belnr,
    mblnr LIKE mseg-mblnr,
    sdfak LIKE vbrk-vbeln,
    sddel LIKE likp-vbeln,
    bukrs LIKE bkpf-bukrs,
   gjahr TYPE gjahr,
END OF fs_out.
DATA: ft_out TYPE STANDARD TABLE OF fs_out,
          fl_out LIKE LINE OF ft_out.

" Заполняется данными
" Каждая строчка уникальная
" В разных ситуациях поля документов могут быть пустыми

LOOP AT ft_out INTO fl_out.
CLEAR it_out.
<...>
IF fl_out-belnr IS NOT INITIAL.
  SELECT SINGLE belnr INTO f_belnr FROM bkpf
     WHERE bukrs = fl_out-bukrs AND stblg = fl_out-belnr AND stjah = fl_out-gjahr.
  IF sy-subrc <> 0.
    it_out-stats = 'E'.
  ELSE.
    it_out-stats = 'S'.
  ENDIF.
ELSEIF fl_out-mblnr IS NOT INITIAL.
... " MSEG
ELSEIF fl_out-sdfak IS NOT INITIAL.
... " Своя логика
ELSEIF fl_out-sddel IS NOT INITIAL.
... " Своя логика
ENDIF.
APPEND it_out.
ENDLOOP.

2 sy-uname: Нужно именно в LOOP-е


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 10:25 
Специалист
Специалист

Зарегистрирован:
Пн, дек 21 2009, 11:07
Сообщения: 167
Цитата:
А индекс ваш пока лучше удалите от греха подальше

А почему удалить-то?

Цитата:
лучше использовать select single при полном первичном ключе, иначе select... endselect с дополнением UP TO 1 ROWS

Code:
Вот так?
SELECT SINGLE bk2~belnr INTO f_belnr FROM bkpf AS bk1
  INNER JOIN bkpf AS bk2 ON bk1~bukrs = bk2~bukrs AND bk1~belnr = bk2~stblg AND bk1~gjahr = bk2~stjah
  WHERE bk1~bukrs = it_out-bukrs AND bk1~belnr = it_out-fidoc AND bk1~gjahr = it_out-gjahr.

" или

    SELECT * INTO ft_bkpf
             FROM bkpf
             UP TO 1 ROWS
      WHERE bukrs = it_out-bukrs AND stblg = it_out-fidoc AND stjah = it_out-gjahr.
    ENDSELECT.



Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 10:34 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
DarZ написал(а):
2 sy-uname: Нужно именно в LOOP-е
Консультант это условие калёным железом в ТЗ прописал?

_________________
"I have a dream"(c)Martin Luther King, Jr.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 10:44 
Специалист
Специалист

Зарегистрирован:
Пт, сен 05 2008, 08:08
Сообщения: 134
Пол: Женский
Code:
IF fl_out-belnr IS NOT INITIAL.
  SELECT SINGLE belnr INTO f_belnr FROM bkpf
     WHERE bukrs = fl_out-bukrs AND stblg = fl_out-belnr AND stjah = fl_out-gjahr.
  IF sy-subrc <> 0.
    it_out-stats = 'E'.
  ELSE.
    it_out-stats = 'S'.
  ENDIF.

Да в BKPF в поле STBLG у сторнируемого документа стоит ссылка на документ сторно, а у документа сторно - на сторнируемый документ. Зачем еще искать-то? Разве не так?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 11:14 
Специалист
Специалист

Зарегистрирован:
Пн, дек 21 2009, 11:07
Сообщения: 167
Yellow Raven написала:
Code:
IF fl_out-belnr IS NOT INITIAL.
  SELECT SINGLE belnr INTO f_belnr FROM bkpf
     WHERE bukrs = fl_out-bukrs AND stblg = fl_out-belnr AND stjah = fl_out-gjahr.
  IF sy-subrc <> 0.
    it_out-stats = 'E'.
  ELSE.
    it_out-stats = 'S'.
  ENDIF.

Да в BKPF в поле STBLG у сторнируемого документа стоит ссылка на документ сторно, а у документа сторно - на сторнируемый документ. Зачем еще искать-то? Разве не так?

Так и делал, но производительность падает


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 11:20 
Специалист
Специалист

Зарегистрирован:
Пн, дек 21 2009, 11:07
Сообщения: 167
Alex80 написал:
DarZ написал(а):
2 sy-uname: Нужно именно в LOOP-е
Консультант это условие калёным железом в ТЗ прописал?

А ничего нового не смогли придумать, раз так написал значит так надо...


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)  Тема решена
СообщениеДобавлено: Вт, авг 03 2010, 11:24 
Специалист
Специалист

Зарегистрирован:
Пт, сен 05 2008, 08:08
Сообщения: 134
Пол: Женский
Я хотела спросить, зачем вообще этот селект нужен, если и в прямом, и в обратном документе ссылки есть друг на друга?
PS. Если STBLG заполнен - документ отсторнирован или сам явл. сторнирующим. У сторнирующего еще заполнена причина сторно в STGRD.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 11:33 
Специалист
Специалист

Зарегистрирован:
Пн, дек 21 2009, 11:07
Сообщения: 167
Ой спасибо, это и есть решение, ума не хватало посмотреть в обратную сторону )


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 11:34 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
DarZ написал(а):
2 sy-uname: Нужно именно в LOOP-е
..
.А ничего нового не смогли придумать, раз так написал значит так надо...

При таком подходе непонятно зачем Вы паритесь с производительностью???? Вы реализовали как написано.
Тут либо производительность и отклонение от алгоритма, не приводящие к изменению конечного результата, либо реализация по спецификации без каких-либо обсуждений производительности.

_________________
"После" - не значит "вследствие"


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 11:50 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
DarZ написал(а):
Цитата:
А индекс ваш пока лучше удалите от греха подальше

А почему удалить-то?

Потому что во первых - судя по всему для этой задачи он не пригодится, во вторых - есть некоторые сомнения в том что вы его правильно сделали. Кроме STBLG и STJAH какие нибудь поля в этом индексе присутствуют?

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос производительности (MSEG, BKPF)
СообщениеДобавлено: Вт, авг 03 2010, 11:56 
Специалист
Специалист

Зарегистрирован:
Пн, дек 21 2009, 11:07
Сообщения: 167
ArmAnn написал:
Потому что во первых - судя по всему для этой задачи он не пригодится, во вторых - есть некоторые сомнения в том что вы его правильно сделали. Кроме STBLG и STJAH какие нибудь поля в этом индексе присутствуют?

Как я и написал только STBLG и STJAH...


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2, 3  След.

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


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

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


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

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