Выгонялка пользователей с визуальным таймером - 1С-ИнтеГрация

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



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

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

Перво-наперво необходимо подключить внешнюю компоненту(скачать последнюю версию можно на сайте (http://dev.1tsm.ru/project/110) автора).
Далее копируем MiracleV8.dll в каталог программы 1С
Теперь вносим необходимые изменения в конфигурацию:
Если у вас нет, то необходимо создать новый модуль в «Общие модули». Назовем его «СвойМодуль» там будут располагаться все новые процедуры и функции, дабы поменьше типовую конфигурацию изменять.
Добавим туда новую функцию:

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

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

//Kavar
Перем Экспорт;
///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 

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

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

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

  Увеличить


Источник



Назад в раздел