Начну с того, что я нашел и почему мне это не подошло. Мои требования были такими, необходимо было остановить выполнение кода на 0.1-0.5 секунды, клиент-серверный вариант работы, управляемые формы, тонкий клиент, пауза на клиентской части.
1) Первый вариант, который я нашел, был таким:
Процедура Спать(Время)
Если Время = 0 Тогда
Возврат
КонецЕсли;
Сигнатура = Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
ПутьСкрипта = КаталогВременныхФайлов()+"SleepScript"+Сигнатура+".vbs";
СкриптФайл = Новый ТекстовыйДокумент;
СкриптФайл.ДобавитьСтроку("WScript.Sleep("+Формат(Время*1000, "ЧГ=0")+")");
СкриптФайл.Записать(ПутьСкрипта, КодировкаТекста.OEM);
WSHShell = Новый COMОбъект("WScript.Shell");
WSHShell.Run("wscript.exe """+ПутьСкрипта+"""", 0, Истина);
УдалитьФайлы(ПутьСкрипта);
КонецПроцедуры
Я даже хотел начать его использовать, но потом подумал, что постоянно создавать файл не эффективное решение.
2)Второй вриант был довольно таки удобный, и подходил бы мне, если бы можно было поставить задержку менее секунды:
Процедура глПауза(Сек)
scr = СоздатьОбъект("WScript.Shell");
scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(Сек)+1),0,1);
КонецПроцедуры;
Такой вариант паузы я использовал еще в .bat файлах. Но он не подходит из-за минимального времени в 1 секунду.
3)Вариант с циклом и проверкой времени был отметен, как ересь, в связи с нагрузкой на процессор, и минимальным временем в 1 секунду.
4)Этот вариант вообще достаточно странный, я уж решил что это именно то, что мне нужно, но потом посмотрел и понял, что нужен некий файлик sleep. Без него выдаётся ошибка 0x80070002. А качать из интернета файл sleep.exe не очень хочется.
Процедура глПауза(Сек)
scr = СоздатьОбъект("WScript.Shell");
scr.Run("sleep "+СокрЛП(Число(Сек)),0,1);
КонецПроцедуры;
5)Был еще вариант с предупреждением и выбором из списка с таймером, но там опять же минимальная пауза 1 сек + еще окна лишние.
В итоге я понял, что нормальной реализации с помощью языка 1С нету, так как в большинстве случаев используется подключение Wscript.Wshell, и видимо не просто так. Но использовать первый вариант я совершенно не хотел, из за записи файла на диск.
У меня был небольшой опыт работы c VBScript, поэтому я знал, что в скрипт можно переадавать параметры. Этим я и воспользовался. Был написан простой скрипт ожидания, который принимал один параметр:
wscript.sleep wscript.arguments(0)
Сделать это очень просто: открываем блокнот, вставляем строчку , которая написана выше, жмем "Сохранить как...", и сохраням как sleep.vbs.
Этот файл необходимо положить на сервер(для вызова на сервере) и на клиент(для вызова на клиенте), в моём случае(сервер терминалов), я положил файл на оба сервера(терминальный и на сервер 1С).
Теперь у нас есть скрипт который будет ждать столько, сколько мы скажем, осталось его вызвать из программы.
Вызов происходит в две строчки кода:
Процедура ОбработкаОжидания(Секунда)
scr = Новый COMОбъект("WScript.Shell");
scr.Run("Wscript.exe ""C:\temp\sleep.vbs"" "+секунда*1000,0,1);
КонецПроцедуры
Я положил процедуру в общий модуль на клиенте, и в общий модуль на сервере, так же в параметр задал ПутьХраненияФайла. Вот таким образом с помощью Wscript, без постоянного создания файлов скрипта можно реализовать паузу в работе кода с минимальным значением ~0,001 секунда.