Текущее время: Чт, июн 26 2025, 12:30

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: READ TABLE внутри цикла
СообщениеДобавлено: Чт, авг 20 2015, 12:18 
Ассистент
Ассистент

Зарегистрирован:
Ср, дек 23 2009, 08:15
Сообщения: 38
Добрый день!

Отчет Z* (само описанный) . "Аналитические данные по балансовому счету" (на вывод: Обороты по кредиторам и дебиторам по заданному счету и по дате, сальдо на начало, б. счет Дебет, б. счет Кредит, Сальдо на конец в разрезе каждого кредитора и дебитора). Отчет по некоторым счетам где обороты много вылетает в дамп по time_out. Часть кода:
LOOP AT lt_acctit WHERE buzid = 'M'.
COMMIT WORK.
READ TABLE gt_ekbe INTO gs_ekbe WITH KEY belnr = lt_acctit-awref
gjahr = lt_acctit-aworg.
IF sy-subrc EQ 0.
lt_acctit-xref3 = gs_ekbe-xref3.
ENDIF.
MODIFY lt_acctit.
ENDLOOP.
После добавления COMMIT WORK внутри цикл, отчет выгружается но 2,5 часа. Что надо сделать чтобы цикл по быстрее обработался? Заранее спасибо за ответы!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: READ TABLE внутри цикла
СообщениеДобавлено: Чт, авг 20 2015, 13:37 
Ассистент
Ассистент

Зарегистрирован:
Чт, июл 08 2010, 07:35
Сообщения: 42
Пол: Мужской
Добрый день!
Мне что-то непонятно, а зачем commit внутрь цикла добавили? И если из-за него все тормозить начало, может его убрать?
Чтоб отчет быстрее работал надо внутренние таблицы lt_acctit, gt_ekbe сделать сортированными. Создать неуникальные ключи для них хотя бы.
Тогда и цикл будет быстрее работать и чтение из таблиц.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE внутри цикла
СообщениеДобавлено: Чт, авг 20 2015, 13:53 
Ассистент
Ассистент

Зарегистрирован:
Ср, дек 23 2009, 08:15
Сообщения: 38
COMMIT WORK добавила потому что в тайм аут вылетал (если его убрать дин. ошибка и без выводы каких-либо данных), а так с COMMIT WORK выгружается но очень долго 2,5 часа. Пробовала вот так сортировать до цикла но не помогло
SORT lt_acctit BY buzid awref aworg belnr gjahr.
sort gt_ekbe BY gjahr belnr buzei lfgja. А как создать неуникальные ключи? Можете кратко написать... Спасибо!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: READ TABLE внутри цикла
СообщениеДобавлено: Чт, авг 20 2015, 14:21 
Ассистент
Ассистент

Зарегистрирован:
Чт, июл 08 2010, 07:35
Сообщения: 42
Пол: Мужской
Поймайте какого-нибудь абапера на проекте. Он Вам все напишет и расскажет. Так быстрее будет.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE внутри цикла
СообщениеДобавлено: Чт, авг 20 2015, 19:12 
Специалист
Специалист

Зарегистрирован:
Пн, июн 04 2012, 10:31
Сообщения: 125
ElviraSM написал(а):
Добрый день!

Отчет Z* (само описанный) . "Аналитические данные по балансовому счету" (на вывод: Обороты по кредиторам и дебиторам по заданному счету и по дате, сальдо на начало, б. счет Дебет, б. счет Кредит, Сальдо на конец в разрезе каждого кредитора и дебитора). Отчет по некоторым счетам где обороты много вылетает в дамп по time_out. Часть кода:
LOOP AT lt_acctit WHERE buzid = 'M'.
COMMIT WORK.
READ TABLE gt_ekbe INTO gs_ekbe WITH KEY belnr = lt_acctit-awref
gjahr = lt_acctit-aworg.
IF sy-subrc EQ 0.
lt_acctit-xref3 = gs_ekbe-xref3.
ENDIF.
MODIFY lt_acctit.
ENDLOOP.
После добавления COMMIT WORK внутри цикл, отчет выгружается но 2,5 часа. Что надо сделать чтобы цикл по быстрее обработался? Заранее спасибо за ответы!

Что-то вроде

Code:
FIELD-SYMBOLS: <fs_acc> LIKE LINE OF lt_acctit
,<fs_ekbe> LIKE LINE OF gt_ekbe
                        .

LOOP AT lt_acctit ASSIGNING <fs_acc> WHERE  buzid = 'M'.
    READ  TABLE gt_ekbe ASSIGNING <fs_ekbe> WITH  KEY belnr = <fs_acc>-awref
    gjahr = <fs_acc>-aworg.
    CHECK sy-subrc EQ 0.
    <fs_acc>-xref3 = gs_ekbe-xref3.
ENDLOOP.

+ как написали уже, таблицы объявить SORTED/HASHED в зависимости от полей, по которым происходит поиск.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE внутри цикла  Тема решена
СообщениеДобавлено: Чт, авг 20 2015, 20:39 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, фев 17 2012, 15:37
Сообщения: 71
можно добавить BINARY SEARCH к
READ TABLE gt_ekbe INTO gs_ekbe WITH KEY belnr = lt_acctit-awref

получется так

READ TABLE gt_ekbe INTO gs_ekbe WITH KEY belnr = lt_acctit-awref BINARY SEARCH.


Но только если gt_ekbe отсортирована ascending по ключам по которым делается READ TABLE.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: READ TABLE внутри цикла
СообщениеДобавлено: Пт, авг 21 2015, 08:27 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
ElviraSM написал(а):
Отчет Z* (само описанный) . "Аналитические данные по балансовому счету" (на вывод: Обороты по кредиторам и дебиторам по заданному счету и по дате, сальдо на начало, б. счет Дебет, б. счет Кредит, Сальдо на конец в разрезе каждого кредитора и дебитора). Отчет по некоторым счетам где обороты много вылетает в дамп по time_out.

Очень печально, когда консультанту CO дают задачу оптимизировать разработки :cry:
Воспользуйтесь поиском по словам "оптимизация abap".

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE внутри цикла
СообщениеДобавлено: Пт, авг 21 2015, 09:07 
Ассистент
Ассистент

Зарегистрирован:
Ср, дек 23 2009, 08:15
Сообщения: 38
Добрый день! У нас программиста нету, приходиться своими силами...
Спасибо всем за ответы! Помогло BINARY SEARCH. Отчет за 2 мин выгрузился )) Это - прогресс! Получается столько времени теряли пользователи за выгрузки этого отчета. Начали смотреть только после тайм аута.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: READ TABLE внутри цикла
СообщениеДобавлено: Пт, авг 21 2015, 09:17 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, фев 17 2012, 15:37
Сообщения: 71
ElviraSM написал(а):
Добрый день! У нас программиста нету, приходиться своими силами...
Спасибо всем за ответы! Помогло BINARY SEARCH. Отчет за 2 мин выгрузился )) Это - прогресс! Получается столько времени теряли пользователи за выгрузки этого отчета. Начали смотреть только после тайм аута.


Это не прогресс. Это оптимизация !.
Вам точно нужен программист! А то натворите там МЕТОДОМ ТЫКА :(


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: READ TABLE внутри цикла
СообщениеДобавлено: Пт, авг 21 2015, 12:37 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 18 2010, 15:38
Сообщения: 97
ElviraSM написал(а):
Добрый день! У нас программиста нету, приходиться своими силами...

ну значит Вы и станете этим программистом, которого нету. При этом шишек набьете немеряно. Не знаю, насколько это входит в Ваши планы...


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

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


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

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


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

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