Имя: Пароль:
1C
 
Как сделать задержку при отправке писем программно
0 Vade_kirza
 
04.12.17
17:21
Добрый день всем! Подскажите пожалуйста, есть внешняя обработка для бух 3.0.54.20 (8.3.10) которая в цикле отправляет письма. На почтовом клиенте есть ограничение на отправку писем 50 штук/15 минут. Как добавить в коде, чтоб после отправки письма она 30 секунд подождала? Заранее спасибо!
1 Вафель
 
04.12.17
17:23
отправлять рег заданием по расписанию по 15 штук
2 Vade_kirza
 
04.12.17
17:29
(1) Попытка
                РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма);
Исключение
Счет.Результат = ОписаниеОшибки();
КонецПопытки;

сюда нельзя что-нибудь добавить, чтоб после отправки он на 30 секунд остановился?
3 YFedor
 
04.12.17
17:30
(0) Что за почтовый клиент такой?
4 Вафель
 
04.12.17
17:32
(3) скорее не клиент, а провайдер
5 lubitelxml
 
04.12.17
17:39
Процедура глПауза(Сек)
scr = Новый COMОбъект("WScript.Shell");
scr.Run("sleep "+СокрЛП(Число(Сек)),0,1);
КонецПроцедуры;
6 YFedor
 
04.12.17
17:40
(5) 1С при этом "пойдет дальше", а скрипт пусть себе сидит на паузе или нет?
7 nordbox
 
04.12.17
17:40
Подойдет?
ФоновоеЗадание (BackgroundJob)
ОжидатьЗавершения (WaitForCompletion)
Синтаксис:

ОжидатьЗавершения(<Таймаут>)
Параметры:

<Таймаут> (необязательный)

Тип: Число.
Таймаут в секундах ожидания завершения задания. Если таймаут не определен, ожидание будет длиться до момента завершения задания.
Описание:

Ожидать успешного завершения задания. Если задание завершено аварийно, ожидание прерывается и выдается ошибка выполнения задания. Если наступил таймаут, выдается ошибка ожидания задания. Ожидать завершения задания может только администратор или пользователь, запустивший задание.

Доступность:

Сервер, толстый клиент, внешнее соединение.
8 Вафель
 
04.12.17
17:41
(7) это не то совсем. А паузы в 1с типовой нет. и не будет (с) 1С
9 Волшебник
 
модератор
04.12.17
17:42
10 nordbox
 
04.12.17
17:42
Тогда время отслеживать
и сравнивать
11 Волшебник
 
модератор
04.12.17
17:44
(10) Всё уже придумано до вас! См. (9)
12 Vade_kirza
 
04.12.17
17:45
(11) Спасибо
13 nordbox
 
04.12.17
17:45
(11) )))
14 breezee
 
04.12.17
18:34
Почему так сложно?
ДатаНачала = ТекущаяДата();
Пока ТекущаяДата() > ДатаНачала + 30 Цикл
//Ждем
КонецЦикла;
15 Волшебник
 
модератор
04.12.17
18:59
(14) Потому что это подвешивает систему и грузит процессор. Пауза должна быть бездеятельной, чтобы дать возможность всем остальным процессам сделать свои тёмные делишки.
16 Владимир1С
 
05.12.17
09:26
Разве в 8ке нет возможности вызывать процедуру с заданным в модуле инициализации системы интервалом?
17 Serg_1960
 
05.12.17
10:20
Всё просто когда "в теме" :)

В обработке пишешь процедуру, которую при запуске обработки будешь вызывать в фоновом режиме. Процедура в цикле отправляет писма, после каждого письма -
пауза. Организовать паузу в фоновом задании - проще паренной репы - смотри (7)

Примитивный пример для фонового задания с наименованием "Почта50штЗа15минут":

ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("Наименование", "Почта50штЗа15минут"))[0].ОжидатьЗавершения(18);
Независимо от того, куда вы едете — это в гору и против ветра!