Паузы в 1С
Иногда требуется воссоздавать искусственные паузы. Необходимость в этом может возникнуть в интеграциях, когда нам нужно вызвать сторонний сервис, и если он не отвечает повторять попытки с некоторым интервалом. Или же при записи больших объемов в транзакциях, между транзакциями рекомендуется делать небольшие паузы.
Рассмотрим основные варианты реализации таких пауз:
ЖдатьДо = ТекущаяДатаСеанса() + 10;
Пока ЖдатьДо >= ТекущаяДатаСеанса() Цикл
// Пустой цикл
КонецЦикла;
Проблема в том, что циклы грузят процессор. Причем нехило так. Поэтому такую паузу лучше не использовать.
WshShell = Новый COMОбъект("WScript.Shell");
СтрокаКоманды = "timeout /t "+Секунд+" /nobreak";
СтрокаКоманды = "cmd /c "+СтрокаКоманды;
WshShell.Run(СтрокаКоманды,0,ОжидатьЗавершения);
Именно этот способ в большинстве случаев используется в типовых конфигурациях.
Пример такого кода:
Процедура Пауза(Секунд) Экспорт
ТекущийСеансИнформационнойБазы = ПолучитьТекущийСеансИнформационнойБазы();
ФоновоеЗадание = ТекущийСеансИнформационнойБазы.ПолучитьФоновоеЗадание();
Если ФоновоеЗадание = Неопределено Тогда
Параметры = Новый Массив;
Параметры.Добавить(Секунд);
ФоновоеЗадание = ФоновыеЗадания.Выполнить("Интеграция1СШтампСлужебный.Пауза", Параметры);
КонецЕсли;
ФоновоеЗадание.ОжидатьЗавершенияВыполнения(Секунд);
КонецПроцедуры
Всем классно провести предстоящие праздники!