Имя: Пароль:
1C
1С v8
Можно ли в транзакции проверять объектные блокировки?
0 ruslanruslan
 
21.08.12
12:51
8.2.15.294, SQL, обычное приложение, обычные формы, толстый клиент.
При редактировании объекта в форме, 1С автоматом ставит пессимистическую объектную блокировку. Блокировка не дает редактировать этот объект другим пользователям в формах. Но такая блокировка совершенно не мешает изменить объект в транзакции, то есть транзакционные блокировки вообще не обращают на нее внимание.
Как следствие, если транзакция изменяет объект, пользователь, заполнивший форму уже не может ее сохранить. Вылезает сообщение о несоответствии версии записи в базе данных.
Я бы хотел в транзакции проверять объектную блокировку установленную на объект в форме, и если эта блокировка установлена, откатывать транзакцию.

Стоит ли вообще так делать? И как это делать правильно?
1 ZanderZ
 
21.08.12
12:54
проверять блокировку ДО транзакции
2 anddro
 
21.08.12
12:57
Попытка
   Объект.Заблокировать();
Исключение
   Предупреждение("Не удалось заблокировать объект """ + Объект + """!
                  |" + ОписаниеОшибки(), 60);
КонецПопытки;
3 ruslanruslan
 
21.08.12
14:38
Объект.Заблокировать();

Это как раз меня и не устраивает, потому что, я не знаю, "что" нужно будет блокировать в транзакции.
В транзакциях есть управляемые или автоматические блокировки, они как-раз работают как надо. В управляемых можно написать фильтр на записи, а автоматические сами блокируют то, что им нужно. Проблема в том, что транзакционные блокировки не "видят" объектных блокировок.

Вопрос в том, как правильно проверять объектовую блокировку в коде, который исполняется на сервере? Делать запрос и все объекты перебирать?
4 saaken
 
21.08.12
17:21
Написал бы что делаешь, а то может остатки на справочниках хранишь
Программист всегда исправляет последнюю ошибку.