Имя: Пароль:
1C
1С v8
ОбработчикОжидания()
0 AjAj
 
30.08.12
15:25
Коллеги, необходимо было решить задачу. При старте системы открыть окно обработки. Обновлять ТабличнуюЧасть обработки каждые 3 минуты.
Для этого в модуле формы обработки написали процедуру

Процедура ПриОткрытии()
ПодключитьОбработчикОжидания("ЗаполнитьТабЧасть",180);
КонецПроцедуры

По замерам вызываемая процедура ЗаполнитьТабЧасть выполняется за 0,004 сек. В базе 50 пользователей.

Сегодня утром запустил это дело. Периодически стали появляться ошибки "На сервере 1С недостаточно памяти". Связываю это с вышеизложенными изменениями, хотя и не уверен.
Вопрос к гуру - как работает ПодключитьОбработчикОжидания() ? Сильно ли он грузит системные ресурсы? Есть ли альтернативный вариант для решения поставленной задачи?
ИМХО: Это же не цикл, чтоб "жрать" ресурсы? По идее он должен просто запускать обработку с периодом в N секунд? Тогда почему перестало хватать памяти?
1 AjAj
 
30.08.12
15:43
Никто не в курсе? Неужели никто не пользовался Обработчиком Ожидания?
2 ДенисЧ
 
30.08.12
15:45
Если отключить её - память перестанет течь?
ЧТо делается в процедуре?
3 Reset
 
30.08.12
15:45
При чем тут обработчик ожидания то?
4 vmv
 
30.08.12
15:46
(0) в своих конфах не использую технологию обработчиков ожидания, в типовых не приветсвую, ибо они действительно НЕ Рационально жрут ресурсы, а на вопрос зачем часто мямлят всякую чушь.

Обновлять табличную часть нужно по событиям формы, а не не молиться бездушному и тупому богу Ожидания
5 AjAj
 
30.08.12
15:53
(2) Отключил. Перезагрузил сервер. Память действительно перестала "течь".
В процедуре все предельно просто. Обновляется табличная часть в которой строки - документы одного автора. Никаких "наворотов"
(3) При том, что с его использованием память "потекла".

(4) А если обновлять надо не по событиям, а именно раз в 3 минуты?
6 vmv
 
30.08.12
15:57
(5) Вот прямо там сидит тело и смотри на часы каждые три минуты в томлении - не ври мне. Обновлять надо когда источники(поставщики) данных формы изменены, ну для того тела можно в шапку формы вывести крсными буквами надпись

"Данные формы в БД не изменялись с 00:00:00 1910 г" и пусть сидит пялиться
7 Reset
 
30.08.12
15:59
(5) Проблема может быть в выполняемом коде, а никак не в механизме
Это равносильно "Компьютер виноват, потому что если его выключить, проблема исчезает"
8 Reset
 
30.08.12
16:00
(6) А как узнать, что источник изменился?
9 vmv
 
30.08.12
16:01
(6) данные формы могут меняться часто, поэтому можно еще завести параметр формы ДатаВремя и контролировать период последнего обновления, ну это так блаж.

А ОбработчикиОжидания() - фуфло, которое взяло на воооружение вся молодая поросль от бизнес-приложений до веб и потом чещут репу, блин чо тармазит, ведь так нящно вся дрыгаеться
10 Heckfy
 
30.08.12
16:01
(5)
Процедура Задержка(КолМиллесекунд) Экспорт
           Шелл=Новый COMОбъект("WScript.Shell");
           Шелл.run("ping -n 1 -w "+Формат(КолМиллесекунд,"ЧГ=")+" 0.0.0.1",0,-1);
КонецПроцедуры
11 vmv
 
30.08.12
16:01
(8) "А вот это тебе, лысый - я не скажу"(с)
12 AjAj
 
30.08.12
16:05
(10) Классно!
13 Heckfy
 
30.08.12
16:17
(12) Точнее так:

Процедура ВыполнитьКнопка(Команда)
   Задержка = 5;
   СтрокаЗапроса = "ping -n 1 -w "+Формат(1000*Задержка, "ЧГ=0") +" 127.255.255.255";
   WshShell = Новый COMОбъект("WScript.Shell");
   WshShell.Run(СтрокаЗапроса, 0, -1);
КонецПроцедуры
14 Skylark
 
30.08.12
16:31
А регламентное задание тут не прокатит?
15 Skylark
 
30.08.12
16:32
не, не прокатит
16 AjAj
 
31.08.12
09:32
В общем. если что, то может кому пригодится на будущее:
ОбработчикОжидания можно использовать и ресурсов он не жрет, НО:
1. Использовать его в модуле формы вне процедур и функций.
2. НЕ использовать в модально открытой форме (он там просто работать не будет)
Вот итог общения с коллегами, серфинга интернета, ну и личного опыта )))