Quote (Bitnikov)
petrov86, то что у тебя в цитате и есть правильный ответ. Т.е. если нужна "мгновенная" блокировка, то используется объект БлокировкаДанных и его метод заблокировать(). В момент вызова метода происходит непосредственная блокировка (того, что заблокировано) до момента завершения транзакции.
Т.е. от начала до конца. Я вижу те кто используют БлокировкаДанных, пишут этот код в начале.
То же самое происходит и с БлокироватьДляИзменения
Quote (Bitnikov)
А если использовать св-во регистра БлокироватьДляИзменения - то сама блокировка происходит в момент записи регистра (до момента завершения транзакции), т.е. не в момент установки этого свойства, а в момент записи самого регистра. При использовании свойства система блокирует записи с указанными измерениями регистра.
А смысл? запись пройдёт одним sql запросом. Смысл блокировать на момент записи? Если по какой то причине запись будет не удачной, вся транзакция откатится. И это будет уже не из за наших блокировок а из за дедлоков sql.
Я понимаю, что блокировка нужна для того что бы предотваратить такую ситуацию:
1) Выбрали остатки для документа1 = 10 шт
2) Выбрали остатки для документа2 тоже 10 шт (вообще с другого компа)
3) По результатам 1 стали делать какие то действия и они затянулись. Может в том документе есть номенклатуры с очень большими остатками или алгоритм расчёта длительный или ещё что-то не важно. Важно они затянулись и проскочило 4.
4) По результатам 2 создали движения в регистрах по документу2.
5) По результатам 1 создали движения в регистрах по документу1
Движения по документу1 уже не верны. Т.к. за это время эти 10 шт взял другой документ.
Т.е. другой ситуации я не знаю для использования блокировки.
Так зачем на одну и туже ситуация два механизма блокирования.
Или есть какая то очень существенная разница или что то ещё.
Про то что вы написали. Что одна блокировка длинна другая нет, я как то с трудом верю. Вернее может оно и так, но не понимаю вообще для чего использовать короткую блокировку. sql сам, без нас создаст эту короткую блокировку.