Случалось ли вам для того что бы отключить всех пользователей от базы 1С подолгу обзванивать всех менеджеров, операторов, бухгалтеров и др. персонал. Что бы облегчить жизнь Вам и себе я написал обработку которая позволяет отключать пользователей с запросом в не зависимости от типа используемой базы данных (файл/сервер).
Кратко о возможностях обработки:

Что нужно сделать что бы обработка заработала:
Upd Если у Вас возникло сообщение

Кратко о возможностях обработки:
- отображение текущих пользователей;
- выбор пользователей которых необходимо отключить;
- запрет подключения после выхода пользователя из базы 1С:Предприятия;
- установка/отключение монопольного режима;
- «Быстрое отключение» пользователей;
- Настройки времени ожидания до выключения и времени запрета подключения;
- Корректировка текста предупреждения;
- Выбор пользователя который будет иметь доступ после запрета подключения;
- Обработка не зависит от используемой конфигурации.
Что нужно сделать что бы обработка заработала:
- Создать регистр сведений: доОтключениеПользователей - непериодический и независимый.
Измерения и ресурсы:- Пользователь – СправочникСсылка.Пользователи, Ведущее, Основной отбор;
- Отключить – Булево;
- ЗапретПодключения – Булево;
- БыстроеОтключение – Булево;
- СостояниеОтключения – Строка, длина 25 символов;
- Сообщение – Строка, длина 300 символов;
- ДатаВремяПуска – Дата, дата и время;
- ОтключениеМинут – Число, Длина: 2, Точность: 0;
- ПаузаДоОтключения – Число, Длина: 1, Точность: 0.
- Пользователь – СправочникСсылка.Пользователи, Ведущее, Основной отбор;
- Добавить общий модуль: доОтключениеПользователей - глобальный.
// Процедура контроля возможности подключения.
//
Процедура СтартПроверкиОтключения(Отказ) Экспорт
Пользователь = УправлениеПользователями.ОпределитьТекущегоПользователя();
Зп = Новый Запрос;
Зп.УстановитьПараметр("Пользователь",Пользователь);
Зп.Текст = "ВЫБРАТЬ
| доОтключениеПользователей.Пользователь,
| доОтключениеПользователей.ЗапретПодключения,
| доОтключениеПользователей.ДатаВремяПуска,
| доОтключениеПользователей.ОтключениеМинут,
| доОтключениеПользователей.ПаузаДоОтключения
|ИЗ
| РегистрСведений.доОтключениеПользователей КАК доОтключениеПользователей
|ГДЕ
| доОтключениеПользователей.Пользователь = &Пользователь";
РезультатЗп = Зп.Выполнить().Выбрать();
Если РезультатЗп.Следующий() Тогда
Если РезультатЗп.ЗапретПодключения Тогда
НеПодключать = Ложь;
// Расчет времени не подключения
ТекДата = ТекущаяДата();
СтартДата = РезультатЗп.ДатаВремяПуска;
ВремяПаузы = РезультатЗп.ОтключениеМинут * 60 + РезультатЗп.ПаузаДоОтключения * 15;
ДельтаПаузы = ТекДата - СтартДата;
Если ВремяПаузы > ДельтаПаузы Тогда
НеПодключать = Истина;
КонецЕсли;
// Конец Расчета времени не подключения
Если НеПодключать Тогда
#Если Клиент Тогда
Предупреждение("Подключение запрещено. Ведутся сервисные работы.", 5, "Подключение...");
#КонецЕсли
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
// Проверка и опрос состояния отключения
ПодключитьОбработчикОжидания("ЦиклическийВызов",15);
КонецПроцедуры // СтартПроверкиОтключения()
// Процедура контроля отключения. Конечный автомат состояний отключения.
//
Процедура ЦиклическийВызов() Экспорт
ОтклПользователей = РегистрыСведений.доОтключениеПользователей;
Отбор = Новый Структура("Пользователь");
Отбор.Пользователь = УправлениеПользователями.ОпределитьТекущегоПользователя();
ВыборкаРегистра = ОтклПользователей.Выбрать(Отбор);
Пока ВыборкаРегистра.Следующий() Цикл
Запись = ВыборкаРегистра.ПолучитьМенеджерЗаписи();
Запись.Прочитать();
СостояниеОткл = СокрЛП(Запись.СостояниеОтключения);
ВремяОткл = Запись.ПаузаДоОтключения;
Если СостояниеОткл = "Предупреждение" Тогда
СостОткл = "Ожидание";
Запись.СостояниеОтключения = СостОткл;
Запись.ПаузаДоОтключения = ВремяОткл*4;
Запись.Записать();
#Если Клиент Тогда
Сигнал();
Сигнал();
Сигнал();
Предупреждение(Запись.Сообщение,15,"Предупреждение");
#КонецЕсли
ИначеЕсли СостояниеОткл = "Ожидание" Тогда
Время = ВремяОткл;
Время = Время - 1;
Если Время = 0 Тогда
СостОткл = "Предупреждение +";
Иначе
СостОткл = "Ожидание";
КонецЕсли;
Запись.СостояниеОтключения = СостОткл;
Запись.ПаузаДоОтключения = Время;
Запись.Записать();
ИначеЕсли СостояниеОткл = "Предупреждение +" Тогда
СостОткл = "Мини Ожидание";
Запись.СостояниеОтключения = СостОткл;
Запись.ПаузаДоОтключения = 2;
Запись.Записать();
#Если Клиент Тогда
Сигнал();
Сигнал();
Сигнал();
Предупреждение(Запись.Сообщение,15,"Предупреждение!");
#КонецЕсли
ИначеЕсли СостояниеОткл = "Мини Ожидание" Тогда
Время = ВремяОткл;
Время = Время - 1;
Если Время = 0 Тогда
СостОткл = "Отключение с запросом";
Иначе
СостОткл = "Мини Ожидание";
КонецЕсли;
Запись.СостояниеОтключения = СостОткл;
Запись.ПаузаДоОтключения = Время;
Запись.Записать();
ИначеЕсли СостояниеОткл = "Отключение с запросом" Тогда
СостОткл = "Сеанс выключен";
Запись.СостояниеОтключения = СостОткл;
Запись.Записать();
#Если Клиент Тогда
Сигнал();
Сигнал();
Сигнал();
Предупреждение("Извините но вы не предприняли никаких действий.",5,"Отключение.");
ЗавершитьРаботуСистемы();
#КонецЕсли
ИначеЕсли СостояниеОткл = "Сеанс выключен" Тогда
СтопПроверкиОтключения();
#Если Клиент Тогда
Сигнал();
Сигнал();
Сигнал();
Предупреждение("Тушим...",5,"Отключение.");
ПрекратитьРаботуСистемы();
#КонецЕсли
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ЦиклическийВызов()
// Процедура контроля отключения.
//
Процедура СтопПроверкиОтключения() Экспорт
ОтклПользователей = РегистрыСведений.доОтключениеПользователей;
Отбор = Новый Структура("Пользователь");
Отбор.Пользователь = УправлениеПользователями.ОпределитьТекущегоПользователя();
ВыборкаРегистра = ОтклПользователей.Выбрать(Отбор);
Пока ВыборкаРегистра.Следующий() Цикл
Запись = ВыборкаРегистра.ПолучитьМенеджерЗаписи();
Запись.Отключить = Ложь;
Запись.СостояниеОтключения = "Неактивен";
Запись.Записать();
КонецЦикла;
КонецПроцедуры // СтопПроверкиОтключения()
- Добавить в модуль приложения в предопределенные процедуры код:
Процедура ПередНачаломРаботыСистемы(Отказ)
// ... типовые операции
// Типовый вызовы отключения пользователей
СтартПроверкиОтключения(Отказ);
КонецПроцедуры
Процедура ПриЗавершенииРаботыСистемы()
// ... типовые операции
// Типовый вызовы отключения пользователей
СтопПроверкиОтключения();
КонецПроцедуры
- Интегрировать обработку из файла по ссылке:
Upd Если у Вас возникло сообщение
{Форма.СервисФорма(139)}: Ошибка при вызове метода контекста (Выбрать): Недопустимое значение параметра (параметр номер '1')то необходимо проверить настройки измерения у регистра сведений доОтключениеПользователей
ВыборкаРегистра = ОтклПользователей.Выбрать(Отбор);
по причине:
Недопустимое значение параметра (параметр номер '1')

3.Добавить в модуль приложения в предопределенные процедуры код:
ОтветитьУдалитьподскажи пожалуйста где найти модуль приложение?
Открываешь дерево конфигурации - Правой кнопкой на названии конфигурации - Открыть модуль приложения(8.1)/Открыть модуль обычного приложения(8.2)
ОтветитьУдалитьУ меня при обращении к внешней обработке доотключеняпользователей выдает ошибку:
ОтветитьУдалить{Форма.СервисФорма.Форма(139)}: Ошибка при вызове метода контекста (Выбрать)
ВыборкаРегистра = ОтклПользователей.Выбрать(Отбор);
по причине:
Недопустимое значение параметра (параметр номер '1')
icq: 287384457
ОтветитьУдалитьmail: kojin.nova@gmail.com