8.2.15.294, SQL, обычное приложение, обычные формы, толстый клиент.
При редактировании объекта в форме, 1С автоматом ставит пессимистическую объектную блокировку. Блокировка не дает редактировать этот объект другим пользователям в формах. Но такая блокировка совершенно не мешает изменить объект в транзакции, то есть транзакционные блокировки вообще не обращают на нее внимание.
Как следствие, если транзакция изменяет объект, пользователь, заполнивший форму уже не может ее сохранить. Вылезает сообщение о несоответствии версии записи в базе данных.
Я бы хотел в транзакции проверять объектную блокировку установленную на объект в форме, и если эта блокировка установлена, откатывать транзакцию.
Стоит ли вообще так делать? И как это делать правильно?
Попытка
Объект.Заблокировать();
Исключение
Предупреждение("Не удалось заблокировать объект """ + Объект + """!
|" + ОписаниеОшибки(), 60);
КонецПопытки;
Это как раз меня и не устраивает, потому что, я не знаю, "что" нужно будет блокировать в транзакции.
В транзакциях есть управляемые или автоматические блокировки, они как-раз работают как надо. В управляемых можно написать фильтр на записи, а автоматические сами блокируют то, что им нужно. Проблема в том, что транзакционные блокировки не "видят" объектных блокировок.
Вопрос в том, как правильно проверять объектовую блокировку в коде, который исполняется на сервере? Делать запрос и все объекты перебирать?
Написал бы что делаешь, а то может остатки на справочниках хранишь
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший