Текущее время: Пн, июн 23 2025, 03:20

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


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

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


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

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