Блокировка объекта при редактировании в форме и списке

При редактировании объекта 1С:Предприятие использует пессимистическую блокировку. То есть если начинается редактирование объекта, он автоматически блокируется. Есть некоторые различия в процессе блокировки объекта при его редактировании в форме и в списке. Эти различия связанны с моментом блокировки объекта.

Редактирование в форме

При редактировании в форме объект не блокируется при открытии формы. Блокировка ставится при попытке интерактивного изменения объекта. То есть в форме блокировка ставится на объект только в тот момент, когда пользователь пытается изменить объект, вводя данные в элементы управления формы, связанные с реквизитами объекта. Так как между моментом считывания и моментом блокировки может произойти изменение объекта другим пользователем, то в момент блокировки производится проверка, что объект не был изменен. Если объект все же был изменен или в данный момент редактируется другим пользователем, то выдается сообщение о невозможности заблокировать объект. После этого пользователь должен перечитать данные и опять попытаться начать редактирование объекта. Разблокирование объекта происходит только после закрытия формы. То есть после записи объекта остается заблокированным.

Редактирование в списке

При редактировании объекта в списке, блокировка объекта происходит непосредственно в момент входа в режим редактирования, а снятие блокировки - при записи объекта. Так как считывание объекта и его блокировка происходят практически одновременно, получение сообщения о невозможности блокировки возможно только из-за того, что в данный момент эта запись редактируется другим пользователем.

Изменение объекта из встроенного языка

При изменении объекта из встроенного языка автоматической блокировки объекта не происходит, даже если он редактируется в форме. Например, в форме редактирования объекта может быть расположена кнопка, при нажатии на которую вызывается обработчик, изменяющий редактируемый объект. В данном случае при изменении объекта блокировка на него не будет установлена, и при записи такого объекта новые данные могут быть утеряны из-за того, что объект в этот момент был изменен другим пользователем. Для того чтобы избежать данной ситуации, нужно либо явно заблокировать объект перед его изменением, либо у кнопки установить признак, что она изменяет данные. При установке флага изменения данных, форма отслеживает все события от данного элемента управления, и, если у события есть обработчик на встроенном языке, перед вызовом этого обработчика пытается заблокировать редактируемый объект. Если попытка блокировки объекта неудачна, то пользователю выдается сообщение о невозможности блокировки и обработчик события не вызывается.

Другим примером может служить поле ввода, которое непосредственно не связано с реквизитами редактируемого объекта, но значение которого влияет на состояние объекта. То есть при считывании и записи объекта значение реквизита синхронизируется со значением поля ввода. В этом случае, если полю ввода не установлен флаг изменения данных, система не будет автоматически блокировать объект, так как поле ввода не связано с данными объекта.