Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Класс "ВыгонялкаПользователей" (число прочтений - 9112 )
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Класс "ВыгонялкаПользователей"
28. Февраля 2014 :: 18:12
Печать  
Небольшой класс для принудительного завершения сеансов пользователей 1С 7.7.

Для работы класса необходмы внешние компоненты (скопировать желательно последние версии ВК в каталог ИБ/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» - необходимо скорректировать вышеприведенный код.

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

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


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

     2. У всех пользователей (за исключением указанных в фильтре) появяется информационное окно, на котором отображается таймер до завершения сеанса 1С и сообщение пользователю. Окно появляется в любом случае, даже при наличии модальных окон - с большой вероятностью пользователь увидит его. Окно можно закрыть только через меню "Окна".
     3. При заверешнии отпущенного пользователю на сохранение данных времени, 1С закрывается БЕЗ СОХРАНЕНИЯ всех несохраненных данных. Если при этом активно системное модальное окно (к примеру "О программе"), 1С не закроется и будет ждать, пока пользователь не закроет его (модальное окно) вручную, после чего 1С закроется. Чтобы исключить такую ситуацию - существует возможность указать задержку (по умолчанию 20 секунд после неудачного "обычного" завершения сеанса 1С) для "жесткого" закрытия 1С (завершение текущего процесса 1С). При этом информационное окно изменит свое содержимое и начнется отсчет таймера для "жесткого" закрытия.
     4. Пока в каталоге ИБ существует файл "stop1с.txt" - никто, кроме пользователей из фильтра, не сможет зайти в БД (им будет выведено информационное сообщение о запрете входа в 1С).
     
     Кроме того, при простое системы в течении времени, заданного в свойстве "ВремяПростояДоЗавершения" (по умолчанию 2 часа) сеанс 1С будет так же завершен (кроме пользователей из фильтра "ФильтрПользователейПростоя").
     
     При удалении/переименовании файла "stop1с.txt" из каталога ИБ у пользователей, которые еще не успели выйти, информационное окно закроется и пользователи продолжат работать в обычном режиме.
     
     Для удобства администрирования можно написать отчет, который будет управлять созданием/удалением файла "stop1с.txt" в каталоге ИБ. Для программного управления классом в процессе работы необходимо переменную, в которой хранится экземляр класса (в нашем примере это переменная "Выгонялка") объявить как экспортную переменную в шапке ГМ ("Перем Выгонялка Экспорт;").

http://infostart.ru/public/262361/
  

_______________________003.zip ( 21 KB | Загрузки )
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Класс "ВыгонялкаПользователей"
Ответ #1 - 06. Марта 2014 :: 08:17
Печать  
Спасибо. Хорошая штука.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Класс "ВыгонялкаПользователей"
Ответ #2 - 06. Марта 2014 :: 09:23
Печать  
более жесткий вариант - убить процесс удаленно
  

kill.zip ( 79 KB | Загрузки )

1&&2&&3
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Класс "ВыгонялкаПользователей"
Ответ #3 - 06. Марта 2014 :: 10:13
Печать  
trad писал(а) 06. Марта 2014 :: 09:23:
более жесткий вариант - убить процесс удаленно

Насколько помню - для этого надо знать админский логин/пароль на машине юзера + этот килл надо откуда то запускать (из по того же админа на серваке например). А тут все попроще, но с достаточной эффективностью, т.к. килл запускает сама 1Ска на машине юзера.

А кроме того, имхо, слишком жестоко пользователя рубить без предупреждения. Тут хоть инфа появится, за какое время надо из 1Ски выйти.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Класс "ВыгонялкаПользователей"
Ответ #4 - 06. Марта 2014 :: 12:22
Печать  
естественно нужны админские права
и моя версия kill не вопреки твоему, а еще одна зарисовка на тему
Улыбка
  

1&&2&&3
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Класс "ВыгонялкаПользователей"
Ответ #5 - 06. Марта 2014 :: 13:33
Печать  
Если убить процесс и не дать сохранится пользователям это плохой вариант.
Меня пользователи найдут и сделают со мной что-то не хорошее.
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Класс "ВыгонялкаПользователей"
Ответ #6 - 07. Марта 2014 :: 05:57
Печать  
barbitura писал(а) 06. Марта 2014 :: 13:33:
Если убить процесс и не дать сохранится пользователям это плохой вариант.
Меня пользователи найдут и сделают со мной что-то не хорошее.


Именно поэтому данная разработка выгоняет в 2 этапа:
1. Завершение средствами 1С (показывает время таймера)
2. Завершение процесса 1С (жесткое) только в случае неудачи стандартного завершения (открыто модальное окно) - но в этом случае показывается свое окно с отдельным таймером.

Примечание:
1. Для DBF версий жесткое завершение использовать с осознанием возможных проблем.
2. "Жесткое" завершение процесса можно отключить, установив "ВремяДоЖесткогоЗавершения = 0"
  
Наверх
 
IP записан
 
darren63
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 29. Апреля 2014
Re: Класс "ВыгонялкаПользователей"
Ответ #7 - 29. Апреля 2014 :: 10:12
Печать  
Подскажите пожалуйста. Файлы, которые требовались, скачал и кинул в корень базы. Код скопировал и вставил в ГлобальныйМодуль. При запуске 1С вылетает вот эта ошибка

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

1С запускался от имени Администратора и в базе учетная записи была Администратор. 1С Предприятие 7.7, конфигурация "Торговля и склад" 9.2
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Класс "ВыгонялкаПользователей"
Ответ #8 - 29. Апреля 2014 :: 10:29
Печать  
Все необходимые ВК (1С++, FormEx) в наличии?
Проверьте как прописан класс в defcls.prm
  
Наверх
 
IP записан
 
darren63
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 29. Апреля 2014
Re: Класс "ВыгонялкаПользователей"
Ответ #9 - 29. Апреля 2014 :: 10:30
Печать  
1CPP.dll версия 3.2.3.20
FormEX.dll версия 2.0.2.0

Прошу прощения - что такое defcls.prm и где его искать?
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Класс "ВыгонялкаПользователей"
Ответ #10 - 29. Апреля 2014 :: 10:43
Печать  
FormEX.dll есть версия 2.0.5.108

defcls.prm - это файл с описанием классов для 1С++, для данного класса файл есть в поставке

Для ознакомления почитайте http://www.script-coding.com/1cpp.html
  
Наверх
 
IP записан
 
darren63
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 29. Апреля 2014
Re: Класс "ВыгонялкаПользователей"
Ответ #11 - 29. Апреля 2014 :: 11:56
Печать  
На просторах интернета нашел FormEx только 2.0.5.69
В defcls.prm прописал

Код
Выбрать все
класс ВыгонялкаПользователей = ВыгонялкаПользователей.ert{};
класс ТаймерЗавершенияСеанса = ТаймерЗавершенияСеанса.ert{}; 



Эти файлы положил в корне базы

Теперь другая ошибка

Неудачная попытка создания объекта (Таймер)
Возможно Вы используете старую версию "FormEx.dll"
ВыгонялкаПользователей::Запустить() : Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)
Если ИнтервалТаймера > 0 Тогда
{D:\1comp\ВыгонялкаПользователей.ert(286) }

Если Выгонялка.Запустить() = 0 Тогда
{Глобальный модуль(14389)}: ВыгонялкаПользователей::Запустить() : Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)
Если ИнтервалТаймера > 0 Тогда
{D:\1comp\ВыгонялкаПользователей.ert(286) }
  
Наверх
 
IP записан
 
PitKZL
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 12. Февраля 2010
Пол: Мужской
Re: Класс "ВыгонялкаПользователей"
Ответ #12 - 29. Апреля 2014 :: 12:31
Печать  
вместо Если Выгонялка.Запустить() = 0 Тогда

Если Число(Выгонялка.Запустить()) = 0 Тогда

но скорее всего класс не подключен
  
Наверх
 
IP записан
 
zar
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 82
Местоположение: Киров
Зарегистрирован: 17. Августа 2009
Пол: Мужской
Re: Класс "ВыгонялкаПользователей"
Ответ #13 - 29. Апреля 2014 :: 12:39
Печать  
В defcls.prm должно быть только:
Код
Выбрать все
класс ВыгонялкаПользователей = Классы\ВыгонялкаПользователей\ВыгонялкаПользователей.ert
{
}; 


В данном случае путь "Классы\ВыгонялкаПользователей" - может отличаться - установите свой (относительно каталога ИБ)

ТаймерЗавершенияСеанса.ert - это отдельная форма визуального таймера (не класс), которая вызывается из класса.

Цитата:
Неудачная попытка создания объекта (Таймер)

Скорее всего в Формексе нет данного объекта (не помню точно с какой версии он появился). Попробуйте версию 2.0.5.109 (http://www.1cpp.ru/forumfiles/Attachments/FormEx_001.zip)
  
Наверх
 
IP записан
 
darren63
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 29. Апреля 2014
Re: Класс "ВыгонялкаПользователей"
Ответ #14 - 29. Апреля 2014 :: 13:04
Печать  
zar писал(а) 29. Апреля 2014 :: 12:39:
В defcls.prm должно быть только:
Код
Выбрать все
класс ВыгонялкаПользователей = Классы\ВыгонялкаПользователей\ВыгонялкаПользователей.ert
{
}; 


В данном случае путь "Классы\ВыгонялкаПользователей" - может отличаться - установите свой (относительно каталога ИБ)

ТаймерЗавершенияСеанса.ert - это отдельная форма визуального таймера (не класс), которая вызывается из класса.

Цитата:
Неудачная попытка создания объекта (Таймер)

Скорее всего в Формексе нет данного объекта (не помню точно с какой версии он появился). Попробуйте версию 2.0.5.109 (http://www.1cpp.ru/forumfiles/Attachments/FormEx_001.zip)


Помогло обновление до версии 2.0.5.109. Большое спасибо.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать