Приступим к реализации.
Перво-наперво необходимо подключить внешнюю компоненту(скачать последнюю версию можно на сайте (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
Данный код отлавливает завершение обратного отчета таймера и завершает работу системы.
Теперь осталось только прикрутить механизм по управлению константой. Кому лень – можно скачть готовую обработку. (см. Прикрепленный файл)
Хотелось бы выразить отдельную благодарность автору ВК Abadonna( //infostart.ru/profile/1329/ ) за предоставленную компоненту, а также консультации по работе с ней.(там еще много полезных возможностей – читайте описание).