Текущее время: Пн, июн 30 2025, 09:56

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


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

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


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

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