ВыгонялкаПользователей — класс для выгона пользователей из 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

8 Comments

  1. westinka

    оооо, какая хорошая вещь!

    спасибо!

    у нас есть выгонялка, но простая, просто тупо выходите нафиг и все, и принудительное отключение после 3х предупреждений

    а тут таймер, и его видно, гуд гуд 🙂

    Reply
  2. Elected

    Выгонялка = СоздатьОбъект(«ВыгонялкаПользователей»);

    {Глобальный модуль(4086)}: Неудачная попытка создания объекта (ВыгонялкаПользователей)

    Reply
  3. zarius

    (2) Все необходимые ВК (1С++, FormEx) в наличии?

    Проверьте как прописан класс в defcls.prm

    Подобный вопрос уже задавался на http://www.1cpp.ru/forum/YaBB.pl?num=1393611161/7#7

    Посмотрите, возможно ответ найдете там же.

    Reply
  4. Elected

    Спасибо! Был старой версии файл Formex.dll!

    Reply
  5. Nata

    Спасибо огромное!

    Reply
  6. Vortigaunt

    Хочу внедрить у себя. Интересует вопрос. Будет ли корректно работать жесткое завершение процесса 1с на терминальном сервере. Найдет ли эта программа нужный процесс 1сv7.exe из списка запущенных процессов? А также, если пользователь запустил несколько разных баз у себя, а надо выгнать только из одной, а остальные не трогать?

    Reply
  7. zarius

    (6) Закроется именно тот процесс 1С, в котором срабатывает «жесткое завершение».

    В терминале работает корректно, хотя возможно могут быть проблемы с правами на запуск скрипта — но это уже зависит от настроек безопасности.

    Reply
  8. zarius

    (6) Однако обратите внимание на рекомендации по НЕ использованию «жесткого» завершения на DBF версиях 1С.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *