Имя: Пароль:
1C
1С v8
Организация подобия мутекса
0 Liova
 
17.10.11
15:49
Всем привет! Нужно организовать подобие мутекса в 8.1

Задача такая: Есть регистр сведений, в нем есть записи, они разными сеансами в разное время могут "отправляться" - обрабатываются, потом стираются. Надо сделать так, чтобы во время обработки одним сеансом, другой не стал бы одновременно отправлять.
Я поставил реквизит ВОбработке и делаю в транзакции
1) Запрос с "ДЛЯ ИЗМЕНЕНИЯ" по регистру, где НЕ ВОбработке
2) Ставлю записям ВОбработке
3) Обрабатвают эти записи
4) Стираю их

В таком случае у меня исчезает вероятность того, что несколько сеансов одновременно начнут обрабатывать одну запись?
1 Liova
 
17.10.11
15:56
ап
2 Serginio1
 
17.10.11
16:03
Проще использовать управляемые блокировки.
3 Liova
 
17.10.11
16:08
(2) Возможно. Описанный мной способ проверен сейчас и работает - "вклинившийся" сеанс ждет по блокировке.
4 Serginio1
 
17.10.11
16:16
ДЛЯ ИЗМЕНЕНИЯ это вариант монопольной управляемой блокировкой (РежимБлокировкиДанных.Исключительный). С помощью управляемых блокировок ты можешь делать много читателей и один писатель ,так как РежимБлокировкиДанных.Разделяемый не блокируют друг друга, а РежимБлокировкиДанных.Исключительный блокиует все.
5 Liova
 
17.10.11
16:21
В том-то и дело, что мне надо, чтобы другие не успели _прочитать_ эти записи как неотправленные.
6 Sk0rp
 
17.10.11
16:23
(0) Что будешь делать, когда программа аварийно завершится во время обработки?
7 acsent
 
17.10.11
16:26
id сеанса
8 Sk0rp
 
17.10.11
16:28
(7) А чем это поможет? Если с твоим id не совпадает, то значит занял кто-то другой. А этот другой может в BSOD еще вчера упал и записи навечно "ВОбработке".

Для 7.7 я вот так решал:
http://infostart.ru/public/72534/
9 Serginio1
 
17.10.11
16:34
(6) Я просто показал общий вариант, а не подмножество , которые ты сможешь применить в других схемах.
10 acsent
 
17.10.11
16:56
(8) Сеансы будут непересекаться. Делать в транзакции.