Имя: Пароль:
1C
1С v8
Транзакции и видимость данных из разных сессий 1С 8.2
0 evgen21
 
13.05.15
17:41
Прошу помощи.
Столкнулся с такой проблемой: перепровожу документ и в этот момент вываливаюсь в ошибку, после чего данные корректно откатываютсся. Ошибка возникает после записи данных по регистрам. Но вопрос проявился, когда я отлаживал код и остановился перед ошибкой, то в другой сессии 1С я видел уже измененные данные. Вот мне и не понятно как это происходит, ведь проведение должно проходить в рамках транзакции, а следовательно, пока не пройдет коммит, то другие сессии не должны этого видеть. Что не так?
Использую 8.2 + MS SQL 2012.
1 ДенисЧ
 
13.05.15
17:42
1с очень любит грязное чтение использовать...
2 Fragster
 
гуру
13.05.15
17:42
переходи на 8.3
3 Fragster
 
гуру
13.05.15
17:42
4 evgen21
 
13.05.15
17:43
Ну, 8.3 это не вариант :), только с 7.7 перешли на 8.2
5 H A D G E H O G s
 
13.05.15
17:43
(0) Смотри в другой сессии в транзации.
(1) Оно использует грязное чтение там, где надо.
6 evgen21
 
13.05.15
17:55
Так в том-то и дело, что мне ненужно "грязного чтения". А вот про просмотр в транзакции сейчас попробую.
7 H A D G E H O G s
 
13.05.15
17:56
(6) Будет ожидание на блокировке.
8 evgen21
 
13.05.15
18:09
Да, именно так и получилось.
Похоже я понял суть проблемы.
Спасибо всем за оперативную помощь!
9 mistеr
 
13.05.15
18:10
(1) (3) Вот гады! Не знал и не ожидал такого..
10 evgen21
 
13.05.15
18:14
Т.е. получается, что хоть у нас и уровень изоляции READ_COMMITED, то 1С всё равно его обходит (не всегда) конструкцией NOLOCK и делает по факту READ_UNCOMMITED.
Это подстава в угоду ухода от блокировок.
11 Гёдза
 
13.05.15
18:27
(10) Как уже говорили, переходи на 8.3
12 spock
 
13.05.15
19:41
(10) Какая альтернатива, кроме включения версионника?
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.