gifts2017

Легкие способы отключения пользователей

Опубликовал Айбек К (ak0710) в раздел Администрирование - Системное

Много чего написано по отключению пользователей в базах 1С 8, Я хочу в этой статье изложить те способы, которые использую на производстве, и те которые не отнимают много времени в настройке

 

1. Отключение пользователей в файловой версии 1С 8.

Для отключение пользователей в файловой версии Я создал *.bat файл с одной строчкой

net session /delete /y

Он отключает все открытые общие файлы на компьютере на котором лежит база.
Далее создал задание (Планировщик заданий Windows), который бы запускал этот файл в назначенное время.
Вы спросите а как же те сеансы которые открыты на компьютере , Я их тоже устранил создав новый *.bat файл со строкой

taskkill /IM 1cv8.exe /f
правда он отключает все запущенные 1С на текущим компьютере , но для меня это не было так страшно так как архивация производилась в ночное время и уже никто не работал в базе, этот батник тоже можно добавить в Планировщик Windows.

Так же по taskkill можете почитать в других источниках , есть возможности отключать процессы в отдельных сеансах

2. Отключение пользователей в клиент-серверной базе.

Так же как и в случае файловой базы Я использовал *.bat файлы.
Создал два *.bat файла , первый отключает сервер 1С предприятие, второй его включает очень просто .

Содержание первого файла :

net stop "1C:Enterprise 8.2 Server Agent"

Содержание второго файла :

net start "1C:Enterprise 8.2 Server Agent"


Добавил два новых задания в планировщик Windows , с разницой во времени 15 минут для того чтобы все зависшие пользователи смогли отключиться, эти действия анологичны Запуск сервера 1С Предприятие и Остановка сервера 1С Предприятие

3. Программный способ отключения пользователей в 1С

Стояла задача выполнять архивацию ежеденевно в 22:30.
В этом способе Я не стал заморачиваться, создал новую роль "НеЗакрывать1С".
Создал новую процедуру в модуле обычного приложения :

Процедура ЗавершениеРаботыПользователей() Экспорт

      Если НЕ РольДоступна("НеЗакрывать1С") Тогда

             Если Час(моп_ВыполнениеОперацийНаСервере.ТекущаяДатаНаСервере()) >= 22 Тогда // получаю врмемя на сервере    

                     ПрекратитьРаботуСистемы(Ложь);

             КонецЕсли;

      КонецЕсли;

КонецПроцедуры

 

Добавил в процедуру ПриНачалеРаботыСистемы() тоже самое и подключил обработчик ожидания :

 

Если НЕ РольДоступна("НеЗакрывать1С") Тогда

    Если Час(моп_ВыполнениеОперацийНаСервере.ТекущаяДатаНаСервере()) >= 22 Тогда // получаю врмемя на сервере

        ПрекратитьРаботуСистемы(Ложь);

    КонецЕсли;

КонецЕсли; 

 

 ПодключитьОбработчикОжидания("ЗавершениеРаботыПользователей", "600");

 

Функция текущая дата на сервере выглядит так :

 

Функция ТекущаяДатаНаСервере() Экспорт

    Возврат ТекущаяДата();

КонецФункции

 

Таким образом мы получаем дату на сервере , в случае если в свойствах общего модуля установлена галочка "Сервер", я поставил только её.

Получается текущий код отрубает пользователей на два часа , но обычно после полночи уже никто не заходит в базу.

Если кому-то помогла эта статья буду очень рад.


См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

0. Айбек К (ak0710) 25.04.12 19:06
Много чего написано по отключению пользователей в базах 1С 8, Я хочу в этой статье изложить те способы, которые использую на производстве, и те которые не отнимают много времени в настройке

Перейти к публикации

1. Андрей Ст (sisdrou) 25.04.12 19:06
Спасибо за советы, помогут в некоторых моментах. Но лучше просто настроить параллельную архивацию при работающих пользователях.
2. Виталий Барилко (Diversus) 25.04.12 21:29
А как же отключение через консоль кластера в клиент-серверном варианте и запуск конфигурации с ключем /UC ?
3. Серега Путин (Confucius) 26.04.12 05:55
В клиент-серверном варианте не всегда возможно отключить агента..ведь на кластере могут и другие базы крутиться которые не нужно отключать. Чем типовой не устраивает Блокировка базы?
Den_D; hulio; +2 Ответить 1
4. hamlo_666 (ak0710) 26.04.12 12:58
Да конечно крутятся другие базы , но в моем случае этой выгонялкой Я пользуюсь в ночное время, а все регламентные задания проходят уже после выгрузки базы, и выгружаю Я все базы
5. hamlo_666 (ak0710) 26.04.12 13:03
(1) sisdrou, конечно это можно сделать через архивацию каталога , но у меня стояла несколько иная задача , у меня был РИБ , в котором по заданию производилось обновление конфигурации , поэтому Я отключаю всех пользователей
6. Яков Коган (Yashazz) 26.04.12 20:03
(3) Верно говорит. Рубить агента каждый раз - отнюдь не комильфо, есть давно проверенные штатные способы.
7. hamlo_666 (ak0710) 27.04.12 10:05
(6) Yashazz, (6) Yashazz, на счет штатных средств Я знаю не меньше вас, и в каждом случае пользуюсь разными способами по отключению пользователей , когда лень сделаю как тут написано , когда нет допишу конфигурацию или сделаю скрипт , Я просто привел способы которые быстрее по выполнению , и по времени , а так можно написать скрипт на vbs и все такое , их куча в инете, статья называется "Легкие способы отключения пользователей", а не то что лучше или проверено, или есть давно
8. Яков Коган (Yashazz) 27.04.12 12:59
(7) Для ленивого админа это, может быть, и лёгкие способы. А вот объяснять ни в чём не повинным юзерам, почему их вышибло из базы "Б", хотя отключали юзверей базы "А", это уже не очень лёгкое занятие.
9. hamlo_666 (ak0710) 27.04.12 13:29
(8) Yashazz, ну сделай тогда net send и напиши "всех отключу от базы через 5 минут" и все, есть много способов я не спорю, пусть каждый выберет то что ему удобно, в той или иной ситуации
10. Ermek Kalbaev (Sirgeli) 27.04.12 13:36
Парой ночью не кому нечего объяснять не надо поскольку в ночное время когда должен идти обмен работать в базе не кто не должен. Да и кто будет сидеть на работе убиваясь до 23.00 времени
11. Ирина Репина (irina_elabuga) 03.05.12 08:23
12. Александр Кирилюк (ArtfulCrom) 03.05.12 11:05
А давайте я Вам задачку по отключению пользователей подкину.

Все видели в службе терминалов такую функцию как "Ограничить пользователя одним сеансом"? Нужно ее решить в УФ. Т.е. если Юзер входит второй раз - мы просто "отключаем" его старый сеанс.

Только вот как это реализовать если: клиент тонкий (не содержит СОМ по определению) и сервер под Линукс (не содержит СОМ по той же причине) ?? ))

Есть "легкие" способы выключить пользователя...?
13. Роман Сюзев (sorb) 03.05.12 18:27
(12) ArtfulCrom,
"Ограничить пользователя одним сеансом" и то, что Вы написали - совсем не одно и то же, так как в первом случае второй раз зайти не получится, в во втором - должен быть закрыт первый сеанс.
А принцип реализации в общих чертах тот же, что и в третьем примере:
при начале работы системы:
1. выполняется цикл, в котором идет ожидание, пока количество соединений от текущего пользователя больше одного (что-то вроде Для х = 1 По 10 Цикл Если МаленькаяФункцияПроверкиНаКоличествоСоединений() < 2 Тогда Прервать КонецЕсли; Предупреждение("Ждем-с закрытия ранее открытого...", 5); КонецЦикла)
2. создается обработчик ожидания, который проверяет количество соединений от текущего пользователя: если больше одного, то работа завершается.

Только нафиг надо???
14. Александр Кирилюк (ArtfulCrom) 03.05.12 22:13
Вот и не правильно )

Юзер отвалился. Сеанс остался открытым. Данные заблокированы. Юзер хочет войти и продолжить работу. Не может. Достаточная причина? Существует еще более важные примеры. И то решение, что вы прислали как раз не подходит. ОН ДОЛЖЕН войти в любом раскладе без ожидания. А старый сеанс ДОЛЖЕН закрыться. МОЛЧА. И тут 1С, что то налажала с Линуксом, Тонким Клиентом и СОМ объектом.... ))
15. hamlo_666 (ak0710) 07.05.12 10:20
(12) ArtfulCrom, Добрый День , решать задачу как то времени нет , а что если попробовать подключиться к консоли кластера и отключить сеанс пользователя который по времени раньше , но так как нет ком , можно будет сделать все это в общем модуле на сервере , и передать туда имя пользователя
16. Александр Кирилюк (ArtfulCrom) 07.05.12 10:27
(15) hamlo_666, в том-то и прелесть. Что функция ОТКЛЮЧИТЬ есть только у ОДНОГО объекта языка. СОМ-соединения. Поэтому без вариантов.
17. hamlo_666 (ak0710) 07.05.12 14:20
(16) ArtfulCrom, Ну тогда придется дописывать конфу , и в обработчике ожидания прекращать работу , того сеанса который раньше. , завести регистр какой нить текущие подключения , при входе в систему туда записывать имя и время входа а при выходи чистить его запись, можно думаю в регистр записать код подключения, и по нему ориентироваться
18. Александр Кирилюк (ArtfulCrom) 07.05.12 14:30
Да, спасибо, мы думали об этом, но по-факту - реально мертвый сеанс - который уже не шевелит ножками и кодом - так не уберешь. А при интенсивной работе ждать таймаут 20 минут пока его сервер потушит сам - не то что бесит пользователей. а заводит в состояние истерики.
19. Александр Кирилюк (ArtfulCrom) 07.05.12 14:32
ЗЫ: это я в этой теме не к тому, что бы всех напрячь, а к тому, что бы все трезво оценили КОСЯК заложенный 1Сом в механизм подключения/отключения клиентов и вам может неповезти на столько, что вы с ним столкнетесь, как мы сейчас (
21. Галина Злобина (gala2009) 14.05.12 12:00
а я снимаю нужные активные сессии на сервере, правда они опять туда лезут тут же
22. Денис (Den_D) 18.05.12 15:51
Заходим в консоль отбираем все сеансы по времени вызовов СУБД за последние 5 минут, и те у которых это время равно нулю - убиваем
23. Сергей Яхонтов (newbas) 13.06.12 11:38
Что касается ночной архивации - самый эффективный способ - административный:
напугал директора о чреватости оставленных сеансов, в результате имеем приказ по предприятию - оставил сеанс 1 раз объяснительная, второй - 500 руб в кассу. Все пользователи теперь аккуратно выходят
24. Айбек К (ak0710) 15.06.12 07:46
(23) newbas, Да ты шаришь ) служебка это тема , правда все равно забывают большинство , а так в моих способах не надо никакой служебки , и все равно остаются зависшие сеансы не знаю откуда возникают , всякие зависания или дублирование сеансов на сервере 1С
25. Сергей Яхонтов (newbas) 15.06.12 11:47
(24) ak0710,
Согласен - у меня так же бывают зависания сеансов и часто по не известной причине.
26. Айбек К (ak0710) 15.06.12 22:30
27. Александр Овсянников (_LEV_) 18.06.12 16:29
По-моему достаточно штатных средств, чтобы аккуратно закрыть сеансы, остановить фоновые задания,
запретить подключение к нужной базе и т.д. позволяющие гарантированно решать вопросы архивирования.
Одно но, это в клиент-серверном варианте, бороться с юзерами в файловом варианте не так просто..
тут все варианты хороши, в разумных пределах. Так что идею использовать батник и виндузовый шедулер
считаю при случае можно использовать.. ну если руководство вменяемое, то и приказ не будет лишним.
28. aleksei (alekseies) 19.06.12 11:19
вырубаем сервер на сетевом компе, подрубаем базу к другому серверу, обновляемся, загружаем сервер на сетевом ...
29. Юрий (forurchik) 19.06.12 16:54
очень нужная вешь...интересно попробовать на управлении производсвенным предприятием и управлении строительной организацией
30. И С (irishen) 21.06.12 17:06
Процедура ЗавершениеРаботыПользователей() Экспорт

Если НЕ РольДоступна("НеЗакрывать1С") Тогда

Если Час(моп_ВыполнениеОперацийНаСервере.ТекущаяДатаНаСервере()) >= 22 Тогда // получаю врмемя на сервере

ПрекратитьРаботуСистемы(Ложь);

КонецЕсли;

КонецЕсли;

КонецПроцедуры

Спасибо автору за процедуру!
31. Алексей Аборин (commo) 22.06.12 13:10
(23) newbas, а вот нам такая схема не помогла. и сам директор вешает сеанс (
32. Александр Федоров (Sasha255n) 30.06.12 14:13
Я бы все таки поставил маленький плюсик автор ведь сам говорит что не претендует на что то грандиозное а так маленькакая примочка на случае описанные автором вполне ничего себе
33. Nata (Nata) 14.07.12 03:18
Спасибо! Помогает в разных случаях.
34. Agema (Agema) 14.07.12 03:47
Спасибо! полезно знать такие приемы, в разных ситуациях и конечно учитывая, что данные редактируемых и незаписанных, непроведенных документов потеряются.
35. Oscar Oscar (OscarTT) 24.07.12 12:22
Порой такие маленькие мелочи подталкивают на свершение великих дел!)
37. Айбек К (ak0710) 03.08.12 14:34
(36) electronik, эти способы работают 100% без проблем , сначала запускай батники по отключению , а потом уже егиду , сейвер или что ты там используешь.
38. andrey dyak (dyak84) 17.09.12 11:03
Подскажите а Процедура
Если НЕ РольДоступна("НеЗакрывать1С") Тогда

Если Час(моп_ВыполнениеОперацийНаСервере.ТекущаяДатаНаСервере()) >= 22 Тогда // получаю врмемя на сервере

ПрекратитьРаботуСистемы(Ложь);

КонецЕсли;

КонецЕсли;

КонецПроцедуры

будет работать в кластерной многопроцесорной системе
39. Айбек К (ak0710) 17.09.12 12:45
(38) dyak84, кластерной многопроцессорной системе немного не понял вопроса , на сервере 1С предприятия имеете ввиду, в случае если база клиент-северная?
40. andrey dyak (dyak84) 19.09.12 10:21
41. ghOst Bu (ilonnaa) 03.04.13 16:45
Спасибо за способы, что-то в этом есть

ПодключитьОбработчикОжидания а вот это можно как-то при старте системы на неупровляемых формах заставить работать?
а то запускать дополнительное окошко с обработкой печально как-то(
42. Айбек К (ak0710) 02.07.13 09:33
(41) ilonnaa, Вы имеете ввиду на управляемых формах ? в толстом клиенте для этой процедуры формы не требуются , в модуле приложения при начале работы системы
43. Айбек К (ak0710) 02.07.13 09:34
Извините за поздний ответ(41) ilonnaa
44. ghOst Bu (ilonnaa) 02.07.13 16:07
(42) ak0710, наоборот в управляемых формах все прекрасно. А вот в обычном приложении при старте системы не получается сделать, может есть какой-то костыль хитрый? А то мне пришлось подвесить его на задачи пользователя)
45. Айбек К (ak0710) 02.07.13 21:28
(44) ilonnaa, нет никакого костыля, я наоборот работал с этой процедурой только в обычном приложении , все работало прекрасно, проблема в чем не запускается процедура? , не срабатывает обработчик ожидания? или из-за времени на сервере может ? помню был случай что бухгалтера локально меняли время у себя на компьютере и заходили после чего я сделал проверку времени только на сервере, а в управляемых он только на сервере и проверяет время. Посмотрите может на модуль в котором возвращает время на сервере стоят еще другие галочки клиент и т.д.
46. Павел Семенов (pavel06) 12.09.13 20:05
Служба на сервере называется подлиннее: "1C:Enterprise 8.2 Server Agent (x86-64)" со всеми пробелами.
видимо, ее надо net stop и net start. Есть еще MSSQLAgent, который скидывает дампы базы по расписанию - его тоже надо останавливать или нет? И в какой очередности, кто знает?
Только я не понял, чем вредным чревата такая остановка-перезапуск службы?
Голос был(6), но без объяснений. Если база одна?
Я попробовал stop-start, потом запустил 1С и мне выдало "Ошибка доступа к серверу 1С", хотя агент числится в службах запущенным.Пришлось перезапускать весь Windows-server, чтоб восстановить запуск 1С. Это случайно у меня или закономерно? Вообще автоматом эта служба запускается от имени пользователя USR1CV82, а когда ее просто перезапускаю bat-ником, то от имени win-админа сервера, это имеет значение для корректной работы от чьего имени перезапускать?
47. binx (binx) 15.10.13 12:49
вместо net session можно использовать openfiles. можно не убивать все сессии а закрыть только обращения к файлам 1С
48. Andrey@ (Andrey@) 16.03.14 13:14
Спасибо за статью! Особенно за первую часть, так как при обновлении системы в пятипользовательской бухгалтери мешают открытые сеансы у бухгалтеров,которы уходят на обед, закрывая свои кабиенты!
49. Вячеслав Клюев (slavik27) 02.05.15 19:01
Спасибо. Очень помогло, особенно 1-вариант для файловой
50. Айбек К (ak0710) 05.05.15 06:29
(49) slavik27, + в копилку плиз ))
51. Любовь Степанова (m-sla) 19.10.15 12:05
Спасибо, полезная информация, особенно касательно файловой базы.
52. Роман Сошкин (jsuh) 19.10.15 12:25
Плюсую, в свое время мне не хватало этой статьи))))
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа