Есть некий документ в 1с8, который распечатали со штрихкодом.
Первый пользователь сканирует штрихкод и у него открывается окошко с данными описываемого документа с кнопками "Подтвердить", "Отменить".
После нажатия на кнопку "Подтвердить" - документ заблокируется.

Но есть второй пользователь, который после открытия формы подтверждения у первого пользователя резко успевает поменять данные документа в результате чего первый пользователь подтверждает совершенно другие данные (устаревшие).

Хотелось бы при открытии формы у первого пользователя установить временную блокировку на данный документ, которая в случае нажатия на кнопку "Отмена" или "Подтвердить" будет сниматься.

То есть мне нужно в процедуре формы "ПриСозданииНаСервере" - заблокировать документ, а при закрытии формы - разблокировать.

Рассматриваю объект "Блокировка данных" и столкнулся с ступором того что я ведь не смогу открыть транзакцию при открытии формы, а закрыть транзакцию при ее закрытии. Получится "Блокировкой данных" я сделать ничего не смогу?

Посоветуйте что то пожалуйста.
---
А! Нужно залочить один документ, пока открыт другой. Интересная задача, не приходилось такое делать.
Попробуй ЗаблокироватьДанныеДляРедактирования(). Похоже на то, что надо.
---
Отлично. В описании метода упоминается, что блокировка может быть снята не сразу, а через некоторое время после закрытия формы. Что, конечно же, неудобно. С явной разблокировкой норм решение.
---
Для таких задач используют реквизит "Статус" в документах.
юзать блокировку от лукавого.
---
Понял, но в моей ситуации легче на кнопку "Получить" снова вытянуть данные и сверить их с подтверждаемыми значениями на форме, после чего ожидать снова подтверждения обновленных данных.

Хотелось бы понять, я правильно понял ли принцип объекта "Блокировка данных". В моем случае его никак не применить? Блокировка происходит только в одной транзакции?
---
Не правильно. Не надо блокировок!
Да, блокировка только в транзакции.
---
Почему не нужно? Я ниже написал в (10) свое решение. Чем оно неудачно?
---
я про блокировка данных, а не объектную блокировку
---
Сразу при открытии формы делай формальное изменение данных объекта в этой форме. Неважно какое, главное чтобы объект в форме начал считаться измененным. В этот момент сработает штатная объектная блокировка и второй пользователь не сможет интерактивно изменить данные параллельно. Если же второй пользователь уже начал менять данные, то наоборот - вылетит исключение у пользователя, который пытается заблокировать документ.
---
формальное изменение данных объекта в этой форме. Неважно какое, главное чтобы объект в форме начал считаться измененным. В этот момент сработает штатная объектная блокировка и второй пользователь не сможет интерактивно изменить данные параллельно. Если же второй пользователь уже начал менять данные, то наоборот - вылетит исключение у пользователя, который

Я Вас не совсем понял. Немного конкретизирую для взаимопонимания.
1 человек - кладовщик.
2 человек - диспетчер.
документ - реализация.
бумажка со штрих кодом - распечатанный документ реализация со штрихкодом для сканировки.

Ситуация:
1) кладовщику попадает печатная форма реализации;
2) он сканирует ее в результате чего открывается общая форма с табличной частью, которая в процедуре "ПриСозданииНаСервере" заполняется данными из документа реализации;
(итак, на данном этапе у нас открыта форма с кнопками принять/отменить у кладовщика и он сидит и сверяет циферки с формой и напечатанным документом).
3) диверсант диспетчер меняет документ реализации;
4) кладовщик заканчивает проверку данных и все у него сходится. Это он подтверждает нажатием кнопки "Подтвердить".
(в результате получается ситуация, когда кладовщик подтвердил данные, но они оказались на самом деле другие. Все дело в том что диспетчер во время проверки текущих данных обновил циферки в реализации).

Можно мне подробно объяснить как заблокировать для изменения документ "реализация" когда кладовщик уже открыл форму. Либо как решить ситуацию, а то я перечитал Ваш комментарий несколько раз и не понял к сожалению что мне сделать :(
---
А! Нужно залочить один документ, пока открыт другой. Интересная задача, не приходилось такое делать.
Попробуй ЗаблокироватьДанныеДляРедактирования(). Похоже на то, что надо.
---
Сейчас начал читать за данный метод. Спасибо :)
---
ЗаблокироватьДанныеДляРедактирования

Вроде как получилось. В "ПриСозданииНаСервере" написал:

```1c
    //там несколько накладных блокировать нужно и ссылки я получил в запросе
    ЗаблокироватьДанныеДляРедактирования(Выборка.Ссылка,ЭтаФорма.УникальныйИдентификатор); // блокирую с каждыйм обходом по ссылке каждую накладную
```

В параметрах указал "УникальныйИдентификатор" текущей формы и как написано в справочнике - это должно снимать автоматически блокировку при закрытии окна, но у меня почему то не снялись все блокировки (как я понял, потому что я закрыл окно, а снова при открытии на "ЗаблокироватьДанныеДляРедактирования" я получал ошибку "данные уже заблокрованы"). Пришлось написать код ниже (и так, вроде, работает:

```1c
    &НаСервере
    Процедура СнятьБлокировку()
    Для каждого Документ Из СсылкиДокументов Цикл
    РазблокироватьДанныеДляРедактирования(Документ.Значение);
    КонецЦикла;
    КонецПроцедуры

    &НаКлиенте
    Процедура ПриЗакрытии()
    СнятьБлокировку();
    КонецПроцедуры
```
---
Отлично. В описании метода упоминается, что блокировка может быть снята не сразу, а через некоторое время после закрытия формы. Что, конечно же, неудобно. С явной разблокировкой норм решение.
---
Спасибо за помощь, хорошего дня :)
---
Нарыл еще ЗаблокироватьДанныеДляРедактирования() и ЗаблокироватьДанныеФормыДляРедактирования() глобального контекста. Но сам не юзал.
А БлокировкаДанных - да, не для этого. Это транзакционные блокировки.
---
Есть еще Заблокировать() - но это скорее для объектной блокировки при программной работе с объектами (обычно используют для кривой проверки через попытку/исключение, не начал ли уже какой-либо пользователь редактировать объект. Потому что иначе его при попытке записи изменений просто отлупит с невнятным для пользователей сообщением об изменившейся версии объекта в базе данных).