IE2017

ВыгонялкаПользователей - класс для выгона пользователей из 1С

Администрирование - Системное

Небольшой класс 1С++ для принудительного завершения сеансов пользователей 1С 7.7.

Предыстория

В свое время искал на простора сети что то более менее адекватное. То что было в общем доступе не подошло по тем или иным причинам.

Сейчас решил выложить на обозрение вытяжку как это реализованно у меня в виде класса 1С++. Получилось достаточно удобно для встраивания в любую конфигурацию без лишних заморочек. Возможно баян, но, ИМХО, может кому-нибуть пригодиться.

Требования

Для работы класса необходмы внешние компоненты (скопировать желательно последние версии ВК в каталог ИБ/1С):
1. 1С++
2. FormEx (Автор - Алексей Фёдоров aka АЛьФ)

Использование

Класс может применять в любой конфигурации 1С 7.7.
Для "встраивания" в конфигурацию достаточно в ГлобальныйМодуль в процедуру "ПриНачалеРаботыСистемы()" добавить строки:

     //начало изменения
    //Загрузка 1С++
   
Если ЗагрузитьВнешнююКомпоненту("1CPP.dll")=0 Тогда
       
Сообщить("Не удается загрузить внешнюю компоненту ""1CPP.dll""");
    Иначе
       
//Загрузка FormEx
       
Если ЗагрузитьВнешнююКомпоненту("FormEx.dll")=0 Тогда
           
Сообщить("Не удается загрузить внешнюю компоненту ""FormEx.dll""");
        Иначе
           
Выгонялка = СоздатьОбъект("ВыгонялкаПользователей");
           
//здесь можно настроить свойства класса
            //Выгонялка.ВремяДоЖесткогоЗавершения = 0; //0 - не использовать жесткое завершение 1С
            //Выгонялка.ФильтрПользователей = "АДМИНИСТРАТОР"; //не выгонять администратора
           
Если Выгонялка.Запустить() = 0 Тогда
               
СтатусВозврата(0);
                Возврат;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
   
//конец изменения

 Если в конфигурации уже используется 1С++ или FormEx - необходимо скорректировать вышеприведенный код.

НЕ РЕКОМЕНДУЕТСЯ использовать "жесткое" завершение 1С на DBF версии БД, т.к. такое завершение может повлечь за собой повреждение файлов данных БД.

Свойства

 

У класса есть свойства, которые доступны пользователю (желательно изменять из до метода "Запустить()"):

  •     ИнтервалТаймера - интервал таймера в мсек по умолчанию (5000мсек=5сек)
  •     ВремяПростояДоЗавершения - время простоя системы в сек, после которого будет отключен сеанс 1С (2часа) (если "0" - не используется)
  •     ВремяДоЗавершенияПоУмолчанию - время до завершения сеанса 1С в сек по умолчанию (60сек)
  •     ВремяДоЗавершения - текущее значение счетчика времени до завершения сеанса 1С (60сек)
  •     ВремяДоЖесткогоЗавершенияПоУмолчанию - время до жесткого завершения процесса 1С в сек по умолчанию (20сек)
  •     ВремяДоЖесткогоЗавершения - время до жесткого завершения процесса 1С в сек (если "обычное" завершение не срабатывает из-за модальных окон) (20сек) (если "0" - не используется)
  •     СообщениеПользователям - сообщение, которое выдается пользователям при завершении сеанса 1С
  •     ФильтрПользователей - фильтр по тем пользователям, которых НЕ надо выгонять из 1С (через ";")
  •     ФильтрПользователейПростоя - фильтр по тем пользователям, которых НЕ надо выгонять из 1С по простою (через ";")
  •     ИмяБазы - имя экземпляра 1С, чтобы было ясно о какой БД идет речь в сообщениях пользователям (имя БД из реестра)

Принцип действия

    1. В каталог ИБ копируем/переименовываем файл "stop1с.txt" со структурой:

        ВРЕМЯ ОЖИДАНИЯ: {время до завершения сеанса}
       
СООБЩЕНИЕ: {сообщение, которое будет выведено пользователям}
       
ИСКЛЮЧЕНИЕ ПОЛЬЗОВАТЕЛЕЙ: {фильтр по пользователям, которых НЕ надо выгонять из 1С}

    2. У всех пользователей (за исключением указанных в фильтре) появляется информационное окно (рис.1), на котором отображается таймер до завершения сеанса 1С и сообщение пользователю. Окно появляется в любом случае, даже при наличии модальных окон - с большой вероятностью пользователь увидит его. Окно можно закрыть только через меню "Окна".

Инф.окно


    3. При заверешнии отпущенного пользователю на сохранение данных времени, 1С закрывается БЕЗ СОХРАНЕНИЯ всех несохраненных данных. Если при этом активно системное модальное окно (к примеру "О программе"), 1С не закроется и будет ждать, пока пользователь не закроет его (модальное окно) вручную, после чего 1С закроется. Чтобы исключить такую ситуацию - существует возможность указать задержку (по умолчанию 20 секунд после неудачного "обычного" завершения сеанса 1С) для "жесткого" закрытия 1С (завершение текущего процесса 1С). При этом информационное окно изменит свое содержимое и начнется отсчет таймера для "жесткого" закрытия (рис.2).

Инф.окно
    4. Пока в каталоге ИБ существует файл "stop1с.txt" - никто, кроме пользователей из фильтра, не сможет зайти в БД (им будет выведено информационное сообщение о запрете входа в 1С (рис.3)).
Запрет на вход в 1С    

    Кроме того, при простое системы в течении времени, заданного в свойстве "ВремяПростояДоЗавершения" (по умолчанию 2 часа) сеанс 1С будет так же завершен (кроме пользователей из фильтра "ФильтрПользователейПростоя").

Пояснения

При удалении/переименовании файла "stop1с.txt" из каталога ИБ у пользователей, которые еще не успели выйти, информационное окно закроется и пользователи продолжат работать в обычном режиме.
    
Для удобства администрирования можно написать отчет, который будет управлять созданием/удалением файла "stop1с.txt" в каталоге ИБ.

 

 Тема на 1cpp.ru

Скачать файлы

Наименование Файл Версия Размер
Архив_1_0_0_0
.zip 21,17Kb
28.02.14
45
.zip 1.0.0.0 21,17Kb 45 Скачать

См. также

Комментарии
1. Инна (westinka) 17.03.14 00:03 Сейчас в теме
оооо, какая хорошая вещь!
спасибо!
у нас есть выгонялка, но простая, просто тупо выходите нафиг и все, и принудительное отключение после 3х предупреждений
а тут таймер, и его видно, гуд гуд :)
2. Стервятник (Elected) 4 30.04.14 15:40 Сейчас в теме
Выгонялка = СоздатьОбъект("ВыгонялкаПользователей");
{Глобальный модуль(4086)}: Неудачная попытка создания объекта (ВыгонялкаПользователей)
3. Alexey (zarius) 145 05.05.14 14:25 Сейчас в теме
(2) Все необходимые ВК (1С++, FormEx) в наличии?
Проверьте как прописан класс в defcls.prm

Подобный вопрос уже задавался на http://www.1cpp.ru/forum/YaBB.pl?num=1393611161/7#7
Посмотрите, возможно ответ найдете там же.
4. Стервятник (Elected) 4 05.05.14 14:56 Сейчас в теме
Спасибо! Был старой версии файл Formex.dll!
5. Nata (Nata) 7 15.07.14 09:52 Сейчас в теме
6. Дмитрий Касминюк (Vortigaunt) 11 15.04.16 10:31 Сейчас в теме
Хочу внедрить у себя. Интересует вопрос. Будет ли корректно работать жесткое завершение процесса 1с на терминальном сервере. Найдет ли эта программа нужный процесс 1сv7.exe из списка запущенных процессов? А также, если пользователь запустил несколько разных баз у себя, а надо выгнать только из одной, а остальные не трогать?
7. Alexey (zarius) 145 15.04.16 14:04 Сейчас в теме
(6) Закроется именно тот процесс 1С, в котором срабатывает "жесткое завершение".
В терминале работает корректно, хотя возможно могут быть проблемы с правами на запуск скрипта - но это уже зависит от настроек безопасности.
Vortigaunt; +1 Ответить
8. Alexey (zarius) 145 15.04.16 14:09 Сейчас в теме
(6) Однако обратите внимание на рекомендации по НЕ использованию "жесткого" завершения на DBF версиях 1С.
Оставьте свое сообщение