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