Имя: Пароль:
1C
 
Вызов процедуры порождает новый сеанс
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
у тебя видимо установка параметров сеанса идет безусловно
а где то инициируется установка неинициализируемого параметра и вуаля...
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан