SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

выполнение программы в фоновом режиме



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
KeKS
Участник
Участник



Joined: 18 Feb 2008
Posts: 22
Location: Казакстан

PostPosted: Fri Jul 25, 2008 3:32 pm    Post subject: выполнение программы в фоновом режиме Reply with quote

Доброго времени суток!
возник вопрос.
существует программа (стндартная SAP'овская)
в стандартной программе нет возможности отработать в фоновом режиме (программа с ALV Greed'ом). при этом необходимо обработать очень большой объем данных. программа валится в дамп по таймауту.
сделал с неё копию.
нашел тот участок вычислений который занмает основное время работы программы.
хочу подменить его. точнее зделать так что бы этот участок вычислений выполнялся в фоновом режиме.
как это можно реализовать?
можно ли вызывать методы класса, что бы они отрабатывали в фоновом? или прийдется создавать программу с аналогичными методами и вызывать её submit'ом с передачей необходимых параметров?

_________________
Все есть в сети и все есть сеть.
Back to top
View user's profile Send private message Blog
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Fri Jul 25, 2008 4:36 pm    Post subject: Reply with quote

А какой смысл часть(?) обработки делать в фоновом режиме?
Для обхода таймаута диалогового шага способы есть, но лучше просто произвести оптимизацию выборки и обработки данных и использовать метод cl_gui_alv_grid=>offline( )
Code:
MODULE init_0100 OUTPUT.

IF g_alv_grid IS INITIAL.
  IF cl_gui_alv_grid=>offline( ) IS INITIAL. "Если запуск в онлайне - создаем контейнер.
    CREATE OBJECT g_container ...
  ENDIF.

  CREATE OBJECT g_alv_grid
    EXPORTING
      parent = g_container.

  ....
  CALL METHOD g_alv_grid->set_table_for_first_display ....
  ....
ENDIF.

ENDMODULE.

И тогда программу можно запускать в фоновом режиме Wink
Как пример можно посмотреть программу BCALV_TEST_GRID

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


Last edited by Удав on Fri Jul 25, 2008 5:04 pm; edited 1 time in total
Back to top
View user's profile Send private message
KeKS
Участник
Участник



Joined: 18 Feb 2008
Posts: 22
Location: Казакстан

PostPosted: Fri Jul 25, 2008 4:57 pm    Post subject: Reply with quote

ALV заполняется данными. поэтому от него избавится нельзя.
первоначально пользователь производит операции. делает настройки.
затем по этим настройка заполняется ALV Greed.
по поводу методов обхода таймера, нельзя ли по подробнее! какие существуют?
знаю что при submit'е таймер сбрасывается в 0. есть ещё какие-то способы?

_________________
Все есть в сети и все есть сеть.
Back to top
View user's profile Send private message Blog
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Fri Jul 25, 2008 5:16 pm    Post subject: Reply with quote

Так я же описал способ, как ALV отобразить в фоне Smile
А настройки можно сделать и с экрана выбора, перед запуском в фоне.
"Передергивать" диалоговый шаг - это плохо.
Представь ситуацию, кода у тебя на сервере приложений 20 диалоговых процессов и все заняты программами, сбасывающими счетчик диалогового шага?
На сервере приложений должен всегда оставаться хотя бы один свободный диалоговый процесс.
А если запускаешь "тяжелые" программы в фоне, то просто выстроится очередь, которая не затрагивает диалоговые процессы и не мешает работе других пользователей.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 145
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Fri Jul 25, 2008 5:30 pm    Post subject: Re: выполнение программы в фоновом режиме Reply with quote

KeKS wrote:
хочу подменить его. точнее зделать так что бы этот участок вычислений выполнялся в фоновом режиме.


А вы думаете в фоне программа в 10 раз быстрее выполняется? alv все равно придется ждать окончания фонового выполнения, которое займет сопоставимое время, как и онлайн обработка.
Как вариант разбить на несколько параллельных процессов, например расчет для каждого Company Code в отдельном процессе, но в этом случае, наверно, базис будет ругаться.

Асинхронный запуск ФМ:

Quote:
Call a function module in a different mode (asynchronous Remote Function Call):

2. CALL FUNCTION func STARTING NEW TASK taskname.

Asynchronous call to a function module with transactional processing (transactional Remote Function Call):

5. CALL FUNCTION func IN BACKGROUND TASK.
Back to top
View user's profile Send private message Blog Visit poster's website
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Mon Jul 28, 2008 1:22 am    Post subject: Reply with quote

Каждый запуск ФМ в режиме starting new task, in background task выполняется опять же в диалоговом процессе. Rolling Eyes
_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.