Открытие несколькими пользователями одного документа
Здравствуйте! Столкнулась с такой проблемой: Если несколько пользователей открывают один документ, то выходят след. ошибки:
1) Данные были изменены или удалены другим пользователем (при записи)
2) Ошибка блокировки объекта
как избежать этих ошибок? я хочу сделать так, что кто первый зашел в данный документ, тот мог его изменять, а все остальные, пока он работает, могли только просматривать. Подскажите, как это можно сделать и правильно ли я решила избежать данных ошибок?
1) Данные были изменены или удалены другим пользователем (при записи)
2) Ошибка блокировки объекта
как избежать этих ошибок? я хочу сделать так, что кто первый зашел в данный документ, тот мог его изменять, а все остальные, пока он работает, могли только просматривать. Подскажите, как это можно сделать и правильно ли я решила избежать данных ошибок?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) nesterovaolgita@rambler.ru, был точно такой же вопрос тут как то уже, там даже какие то решения народ подсказывал. Насколько я понимаю открыла или нет документ проверить нельзя, можно попробовать проверить заблокирован ли он кем то, если заблокирован - значит открыт
(6) mymyka, делаю при открытии:
Попытка
ЭтаФорма.ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка);
Исключение
Сообщить("Документ редактируется другим пользователем");
ЭтаФорма.ТолькоПросмотр = Истина;
КонецПопытки;
&НаКлиенте
Процедура ПриЗакрытии()
ЭтаФорма.РазблокироватьДанныеФормыДляРедактирования();
КонецПроцедуры
почему при первом же вхождении в документ, он выдает исключение?
Попытка
ЭтаФорма.ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка);
Исключение
Сообщить("Документ редактируется другим пользователем");
ЭтаФорма.ТолькоПросмотр = Истина;
КонецПопытки;
&НаКлиенте
Процедура ПриЗакрытии()
ЭтаФорма.РазблокироватьДанныеФормыДляРедактирования();
КонецПроцедуры
почему при первом же вхождении в документ, он выдает исключение?
(9)Надо было сразу уточнять, что управляемые формы.
Тогда в процедуре ПриСозданииНаСервере() делаете
При закрытии формы блокировка автоматически снимется.
Тогда в процедуре ПриСозданииНаСервере() делаете
Попытка
ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка,,ЭтаФорма.УникальныйИдентификатор);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Документ редактируется другим пользователем");
ЭтаФорма.ТолькоПросмотр = Истина;
КонецПопытки;
При закрытии формы блокировка автоматически снимется.
(14) nesterovaolgita@rambler.ru,
Попытка
ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка,, ЭтаФорма.УникальныйИдентификатор);
Исключение
Ошибка = ОписаниеОшибки();
ОбрезанаОшибка = Сред(Ошибка, Найти(Ошибка, "сеанс:")+6);
НомерСеанса = Число(Сред(ОбрезанаОшибка, 0 , Найти(ОбрезанаОшибка,", начат:")-1));
АктивныеСеансы = ПолучитьСеансыИнформационнойБазы();
ИмяПользователяЗаблокировавшегоДок = "";
Для Каждого Элемент Из АктивныеСеансы Цикл
Если Элемент.НомерСеанса = НомерСеанса Тогда
ИмяПользователяЗаблокировавшегоДок = Элемент.Пользователь.ПолноеИмя;
Прервать;
КонецЕсли;
КонецЦикла;
Сообщить("Объект заблокирован пользователем: " + ИмяПользователяЗаблокировавшегоДок + "" + Сред(ОбрезанаОшибка, Найти(ОбрезанаОшибка,", начат:")));
ЭтаФорма.ТолькоПросмотр = Истина;
КонецПопытки;
Показать
(10) Цитата:
ЗаблокироватьДанныеФормыДляРедактирования), то при закрытии формы блокировка может быть отменена не сразу, а через некоторое время. Блокировка может быть снята:
автоматически при закрытии формы или завершении сеанса;
с помощью метода глобального контекста РазблокироватьДанныеДляРедактирования с указанием того же идентификатора формы, который указывался для установки блокировки. В этом случае блокировка снимается сразу.
С эти я и столкнулся - блокировка снимается не сразу.
Лучше при закрытии использовать метод РазблокироватьДанныеДляРедактирования
ЗаблокироватьДанныеФормыДляРедактирования), то при закрытии формы блокировка может быть отменена не сразу, а через некоторое время. Блокировка может быть снята:
автоматически при закрытии формы или завершении сеанса;
с помощью метода глобального контекста РазблокироватьДанныеДляРедактирования с указанием того же идентификатора формы, который указывался для установки блокировки. В этом случае блокировка снимается сразу.
С эти я и столкнулся - блокировка снимается не сразу.
Лучше при закрытии использовать метод РазблокироватьДанныеДляРедактирования
(1) Решал на обычных формах такую проблему следующим образом:
Создал отдельный регистр
1. В регистр при входе в документ писал кто в него зашел и когда
2. Для второго пользователь при входе в док, проверялся регистр и документ открывался уже в режиме просмотра с предупреждением кто конкретно редактирует док и когда в него зашел.
3. Ночью регистр очищал (или по таймеру если в доке сидит больше 1 часа / 2 часов) то из регистра запись удалялась.
Создал отдельный регистр
1. В регистр при входе в документ писал кто в него зашел и когда
2. Для второго пользователь при входе в док, проверялся регистр и документ открывался уже в режиме просмотра с предупреждением кто конкретно редактирует док и когда в него зашел.
3. Ночью регистр очищал (или по таймеру если в доке сидит больше 1 часа / 2 часов) то из регистра запись удалялась.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот