Имя: Пароль:
1C
 
Многопоточность в обычных формах 1С.
0 ptiz
 
02.04.26
10:14
Кто-то уже нарывался на такое?

Всё происходит на платформе 8.2 на обычных формах.

Имеем обработку, где есть поле ввода для клавиатурного сканера ШК (с хоткеем F7).

Суть:
- в модуле обработки есть цикл: перебор списка документов для печати, каждый последовательно отправляется на принтер
- после отправки на принтер каждого - вызывается пауза 2 секунды через WScript.Shell и ping
Назовем это Процедура1 - она запустилась, т.к. сканировался очередной ШК.

В это время пользователь на этой же форме сканирует следующий ШК (хотя работает Процедура1 и форма должна быть заблокирована):
- и 1С запускает НОВЫЙ ЭКЗЕМПЛЯР процедуры модуля. Этой же обработки!
Это Процедура2.

В данной конкретной обработке возникает конфликт двух процедур (они блокируют один и тот же справочник) и Процедура2 устанавливает реквизит обработки "ТекстОшибки" (Процедура1 еще выполняется).

А когда Процедура1 заканчивает работу - она в конце анализирует реквизит "ТекстОшибки" - и видит значение, установленное в Процедура2 и пишет его в логи.

Я что-то новое открыл или эта фича давно известна?
1 1cVandal
 
02.04.26
10:16
с асинх сталкивался?
2 Garykom
 
гуру
02.04.26
10:20
(0) Оно со времен 1С 7.7 есть
3 ptiz
 
02.04.26
10:31
(2) Мне интересно, что тогда помешало 1С сделать это реальной фичей, сделав штатной возможность запуска нескольких экземпляров процедуры одновременно, раз оно по факту работает.
4 Garykom
 
гуру
02.04.26
10:36
(3) Мьютексы со светофорами помешали
5 H A D G E H O G s
 
02.04.26
10:42
6 ptiz
 
02.04.26
10:44
(5) Эх, скринов не видно.
7 Sserj
 
02.04.26
10:51
(3) М...
А как по вашему рекурсия работает?
И вообще как по вашему работают процедуры и функции.
Может стоит почитать основы, для общего развития пописать на чистом C.
Понять что такое стек вызовов как он работает в памяти.
8 H A D G E H O G s
 
02.04.26
10:52
(6) Самое забавное - что я не помню, как это сделал.
9 vis
 
02.04.26
11:14
(7) Как рекурсия связана с мнопоточностью?
10 JeHer
 
02.04.26
11:25
(5) ни фига ты некромант. В той ветке уже дофига народу )))
11 Sserj
 
02.04.26
11:30
(9) Так у человека вопрос "..НОВЫЙ ЭКЗЕМПЛЯР процедуры модуля..". А не сама многопоточность.
Да и многопоточностью это назвать можно с сильной натяжкой.
Скорее асинхронность.
Исполнение ушло во вне системы, ядро там оставило точку возврата. А основной оброботчик событий продолжил работать.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн