1с как отключить пользователя
Пользователи 1С
Условно администрирование и контроль включает в себя:
- создание пользователя;
- установка прав пользователей;
- просмотр активных пользователей;
- анализ действий пользователей.
Рассмотрим каждый из этих пунктов подробнее:
Создание и установка прав пользователей 1С
В зависимости от конфигурации пользователи вводятся либо в конфигураторе, либо в режиме пользователя. Практически все современные конфигурации поддерживают ввод пользователей в режиме 1С: Предприятие 8. Также в режиме 1С: Предприятие, как правило, вводятся дополнительные параметры пользователей.
Однако, независимо от конфигурации, первый пользователь с административными правами всегда вводится в режиме конфигуратор. Поэтому мы рассмотрим оба режима ввода пользователей.
Ввод пользователей в Конфигураторе
Для входа в режим 1С Конфигуратор необходимо в списке выбора баз выбрать вариант Конфигуратор:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Получите понятные самоучители по 1С бесплатно:
На этой странице Вы должны указать настройки пользователя:
Создание пользователя в 1С Бухгалтерия 2.0
Необходимо согласиться, отобразится форма нового пользователя базы данных:
Где необходимо указать нужные настройки авторизации и роли пользователя.
Вот и всё! Создание пользователя и назначение ему прав завершено.
Просмотр активных пользователей в базе 1С
Как отключить пользователей в 1С 8.3
Отключить активного пользователя в базе 1С можно двумя способами:
- в интерфейсе программы (для конфигураций 1С Бухгалтерия 3.0, Управление торговлей 11 и т.д);
- через консоль кластера серверов (доступно только в клиент-серверном режиме работы).
Из интерфейса
Из консоли кластера
Контроль работы пользователей 1С 8.3
Информацию из журнала регистрации можно сортировать по типу данных, пользователю, виду действия и т.д. Для этого необходимо нажать на пиктограмму воронки над таблицей журнала регистрации.
Если база данных давно установлена и данные в ней часто меняются, просмотр журнала регистрации существенно замедляется, в особо запущенном случае система может обрабатывать данные очень продолжительный период времени.
Он отключает все открытые общие файлы на компьютере на котором лежит база.
Далее создал задание (Планировщик заданий 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С".
Создал новую процедуру в модуле обычного приложения :
Добавил в процедуру ПриНачалеРаботыСистемы() тоже самое и подключил обработчик ожидания :
Функция текущая дата на сервере выглядит так :
Таким образом мы получаем дату на сервере , в случае если в свойствах общего модуля установлена галочка "Сервер", я поставил только её.
Получается текущий код отрубает пользователей на два часа , но обычно после полночи уже никто не заходит в базу.
Лично у меня на релизах от 8.2.9.х до текущего 8.2.12.96 не всегда происходит полное отключение сеансов. Например, устанавливаю обновление, умный конфигуратор мне выдает кнопку "Завершить сеансы и продолжить", после нажатия на которую остается несколько подключенных соединений.
Также в течение дня часто остаются соединения по закрытым сеансам.
Зачем это нужно
Для себя нашел два пути применения:
1. Перед инсталляцией обновлений необходимо отключить пользователей от системы;
2. Регламентное задание, отвечающее за резервное копирование, должно отключить все подключенные сеансы.
В первом случае удобство состоит в том, что есть кнопка в режиме предприятия, нажав на которую происходит полное завершение.
Как это сделать
Первое, что нам нужно - это определить имя базы и сервер, на котором она расположена. Для этого разбираем строку соединения базы.
Если Найти ( СтрокаСоединенияИнформационнойБазы (), "Srvr" ) > 0 Тогда
// серверный вариант
Поиск1 = Найти ( СтрокаСоединенияИнформационнойБазы (), "Srvr color: red;">);
ПодстрокаПоиска = Сред ( СтрокаСоединенияИнформационнойБазы (), Поиск1 + 6 );
ИмяСервера = Лев ( ПодстрокаПоиска , Найти ( ПодстрокаПоиска , """" ) - 1 );
// теперь ищем имя базы
Поиск1 = Найти ( СтрокаСоединенияИнформационнойБазы (), "Ref color: red;">);
ПодстрокаПоиска = Сред ( СтрокаСоединенияИнформационнойБазы (), Поиск1 + 5 );
ИмяБазы = Лев ( ПодстрокаПоиска , Найти ( ПодстрокаПоиска , """" ) - 1 );
Иначе
// для других способов подключения алгоритм не актуален
Возврат;
КонецЕсли;
Для работы с агентом сервера необходимо использовать COM-объект
Коннектор = Новый COMОбъект ( "v82.COMConnector" );
который позволяет подключится к агенту сервера:
Агент = Коннектор . ConnectAgent ( ИмяСервера );
Теперь перебираем все кластеры, в которых учавствует агент:
Кластеры = Агент . GetClusters ();
Для каждого Кластер из Кластеры Цикл
Чтобы получить доступ к процессам кластера, необходимо аутентифицироваться, если для кластера задан администратор:
АдминистраторКластера = "Имя администратора кластера" ;
ПарольКластера = "Пароль администратора кластера" ;
Агент . Authenticate ( Кластер , АдминистраторКластера , ПарольКластера );
если кластер без ограничения доступа, то следует писать так:
Агент . Authenticate ( Кластер , , );
Теперь необходимо получить перечень процессов, которые обрабатывают данный кластер:
Процессы = Агент . GetWorkingProcesses ( Кластер );
Для каждого Процесс из Процессы Цикл
Т.к. к рабочему процессу необходимо подключаться через коннектор, то необходимо вычислить порт, на котором работает данный процесс:
Порт = Процесс . MainPort ;
// теперь есть адрес и порт для подключения к рабочему процессу
РабПроц = Коннектор . ConnectWorkingProcess ( ИмяСервера + ":" + СтрЗаменить ( Порт , Символы . НПП , "" ));
Рабочий процесс необходимо для разрыва соединений. Разрыв сессий происходит через агента. Опишем подробно. Сначала необходимо аутентифицироваться в рабочем процесс по имени и паролю пользователя, у которого в базе данных есть право "Администратор":
РабПроц . AddAuthentication ( "Имя администратора БД" , "Пароль администратора БД" );
На этом этапе есть объект агента и рабочего процесса, который обслуживает текущий кластер. Далее необходимо найти искомую базу данных:
Базы = Агент . GetInfoBases ( Кластер );
Для каждого База из Базы Цикл
Если База . Name = ИмяБазы Тогда
ИнформационнаяБаза = База ;
Прервать;
КонецЕсли;
КонецЦикла;
Если ИнформационнаяБаза = "" Тогда
// база не найдена
КонецЕсли;
Отключение сеансов
Итак у нас есть все необходимые объекты для непосредственного обрыва сессий. При это рекомендую полностью разобраться, какие именно сессии мы будем разрывать, иначе можно отключить сессию, в которой выполняется этот код :
Сеансы = Агент . GetInfoBaseSessions ( Кластер , ИнформационнаяБаза );
Для каждого Сеанс из Сеансы Цикл
Если нРег ( Сеанс . AppID ) = "backgroundjob" ИЛИ нРег ( Сеанс . AppID ) = "designer" Тогда
// если это сеансы конфигуратора или фонового задания, то не отключаем
Продолжить;
КонецЕсли;
Если Сеанс . UserName = ИмяПользователя () Тогда
// это текущий пользователь
Продолжить;
КонецЕсли;
Агент . TerminateSession ( Кластер , Сеанс );
КонецЦикла;
Также у типа "Сеанс" есть ещё много разных свойств, например, имя компьютера, данные о языке, времени и длительности подключения и тп.
Отключение соединений
Отключение соединений происходит через объект рабочего процесса. Обрабатывает соединение тип "Соединение", у которого структура свойств напоминает тип "Сеанс". Итак, как отключенить соединения:
СоединенияБазы = Агент . GetInfoBaseConnections ( Кластер , ИнформационнаяБаза );
// Разорвать соединения клиентских приложений.
Для Каждого Соединение Из СоединенияБазы Цикл
Если нРег ( Соединение . Application ) = "backgroundjob" ИЛИ нРег ( Соединение . Application ) = "designer" Тогда
// если это соединение конфигуратора или фонового задания, то не отключаем
Продолжить;
КонецЕсли;
Если Соединение . UserName = ИмяПользователя () Тогда
// это текущий пользователь
Продолжить;
КонецЕсли;
РабПроц . Disconnect ( Соединение );
КонецЦикла;
Выводы
Получен пример отключения сеансов и соединений с информационной базы. При должном знании свойств каждого типа (рабочий процесс, агент сервера, сеанс, соединение) можно, например, сделать откючение конкретного пользователя по расписанию (однако, совершенно другой вопрос зачем это делать) либо, используя данные конструкции, написать внешнее приложение, которое будет использовать COM-объект "v82.COMConnector".
P.S.
Для понимающих работу с этими типами: код намеренно раздут, для того, чтобы под отладчиком было удобнее просматривать значения всех типов. Да, некоторые места можно написать короче и элегантнее, однако цель была в наглядности кода.
Код целиком
Если Найти ( СтрокаСоединенияИнформационнойБазы (), "Srvr" ) > 0 Тогда
// серверный вариант
Поиск1 = Найти ( СтрокаСоединенияИнформационнойБазы (), "Srvr color: red;">);
ПодстрокаПоиска = Сред ( СтрокаСоединенияИнформационнойБазы (), Поиск1 + 6 );
ИмяСервера = Лев ( ПодстрокаПоиска , Найти ( ПодстрокаПоиска , """" ) - 1 );
// теперь ищем имя базы
Поиск1 = Найти ( СтрокаСоединенияИнформационнойБазы (), "Ref color: red;">);
ПодстрокаПоиска = Сред ( СтрокаСоединенияИнформационнойБазы (), Поиск1 + 5 );
ИмяБазы = Лев ( ПодстрокаПоиска , Найти ( ПодстрокаПоиска , """" ) - 1 );
Иначе
// для других способов подключения алгоритм не актуален
Возврат;
КонецЕсли;
Коннектор = Новый COMОбъект ( "v82.COMConnector" );
Агент = Коннектор . ConnectAgent ( ИмяСервера );
Кластеры = Агент . GetClusters ();
Для каждого Кластер из Кластеры Цикл
АдминистраторКластера = "Имя администратора кластера" ;
ПарольКластера = "Пароль администратора кластера" ;
Агент . Authenticate ( Кластер , АдминистраторКластера , ПарольКластера );
Процессы = Агент . GetWorkingProcesses ( Кластер );
Для каждого Процесс из Процессы Цикл
Порт = Процесс . MainPort ;
// теперь есть адрес и порт для подключения к рабочему процессу
РабПроц = Коннектор . ConnectWorkingProcess ( Имяервера + ":" + СтрЗаменить ( Порт , Символы . НПП , "" ));
РабПроц . AddAuthentication ( "Имя администратора БД" , "Пароль администратора БД" );
Базы = Агент . GetInfoBases ( Кластер );
Для каждого База из Базы Цикл
Если База . Name = ИмяБазы Тогда
ИнформационнаяБаза = База ;
Прервать;
КонецЕсли;
КонецЦикла;
Если ИнформационнаяБаза = "" Тогда
// база не найдена
КонецЕсли;
Сеансы = Агент . GetInfoBaseSessions ( Кластер , ИнформационнаяБаза );
Для каждого Сеанс из Сеансы Цикл
Если нРег ( Сеанс . AppID ) = "backgroundjob" ИЛИ нРег ( Сеанс . AppID ) = "designer" Тогда
// если это сеансы конфигуратора или фонового задания, то не отключаем
Продолжить;
КонецЕсли;
Если Сеанс . UserName = ИмяПользователя () Тогда
// это текущий пользователь
Продолжить;
КонецЕсли;
Агент . TerminateSession ( Кластер , Сеанс );
КонецЦикла;
СоединенияБазы = Агент . GetInfoBaseConnections ( Кластер , ИнформационнаяБаза );
// Разорвать соединения клиентских приложений.
Для Каждого Соединение Из СоединенияБазы Цикл
Если нРег ( Соединение . Application ) = "backgroundjob" ИЛИ нРег ( Соединение . Application ) = "designer" Тогда
// если это соединение конфигуратора или фонового задания, то не отключаем
Продолжить;
КонецЕсли;
Если Соединение . UserName = ИмяПользователя () Тогда
// это текущий пользователь
Продолжить;
КонецЕсли;
РабПроц . Disconnect ( Соединение );
КонецЦикла;
КонецЦикла;
КонецЦикла;
Что может быть лучше обработок или процедур отключения непослушных пользователей из базы?
Наверное, какая-то встроенная вещь!
Надо бы ей воспользоваться.
8.1
Создаем ярлык. Назовем его: Отключение или Завершение.
"C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /F"ПутьКБазе" /N"Юзер" /P"ЕгоПароль" /WA- /AU- /DisableStartupMessages /C ЗавершитьРаботуПользователей
Создаем ярлык. Назовем его: Разрешить
"C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /F"ПутьКБазе" /N"Юзер" /P"ЕгоПароль" /WA- /AU- /DisableStartupMessages /C РазрешитьРаботуПользователей /UC ПакетноеОбновлениеКонфигурацииИБ
Все. Теперь можно всем работать!
8.2
Отключалка
"C:\Program Files\1cv82\common\1cestart.exe" ENTERPRISE /F"ПутьКБазе" /N"Юзер" /P"ЕгоПароль" /WA- /AU- /DisableStartupMessages /C ЗавершитьРаботуПользователей
"C:\Program Files\1cv82\common\1cestart.exe" ENTERPRISE /F"ПутьКБазе" /N"Юзер" /P"ЕгоПароль" /WA- /AU- /DisableStartupMessages /CРазрешитьРаботуПользователей /UCКодРазрешения
Это работает для фалового варианта.
Для серверного меняем /Fна /S\
Кста, работающие пользователи автоматически включаться в работу
Замечено, если у пользователей закрывается 1С с запросом завершения работы, то в 8.2 будет окно это маячить :-(. пока думаю над этим.
Всем огромный фэнкс!
Специальные предложения
Стало быть не занимался обменами.
Сервис-Прочие обмены данными- Настройка выполнения обменов.
Ежели есть хоть одна настройка
Действия - Настройка обновления конфигурации
оно тебе автоматически построит:
P.S. Вот тут правильная настройка обмена, когда периферия, при необходимости, обновляет свою конфигурацию вслед за центральной (14) P.S. Вот тут правильная настройка обмена, когда периферия, при необходимости, обновляет свою конфигурацию вслед за центральной
Там наверно ссылочка должна быть? (19) на правильную настройку обмена , когда периферия, при необходимости, обновляет свою конфигурацию вслед за центральной :) Может я неправильно понял - тогды извиняйте. (20) Поясняю: центральная база может иметь дурную привычку взять да обновиться злобным, например, франчем ;) Изменились реквизиты объектов, добавились новые. да мало ли! В правильном обмене париться с обновлением периферийной базы не придется, она получит от центральной информацию о том, что та изменилась, и сама обновится. Все это предусмотрено штатными механизмами обмена восьмерки (21) а вот теперь все ясно. :) а я надеялся сохранить что нить умное для балбеса админа а то в отпуск спокойно не сходить :cry: Я в семерке писал обработчикОжидания, который проверял константу на завершение работы. Если константа была равна Да (1), то три раза с интервалом в 30 сек пользователям выдается предупреждение о необходимости завершить работу. Если они ее не успевали за это время заврешить, 1С закрывалась сама. При открытии же, проверялась константа на заврешение, если она равна Да (1), то 1С сразу же закрывается Вообще есть пункт меню в сервисе "Установить блокировку подключения к базе".
Выгоняет пользователей.
Но, если мне не изменяет память, таким образов нельзя выгнать пользователя у которого открыто модальное окно так всеже, для серверного варианта что то есть похожее? (6) Для серверного вместо ключа /F пиши ключ /S
например "C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /S<ИмяСервераSql>\<ИмяБазыНа1ССервере> /N <имя> /P <пароль> /WA- /AU- /DisableStartupMessages /C ЗавершитьРаботуПользователей
единственное что мне неясно - что делает ключ /AU- :(
"C:\Program Files\1cv81\bin\1cv8.exe" ENTERPRISE /F Пала1 /N Александр /P 123 /WA- /AU- /DisableStartupMessages /C ЗавершитьРаботуПользователей
(10) Путь заключай в кавычки (если длинные названия) и без пробеловнапример
"C:\Program Files (x86)\1cv81\bin\1cv8.exe" ENTERPRISE /SSQLSRV\MyDB /NАдминистратор /P123 /WA- /AU- /DisableStartupMessages /C ЗавершитьРаботуПользователей
или
"C:\Program Files (x86)\1cv81\bin\1cv8.exe" ENTERPRISE /FD:\FileBases\myDB\ /NАдминистратор /P123 /WA- /AU- /DisableStartupMessages /C ЗавершитьРаботуПользователей
(12)
то-же хотелось бы услышать ответ =)
повторюсь: "а для семерки есть подобная штучка?"
. Да, спасибо за комменты и плюсики.
Ну,
во-первых: фича расчитана для удобства администрирования, поэтому я не писал про пункт меню.
Во-вторых: правильно заметили - это для файлового варианта. Обязательно подправлю
/AU — запрет вывода вопроса об обновлении текущей версии 1С:Предприятия с административной установки (для базовых версий не используются).
(15) Сходи куда-нибудь в партком, они раньше мастера ярлыки вешать были :) а как ты повисшие сессии такой штукой отключишь? Еще один батник для перезапуска сервера?) Ставлю +Но есть проблемка Имя пользоветеля состоит из 3 слов..
Подставляет только первое. (29) Очень интересно :o Вчера утром (02.10.10) она была на месте и плюсиков было 3, сейчас плюсиков 4 и удалена.
Кстати, четвертый плюс от lookindenis (коммент 26) Ставлю +
Но есть проблемка Имя пользоветеля состоит из 3 слов..
Подставляет только первое.
Дело в том, что в твоем случае значение параметра (имя пользователя) помимо одного слова включает еще и другие символы (пробелы,скобки, может даже еще буквы. ) - значит в данном случае параметр (имя пользователя) нужно указывать в кавычках + параметры, которые не нужны (пароль) не указывать вообще, т.е. вот так (обрати внимание на параметр /N чего тока тут нет, запятых еще не хватает :))
З.Ы.: а если ты где-то просто обновляешь базу, то лучше заходи под админом, у него логин как правило короткий да и прав хватит на все :)
Попробовал. Выгнать - выгнала. А разрешить не получается - требует код разрешения. (32)Как это не удивительно, но код доступа к базе "КодДоступа".
Система такой ставит по умолчанию :D
kote; morevalar; ybatiaev; sergiobargio1; briz; hamann2; + 6 – Ответить
Код из типового ЗиУПа 2.5.27.5:
В функции ОбработатьПараметрыЗапуска(), общего модуля УправлениеСоединениямиИБ, вызов процедуры УстановитьБлокировкуСоединений() производится без параметров, отсюда и следует (33)
Читайте также: