Интеграция с оборудованием на производстве.

После создания (изменения, удаления) документа в 1с,
нужно отправить в стороннюю базу (не 1с) информацию,
и записать результат в документ id задачи.

Создал подписку на событие у Документа ПередЗаписью
У меня доп.реквизит документа, пытаюсь в него записать.

Если просто выполнить код ниже, ошибок нет (создать отдельную обработку)

```1c
    Док = СсылкаДок;
    ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Апи_id_2bc314bc370d4bd9bf8a246085953af3");

    ТабЗнач = Новый ТаблицаЗначений;
    ТабЗнач.Колонки.Добавить("Свойство");
    ТабЗнач.Колонки.Добавить("Значение");

    НоваяСтрока = ТабЗнач.Добавить();
    НоваяСтрока.Свойство = ДопСвойство;
    НоваяСтрока.Значение = id;
    УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Док, ТабЗнач);
```

А когда Пользователь открывает форму Документа и нажимает Провести и Закрыть,
ошибка -
Ошибка блокировки объекта. Объект уже заблокирован

Как правильно нужно сделать, чтобы удалось записать?

УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Док, ТабЗнач); -- бсп использую
---
Решение:
Отказался от использования БСП.

Событие формы использую, ниже

```1c
    &НаСервере
    Процедура АПИ_ПриЗаписиНаСервереПосле(Отказ, ТекущийОбъект, ПараметрыЗаписи

    ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Апи_id_2bc314bc370d4bd9bf8a246085953af3");

    МассивСтрок = ТекущийОбъект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопСвойство));
    Если МассивСтрок.Количество() Тогда
    СтрокаСвойства = МассивСтрок[0];
    Иначе
    СтрокаСвойства = ТекущийОбъект.ДополнительныеРеквизиты.Добавить();
    КонецЕсли;

    новСтруктура = Новый Структура("Свойство,Значение,ТекстоваяСтрока");
    новСтруктура.Свойство = ДопСвойство;
    новСтруктура.Значение = РезультатОтправки.id;

    ЗаполнитьЗначенияСвойств(СтрокаСвойства, новСтруктура, "Свойство,Значение,ТекстоваяСтрока");
    ТекущийОбъект.Записать();
```
---
Эта функция БСП пытается заблокировать объект и записать свойства в транзакции, но ПередЗаписью тоже внутри другой транзакции записи объекта, поэтому он заблокирован. Вызывайте запись доп свойств раньше или после основной транзакции. ИМХО
---
Например?
---
В моем понимании все что внутри транзакции под запретом, т.к. объект будет заблокирован. Значит в любой момент до или после.
---
В расширении, у формы события
Пробую ПередЗаписьюНаСервереПосле (в расширении)
ошибка - Ошибка блокировки объекта. Объект уже заблокирован....
Пробую ПослеЗаписиНаСервереПосле (в расширении)
ошибка - Ошибка блокировки объекта. Объект уже заблокирован...
---
У нас на новых релизах перестала выводиться информация в УПП кто заблокировал объект и пользователи бегали искали кто сидит в доке. Прикрутили кнопку с проверкой методом Заблокировать(). Получается согласно этому методу модифицированный объект уже заблокирован, даже до записи - я ввел вас в заблуждение. Но после записи, как только * исчезла он свободен. Почему у вас он все еще заблокирован в "ПослеЗаписиНаСервереПосле" я не понимаю.
Попробуйте использовать метод Заблокирован() у объекта, чтобы выяснить в каком из событий снимется блокировка.
---
Решение:
Отказался от использования БСП.

Событие формы использую, ниже

```1c
    &НаСервере
    Процедура АПИ_ПриЗаписиНаСервереПосле(Отказ, ТекущийОбъект, ПараметрыЗаписи

    ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Апи_id_2bc314bc370d4bd9bf8a246085953af3");

    МассивСтрок = ТекущийОбъект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопСвойство));
    Если МассивСтрок.Количество() Тогда
    СтрокаСвойства = МассивСтрок[0];
    Иначе
    СтрокаСвойства = ТекущийОбъект.ДополнительныеРеквизиты.Добавить();
    КонецЕсли;

    новСтруктура = Новый Структура("Свойство,Значение,ТекстоваяСтрока");
    новСтруктура.Свойство = ДопСвойство;
    новСтруктура.Значение = РезультатОтправки.id;

    ЗаполнитьЗначенияСвойств(СтрокаСвойства, новСтруктура, "Свойство,Значение,ТекстоваяСтрока");
    ТекущийОбъект.Записать();
```