#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
Процедура ВыполнитьУстановку() Экспорт
ВыполнитьУстановкуБлокировки(ЗапретитьРаботуПользователей);
КонецПроцедуры
Процедура ОтменитьБлокировку() Экспорт
ВыполнитьУстановкуБлокировки(Ложь);
КонецПроцедуры
Процедура ПолучитьПараметрыБлокировки() Экспорт
Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда
ТекущийРежим = ПолучитьБлокировкуСеансов();
КодДляРазблокировки = ТекущийРежим.КодРазрешения;
Иначе
ТекущийРежим = СоединенияИБ.ПолучитьБлокировкуСеансовОбластиДанных();
КонецЕсли;
ЗапретитьРаботуПользователей = ТекущийРежим.Установлена
И (Не ЗначениеЗаполнено(ТекущийРежим.Конец) Или ТекущаяДатаСеанса() < ТекущийРежим.Конец);
СообщениеДляПользователей = СоединенияИБКлиентСервер.ИзвлечьСообщениеБлокировки(ТекущийРежим.Сообщение);
Если ЗапретитьРаботуПользователей Тогда
НачалоДействияБлокировки = ТекущийРежим.Начало;
ОкончаниеДействияБлокировки = ТекущийРежим.Конец;
Иначе
НачалоДействияБлокировки = НачалоМинуты(ТекущаяДатаСеанса() + 15 * 60);
КонецЕсли;
КонецПроцедуры
Процедура ВыполнитьУстановкуБлокировки(Значение)
Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда
Блокировка = Новый БлокировкаСеансов;
Блокировка.КодРазрешения = КодДляРазблокировки;
Блокировка.Параметр = СерверныеОповещения.КлючСеанса();
Иначе
Блокировка = СоединенияИБ.НовыеПараметрыБлокировкиСоединений();
КонецЕсли;
Блокировка.Начало = НачалоДействияБлокировки;
Блокировка.Конец = ОкончаниеДействияБлокировки;
Блокировка.Сообщение = СоединенияИБ.СформироватьСообщениеБлокировки(СообщениеДляПользователей,
КодДляРазблокировки);
Блокировка.Установлена = Значение;
Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда
УстановитьБлокировкуСеансов(Блокировка);
УстановитьПривилегированныйРежим(Истина);
СоединенияИБ.ОтправитьСерверноеОповещениеОбУстановкеБлокировки();
УстановитьПривилегированныйРежим(Ложь);
Иначе
СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(Блокировка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли