Имя: Пароль:
1C
1С v8
Пауза в выполнении кода
0 Arxangel06
 
06.08.12
15:39
Доброго времени суток.
Подскажите, кто знает, можно ли в коде 1с установить паузу в выполнении кода? Можно конечно вставить пустой цикл с проверкой времени выполнения, но исполнение этого цикла нагружает проц под завязку, да и вообще решение колхозное. В некоторых случаях можно использовать ПодключитьОбработчкиОжидания(<ИмяПроцедуры>,<Таймаут>), но в данном контексте не канает - нужно делать паузу внутри цикла. Например как в VBS команда Sleep(<Таймаут>). Или vbs-вставка и есть самое корректное решение?
Заранее спасибо.
1 DrShad
 
06.08.12
15:42
а для чего это нужно?
2 aleks-id
 
06.08.12
15:43
(1)+1
3 Нуф-Нуф
 
06.08.12
15:43
(2) +1
4 Ksandr
 
06.08.12
15:43
(3) + 1
5 aleks-id
 
06.08.12
15:45
нет, ну а чо? понапишут копрокода а потом удивляются - а чё это у нас тормозит так? йёёёё... да тут запрос в цикле со слипом в цикле!
6 Timon1405
 
06.08.12
15:49
7 Arxangel06
 
06.08.12
15:50
Это вывод таблицы значений на экран-табло. Задача сводится к следующему: Показать на экране ровно 12 строк текста, подождать 30 секунд, показать следующие 12 строк. Количество строк фиксировано и =60. Т.е. нужно показать 5 страниц, затем после 5ой вернуться к первой.
p.s. Нечего сказать - лучше промолчать.
8 Arxangel06
 
06.08.12
15:51
(6) Ну собственно это и есть vbs-вставка.
9 Stepa86
 
06.08.12
15:51
(7) и чем ПодключитьОбработчкиОжидания( не нравится?
10 ZanderZ
 
06.08.12
15:52
подключи обработчик ожидания
11 Arxangel06
 
06.08.12
15:53
(7) а внутри обработчика прописать холостой цикл... Замечательная идея от которой я в самом начале отказался.
12 Serginio1
 
06.08.12
15:53
(1) Например при подключении к чему либо пока это устройство занято (почта, порты, файлы итд)
13 Широкий
 
06.08.12
15:57
(0) Делай вставку на vbs. ИМХО самое оптимальное
14 aleks-id
 
06.08.12
16:00
где хоть выполняется то? на клиенте? на сервере?
15 aleks-id
 
06.08.12
16:04
и что мешает повесить регламентное задание?
16 aleks-id
 
06.08.12
16:05
(11) нафига внутри обработчика холостой цикл? он у тебя будет вызываться 1 раз в 12 секунд и выводить нужную порцию инфы. никаких циклов
17 Arxangel06
 
06.08.12
17:47
В итоге vbs рулит. Хотя для какого-нибудь автопилота в следующий раз буду использовать предупреждение с таймаутом.
18 Ахиллес
 
06.08.12
17:57
(17) За пустые циклы и предупреждение с тайм-аутом (в целях задержки выполнения кода) прогам нужно руки тупой пилой отпиливать. В клюшках приходилось извращатся, а в восьмёрке для этих целей существует ПодключитьОбработчикОжидания (AttachIdleHandler)
19 le_
 
06.08.12
17:58
20 Fragster
 
гуру
06.08.12
18:05
я таки не понял, нафига в (6) временный файл? почему не использовать MSScriptControl.ScriptControl сразу?
21 Fragster
 
гуру
06.08.12
18:06
(7) юзай обработку ожидания
22 smaharbA
 
06.08.12
18:08
(20) ты погорячился
что бы получить объект WScript нужно несколько иное
23 Rebelx
 
06.08.12
18:32
(22)его можно и без файла получить, но гемор.
вообще есть еще такой вариант:http://infostart.ru/public/16230/
24 smaharbA
 
06.08.12
18:34
(23) его можно получить без файла и без гемора
25 Arxangel06
 
08.08.12
09:47
(18) Ты внимательно читал условие? ПодключитьОбработчикОжидания НЕ работает в данном контексте.
26 D_Pavel
 
08.08.12
09:51
(0) я делала паузу через вызов системной команды ping, там можно указать сколько раз пинговать с паузой между пингами в 1 секунду.
27 vde69
 
08.08.12
09:59
Если Вопрос("Остановить выполнение?", 2, 1) = "Ок" Тогда
 прервать;


достоинство - видно что делается и можно прервать паузу
недостаток - требуется висение окошка

делал так для 7.7 при востановлении последовательности, что-бы другие пошльзователи могли работать
28 боксер
 
08.08.12
10:06
обычно делаю
Предупреждение("Тех, пауза, сек "+колсек,колсек);
29 Heckfy
 
08.08.12
10:07
(27) Ага, и в модуль проведения документа это запихать. :):)
30 vde69
 
08.08.12
10:11
(29) реально на прошлой работе выгребал тонны вопросов и предупреждений вставленых в проведение :),
а еще хранение таблиц и списков (со ссылками) в реквизите документа и справочника, и еще много чего...

человек который это написал к тому времени возомнил себя мего 1с ником и ушел внедрять УПП
31 Arxangel06
 
08.08.12
10:20
(29) Ну утрировать-то зачем? Хотя да, если есть желание делать работу ради работы, то паузы в проведении - самое оно. Но если работа все-таки на результат и платят не за время, потраченное на доработку, а за эффективность, то паузы нужны только там, где они действительно нужны.
32 pumbaEO
 
08.08.12
10:20
(30) мне кажись попалась его УПП :). Хранение таблиц и списков в реквизите - это точно он.
33 боксер
 
08.08.12
11:17
(29)нафига в проведнии пауза?
(30)тоже выгребал, но тем не менее (28)использую конечно не на сервере, не COM. а на клиенте где есть необходимость и естественно не в модуле проведения :-)
34 smaharbA
 
08.08.12
11:19
(28) свернуть и "эта музыка будет вечной, если я не сменю ..."
35 Serginio1
 
08.08.12
11:48
(27) Особенно при реализации на сервере.
36 aleks-id
 
08.08.12
12:01
интересно, а чем не угодили ПодключитьОбработчикОжидания или Регламентное задание?
37 Lex_Liven
 
08.08.12
12:02
(36) господи, 35 сообщений в ветке - и нельзя почитать? Тем, что задержка нужна В ЦИКЛЕ!
38 aleks-id
 
08.08.12
12:05
(37) это тебе так кажется. на самом деле там МОЖНО и НУЖНО обойтись БЕЗ ЦИКЛА!
39 aleks-id
 
08.08.12
12:08
+(38) и ПодключитьОбработчикОжидания в этом случае самое то!
в идеале - наваять ВК, которая будет генерить ВнешнееСобытие каждый раз в заданном интервале и обрабатывать его через ОбработкаВнешнегоСобытия
40 Fragster
 
гуру
08.08.12
12:28
(39) еще пару вещей типа службы для виндуса и назначенных заданий забыл... просто обработчик ожидания спасет...
41 misha122062
 
08.08.12
12:40
Элементарно Ватсон
к = Текущаядата + задержка
Ставишь проверку - пока текущая дата меньше к цикл
42 misha122062
 
08.08.12
12:44
(41) я такое ставил стремным контрагентам - которые обновлятся не хотели и на обслугу не брали - через полгода запускалась динамичноизменяемая задержка.
Базы тормозили
Они в крик - меня звать
Рубил бабло - ПРОФИТ
43 Reset
 
08.08.12
12:48
(7) Использовать обработчик ожидания, с вызовом каждые 30 секунд.
p.s. (25) - читал, не тыкайте. Там фуйня.
44 misha122062
 
08.08.12
12:49
(43) НАФИГА!
Подключать его...анализировать...
Это Задача 1 класа на 2 строчки!
45 Reset
 
08.08.12
12:50
(44) Изыди
46 misha122062
 
08.08.12
12:51
(45)да ты в степь уводишь чела.
Обработчик ожидания не для этого. и задача решается в 2 строки!
47 aleks-id
 
08.08.12
12:52
/*пишет в блокнотик*/ misha122062 - копрокодер
48 Fragster
 
гуру
08.08.12
12:58
(47) да не, у него просто комп с таким процессором: http://www.ixbt.com/news/hard/index.shtml?12/54/56
49 Lex_Liven
 
08.08.12
13:06
(41) А скажи мне, друг, в чет отличие такой задержки от пустого цикла на 100000 итераций?
Пожалуй, я сам отвечу: В том, что ты регулируешь длину задержки. И все. Загрузка CPU 100% никуда не девается, прикинь?
50 Сергей Д
 
08.08.12
13:07
Мы так и не узнали, ДЛЯ ЧЕГО это нужно. Иначе может оказаться, как в Саге про X,Y,Z
51 Lex_Liven
 
08.08.12
13:07
(50) узнали, читай тему. Недалеко, в частности (7)
52 sergei123654
 
08.08.12
14:10
(0) &НаКлиенте
Процедура ТаймаутСкрипта(Shell, ТаймаутВСекундах)

   Shell.Run("ping 127.0.0.1 -n "+СокрЛП(Число(ТаймаутВСекундах)+1),0,1);

КонецПроцедуры // ТаймаутСкрипта()
 

&НаКлиенте
Процедура ТырымПырым(Команда)
   
   Shell = Новый COMОбъект("WScript.Shell");
   
   ТаймаутСкрипта(Shell, 10);
КонецПроцедуры
53 aleks-id
 
08.08.12
14:20
(52) фееричный киздец
54 Arxangel06
 
08.08.12
14:23
Ну флудеры... Я себя почувствовал ТСом из ветки про уничтожение инфы на хардах... Одинесеры разделились на два лагеря:
1) копрокодеров, которым положить, что проц загружается на 100% и нифига при этом не делает
2) Vbs, который делает все необходимое, не нагружает проц и реализовать в нем можно хоть лилового черта в малиновую крапинку(это я про ping, sleep, что_еще_такое_предлагали?)

p.s. Очень надеюсь вырваться в пятницу на миста-встречу в Москве на Бауманской, заодно и посмотрим друг на друга :)
55 Fragster
 
гуру
08.08.12
14:24
(54) про обработчик ожидания забил?
56 Arxangel06
 
08.08.12
14:24
(54) Не, есть еще третий лагерь - ОбработчикиОжидания... Правда непонятно, ожидания чего и кем...
57 Arxangel06
 
08.08.12
14:25
(55) Все, я уже не адекватен, это истерика...
Модеры, закройте эту флудильню уже.... Или потянем до пятницы и выставим в юмор?
58 Fragster
 
гуру
08.08.12
14:27
(57) не дождешься. эта ветка будет пятном позора в репутации одинесников, отметившихся в ней
59 aleks-id
 
08.08.12
14:30
(56) обработчики ожидания - самое правильное решение задержек в выполнении кода
(58) +1
60 sergei123654
 
08.08.12
14:32
(53)Ну не долюбливают они обработчикиОжидания как я понял из не внимательного чтения ветки!
61 smaharbA
 
08.08.12
14:35
есть еще метод
62 Arxangel06
 
08.08.12
14:36
(59)+(60) Ну попробуйте в обработчик ожидания параметры передавать... циклически меняющиеся. Очень занимательное занятие, могу сказать...
63 Fragster
 
гуру
08.08.12
14:37
(62) переменная формы решит все твои проблемы...
64 Arxangel06
 
08.08.12
14:37
(61) Сменить профессию и род занятий, как bizon2008? Да, это решение всех проблем, однозначно...
65 smaharbA
 
08.08.12
14:37
(62) это еще на 77 делалось массой способов
66 Arxangel06
 
08.08.12
14:40
Вот теперь я точно согласен с формулировкой (53) других слов уже не осталось...
67 smaharbA
 
08.08.12
14:44
вьюноша займитесь делом и не ходите по росе босиком
68 misha122062
 
08.08.12
15:44
Обработчики ожидания не ужны.
Вы скажите - где их здесь применять?
69 Fragster
 
гуру
08.08.12
15:49
(68) судя по (7) - в обработке ожидания менять текст на форме
70 Ksandr
 
08.08.12
15:55
Сначала нужно вызвать:
ПодключитьСинтаксисПомощник()
потом:
ПодключитьОбработчикРазума()
ПодключитьПрямыеРуки()

и только потом
ПодключитьОбработчикОжидания()
71 Arxangel06
 
08.08.12
15:57
(68) Не-не-не, Дэвид Блэйн. ОбработчикОжидания - штука полезная и нужная, для некоторых вещей незаменимая. Но есть случаи, когда эта штука не работает или работает не так, как надо.
(70) Не так там все просто.
72 Ksandr
 
08.08.12
15:58
(68) Правда, не понимаю, имеем интервал 12 секунд, нужно выполнить конкретное действие.
Исходя из видения задачи по сообщениям в этой теме

Допустим данных много и на клиент их тащить нет смысла - делаем так:
1. Получаем и кладем данные во временное хранилище, адрес в реквизит формы.
2. На клиенте подключаем обработчик ожидания в котором определяем процедуру
3. В процедуре вызываем серверную процедуру где берем из временного хранилища нужные данные и выводим на форму.
73 Lex_Liven
 
08.08.12
16:01
(71) А чем, собственно, VBS-вставка не устраивает? По-моему, для вашей задачи как раз подходит.
74 Ksandr
 
08.08.12
16:04
тьфу блин, инфы 60 строк, 5 страниц, 12 строк на каждой, 30 секунд.

ПриСозданииНаСервере
создаем страницы программно, таблицы на них тоже программно,

вызываем процедуру, которая получит данные и заполнит таблицы. Более сервер не дергаем, пока в этом нет необходимости.

ПриОткрытии
Подключаем обработчик ожидания, который будет переключать страницы.
Второй обработчик с таким интервалом с каким нужно обновлять данные (брать из базы)

Профит! Никаких лишних серверных вызовов :)
75 Stepa86
 
08.08.12
16:10
вот это ннннада? http://screencast.com/t/h1VrCKpwNl
76 Arxangel06
 
08.08.12
16:13
(73) Да задача уже 2 дня как решена через vbs :)
77 Lex_Liven
 
08.08.12
16:15
(76) Тогда такой вопрос, предложенный в (6) вариант не работает - спотыкается на СоздатьОбъект("Текст"). Чем это можно заменить в 8.2.15.310?
78 Arxangel06
 
08.08.12
16:17
(74) хорошо, хорошо, убедил.
(77) "СоздатьОбъект" - это из клюшек. В снеговике это выглядит как "Новый <ТипОбъекта>".
клюшки - 7.7, снеговик - 8.х
79 aleks-id
 
08.08.12
16:23
(78) >>хорошо, хорошо, убедил.
не убедительно. давай код как сделал!
80 Arxangel06
 
08.08.12
16:35
(79)Как решил конкретно эту задачу в работе, или как сидя дома с котом и пивом вчера перепилил?
81 aleks-id
 
08.08.12
16:36
как перепилил и как перепилишь теперь на работе
82 smaharbA
 
08.08.12
16:38
задача решается без вбс
83 Arxangel06
 
08.08.12
16:43
(81) И не подумаю даже перепиливать, поскольку дома сделано на типовой, а на работе -на самодельной, и очень многое на эту самодельность завязано. А "для себя" решилось так:
ПриОткрытии
 ПодключитьОбработчикОжидания(ОбновитьИнфу,30);
Конец

ОбновитьИнфу()
ВывестиСтраницу(НомерСтраницы)
Конец

//номерСтраницы - Переменная уровня формы(объекта, если выполнение с сервера)

Вполне универсальный механизм, при условии, что есть возможность хранить информацию.
84 SalavatUlaev
 
08.08.12
16:45
(0) Я думал речь идет о том, кодишь - кодишь и бац паузу сдела - отдохнул
85 Lex_Liven
 
08.08.12
16:59
А теперь такой вопрос. В пресловутый VBS можно впихнуть обработку Ctrl+Break?
86 Fragster
 
гуру
08.08.12
17:03
(85) если делать х пауз по одной секунде - то почему бы и нет
87 smaharbA
 
08.08.12
17:21
(85) да
88 smaharbA
 
08.08.12
17:22
Можно сделать (иначе) с точностью до 100 наносекунд

Пауза=5;
Компьютер=".";
Локатор=Новый COMОбъект("wbemscripting.swbemlocator");
Сервис=Локатор.ConnectServer(Компьютер,"root\cimv2","","","","",128);
Время = Сервис.ExecNotificationQuery("Select * from __instancemodificationevent WITHIN 1 where TargetInstance isa 'Win32_LocalTime' and TargetInstance.Second="+Секунда(ТекущаяДата()+Пауза));
Сообщить(ТекущаяДата());
СледующееСобытие = Время.NextEvent();
Сообщить(ТекущаяДата());
89 Fragster
 
гуру
08.08.12
18:08
(88) все равно меньше 15.7 паузу не сделаешь
90 Fragster
 
гуру
08.08.12
18:08
миллисекунд
91 smaharbA
 
08.08.12
18:11
(89) сделаешь
тики не имеют прямого отношения к таймерам
Основная теорема систематики: Новые системы плодят новые проблемы.