Выгонялка пользователей с визуальным таймером


Выгонялок написано довольно много, но все же решил сделать свою, так как остальные не подходили для моих требований по тем или иным причинам.
В данной реализации используется внешняя компонента MiracleV8. ВК необходима для вывода визуального  таймера.

К достоинствам данной реализации «выгонялки» стоит отнести:
- таймер обратного отчета предупреждающий о скором закрытии программы;
- работа как в файловом, так и в клиент-серверном варианте;
- выгоняет всех «без вопросов»(модальные окна не помеха);
- позволяет не только выгнать пользователей, но и заблокировать вход в систему;
- позволяет НЕ выгонять определенных пользователей (с определенной ролью, например), или же исключение можно сделать для одного конкретного пользователя;
Недостаток, пожалуй, только один – необходимо внесение небольших изменений в конфигурацию.

Приступим к реализации.

Перво-наперво необходимо подключить внешнюю компоненту(скачать последнюю версию можно на сайте (http://dev.1tsm.ru/project/110) автора).

Далее копируем  MiracleV8.dll в каталог программы 1С

Теперь вносим необходимые изменения в конфигурацию:

Если у вас нет, то необходимо создать новый модуль в «Общие модули». Назовем его СвойМодуль, там будут располагаться все новые процедуры и функции, дабы поменьше типовую конфигурацию изменять.

Добавим туда новую функцию:


Функция ЗагрузитьMiracleV8() Экспорт
   
Miracle=Неопределено;
   
ФайлВК=Новый Файл(КаталогПрограммы()+"MiracleV8.dll");
    Если НЕ
ФайлВК.Существует() Тогда
       
Miracle=Неопределено;
    Иначе
        Попытка
           
ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"MiracleV8.dll");
           
Miracle=ПолучитьCOMОбъект("","AddIn.MiracleClass");
        Исключение
           
Miracle=Неопределено;
        КонецПопытки;
    КонецЕсли;
    Возврат
Miracle;
КонецФункции
//ЗагрузитьMiracleV8

 

 После этого в Модуль обычного приложения  в разделе переменных опишем новую глобальную переменную:


//Kavar
Перем L Экспорт;
///Kavar

 

Переменная необходима для обращения к методам внешней компоненты.

А  процедуру ПриНачалеРаботыСичтемы() этого же модуля добавим следующий код:


//Kavar
   
L=СвойМодуль.ЗагрузитьMiracleV8();
    Если
L=Неопределено Тогда
       
Сообщить("Не удалось подключить компоненту  MiracleV8",СтатусСообщения.Информация);
    Иначе
       
СвойМодуль.ПриНачалеРаботыСистемыKavar();
    КонецЕсли;
///Kavar

При успешной регистрации ВК вызывается процедура ПриНачалеРаботыСистемыKavar(), о которой мы поговорим ниже.

Для регистрации ВК необходимо первый раз запустить 1С:Предприятие с правами администратора.

(более подробно по подключению и использованию внешней компоненты можно почитать в описании, которое входит в поставку).

Компоненту успешно подключили, теперь перейдем к основной задаче нашей статьи.

 

Создадим в конфигурации новую константу ЗавершениеРаботы

Типа Булево. Админам даем полные права, а остальным чтение и просмотр.

Это и будет главный инструмент по управлению выгонялкой.

Установка константы в Истина инициирует «выгонялку», а так же блокирует базу для входа новых пользователей.

Далее нужено создать обработчик ожидания, который будет проверять состояние константы.

В Глобальный модуль добавляем новый обработчик:


//Kavar
#Если Клиент Тогда
Процедура ПроверитьНеобходимостьЗавершенияРаботы() Экспорт
    
//Если ВРЕГ(ИмяПользователя())="АДМИНИСТРАТОР" Тогда //Тут можноконкретного пользователя прописать, на которого не будет действовать выгонялка.
    
Если РольДоступна("ПолныеПрава") Тогда // либо всех пользователей с определенной ролью
         
Возврат;
     КонецЕсли;
      Если
Константы.ЗавершитьРаботу.Получить()=Истина Тогда
         
СвойМодуль.ОбработатьОбработчикОжидания("ЗАВЕРШЕНИЕ");
     КонецЕсли;
КонецПроцедуры
//ПроверитьНеобходимостьЗавершенияРаботы()
#КонецЕсли
///Kavar

Теперь возвращаемя в СвойМодуль и добавляем туда две процедуры:


Процедура ОбработатьОбработчикОжидания(ВидОбработчика) Экспорт
     Если
ВидОбработчика="ЗАВЕРШЕНИЕ" Тогда
         
ОтключитьОбработчикОжидания("ПроверитьНеобходимостьЗавершенияРаботы");
         
L.CreateBackTimerWnd(180,"Сохраните открытые документы! Программа будет закрыта через, сек: ");
     КонецЕсли;
КонецПроцедуры
//ОбработатьОбработчикОжидания()

Метод CreateBackTimerWnd запускает визуальный таймер, первый параметр которого время обратного отчета, в секундах. В данном примере 180 (3 минуты). А второй сообщение, которое выводится пользователям.

Вторая процедура:

Процедура ПриНачалеРаботыСистемыKavar() Экспорт
//тут проверяем закрыта ли база.
     //Если ВРЕГ(ИмяПользователя())="АДМИНИСТРАТОР" Тогда
     
Если РольДоступна("ПолныеПрава") Тогда
          Если
Константы.ЗавершитьРаботу.Получить()=Истина Тогда
              
Режим = РежимДиалогаВопрос.ДаНет;
              
Текст = "Система закрыта! Открыть?";
              
Ответ = Вопрос(Текст, Режим, 0);
               Если
Ответ = КодВозвратаДиалога.Да Тогда
                   
Константы.ЗавершитьРаботу.Установить(Ложь);
               КонецЕсли;
          КонецЕсли;
          Возврат;
     КонецЕсли;
//Не пускаем простых пользователей в базу, если закрыта.
    
Если Константы.ЗавершитьРаботу.Получить()=Истина Тогда
         
Предупреждение("Работа с базой запрещена Администратором",5);
         
ЗавершитьРаботуСистемы(Ложь,Ложь);
     КонецЕсли;
    
ПодключитьОбработчикОжидания("ПроверитьНеобходимостьЗавершенияРаботы",60,Ложь);
КонецПроцедуры
//ПриНачалеРаботыСистемыKavar()

А теперь последний штрих: в Модуле обычного приложения, в предопределенную процедуру ОбработкаВнешнегоСобытия() добавляем следующий код(если этой процедуры нет в вашей конфигурации, создаём)


//Kavar
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
   
Источник=ВРЕГ(Источник);
   
Событие=ВРЕГ(Событие);
    Если
Источник="MIRACLEV8" Тогда
        Если
Событие="BACK_TIMER_WINDOW" Тогда
           
ЗавершитьРаботуСистемы(Ложь,Ложь);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
///Kavar

Данный код отлавливает завершение обратного отчета таймера и завершает работу системы.

Теперь осталось только прикрутить механизм по управлению константой. Кому лень – можно скачть готовую обработку. (см. Прикрепленный файл)

Хотелось бы выразить отдельную благодарность автору ВК Abadonnahttp://avprog.ru/profile/1329/ ) за предоставленную компоненту, а также консультации по работе с ней.(там еще много полезных возможностей – читайте описание). 

 

Файлы обработки:

-