Имя: Пароль:
1C
1С v8
Режим блокировок при выполнении транзакции
0 pavig
 
18.07.12
17:34
Камрады, подкиньте инфу:
как узнать в каком режиме выполняется текущая транзакция: автоматический или управляемый?

например, есть некая процедура в общем модуле, и я знаю что она может вызываться из нескольких документов, причем эти документы имеют разный режим блокировок, и мне надо в этой процедуре установить или не установить управлемую блокировку в зависимости от режима выполнения текущей транзакции?
или хотя бы вообще узнать, выполняется ли в данный момент транзакция записи?
1 gosn1ck
 
18.07.12
17:44
флажочек = истина передавай из документов с упр блокировками
2 pavig
 
18.07.12
17:59
(1) это уже костыли, согласись
меня интересуют методы платформы
3 gosn1ck
 
18.07.12
18:03
имхо, костыли сейчас у вас и вы их прибавляете. упр блокировки обычно устанавливается в самом документе обработкой проведения результатом запроса к самому документу.
4 pavig
 
18.07.12
18:05
(3) вопрос в (0) это не раскрывает
5 Jstunner
 
18.07.12
18:10
Попробуй начать транзакцию с управляемым режимом блокировок, думаю, если транзакция  в автоматическом режиме, то кинет исключение
6 Jstunner
 
18.07.12
18:18
А вообще верно,  смысл управляемых блокировок в том, что надо заблокировать все и сразу, иначе могут быть жертвы :)
7 pavig
 
18.07.12
22:48
(6) блокировать все и сразу надо только для контроля остатков чтобы после их чтения и перед записью остатки по набору измерений не изменились, да и то не все и далеко не сразу, а именно ПЕРЕД чтением чтобы не лочить записи до последнего момента чтобы другие транзакции могли и читать и изменять записи
а в (5) - опять костыли, причем куда более жесткие чем в (1)
8 Jstunner
 
19.07.12
02:56
(7) ты, видимо, не совсем понимаешь принцип блокировки. Скажем, ты блокируешь ресурсы двумя порциями. Первая порция - свободна и спокойно блокируется. Ты что-то делаешь. В это же время начинается другая транзакция, которая блокирует первую порцию, но других данных. Все хорошо пока. Но вторая порция в обеих транзакциях пытается заблокировать одни и те же данные. Возникает, правильно, взаимная блокировка.

Отсюда правило, нужно сначала заблокировать все и сразу, а потом работать дальше. В этом случае все проходит гладко, вторая транзакция со своими блокировками просто встанет в очередь, и продолжится лишь тогда, когда первая транзакция отработает.
9 zladenuw
 
19.07.12
02:57
а если нет ? то 2 транзакция вылетит ?
10 zladenuw
 
19.07.12
02:59
и это еще может зависит от сервера базы мс или постгрес? мс блокируют строку записи,а постгрес таблицу. то по твоим словам лучше юзать постгрес или я заблуждаюсь ?
11 zladenuw
 
19.07.12
03:04
или тут все 1с думает как и куда ?
12 Jolly Roger
 
19.07.12
05:33
(0) а если ставить УБ в любом случае?
13 gosn1ck
 
19.07.12
09:40
(7) приведите пример своего кода и поучимся у вас не костыликодить
(5) если открыть упр транзакцию, а попадётся док или регистр и автоматическим управлением то транзакция перейдет в автоматический режим
Основная теорема систематики: Новые системы плодят новые проблемы.