Имя: Пароль:
1C
1С v8
Пауза при выполнении кода без внешних компонент
, ,
0 daixiao
 
24.07.18
11:23
Ребята, простите, но оставлю тут ещё один способ для вас и будущего меня.

Посидел я, подумал и родил такую процедуру для вставки паузы при проведении документов в старой УТ. На удивление, работает. ХТТП и ФТП тоже тестил. Там не работает, ошибка генериться раньше, чем таймаут пройдёт.

Процедура Пауза(ДлительностьВСекундах) Экспорт
    Если ДлительностьВСекундах>0 Тогда
        Попытка
            Профиль = Новый ИнтернетПочтовыйПрофиль;
            Профиль.АдресСервераSMTP = "8.8.8.8";
            Профиль.Таймаут = ДлительностьВСекундах;
            Профиль.ПортSMTP         = 25;
            Почта = Новый ИнтернетПочта;
            Почта.Подключиться(Профиль);
        Исключение
        Конецпопытки;
    КонецЕсли;
КонецПроцедуры
1 Fragster
 
гуру
24.07.18
11:31
могут забанить, пинг локалхост или даже слип.экзе надежнее
2 Локи-13
 
24.07.18
11:36
ЗапуститьПриложение("powershell -command ""& {Start-Sleep -Seconds 30}""",,Истина);
3 Nikoss
 
24.07.18
11:38
какова практическая ценность "Пауза при выполнении кода"?
4 Локи-13
 
24.07.18
11:41
(3) полно. любой демон требует паузы
5 Локи-13
 
24.07.18
11:45
например, фоновое задание, которое должно каждый 5 секунд что-то делать, при этом сохранять состояние между вызовами.

Проще это реализовать как демона с паузой 5 сек.
6 Лефмихалыч
 
24.07.18
11:46
(5) много ли добра в таких заданиях?..
7 Лефмихалыч
 
24.07.18
11:46
(2) спасибо, запомню
8 Локи-13
 
24.07.18
11:49
(6) обычно это многопоточка + варианты с бэкендом, когда нужен быстрый отклик, но инициализация занимает более 5 секунд
9 daixiao
 
24.07.18
11:51
(1) Кто забанит? 8.8.8.8? Там же нет никакого почтового сервера.
Вообще, хост не важен. Я как тестил, так и оставил.
Главное - порт на хосте не должен reject'иться, а должен либо drop'аться, либо на нём кто-то должен висеть, но не SMTP.

Работает, например, если у вас на сервере запущен веб-сервер. Укажите 127.0.0.1:80.

(1) (2) Все другие давно перечисленные в Книга знаний: Перепроведение документов в 1С:Предприятие без блокировки других пользователей методы мне не захотелось. Ибо переедешь куда-нибудь на линукс (есть и такое в планах) и опять править.
10 Fragster
 
гуру
24.07.18
12:00
(9) если порт будет закрыт, то у тебя ошибка будет разу же.
11 Nikoss
 
24.07.18
12:01
(9) и переезжать не придется никуда. Обновишь платформу и выражение из (0)
"На удивление, работает. ХТТП и ФТП тоже тестил. Там не работает, ошибка генериться раньше, чем таймаут пройдёт."
Внезапно станет, на удивление, не работать))
12 Fragster
 
гуру
24.07.18
12:02
(9) >Ибо переедешь куда-нибудь на линукс (есть и такое в планах) и опять править.

пинг есть и под линуксом, в http://catalog.mista.ru/public/173394/ именно он используется для организации паузы для синхронного запуска
13 Garykom
 
гуру
24.07.18
12:07
"вставки паузы при проведении документов в старой УТ" - мдя
14 Garykom
 
гуру
24.07.18
12:08
Сцуко когда уже поймут что есть другие более лучшие методы и главное штатные!!!!
15 Fragster
 
гуру
24.07.18
12:09
(13)(14) вот ты глумишься, а у меня когда-то робот так последовательность круглосуточно восстанавливал - по документу в секунду.
16 almar
 
24.07.18
12:09
Необходимость в паузе есть, если генерируешь пароли, используя Новый ГенераторСлучайныхЧисел. Если его 2 раза запустить в одну и ту же секунду, то он выдаст одинаковые случайные числа. Я использовал для паузы
ТД=ТекущаяДата();
Пока ТД=ТекущаяДата() Цикл
КонецЦикла;
17 Fragster
 
гуру
24.07.18
12:10
(16) >Необходимость в паузе есть, если генерируешь пароли, используя Новый ГенераторСлучайныхЧисел. Если его 2 раза запустить в одну и ту же секунду, то он выдаст одинаковые случайные числа.

нет
18 Garykom
 
гуру
24.07.18
12:10
19 Fragster
 
гуру
24.07.18
12:10
(18) ага, в фоновом задании...
20 Nikoss
 
24.07.18
12:11
(16) еще и проц вешать, не комильфо
21 Garykom
 
гуру
24.07.18
12:13
(19) Извини но ты смешал в кучу.
Кто тебе мешает периодически проверять и запускать фоновое снова или не запускать если еще старое не закончилось?
22 Fragster
 
гуру
24.07.18
12:14
(21) ты вообще пробовал запускать фоновые раз в секунду?
23 Fragster
 
гуру
24.07.18
12:16
это ты смешал вы кучу. в (4), (5), (8) все объяснено. если старт задания сравним с временем выполнения задания, то зачем перегружать? Проблемы при массовом одновременном входе в 1с не ловил никогда?
Вон, во фреше вообще общая очередь заданий сделана, чтобы не перегружать большим количеством одновременных запусков сервера.
24 Garykom
 
гуру
24.07.18
12:18
(22) ОК кто мешает помещать задания в общую очередь через обработку ожидания?
25 Fragster
 
гуру
24.07.18
12:26
(24) а выполнять очередь кто будет? конкретный случай в (15) - фоновое получало границу последовательности, проводило следующий документ, если последовательность сбита, затем делало паузу в 1 секунду и все по кругу.
26 Garykom
 
гуру
24.07.18
12:29
(25) А выполнять фоновое, причем всего одно и может разные задания не только последовательность восстанавливать но и еще что заложишь.
27 Fragster
 
гуру
24.07.18
12:29
(26) а в фоновом дергать твою очередь заданий без паузы?
28 Garykom
 
гуру
24.07.18
12:29
(26)+ Фоновое крутится всегда, проверяя нет ли новых заданий.

А задания помещаешь с нужными паузами.
29 Fragster
 
гуру
24.07.18
12:29
не тупи...
30 Fragster
 
гуру
24.07.18
12:31
повторяюсь, восстановление последовательности со скоростью один документ в секунду (чтобы не мешать остальным пользюкам)
31 Garykom
 
гуру
24.07.18
12:32
(30) Я тебя понял, просто реализовал самым простейшим способом работающим.
32 Fragster
 
гуру
24.07.18
12:46
(31) я понимаю этот способ (висящий клиент) во времена 7.7, но во времена 8 уже нет. Даже ответа на (27) не вижу, не говоря уже о том, что с клиента запихивать что-то одинаковое раз в секунду в некую очередь неэффективно. когда там есть разнообразие заданий, или, например, они должны генериться по событию - тогда да. И то, клиент тут не нужен, события должны прилетать в веб сервис, пулинг не эффективен.
33 daixiao
 
24.07.18
14:07
(14) Ишь ты.) Это какие? Современные штатные платформенные средства - есть, не спорю. А использовать их как? Переписать процедуру ЗаполнениеДокументов.ВыполнитьВосстановление и перепроверять при обновлении конфы? Свою процедуру ваять?

(11) (10) Да, есть такое. Имейте в виду, если рискнете использовать.

(12) ping есть и под линуксом. Но перед использованием лучше сравнить параметры, они различаются. "ping.exe /?", "man ping".
34 Локи-13
 
24.07.18
14:31
(9) powershell под линуксом тоже есть
35 Fragster
 
гуру
24.07.18
14:35
(33).3 если посмотришь исходники из (12), то посмотришь, что это там учитывается.
36 Fragster
 
гуру
24.07.18
14:35
(34) из коробки?
37 Fragster
 
гуру
24.07.18
14:35
тогда уж лучше sleep
Программист всегда исправляет последнюю ошибку.