|
|
|
Вызов процедуры порождает новый сеанс | ☑ | ||
|---|---|---|---|---|
|
0
Dirk Diggler
11.11.25
✎
12:19
|
В конфигурации 1С УТ 10.3 есть самописное регламентное задание, в обработчике есть строки
УправлениеЭлектроннойПочтой.ПолучениеОтправкаПисем(глЗначениеПеременной("глСоответствиеТекстовЭлектронныхПисем"), глЗначениеПеременной("глТекущийПользователь"), УчетныеЗаписи, Письма, Истина,Ложь,Ложь, ТекстОшибки);
почему при вызове этой процедуры создается новый сеанс? |
|||
|
1
Dirk Diggler
11.11.25
✎
12:19
|
пипец. с тегом не угадал. как код оформлять-то?
|
|||
|
2
maxab72
11.11.25
✎
12:22
|
на сервере регламентные задания запускаются в новых сеансах, каждое в своем. У вас сервер?
|
|||
|
3
Dirk Diggler
11.11.25
✎
12:28
|
(2) Да. Но тут такое дело. Регламентное запустилось, появился его сеанс. В нем выполняется код.
Доходит дело до УправлениеЭлектроннойПочтой.ПолучениеОтправкаПисем(), выполнение кода переходит туда - и тамошний код начинает выполняться в ДРУГОМ сеансе. Вот это мне непонятно - с какого вдруг? |
|||
|
4
Dirk Diggler
11.11.25
✎
12:30
|
я пишу логи с номером сеанса. И в обработчике регламентного все, что до вызова УправлениеЭлектроннойПочтой.ПолучениеОтправкаПисем()
пишут записи с одним номером сеанса, а код внутри этой процедуры делает записи в лог с другим номером. |
|||
|
5
Garykom
гуру
11.11.25
✎
12:31
|
Назначения кластера?
|
|||
|
6
Dirk Diggler
11.11.25
✎
12:36
|
Это?
|
|||
|
7
Voronve
11.11.25
✎
12:50
|
(4) Значит ПолучениеОтправкаПисем где-то внутри себя стартует еще одно регламентное
|
|||
|
8
arsik
гуру
11.11.25
✎
12:51
|
(7) Не регламентное, а фоновое.
|
|||
|
9
maxab72
11.11.25
✎
12:54
|
(8) +, похоже на такую ситуацию.
|
|||
|
10
Dirk Diggler
11.11.25
✎
13:01
|
(7) Однозначно нет.
Но тут прям вообще очень странная картина . Может ли быть такое, что УстановкаПараметровСеанса() в модуле сеанса выполняется асинхронно с обработчиками? У меня есть параметр сеанса _дхбсп_УровеньЛога. Следите за руками 1) В УстановкеПараметровСеанса() он ставится в 0. 2) В самом начале работы обработчика регламентного задания уровень повышается. И сразу делается запись в лог, в ней всё окей: 12:56:39 L1 INFO : Увеличиваем уровень лога: ОбщийМодуль._омдх_Отладка.Модуль(44)
L1 это как раз первый уровень, оно формируется как "L"+ ПараметрыСеанса._дхбсп_УровеньЛога А вот следующая строка тут же пишет в лог вот что: L0 INFO : Начинается работа ПолучениеОтправкаПисем(), выполнение - Сервер //// Админ
Параметр сеанса внезапно опять откатился на 0. Мамой клянусь что в коде все нормально, так как выполнение на клиенте дает вот что: 11.11.2025 12:56:39 L1 INFO : Увеличиваем уровень лога: ОбщийМодуль._омдх_Отладка.Модуль(44) //// Иванов А.В.
11.11.2025 12:56:39 L1 INFO : Начинается работа ПолучениеОтправкаПисем(), выполнение - Клиент //// Иванов А.В. Куда смотреть? |
|||
|
11
Dirk Diggler
11.11.25
✎
13:07
|
Параметр сбрасывается с 1 на 0 вот в пределах этого куска кода:
_омпочта_ПочтаИУведомления.НачатьЛог();
#Если Клиент Тогда
_омпочта_ПочтаИУведомления.ЛогВФайлИнформация("Начинается работа ПолучениеОтправкаПисем(), выполнение - Клиент" );
#Иначе
_омпочта_ПочтаИУведомления.ЛогВФайлИнформация("Начинается работа ПолучениеОтправкаПисем(), выполнение - Сервер" );
#КонецЕсли
То есть там буквально между этими вызовами ничего нет, что бы могло как-то повлиять. НачатьЛог() выглядит так: Процедура НачатьЛог() экспорт // счетчик нужен, чтобы можно было контролировать и удалять файлы в зависимости от константы в пределах разных процедур ПараметрыСеанса._дхбсп_УровеньЛога = ПараметрыСеанса._дхбсп_УровеньЛога + 1; ЛогВФайлИнформация("Увеличиваем уровень лога: " +_омдх_Отладка.ИнформацияОСтекеВызововСтрокой() ); КонецПроцедуры |
|||
|
12
Мультук
гуру
11.11.25
✎
13:12
|
(10)
1) >>(0) почему при вызове этой процедуры создается новый сеанс? >>(10) ой, смотрите у этого сеанса и "параметры сеанса" свои собственные Вы понимаете, что у каждого сеанса свои "Параметры сеанса" ? 2) Это всё ради ? Убить фоновое задание Там какой-то секретный smtp-сервер или mail.ru, yandex.ru ? |
|||
|
13
Dirk Diggler
11.11.25
✎
13:13
|
(12) прекрасно понимаю. Для каждого сеанса пишется СВОЙ ОТДЕЛЬНЫЙ лог, именуемый по номеру сеанса. И цитируемые строки - из каждого отдельного лога. ВОт это две строки подряд из одного файла, то есть сделаны в пределах ОДНОГО И ТОГО ЖЕ СЕАНСА. Подряд.
11.11.2025 13:11:07 L1 INFO : Увеличиваем уровень лога: ОбщийМодуль._омдх_Отладка.Модуль(44) //// Админ 11.11.2025 13:11:07 L0 INFO : Начинается работа ПолучениеОтправкаПисем(), выполнение - Сервер //// Админ |
|||
|
14
Dirk Diggler
11.11.25
✎
13:16
|
Какая-то прям вообще хрень. Дублирование вызова НачатьЛог(); решило вопрос.... Очень похоже на глюк платформы, пардон
НачатьЛог();
НачатьЛог();
#Если Клиент Тогда
_омпочта_ПочтаИУведомления.ЛогВФайлИнформация("Начинается работа ПолучениеОтправкаПисем(), выполнение - Клиент" );
#Иначе
_омпочта_ПочтаИУведомления.ЛогВФайлИнформация("Начинается работа ПолучениеОтправкаПисем(), выполнение - Сервер" );
#КонецЕсли
дает в логе записи: 11.11.2025 13:10:07 L1 INFO : Увеличиваем уровень лога: ОбщийМодуль._омдх_Отладка.Модуль(44) //// Админ 11.11.2025 13:10:08 L1 INFO : Увеличиваем уровень лога: ОбщийМодуль._омдх_Отладка.Модуль(44) //// Админ 11.11.2025 13:10:08 L1 INFO : Начинается работа ПолучениеОтправкаПисем(), выполнение - Сервер //// Админ |
|||
|
15
Garykom
гуру
11.11.25
✎
13:29
|
Использование общих переменных в случае многопоточности это такое себе
|
|||
|
16
Dirk Diggler
11.11.25
✎
13:33
|
Уточнил. Параметр сеанса сбрасывается в ноль при вызове процедуры
ХранениеФайловВызовСервера.ДописатьТекстКФайлу(ФайлЛога, Строка + " //// " + ПараметрыСеанса.ТекущийПользователь); До входа в неё он равен 1, сразу после входа, на первой же строчке её кода - 0. Но только при первой отработке НачатьЛог - вызов происходит там. При второй отработке НачатьЛог() - и до вызова, и внутри вызова, и после выхода параметр сеанса остается равным 1. |
|||
|
17
Dirk Diggler
11.11.25
✎
13:33
|
(15) а что имеется в виду под общей переменной?
|
|||
|
18
Dirk Diggler
11.11.25
✎
13:36
|
(12)
Это всё ради ? Убить фоновое задание Там какой-то секретный smtp-сервер или mail.ru, yandex.ru ? связанные задачи. Да, ищу, в какой точно момент виснет фоновое. Для этого каждое фоновое должно было писать свой персональный подробный лог в файл с с номером сеанса, и удалять этот файл при успешном завершении. |
|||
|
19
Garykom
гуру
11.11.25
✎
13:36
|
(17) Параметр сеанса например
|
|||
|
20
Garykom
гуру
11.11.25
✎
13:38
|
(18) >ищу, в какой точно момент виснет фоновое
там даже искать нечего 100% виснет на обращении к внешнему серверу настроить таймауты если их еще нет, добавить попытки, вставить паузы |
|||
|
21
Dirk Diggler
11.11.25
✎
13:40
|
(19) этот параметр сеанса используется именно, блин, как параметр сеанса ))) А зачем они вообще нужны, как не для таких случаев тогда?
И что тогда использовать для хранения значений, которые а) связаны с конкретным сеансом б) должны быть едины и доступны коду сеанса из любого места? |
|||
|
22
Dirk Diggler
11.11.25
✎
13:40
|
(20) таймауты там стоят, в том и дело.
попытки были, я их наоборот убрал, они маскируют ошибки. |
|||
|
23
Dirk Diggler
11.11.25
✎
13:42
|
почему вызов(причем только первый) ХранениеФайловВызовСервера приводит к сбросу параметра сеанса? Это глюк платформы или я чего-то не знаю?
|
|||
|
24
Kongo2019
11.11.25
✎
13:52
|
Как-то через одно место получается, по хорошему сообщения надо писать в регистр и поочередно оправлять.
|
|||
|
25
Dirk Diggler
11.11.25
✎
13:54
|
(24) именно так и есть. Вот при рассылке по регистру на каких-то отдельных сообщениях регламентное виснет намертво.
|
|||
|
26
Dirk Diggler
11.11.25
✎
13:56
|
Короче, дырку я заткнул сверкой параметра сеанса на входе и выходе в ХранениеФайловВызовСервера.ДописатьТекстКФайлу()
но это конечно костыль тот еще... Попробуем потом 8.3.27, может нормально будет работать. |
|||
|
27
Kongo2019
11.11.25
✎
14:12
|
(25) Есть такое. Поэтому когда мне надоел этот секас, я стал писать это в отдельную БД, и отправлять скриптом на Питоне. Там и есть логи, там и бот, и потоки. И все из коробки так сказать.
Надоело таймиги ловить. |
|||
|
28
Dirk Diggler
11.11.25
✎
14:07
|
(20) Да... Логи заработали. Теперь ясно, вот тут виснет, при подключении к smtp2go в основном. На таймауты ему плевать оказалось
Соединение = новый ИнтернетПочта; Соединение.Подключиться(Профиль); (27) мысль хорошая. у меня как раз в конфе есть подсистема выполнения скриптов питона... надо накалякать скрипт и передавать ему json, пусть отправляет. |
|||
|
29
mikecool
11.11.25
✎
17:44
|
у тебя видимо установка параметров сеанса идет безусловно
а где то инициируется установка неинициализируемого параметра и вуаля... |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |