Имя: Пароль:
1C
 
Как выбросить пользователей из 1С?
0 Алекс
 
07.07.04
15:43
1С- 20 релиз. Как выбросить нерадивых юзеров, находящихся в удаленном здании? Желательно средствами bat-файла?
1 Волшебник
 
07.07.04
15:47
2 romix
 
07.07.04
17:23
(1) это подстава:
:BEGIN
IF EXIST RUNNER.BAT GOTO RUNNER
GOTO BEGIN
Бесконечный цикл, который жрет 100% ресурсов процессора. :-)

На самом деле надо всем послать сообщение через net send, а потом старт-стоп SQL и отрубить оставшихся юзеров (тоже есть какая-то команда).
3 alxkorvin
 
07.07.04
17:28
(2) А если у тебя на SQL крутится больше 1 базы?
Отрубить оставшихся юзеров в смысле убить процесс 1cv7.exe? опять таки пострадяют все.
4 Кирил
 
07.07.04
17:36
Автоматическое завершение программы 1С для всех пользователей!!!
Вставить в глобальный модуль эти строки:

// Опрос состояния системы
Перем ПериодОпроса, ОсталосьДоЗавершенияРаботы;
//--------------------------------------------
Процедура ОпросСостоянияСистемы()
   Если Константа.ДоЗавершенияРаботы>0 Тогда
       Если ОсталосьДоЗавершенияРаботы=0 Тогда
           ОсталосьДоЗавершенияРаботы=Константа.ДоЗавершенияРаботы*60;
           Предупреждение("Через "+СокрЛП(Константа.ДоЗавершенияРаботы)+" мин Система завершит работу."+
               РазделительСтрок+"Просьба сохранить данные и закрыть все открытые окна.", 5);
       Иначе
           ОсталосьДоЗавершенияРаботы=ОсталосьДоЗавершенияРаботы-ПериодОпроса;
           Если ОсталосьДоЗавершенияРаботы<=0 Тогда
               ЗавершитьРаботуСистемы(0);
           Иначе
               Если ОсталосьДоЗавершенияРаботы<=300 Тогда
                   Сообщить("До завершения работы осталось "+СокрЛП(ОсталосьДоЗавершенияРаботы)+" сек", "!");
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   Иначе
       ОсталосьДоЗавершенияРаботы=0;
   КонецЕсли;
КонецПроцедуры
//-------------------------------
Процедура ПриНачалеРаботыСистемы()
   Константа.ДоЗавершенияРаботы=0;
   ОбработкаОжидания ("ОпросСостоянияСистемы", ПериодОпроса);
КонецПроцедуры

//--------------------------------
ПериодОпроса=20; // секунд
ОсталосьДоЗавершенияРаботы=0;


Добавить константу: ДоЗавершенияРаботы.

Идея не моя, но работает неплохо :)
Если нужно выкинуть всех с 1С, просто ставишь в константе время, через которое 1С закроется у всех принудительно.
5 alxkorvin
 
07.07.04
17:39
(4) А если пользователь после этого сразу запустит новую 1с? Например у меня в 1с 100 пользователей. 20 выходят, а в этот момент 1 успевает зайти :) После чего сбрасывает константу ДоЗавершенияРаботы, в результате чего все пользователи довольные заходят обратно :)
6 lexa
 
07.07.04
17:40
(4)
Процедура ПриНачалеРаботыСистемы()
  Константа.ДоЗавершенияРаботы=0;
  ОбработкаОжидания ("ОпросСостоянияСистемы", ПериодОпроса);
КонецПроцедуры
Т.е. сразу все закрываться будет?
7 Кирил
 
07.07.04
17:48
(5) Я зохожу в монитор, когда всех выбросит, сразу же захожу монопольно.
(6) Через 20 сек. будет выдоно сообщение, что программа будет закрыта через "" минут, если пользователь набирает документ и проигнорирует предупреждение, то документ не будет сохранён, если он проводит док в это время, то пока документ полностью не проведётся, программа не закроется.
Никакого аварийного завершения не будет!
8 lexa
 
07.07.04
17:54
(7) В процедуре ПриНачалеРаботыСистемы() Константа.ДоЗавершенияРаботы=0, т.е. система только начала работать, а ДоЗавершенияРаботы 0 секунд, следовательно сразу работа завершается?
9 Warlock
 
07.07.04
19:55
У меня на большом предприятии специальный справочник сообщений. Помимо большого количества ф-ий, которые я напрограмил, там было завершение работы с указанием пользователя. Т.е. можно указать конкретного юзера и закрыть ему 1С-ку... Если поле юзер оставить пустым, то закроется 1С у всех, у кого ИмяНабораПрав() <> "Администратор".

Кстати, можно на время остановить службу NetHasp - на серваке 1С будет запускаться...
10 romix
 
07.07.04
20:03
(4) Это будет работать, но только для тех пользователей, у кого не открыты модальные окна и не нажата кнопка Заблокировать.

Хотя у меня так и сделано - совсем уж нерадивых, которые специально заблокировались, - раз два и обчелся. Их надо снимать рестартом SQL и съемом пользовательских подключений.

А если цель сего мероприятия - сделать бэкап, то лучше всего делать его средствами SQL или (в случае DBF) копировать, а потом архивировать файлы DBF.
11 Кирил
 
08.07.04
09:05
(8) Если ты установишь константу=1 минуте, через минуту у всех закроется 1С. Затем ты вносиь свои корректировки, запускаешь всех в 1С (константа=1) и снова все повылетают через 1 минуту, поэтому или при старте системы обнулить константу или самому быстро заходить и изменять константу на 0.
12 Алекс
 
08.07.04
14:22
Для Warlock_WW
>>У меня на большом предприятии специальный справочник сообщений. Помимо >>большого количества ф-ий, которые я напрограмил, там было завершение работы с >>указанием пользователя. Т.е. можно указать конкретного юзера и закрыть ему 1С->>ку... Если поле юзер оставить пустым, то закроется 1С у всех, у кого >>ИмяНабораПрав() <> "Администратор".
А поподробнее? можно на мыло for_mula@mail.ru
13 bnik
 
09.07.04
10:10
А я сделал через внешний файл, причём обработка проверяет если у пользователя права администратора то она не выбрасывает. Если же другие права, то при повторном запуске 1С пользователя всё равно выбрасывает. Код по большей части похож как было предложено выше. Пользуюсь,- очень даже помогает, особенно когда кто-нибудь чай идёт пить.
14 Виталий
 
09.07.04
15:16
А как, чтобы "stop.bat user1 user2 ...userNN" и в базе кроме тебя никого !!!
Было бы здорово!!!
15 Виталий
 
09.07.04
15:17
А как, чтобы "stop.bat user1 user2 ...userNN" и в базе кроме тебя никого !!!
Было бы здорово!!!
16 Asmody
 
09.07.04
17:27
17 alxkorvin
 
09.07.04
18:05
(10) А если на этом SQL сервере еще например с 10 баз лежит, что тогда? :)
18 Warlock
 
09.07.04
23:47
(17)В Computer Management(Управление компьютером) System Tools/Shared Folders/Sessions найти подключения к нужной базе и отрубить их! Это один из вариантов...
19 Warlock
 
09.07.04
23:48
(12)
Структура справочника:
Код
Наименование
ПолноеНаименование
ПараметрСтрока
ПараметрЧисло
Пользователь
Активно (Число,1)

Пример сообщения:

Наименование = «Вопрос»
ПолноеНаименование = «Сохраните свою текущую работу и закройте, пожалуйста, программу. ОК ?»
ПараметрСтрока = «Да+Нет»
ПараметрЧисло = 60
Пользователь = «Юзер1»
Активно = 1

В данном случае ПараметрЧисло – Таймаут (чтобы не потерять управление). Выполняется команда «Вопрос(ПолноеНаименование,ПараметрСтрока,ПараметрЧисло)». Причем снимается флаг Активно и создается элемент справочника с наименованием «Ответ» и ПолнымНаименованием с именем пользователя и ответом (Да, Нет или Таймаут).

Также предусмотрены:
ЗавершитьРаботуСистемы(ПараметрЧисло)
Сигнал
Сообщение
Запрос – можно через ВвестиЗначение() спросить у Юзера о количестве времени, которое ему еще надо до того, как он закроет 1С

Если в сообщении не указан Юзер – все идет Броадкастом, но только не админам :)
Алекс, идея, я думаю, понятна...

ЗЫ Делал наспех(почти), так что сильно не критикуйте :) Хотя критику я все же хотел бы услышать(прочитать)...
20 alxkorvin
 
09.07.04
23:49
(18) Как правильно отрубить пользователей 1с от sql я знаю. Это был риторический вопрос советчикам останавливать sql server :)
21 Warlock
 
09.07.04
23:51
(20)Ну и чудненько...
22 Asmody
 
09.07.04
23:53
(19) скажу на это только два слова: "модальные окна" >;))
23 Warlock
 
09.07.04
23:57
(22)Да знаю, знаю... Но как показывает практика, при использовании данной процеду по несколко раз в день, такой бок возникал у меня 1 раз в месяц/два месяца... Винды чаще глючат, что хуже, но (18) - и no problem...
24 Z1
 
10.07.04
08:59
+ к (22) И еще бывают зависшие  1с.exe
Супердолгая обработка пользователя.
Еще есть 1с ждущая пароля пользователя.
Иногда ( редко) бывают и зависшие конекты 1с-sql
Ответьте на вопрос как часто Вам надо отрубать всех пользователей и зачем ?
Все эти обработки ожидания занимают ресурсы и не всегда эфективны.
Гораздо проще :
1. Расшарить папку.
2. Убить sql процессы в конкрет. базе.
3. Сделать то что нужно
4. Зашарить папку.
25 Warlock
 
12.07.04
02:08
Постоянно в ваших постах читаю "Убить sql процессы в конкрет. базе", "старт-стоп SQL" и т.п. - с точки зрения программиста удобно: минута - и база в вашем распоряжении... А юзеры? Кто-то решил немного поработать в обеденное время, вбил документ строк на 50 и - Ах, ..., ... ...! А если решил директор покопаться? Мысли приблизительно такие "Я вывалил гору денег на эту сетевую SQL 1С, а тут такое... Вот сволочи!" Или это с вашей стороны голая теория?!
26 Z1
 
12.07.04
08:47
(25) Тогда надо сначала ответить на вопрос
"зачем мы выбрасываем пользователей из 1с ?" и все станет на свои места.
Да перед 25 дается обычное net send * о том что через 5 минут отключение 1с.
Обычно это или какая-то нештатная ситуация при которой user не могут работать или например смена конфигурации в 21 когда user-ов уже нет и уговаривать то уже некого а в программе очень много пользователей. Самое эффективное ИНМО как раз 24
27 SAP
 
12.07.04
12:54
(24)А как убить sql процессы в конкретной базе? Нельзя ли по-подробней?
28 Z1
 
12.07.04
13:20
(27) либо kill <id_prosecc>
либо написать скрипт на т-sql
я делаю через kill
29 Warlock
 
12.07.04
19:11
(26)"Самое эффективное ИНМО как раз 24" - нет сомнений. Но в моем случае так делать было нельзя, а звонить каждый раз им по телефону и спрашивать ну _очень_ напряжно...