Задача: при открытии УФ документа блокировать объект от изменения фоновым заданием.
Пробовал так:

```1c
    Процедура ПриСозданииНаСервере()
    ....
    ИдентификаторФормы = Новый УникальныйИдентификатор;
    ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка, , ИдентификаторФормы);

    КонецПроцедуры // ПриСозданииНаСервере()
```

и так:

```1c
    Процедура ПриСозданииНаСервере()
    ....
    ДокументОбъект = Объект.Ссылка.ПолучитьОбъект();
    Если НЕ ДокументОбъект.Заблокирован() Тогда
    ДокументОбъект.Заблокировать();
    КонецЕсли;

    КонецПроцедуры // ПриСозданииНаСервере()
```

Все равно программно дает перезаписать документ.
---
блокировка только в самом документе ничем не поможет.
Нужно блокировать еще и в самом фоновом задании.

Для формы достаточно первого примера, только не нужно создавать новый УИД, иначе заблокируется как минимум до конца сеанса.пользователя.
Можно использовать УИД самой формы, тогда блокировка будет действовать пока открыта форма.

```1c
    Процедура ПриСозданииНаСервере()
    ....
    ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка, , УникальныйИдентификатор);

    КонецПроцедуры // ПриСозданииНаСервере()
```

Далее... в самом фоновом задании можно поступить так:

```1c
    Попытка
    ЗаблокироватьДанныеДляРедактирования(СсылкаНаДок);
    Док = СсылкаНаДок.ПолучитьОбъект();
    ...
    Док.Записать();

    Исключение
    // тут действие когда объект уже был заблокирован. Или запись не прошла.
    КонецПопытки;
```

PS. по поводу метода Заблокирован(). Предполагаю, что его пытались использовать в фоновом задании.
Он не будет отрабатывать в данном случае, так как проверяет конкретный Объект в памяти, а не запись в БД.
---
ИдентификаторФормы = Новый УникальныйИдентификатор;
вряд ли причина в этом, но у формы уже есть УникальныйИдентификатор, зачем новый создавать?
---
хотя может и в этом. Блокировка действует на время существования формы. Если формы с указанным УникальныйИдентификатор нет, то по идее ничего и не должно блокироваться.
---
а в фоновом задании нет проверки блокировки объекта?
---
1. Попробуйте читать СП.
2. При чтении на сервере есть текущий объект. Который и можно заблокировать.
---
При чтении на сервере есть текущий объект
Не работает. Делаю так:

```1c
    &НаСервере
    Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    ...
    ТекущийОбъект.Заблокировать();

    КонецПроцедуры // ПриЧтенииНаСервере()
```

Если посмотреть в отладке, то объект НЕ заблокирован и дает его перезаписать
Документы.Событие.НайтиПоНомеру("УУ000000001", '20230101').ПолучитьОбъект().Заблокирован() выдает ЛОЖЬ и дает перезаписать
---
Код из фонового задания, который меняет документ в фоне, в студию можете показать?
---
в фоновом задании то есть проверка на блокирован объект или нет?
---
блокировка только в самом документе ничем не поможет.
Нужно блокировать еще и в самом фоновом задании.

Для формы достаточно первого примера, только не нужно создавать новый УИД, иначе заблокируется как минимум до конца сеанса.пользователя.
Можно использовать УИД самой формы, тогда блокировка будет действовать пока открыта форма.

```1c
    Процедура ПриСозданииНаСервере()
    ....
    ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка, , УникальныйИдентификатор);

    КонецПроцедуры // ПриСозданииНаСервере()
```

Далее... в самом фоновом задании можно поступить так:

```1c
    Попытка
    ЗаблокироватьДанныеДляРедактирования(СсылкаНаДок);
    Док = СсылкаНаДок.ПолучитьОбъект();
    ...
    Док.Записать();

    Исключение
    // тут действие когда объект уже был заблокирован. Или запись не прошла.
    КонецПопытки;
```

PS. по поводу метода Заблокирован(). Предполагаю, что его пытались использовать в фоновом задании.
Он не будет отрабатывать в данном случае, так как проверяет конкретный Объект в памяти, а не запись в БД.
---
Не работает.
В форме документа:

```1c
    Процедура ПриСозданииНаСервере()
    ...
    ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка);

    КонецПроцедуры // ПриСозданииНаСервере(
```

Далее меняется документ кодом (это просто тест, что дает изменить, а не рабочий код):

```1c
    ДокСсылка = Документы.Событие.НайтиПоНомеру("УУ000000001", '20230101');
    ЗаблокироватьДанныеДляРедактирования(ДокСсылка);
    ДокОбъект = ДокСсылка.ПолучитьОбъект();
    ДокОбъект.Комментарий = ДокОбъект.Комментарий + "1";
    ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
```

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

КонецПроцедуры // ПриСозданииНаСервере(
А теперь еще раз сравните с моим кодом.
---
Все работает, спс
---
Я так понимаю у документа создан реквизит ДокОбъект (тип: объект документа)?
Тогда:

```1c
    Попытка
    ДокументОбъект.Заблокировать();
    Исключение
    Бла-бла-бла
    КонецПопытки;
```
---
Не совсем, на форме будет ДанныеФормыСтруктура или что-то такое и у него нет метода Заблокировать()
---
```1c
    ПередЗаписью //Документа в модуле объекта

    Для каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл

    Если Сеанс.ИмяПриложения = "Фоновое" И Сеанс.Пользователь = ПараметрыСеанса.ТекущийПользователь Тогда

    //Отмена записи или проведения документа

    КонецЕсли;

    КонецЦикла;
```

Примерно так можно