Книга знаний |
|
1С:Предприятие / Администрирование / Производительность |
|
Статья описывает способ "безопасного" проведения документов при работающих сетевых или SQL-
<br><br><br><br><br>пользователях. Дело в том, что если проводить документы без пауз, то работа остальных <br><br><br><br>пользователей в <br><br><br><br><br>1С будет заблокирована. Статья содержит ссылку на внешнюю компоненту с исходным кодом, а также <br><br><br><br><br>содержит другие рецепты, как сделать паузу без использования внешних компонент. | Автор статьи: romix | Редакторы: Лёвыч, Fragster, coding, mikecool Последняя редакция №14 от 07.06.11 | История URL: http://kb.mista.ru/article.php?id=98 |
Процедура Проведение() док=СоздатьОбъект(«Документ»); док.ВыбратьДокументы(НачДата, КонДата); Пока док.ПолучитьДокумент()=1 Цикл док.Провести(); Предупреждение(«Ждем 3 секунды…», 3); КонецЦикла; КонецПроцедуры
Звезочет: предупреждение не срабатывает, если окно теряет фокус ввода. То же самое, для
диалога ВводЧисла. А вот для ВводСтроки - таймаут работает! ;))
v8: Аналог Sleep()
//делает паузу с округлением до целого числа секунд - 1000, 2000 и т.д. //Использует ВводСтроки с таймаутом, который работает даже если окно теряет фокус ввода. Процедура sleep(ms) стр="Ожидание "+ТекущееВремя(); Состояние(стр); сек=цел(ms/1000); ВвестиСтроку(стр, стр, 100, 0, сек); КонецПроцедуры
Процедура глВремя_Задержка(чСекунд) Экспорт ИмяПутьСкрипта = КаталогПользователя()+"sleep.js"; Скрипт = СоздатьОбъект("Текст"); Скрипт.ДобавитьСтроку("WScript.Sleep("+Строка(1000*чСекунд)+");"); Скрипт.Записать(ИмяПутьСкрипта); cmdLine="wscript.exe "+ИмяПутьСкрипта; WshShell = СоздатьОбъект("WScript.Shell"); WshShell.Run(cmdLine, 0, -1); КонецПроцедуры
Процедура глПауза(Сек) scr = СоздатьОбъект("WScript.Shell"); scr.Run("sleep "+СокрЛП(Число(Сек)),0,1); КонецПроцедуры;
Процедура глПауза(Сек) scr = СоздатьОбъект("WScript.Shell"); scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(Сек)+1),0,1); КонецПроцедуры;
Процедура глПауза(МСекунды)
Перем Таймер;
Таймер = _GetPerformanceCounter() + МСекунды;
Пока Таймер > _GetPerformanceCounter() Цикл
//Состояние(Таймер);
КонецЦикла;
КонецПроцедуры
Процедура Пауза(КоличествоСекунд = 1) Экспорт #Если Клиент Тогда // эта часть практ. аналогична Процедура глПауза(Сек), описанной выше scr = Новый COMОбъект("WScript.Shell"); scr.Run("ping 127.0.0.1 -n " + (КоличествоСекунд + 1), 0, 1); #ИначеЕсли Сервер Тогда HTTP = Новый HTTPСоединение(<адрес сервера с поднятым пхп>); ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); HTTP.Получить("pause.php", ИмяВременногоФайла, "sec:" + КоличествоСекунд); Попытка УдалитьФайлы(ИмяВременногоФайла); Исключение КонецПопытки; #КонецЕсли КонецПроцедуры
Описание
| Рубрикатор
| Поиск
| ТелепатБот
| Захваченные статьи
| Установки
| Форум
|