Имя: Пароль:
1C
1С v8
Найти причину зависания или прерывать процедуру по таймингу
0 igel1969
 
17.10.25
08:52
Здравствуете!
1С 8.3 УТ 10.3
Есть обработка, которая постоянно запущена на сервере.
Каждые три секунды он подключает обработчик ожидания на определенную процедуру.
В этой процедуре обработчик ожидания сразу же отключается (чтобы не было задвоения вызовов). Далее получается почта. Из письма извлекается файл и данные подгружаются куда надо, затем письмо удаляется из почты. Уже почти каждое действие в этой процедуре заключено в рамки "попытка-исключение-конецпопоытки". В случае успешного завершения или наоборот - исключения, делается повторный запуск обработчика ожидания на три секунды и выход из процедуры.
Вроде бы схема безупречная. Но время от времени обработка зависает. Раньше такое было 3-4 раза в неделю, теперь 3-4 раза в день. Приходится через диспетчер задач снимать и запускать заново. При этом так зависает, что вообще нельзя прочитать никаких сообщений и понять причину, просто программа "не отвечает" и все. Иногда бывает видно, что проблемы с SMTP (не может принять почту или удалить уже обработанное письмо). Но такие сообщения бывает приводят к завианию, а бывает и не приводят.
Вопрос 1: Как бы организовать такое: если процедура (которая запущена из обработчика ожидания) работает больше 2 минут, то ее просто прервать.
Вопрос 2: Может дадите совет, в какую сторону смотреть для поиска причины зависания?
1 Гипервизор
 
17.10.25
08:55
Почему не регламентное задание?
2 spiller26
 
17.10.25
08:58
(0) Почтовой сервер ваш или сторонний (yandex, mail и т.д.)?
3 igel1969
 
17.10.25
08:59
(1) каждые три секунды? Не уверен, что это лучшее решение. Это же еще будет целый сеанс 1С подниматься при каждом запуске, разве это не почти то же самое что 1С запускать каждые 3 секунды? А тут один экземпляр 1С только запущен.
4 igel1969
 
17.10.25
08:59
(2) сторонний. Раньше был mail, теперь yandex
5 igel1969
 
17.10.25
09:02
Наверное, введу лог в текстовый файл в программу. Это, конечно, ее замедлит, но уже нет сил терпеть зависания.
6 PuhUfa
 
17.10.25
09:08
(3) Каждые три секунды это только у вас в голове. По факту ваша поделка запускается горазда реже.

>>Может дадите совет, в какую сторону смотреть
смотреть в сторону (1)
7 Мультук
 
гуру
17.10.25
09:08
(0)

Каждые 3-сек ? Вас яндекс еще не забанил ?

Переписать на http-сервис ?
FTP - ?

Или люди "с той стороны" ничего кроме почты не умеют ?

(3)
Нихрена непонятно:
а) Нужно срочно-важно каждая секунда важна
б) Но иногда может зависнуть на 2 минуты
в) Это же еще будет целый сеанс 1С
Сервер настолько древний, что это для него уже испытание ? {сарказм}
Или база файловая ?
8 igel1969
 
17.10.25
09:19
(7) Яндекс не забанил
FTP не умею, надо изучать, поднимать. HTTP - можно было бы, просто программе уже лет 7. Если это поможет, т.е. если проблема в почте. Люди "с той стороны" только кнопку нажимают, а "их" программа сама почту отсылают. Как я умел 7 лет назад, так и сделал. попытаться можно, но придется менять программу и на "той стороне" у трех-десятков агентов.
Человек не просто посылает свои данные по почте, но и ждет ответную выгрузку. Как-бы сильная задержка ни к чему. Кстати, попробую ка я увелить время до 7 секунд.
Сервер скульный, но в принципе древний.
9 igel1969
 
17.10.25
09:20
(7) Каждые 3 секунды идет проверка почты. А так, писем то бывает входящих штук 40-60 в день с 25-30 разных адресов и соответственно столько же исходящих
10 Ёпрст
 
гуру
17.10.25
09:25
(8) достаточно во все места втыкать параметр таймаут, и проверять потом успешность.
ЗЫ: используется поди ИнтернетПочта и метод Подключиться ? Тут может быть зависоон.
11 Мультук
 
гуру
17.10.25
09:29
(10)

В 1С есть более другие методы для работы с почтой?
Можно тынц, а то может я тоже "из лесу никак не выйду"
12 igel1969
 
17.10.25
09:32
(10) ага, используется поди ИнтернетПочта и метод Подключиться
13 igel1969
 
17.10.25
09:36
(10) Кстати, посмотрел код:
для получения почты используется ИнтернетПочта и метод Подключиться, а вот для отправки ответного письма:
loConfig         = Новый COMОбъект("CDO.Configuration");
loCdoMessage     = Новый COMОбъект("CDO.Message");
и т.д.....

Я помню, несколько лет назад во всех почтах что-то поменялось и ИнтернетПочта перестала работать на отправку.
Программу писал я, но так давно, что все уже забыл.
14 Ёпрст
 
гуру
17.10.25
09:44
(11) не пользую почту..даже не вспомню когда.
Был там затык. Лень вспоминать как решалось.
ЗЫ: сейчас весь спам генерит типовой метод ИнтернетПочта , но-где то валяется и или CDO или вк на её основе.
15 Ёпрст
 
гуру
17.10.25
09:45
(13) а смысл ? Там был затык только с gmail, когда всякие тунели использовалмь, Сейчас вроде, и так отправляет
16 spiller26
 
17.10.25
09:52
(13) У вас по ходу на OLE и вешается.
17 igel1969
 
17.10.25
10:07
в общем, сделал текстовый лог, понаблюдаю. И время ожидания увеличил до 7 секунд
Программист всегда исправляет последнюю ошибку.