helpf.pro
Регистрация

V8 Как определить кем и с какого компа блокирован документ?

mov68
26.10.2010 09:40Прочитано: 6438
Пользователи открывают один и тот же документ, выполняют какие то действия, но не могут сохраниться (блокировка), это обошел сравнительно просто:
Код 1C v 8.х
 Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Попытка
ЭтотОбъект.Заблокировать();
Исключение
КонецПопытки;
КонецПроцедуры

Процедура ПриОткрытии()
Если Не ЭтотОбъект.Заблокирован() Тогда
ЭтаФорма.ТолькоПросмотр=Истина;
Предупреждение("Документ открыт другим сотрудником. Открытие на просмотр.",5);
КонецЕсли;
.....


При этом второй и далее могут открыть только на просмотр, но встал вопрос, если человек открыл документ и ушел на обед. Кому давать по шапке... Как определить, кем и желательно с какого компа заблокирован документ?
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
26.10.2010 10:25Ответ № 1
(0) mov68, база файловая? если SQL то он должен в ошибке писать - кем заблокирован!
mov68
26.10.2010 10:28Ответ № 2
База SQL, если я перехватываю как выше и все следующие только на просмотр, то ошибка не выдается, если не перехватывать, то ошибка выдается при попытке записи, а человек до этого полчаса чего-то там ваял. Вот как бы получить языком 1С8 то же сообщение, что дает SQL?
E_Migachev
26.10.2010 10:55Ответ № 3
Код 1C v 8.х
  Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Попытка
ЭтотОбъект.Заблокировать();
Исключение
//добавь
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры


что он выводит в сообщение!
E_Migachev
26.10.2010 11:02Ответ № 4
+(3) ответ 1С:
Вопрос: требуется узнать каким пользователем и с какого компьютера этот объект заблокирован.

Ответ: Информация о том, кто заблокировал объект включается в текст исключения в клиент-серверном варианте работы.
Возможности программного анализа не предоставляется.

т.е. делай как в (3) ОписаниеОшибки() в Исключение
E_Migachev
26.10.2010 11:05Ответ № 5
(0) А почему у Тебя НЕ Заблокирован? Должно быть так:
Код 1C v 8.х
 Процедура ПриОткрытии()
//...
Если ЭтотОбъект.Заблокирован() Тогда
Сообщить("Документ " + ЭтотОбъект.Ссылка + "заблокирован. Документ будет доступен только для просмотра");
ЭтаФорма.ТолькоПросмотр = Истина;
КонецЕсли;
//...
КонецПроцедуры;
mov68
26.10.2010 15:51Ответ № 6
Все таки, а нельзя прямым запросом к базе получить данные о том кто блокировал и откуда?
E_Migachev
26.10.2010 16:01Ответ № 7
(6) ОписаниеОшибки() в Исключении содержит все эти данные, возьми от туда
E_Migachev
26.10.2010 16:05Ответ № 8
+ (6) для обработки ОписаниеОшибки() возьми Функция удаляет лишнее из сообщения полученного из ОписаниеОшибки(), оставляя только суть проблемы!
mov68
26.10.2010 16:14Ответ № 9
Если из документа, то можно взять из ОписанияОшибки, а если хочется отчетом?
E_Migachev
26.10.2010 17:31Ответ № 10
А отчетом выбирай документы и пробуй так же заблокировать()!
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.