1с как сделать паузу между исполнением кода
Эта статья расскажет о способах написания пауз на встроенном языке 1С:Предприятие 8, их достоинствах и недостатках. Также Вы узнаете, какой способ является самым оптимальным с точки зрения потребляемых ресурсов компьютера.
Использование пауз в 1С — стародавняя головная боль. До сих пор этот механизм никак не реализован на уровне платформы. Поэтому программистам приходится изобретать велосипеды и ходить по граблям.
1). Использование целочисленных циклов
Самый старый (встречал такие шедевры еще на платформе 1с:Предприятие 7.7), самый грубый и самый ресурсоемкий способ — использование цикла, ограниченного целым числом:
Грубый — потому что невозможно точно предсказать, сколько будет длиться цикл, ведь скорость его выполнения напрямую зависит от вычислительной мощности компьютера. Ресурсоемкий — потому что процесс 1С занимает 100% ресурсов ПК.
Его мы однозначно отметаем!
2). Использование цикла с датой
Другой древний способ, чуть более точный, но такой же ресурсоемкий — использование цикла, ограниченного датой:
По-прежнему, точность данного алгоритма оставляет желать лучшего, т.к. погрешность может составлять 100 и более миллисекунд. Да и быстродействие не на высоте.
Его мы тоже отметаем!
3) Использование обработчиков ожидания
При работе с формами для реализации повторяющихся во времени действий, можно воспользоваться механизмом обработчиков ожидания:
В данном примере мы определили экспортную процедуру ОбработчикОжидания() модуля формы, а затем подключили ее на повторный вызов каждые 500 миллисекунд, используя метод ПодключитьОбработчикОжидания().
Из плюсов метода: точность и низкое потребление ресурсов ПК. Из недостатков этого метода можно отметить ограниченность его использования только клиентской частью приложения (на сервере обработчики ожидания не работают). Кроме того, его невозможно использовать для вставки в выполняемый код, т.к. обработчики 1С задействованы только в свободное от основных вычислений время.
4) Использование скриптов WShell
Паузу можно реализовать с помощью VBScript и методов COM-объекта WScript.Shell . Ниже приведена готовая процедура, лишенная описанных ранее недостатков:
Но у приведенной процедуры есть свои недостатки: вряд ли удастся использовать ее на платформе Linux или веб-клиенте.
При обработке данных мне необходимо программно делать паузы через определенное количество обработанных данных на определенное количество секунд.
Пришло в голову два варианта:
Вариант 1. Используем _getPerformanceCounter():
Для НомерСотрудника = 1 По КолвоСотрудников Цикл
Если (НомерСотрудника>1) И (НомерСотрудника%20 = 1) Тогда
СчетчикВремени1 = _getPerformanceCounter();
Пока 1=1 Цикл
СчетчикВремени2 = _getPerformanceCounter();
ПаузаСекунд = (СчетчикВремени2-СчетчикВремени1)/1000;
Если ПаузаСекунд > 5 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Вариант 2. Используем Предупреждение():
Для НомерСотрудника = 1 По КолвоСотрудников Цикл
Если (НомерСотрудника>1) И (НомерСотрудника%20 = 1) Тогда
Предупреждение("Ожидание оправки пакета "+Цел(НомерСотрудника/20)+". Пожалуйста, не нажимайте кнопку ""ОК"".", 5);
КонецЦикла;
Плюсы: Не нагружает процессор.
Минусы: на каждое предупреждение отображается табличка и пикает сигнал спикера.
Вопрос: Есть ли вариант решения, при котором не нагружался бы процессор, и не отображались окна, и не пикал спикер?
Есть внешняя компонента (кажется, здесь где-то видел), называется TerminalSleep. Она как раз и делает системный вызов sleep(кол-во миллисекунд) не нагружая процессор.
(10)
Addin Romix'а делает паузу на указанное число мс
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"vk_sleep_1C.dll")=1 Тогда
vk_sleep=СоздатьОбъект("Addin.vk_sleep_1C");
vk_sleep.sleep(5000);
КонецЕсли;
(1) если все это выглядит сложно, то просто делайте цикл с бесполезными действиями, так раньше делали разного рода специалисты из франчайзинга.
scr = СоздатьОбъект("WScript.Shell");
scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(ЗадержкаСекунд)),0,1);
Не нагружает процессор и не пикает спикером.
Скрипт=Новый ТекстовыйДокумент();
Скрипт.УстановитьТекст
(
"if (WScript.Arguments.Count()==0)
| WScript.Quit();
|else
| if (isNaN(parseInt(WScript.Arguments(0))))
| WScript.Quit();
|WScript.Sleep(WScript.Arguments(0));"
);
Скрипт.Записать(КаталогВременныхФайлов()+"sleep.js",КодировкаТекста.ANSI);
WshShell=Новый COMОбъект("wscript.shell");
Сообщить(ТекущаяДата());
WshShell.Run("wscript.exe """+КаталогВременныхФайлов()+"sleep.js"" "+Формат(ИнтервалОжидания,"ЧГ=0"),0,-1);
Сообщить(ТекущаяДата());
УдалитьФайлы(КаталогВременныхФайлов()+"sleep.js");
scr = СоздатьОбъект("WScript.Shell");
scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(ЗадержкаСекунд)),0,1);
Не нагружает процессор и не пикает спикером.
Есть еще в семерке стандартный вариант:
ОбработкаОжидания(,)
Синтаксис:
ОбработкаОжидания(,)
Назначение:
Инициирует периодический вызов процедуры глобального модуля с заданным интервалом времени.
Возвращает имя процедуры глобального модуля, которая назначена для периодического запуска (на момент до исполнения процедуры).
Параметры:
- необязательный параметр. Строковое выражение - имя процедуры глобального модуля, которая будет вызываться периодически с временным интервалом . Тело процедуры должно быть написано разработчиком конфигурации в глобальном программном модуле. Если в качестве параметра передается 'пустая строка', то ранее запущенный процесс прекращается.
- необязательный параметр. Числовое выражение - интервал времени в секундах, с которым периодически будет вызываться процедура глобального модуля . Если в качестве параметра передается 0 (ноль), то ранее запущенный процесс прекращается.
(6) ArCtic,
Это немножко не то. Используя функцию ОбработкаОжидания() можно сделать таймер, а мне нужна была пауза при исполнении кода.
Ребят, зачем такие костыли делать? Есть простой способ используя встроенные методы, ничего не нагружает, не заметно для пользователя, работает как на дбф так и на скуле:
Процедура Пауза ( Время )
чЧас = 0 ; чМин = 0 ; чСек = 0 ;
ТекущееВремя( чЧас , чМин , чСек );
чТекВремя = чЧас * 3600 + чМин * 60 + чСек ;
чВремяЗавершения = чТекВремя + Время ;
Пока чТекВремя < чВремяЗавершения Цикл
ТекущееВремя( чЧас , чМин , чСек );
чТекВремя = чЧас * 3600 + чМин * 60+ чСек ;
КонецЦикла;
КонецПроцедуры;
В переменную "время" передаете числовое значение секунды необходимое для паузы (60 - минута, 3600 = час - это садизм :))) ), работает с любыми числами, универсально
(13) В 7.7 как то не замечалось, что бы цикл не грузил процессор. В терминале подобные решения могут привести к проблемам с быстродействием базы в целом.
(13) madvovik, Предложенное Вами решение аналогично предложенному мною в самом начале первому варианту и грузит одно ядро процессора на 100 %. Вы проверяли предложенное решение?
Процедура ПродолжениеОбработки
ОбработкаОжидания("ПродолжениеОбработки",0);
//Продолжаем обработку
А=В;
Процедура НачалоОбработки
В=С;
//Тут начало
//Запускаем паузу
ПаузаСек=3;
ОбработкаОжидания("ПродолжениеОбработки",ПаузаСек);
Единственная проблема с модальностью форм обработка ожидания при модальных формах и не модальных рвботает по разному (честно не помню как)
процедура ТвояПроц - в этой же обработке, а не в ГМ
ОбработкаОжидания(,)
Синтаксис:
ОбработкаОжидания(,)
Назначение:
Инициирует периодический вызов процедуры глобального модуля с заданным интервалом времени.
Возвращает имя процедуры глобального модуля , которая назначена для периодического запуска (на момент до исполнения процедуры).
Параметры:
- необязательный параметр. Строковое выражение - имя процедуры глобального модуля , которая будет вызываться периодически с временным интервалом . Тело процедуры должно быть написано разработчиком конфигурации в глобальном программном модуле . Если в качестве параметра передается 'пустая строка', то ранее запущенный процесс прекращается.
- необязательный параметр. Числовое выражение - интервал времени в секундах, с которым периодически будет вызываться процедура глобального модуля . Если в качестве параметра передается 0 (ноль), то ранее запущенный процесс прекращается.
Я думаю в в описании достаточно часто, указывается на ГМ?
(20)
в (19) - недокументированная возможность
ОбработкуОжидания() можно использовать с локальной процедурой
"То что нет типовых механизмов, явно указывает на то что производится попытка "неправильного" использования программного продукта.
Судя по тексту
"
Предупреждение("Ожидание оправки пакета "+Цел(НомерСотрудника/20)+". Пожалуйста, не нажимайте кнопку ""ОК"".", 5);
"
видимо, Вы хотите производщить задержку при обмене данными.
Если это так, то ожидание, не "красивый" способ и не лучший с точки зрения реализации обмена.
Я бы переписал механизм обмена следующим образом:
1. С помощью плана обмена фиксировать изменения в необходимом типе объектов (по изменению которого вы понимаете что нужно обмениваться)
2. Реализовать регламентное задание:
2.1 Получаете все измененные объекты.
2.2 Осуществляете обмен.
2.3 Если обмен прошел успешно то удаляете изменения в плане обмена.
При такой реализации, обмен будет "невидим" для пользователей и обмен из за этого будет работать более стабильно. Расписание регламентного задания можно настроить хоть каждую секунду, но я бы рекомендовал посоветоваться с Заказчиком и сделать раз в 5 минут. Еще одним плюсом является то что регламентное зададание будет работать на сервере и не зависеть от работы клиентов."
Прошу прощения, не обратил внимание на то что эта тема по 7.7 и решение написал для 8.х, но возможно в 7.7 есть аналогичные механизмы.
Более подробно про проверенные варианты:
1) ping и winmgmts. Оба варианта прекрасно работают, практически не нагружая процессор.
2) Пустой цикл. Вариант работающий, часто предлагаемый на форумах. Имеет большой минус - грузит процессор.
3) Вариант с использованием Sleep. Насколько я понимаю, требуют наличия программы sleep.exe. На моем компьютере такой нет, варианты проверить не удалось.
4) SleepJs и SleepVbs. Работают. Неплохой вариант. Варианты отличаются только алгоритмом запуска команды.
5) TimeoutWs и Timeout. Работают. Неплохой вариант. Варианты отличаются только алгоритмом запуска команды. Timeout показывает черное окно при каждом запуске паузы.
6) DynamicWrapper. Нужна dll. Этот вариант не проверял, так как искал вариант без внешних компонент.
В прилагаемой обработке все варианты можно протестировать в своей базе и выбрать наиболее подходящий.
Есть обычная и управляемая форма, поэтому запускать можно в любой базе. Код открыт.
Протестировано на версиях 8.2 и 8.3.11.
Специальные предложения
(1) Сравнил с (7). Работает, у меня пауза была не в секундах, а в миллисекундах, поэтому я решил, что не работает.
Кроме очевидного - задержки, не нагружая системные ресурсы - этот метод даёт пользователю возможность прервать длительный процесс, а нам - корректно отработать это прерывание и сделать всё красиво.
Ах, да, и самое, наверное, важное: этот метод работает с любым клиентом в любой операционной системе. В отличие от.
Irwin; user1334089; viktor3d; independ; Merkalov; hydro2588_2015; user1058740; SV6; adhocprog; seperblunt2; DarkUser; y.dyachenko; TreeDogNight; necropunk; jif; Yakud3a; Gluk_1C; mickey.1cx; vano-ekt; forseil; NeviD; WizaXxX; + 22 – Ответить
(4) +1, какой-то набор вредных советов в статье :) Если только нужно именно на сервере пауза, в очень редких случаях.
Найдено в недрах БСП:
Платформо-независимо, работает на сервере, не нагружает процессор.
Вызов из БСП:
user1114234; Orlando Skibraves; Egovigor; Tangram; alenakrr; Samson-lim; Vovhik; ybatiaev; kyrasol; Irwin; Jeka44; fuser; Andrei_Ivanov; FuJluH; user1188623; Smallrat; Anosov_EP; wolder; sodrk; KirinaAS; Aleskey_K; Invodev; KostyaLavr; Merkalov; axsebur; serg1c; vita8383; beardlyhich; Mi4man; hydro2588_2015; KilloN; davdykin; user990914; Anything; batusai_00; Alex_Prodigy; aezdakov; QZet; json; dreamerr7; adhocprog; Vampeg; leonidt84; boogie; noon; uno-c; + 46 – Ответить
Найдено в недрах БСП:
Платформо-независимо, работает на сервере, не загружает процессор.
Вызов из БСП (пример):
Samson-lim; oneworker; user1525588; Irwin; suepifanov; beardlyhich; MrBukas; Anything; Емельянов Алексей; user774630; Alogy; Vampeg; + 12 – Ответить
(4)
То, что Вы предлагаете, принципиально не годится, именно из-за асинхронности. Нужна ПАУЗА! А у Вас не будет никакой паузы. Висящий вопрос в асинхронном режиме - это не пауза, т.к. программа уже пошла вовсю дальше работать.
То, что Вы предлагаете, принципиально не годится, именно из-за асинхронности. Нужна ПАУЗА! А у Вас не будет никакой паузы. Висящий вопрос в асинхронном режиме - это не пауза, т.к. программа уже пошла вовсю дальше работать.
То есть, как делать формы для работы в асинхронном режиме, Вы не умеете. Но это - недостаток Вас как специалиста, а не моего ответа как алгоритма.
Подскажу для тех, кто в танке: код в методе ПриОткрытииЗавершение() выполнится только после завершения ожидания.
Переносите в него всё, что должно было отработать после паузы, и всё!
(17)
То есть, смысл моего замечания Вы не поняли. Но это - недостаток Вас как специалиста, а не моего замечания :).
Уж конечно, я понимаю, что "код в методе ПриОткрытииЗавершение() выполнится только после завершения ожидания". Но вот то, что ПОСЛЕ ПоказатьВопрос - выполнится сразу. И вот этот "гениальный" подход : "Переносите в него всё, что должно было отработать после паузы, и всё" - применим не всегда. Или для этого нужно извратиться так, как рвать гланды через Ж. Статья вообще не об этом, а о паузе. А это не ПАУЗА ( впрочем, что-то я повторяюсь, а зачем ? )
Статья не настолько полезна, насколько вредна.
Если нужна пауза в клиентском коде, то есть ПодключитьОбработчикОжидания() и не нужно изобретать велосипед.
Если нужна пауза в серверном коде, то что-то не так с логикой приложения.
Вы считаете, что обработкам, выполняющимся на сервере, совсем никогда не нужна задержка выполнения?
Реальный пример кода, где обработка ждет, когда все задания отправятся на принтер. Кстати, применен один из методов паузы, описанный автором статьи:
Не соглашусь с автором - вариант SleepJs прекрасно работает.
Будет платформенонезависимо, будет работать на клиенте. Но опять-таки, не работает в безопасном режиме (хотя на сервере профиль безопасности можно настроить, чтобы работало - для КОРП лицензии сервера).
Если очень хочется ждать на сервере, то на мой взгляд наименее костыльный способ - это ожидание фоновым заданием самого себя.
json; adhocprog; uno-c; KEV_SZK; JohnyDeath; Evil Beaver; Krio2; Darklight; nixel; azubar; Labotamy; + 11 – Ответить
Ожидание на фоновом задании - самое интересное решение (сам только что хотел предложить такое же) - но, надо бы проверить как будет вести себя в файловой базе. Предложу ещё фичу - один раз запустить "бесконечное" регл. задание (аналогично ждущее завершения самого себя) - и всем остальным сеансам обращаться на ожидание завершения ФЗ этого регл. задания. Но будет одна пользовательская лицензия расходоваться на регл. задание. Но ФЗ доступны только на сервере или в толстом клиенте - но для длительного ожидания можно и в серверный контекст переходить - это не проблема.
Остальные все советы платформенозависимые (хотя некоторые подходы можно переработать так, чтобы они имели реализацию для разных платформ).
Использовать WshShell
WshShell = Новый COMОбъект("Wscript.Shell");
WshShell.Run("Wscript.exe. ")
Всё же не рекомендую - 10-я версия платформы на это может ругаться, да ещё и в безопасном режиме работать не будет.
Но если надо так - то лучше "ЗапуститьПриложение(КомандаWindows,,Истина);" - по крайней мере будет работать в Windows, Linux и MacOS (c WEB-клиентом могут быть проблемы), где теперь тоже есть клиенты 1С.
Если нужно чисто на клиенте - то придётся извращаться с "ПодключитьОбработчикОжидания" - если нужно платформеннонезависимое решение, работающее в безопасном режиме, без модальности.
Но прямо среди кода остановиться так не получится - но, на мой взгляд, если такой код разбить на части через "ПодключитьОбработчикОжидания" не получится - значит там явно очень плохой дизайн.
Либо, нужно просто написать классический бесконечный цикл (думаю, что сюда попадут лишь короткие паузы - не более пары секунд- можно и покрутить проц клиента - коли уж очень нужно).
Или писать платформеннозависимый не безопасный код через вызов «ЗапуститьПриложение» или, ожидать на фоновом задании (регламентном или специально запускаемом), ждущим самого себя; с заходом в серверный контекст выполнения (если это не толстый клиент).
В общем всё ещё ждём, когда 1С встроит в платформу системную функцию паузы. давно ждём.
Иногда необходимо установить паузу при выполнении программных алгоритмов. К сожалению, платформа 1С не имеет решения на уровне глобального контекста, поэтому приходится разработчику придумывать "костыли и велосипеды". Решения, которые "общеприняты": либо используют внешние библиотеки (VBS, WS, ping и пр.), либо нещадно используют ресурсы (бесконечный цикл и т.п.). Хочу предложить еще одно решение, основанное на механизме управляемых блокировок платформы 1С. Итак, приступим:
Для реализации будем использовать:
1. Механизм управляемых блокировок
2. Механизм фоновых заданий и их метод: "ОжидатьЗавершенияВыполнения"
Смысл данной реализации схематично можно представить следующим образом:
Теперь к реализации:
1. Решение состоит из общего модуля и регистра сведений. (+ тестовая обработка для демонстрации работы паузы)
2. Регистр сведений необходим для реализации блокировки, по определенному условию. В нашем случае, это "НомерСеанса" (Число). Так как в одну единицу времени у информационной базы не может быть два сеанса с одинаковым номером, что позволяет нам утверждать, что пересечений по блокировкам не будет. Другими словами - одна пауза не помешает другому сеансу установить свою паузу.
3. Процедуры и функции
Процедура ВыполнитьПаузу_вСекундах(ВремяПуаузыСек,Причина="")
ВремяПаузыСек - Число - Количество секунд, на которое необходимо установить паузу
Причина - Строка - произвольный текст, будут установлен в запись регистра сведений
Текст с пояснениями:
Процедура сис_Пауза(НомерСеанса,ВремяОкончанияПаузы)
НомерСеанса - Число - Номер сеанса, который ставится на паузу
ВремяОкончанияПаузы- Дата в UTC- Когда должна закончится пауза (когда пауза больше времени ожидания на снятие блокировки)
Текст с пояснениями:
Процедура сборщика выполняется регламентным заданием и удаляет неактуальные записи, которые могли остаться в регистре сведений (не критично, будет работать и без регулярной чистки)
Функция получения режима совместимости и версии платформы, необходима для определения какой из методов ожидания завершения использовать у фонового задания
Тест паузы, как видно, в реальности пауза устанавливается на больше, чем указано в значении, примерно на 0.03 секунды.
Эти 30 мил.сек. как раз затраты на реализацию и обслуживание выполнения паузы.
Текст модуля формы обработки Теста паузы
Теперь в любом месте конфигурации можно написать "apПауза.ВыполнитьПаузу_ВСекундах(5);"
И система встанет в ожидание на 5 секунд, при этом будет работать на любой платформе, без использования внешних компонент и большого потребления ресурсов сервера.
На картинке видно ожидание на управляемой блокировке, что фоновое задание, ждет, когда Тонкий клиент "отпустит" ресурс.
. Протестировано на нагрузке в 50 и более сеансов.
тестировалось на платформах 8.3.12, 8.3.15 без режима совместимости и в режиме совместимости 8.3.12
Для примера приведу рабочий кейс использования такой паузы:
Дано: система расчета показателей Apdex в режиме условно реального времени. По алгоритму для расчета индекса APDEX, необходимо знать время выполнения последних 100 таких же ключевых операций. Одна и та же ключевая операция может быть выполнена одновременно несколькими пользователями.
1. Есть API, которая регистрирует выполнение ключевой операции в регистре сведений,
2. Регламентное задание, с периодичностью 1 раз в 60 сек стартует фоновые задания с анализом по каждому виду ключевых операции
3. Анализ по ключевой операции заключается в следующем:
Получение последних 100 записей из регистра сведений по данной ключевой операции
Создание таблицы значений с этими операциями
замещение новыми операциями, если есть (получение новых операций)
Подсчет итога по таблице
Установка паузы в 3 секунды и далее получение новых операций, без запроса к старым
Если нового замера по ключевой операции не поступало в течении 30 минут, то фоновое задание завершается
Такая реализация позволила убрать постоянный запрос к регистру с историей операций (более 10 млн. записей)
В файлах можно скачать расширение или конфигурацию, в которой реализован описанный выше механизм паузы.
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1C медленно работает по сети с базой на SQL Server 20
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем 1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое Посмотреть все результаты поиска похожих
Еще в этой же категории
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш QR код в 1С 20
Столкнулся с интересной задачей реализации генерации QR-кода в 1С 8.2 ( QR-код — матричный код (двухмерный штрихкод) ) Для генерации было использовано api от google (http://chart.apis.google.com/chart). Вот сайт , который работает с ним. После тог Как подключиться (присоединится) к базе 1С 8 через СОМ 6
//Пример 1 v8 = CreateObject(" V8.COMConnector" ); //Строку подключения можно получить так: Если ФайловаяБазаДанных Тогда СтрокаПодключения = " file=" + КаталогБазыДанных + " ; usr=" + Пользователь + " ; pwd=" + Пароль + " ;" ; Иначе COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Google maps, поиск оптимального маршрута 5
В данном посте хочу коснуться основных аспектов построения оптимального маршрута с использованием API Google maps. Исходные данные для построения маршрута: * Географические координаты объектов, которые хранятся в базе; * Координаты начальной и коне Посмотреть все в категории COM-объекты, WMI, WSH
Ключевые слова и Изображения
Слова упорядочены по частоте использования в тексте
Изображения
Если нужна просто пауза, а не точное время ожидания, то можно ещё так:
Вот тут чувак еще один способ предложил: "В итоге я понял, что нормальной реализации с помощью языка 1С нету, так как в большинстве случаев используется подключение Wscript.Wshell, и видимо не просто так. Но использовать первый вариант я совершенно не хотел, из за записи файла на диск.
У меня был небольшой опыт работы c VBScript, поэтому я знал, что в скрипт можно переадавать параметры. Этим я и воспользовался. Был написан простой скрипт ожидания, который принимал один параметр:
Сделать это очень просто: открываем блокнот, вставляем строчку , которая написана выше, жмем "Сохранить как. ", и сохраням как sleep.vbs.
Этот файл необходимо положить на сервер(для вызова на сервере) и на клиент(для вызова на клиенте), в моём случае(сервер терминалов), я положил файл на оба сервера(терминальный и на сервер 1С).
Теперь у нас есть скрипт который будет ждать столько, сколько мы скажем, осталось его вызвать из программы.
Вызов происходит в две строчки кода:
Я положил процедуру в общий модуль на клиенте, и в общий модуль на сервере, так же в параметр задал ПутьХраненияФайла. Вот таким образом с помощью Wscript, без постоянного создания файлов скрипта можно реализовать паузу в работе кода с минимальным значением ~0,001 секунда.
Читайте также: