1с как сделать паузу между исполнением кода
Как сделать, задать паузу при выполнении кода?
Если это какая-нибудь обработка и запускается на клиенте(у пользователя) то можно использовать обработчик ожиданий у встроенных функций:
Код 1C v 8.х
Для паузы можно использовать следующие примеры:
Код 1C v 8.х
Похожие FAQ
Еще в этой же категории
Ключевые слова и Изображения
Слова упорядочены по частоте использования в тексте
Изображения
Если нужна просто пауза, а не точное время ожидания, то можно ещё так:
Вот тут чувак еще один способ предложил: «В итоге я понял, что нормальной реализации с помощью языка 1С нету, так как в большинстве случаев используется подключение Wscript.Wshell, и видимо не просто так. Но использовать первый вариант я совершенно не хотел, из за записи файла на диск.
У меня был небольшой опыт работы c VBScript, поэтому я знал, что в скрипт можно переадавать параметры. Этим я и воспользовался. Был написан простой скрипт ожидания, который принимал один параметр:
Этот файл необходимо положить на сервер(для вызова на сервере) и на клиент(для вызова на клиенте), в моём случае(сервер терминалов), я положил файл на оба сервера(терминальный и на сервер 1С).
Теперь у нас есть скрипт который будет ждать столько, сколько мы скажем, осталось его вызвать из программы.
Вызов происходит в две строчки кода:
Я положил процедуру в общий модуль на клиенте, и в общий модуль на сервере, так же в параметр задал ПутьХраненияФайла. Вот таким образом с помощью Wscript, без постоянного создания файлов скрипта можно реализовать паузу в работе кода с минимальным значением
1С 8.3 Пауза в коде процедуры/функции
Если ЗадержкаВСекундах = 0 Тогда
Сообщить ( «Не задана задержка!» );
Возврат
КонецЕсли;
Если ТранзакцияАктивна () Тогда
ЗафиксироватьТранзакцию ();
КонецЕсли;
Сообщить ( «старт паузы в: » + ТекущаяДата ());
Если Вариант = «Ping» Тогда //не грузит процессор
ИначеЕсли Вариант = «smaharbA» Тогда //не грузит процессор
Для к = 1 По ЗадержкаВСекундах Цикл
ПолучитьCOMОбъект ( «winmgmts:» ). ExecNotificationQuery ( «Select * from __instancemodificationevent where TargetInstance isa ‘Win32_UTCTime'» ). NextEvent ();
КонецЦикла;
ИначеЕсли Вариант = «Пустой цикл» Тогда // загрузка процессора до 100%
ДатаЗавершенияПаузы = ТекущаяДата () + ЗадержкаВСекундах ;
Пока ТекущаяДата () ДатаЗавершенияПаузы Цикл
ОбработкаПрерыванияПользователя ();
КонецЦикла;
ИначеЕсли Вариант = «Sleep» Тогда // нужна установленная программа sleep.exe
ИначеЕсли Вариант = «DynamicWrapper» Тогда // используется внешняя библиотека. д.б. установлена KERNEL32.DLL
ИначеЕсли Вариант = «SleepJs» Тогда // используется WScript.Shell
УдалитьФайлы ( КаталогВременныхФайлов ()+ «sleep.js» ); // обязательно чистим каталог
ИначеЕсли Вариант = «SleepVbs» Тогда // используется WScript.Shell
SignS = Формат ( ТекущаяДата (), «ДФ=yyyyMMddhhmmss» );
ПутьScript = КаталогВременныхФайлов ()+ «SleepScript» + SignS + «.vbs» ;
УдалитьФайлы ( ПутьScript ); // обязательно чистим каталог
ИначеЕсли Вариант = «TimeoutWS» Тогда // используется WScript.Shell
ИначеЕсли Вариант = «Timeout» Тогда // используется WScript.Shell, но показывает черное окно при каждом старте паузы
Сообщить ( «финиш паузы в: » + ТекущаяДата ());
Как сделать паузу в коде?
Эта статья расскажет о способах написания пауз на встроенном языке 1С:Предприятие 8, их достоинствах и недостатках. Также Вы узнаете, какой способ является самым оптимальным с точки зрения потребляемых ресурсов компьютера.
Использование пауз в 1С — стародавняя головная боль. До сих пор этот механизм никак не реализован на уровне платформы. Поэтому программистам приходится изобретать велосипеды и ходить по граблям.
1). Использование целочисленных циклов
Самый старый (встречал такие шедевры еще на платформе 1с:Предприятие 7.7), самый грубый и самый ресурсоемкий способ — использование цикла, ограниченного целым числом:
Грубый — потому что невозможно точно предсказать, сколько будет длиться цикл, ведь скорость его выполнения напрямую зависит от вычислительной мощности компьютера. Ресурсоемкий — потому что процесс 1С занимает 100% ресурсов ПК.
Его мы однозначно отметаем!
2). Использование цикла с датой
Другой древний способ, чуть более точный, но такой же ресурсоемкий — использование цикла, ограниченного датой:
По-прежнему, точность данного алгоритма оставляет желать лучшего, т.к. погрешность может составлять 100 и более миллисекунд. Да и быстродействие не на высоте.
Его мы тоже отметаем!
3) Использование обработчиков ожидания
При работе с формами для реализации повторяющихся во времени действий, можно воспользоваться механизмом обработчиков ожидания:
Из плюсов метода: точность и низкое потребление ресурсов ПК. Из недостатков этого метода можно отметить ограниченность его использования только клиентской частью приложения (на сервере обработчики ожидания не работают). Кроме того, его невозможно использовать для вставки в выполняемый код, т.к. обработчики 1С задействованы только в свободное от основных вычислений время.
4) Использование скриптов WShell
Но у приведенной процедуры есть свои недостатки: вряд ли удастся использовать ее на платформе Linux или веб-клиенте.
Пауза в выполнении кода
(29) реально на прошлой работе выгребал тонны вопросов и предупреждений вставленых в проведение :),
а еще хранение таблиц и списков (со ссылками) в реквизите документа и справочника, и еще много чего.
человек который это написал к тому времени возомнил себя мего 1с ником и ушел внедрять УПП
Ну флудеры. Я себя почувствовал ТСом из ветки про уничтожение инфы на хардах. Одинесеры разделились на два лагеря:
1) копрокодеров, которым положить, что проц загружается на 100% и нифига при этом не делает
2) Vbs, который делает все необходимое, не нагружает проц и реализовать в нем можно хоть лилового черта в малиновую крапинку(это я про ping, sleep, что_еще_такое_предлагали?)
p.s. Очень надеюсь вырваться в пятницу на миста-встречу в Москве на Бауманской, заодно и посмотрим друг на друга 🙂
(68) Правда, не понимаю, имеем интервал 12 секунд, нужно выполнить конкретное действие.
Исходя из видения задачи по сообщениям в этой теме
тьфу блин, инфы 60 строк, 5 страниц, 12 строк на каждой, 30 секунд.
ПриСозданииНаСервере
создаем страницы программно, таблицы на них тоже программно,
вызываем процедуру, которая получит данные и заполнит таблицы. Более сервер не дергаем, пока в этом нет необходимости.
ПриОткрытии
Подключаем обработчик ожидания, который будет переключать страницы.
Второй обработчик с таким интервалом с каким нужно обновлять данные (брать из базы)
Как сделать, задать паузу при выполнении кода?
Если это какая-нибудь обработка и запускается на клиенте(у пользователя) то можно использовать обработчик ожиданий у встроенных функций:
Код 1C v 8.х
Для паузы можно использовать следующие примеры:
Код 1C v 8.х
Похожие FAQ
Еще в этой же категории
Ключевые слова и Изображения
Слова упорядочены по частоте использования в тексте
Изображения
Если нужна просто пауза, а не точное время ожидания, то можно ещё так:
Вот тут чувак еще один способ предложил: «В итоге я понял, что нормальной реализации с помощью языка 1С нету, так как в большинстве случаев используется подключение Wscript.Wshell, и видимо не просто так. Но использовать первый вариант я совершенно не хотел, из за записи файла на диск.
У меня был небольшой опыт работы c VBScript, поэтому я знал, что в скрипт можно переадавать параметры. Этим я и воспользовался. Был написан простой скрипт ожидания, который принимал один параметр:
Этот файл необходимо положить на сервер(для вызова на сервере) и на клиент(для вызова на клиенте), в моём случае(сервер терминалов), я положил файл на оба сервера(терминальный и на сервер 1С).
Теперь у нас есть скрипт который будет ждать столько, сколько мы скажем, осталось его вызвать из программы.
Вызов происходит в две строчки кода:
Я положил процедуру в общий модуль на клиенте, и в общий модуль на сервере, так же в параметр задал ПутьХраненияФайла. Вот таким образом с помощью Wscript, без постоянного создания файлов скрипта можно реализовать паузу в работе кода с минимальным значением