1с программно получить список пользователей

Обновлено: 06.07.2024

Столкнулся с трудностями..
Требуется получить список активных пользователей 1С, работающих в базе.
юзаю Admin1c.dll - все ок.. до поры до времени - если вручную запускать - нормуль.
.
если программно запускать (в обработке ожидания) - 1Ска падает.
.
вариант smaharba со скриптом вордовским - не сильно хочется.
.
варианты счетчиков при входе/выходе пользователей - тоже не очень кузяво, бо несрабатывает в случае выброса юзверя из 1Ски.
.
какие еще есть варианты получить список активных пользователей, работающизх в базе.
.
спсб.

(0) А если счетчик мониторить? Обработкой ожидания. Хранить зашедших в внешнем файлике, и мониторить)

(1) есть случаи, когда зашедшие сеансы ломаются (1ска падает) - поэтому счетчики не канают.

(0) не доверяешь smaharba ? :)
по-моему из ворда он только длл-ку достает, а собственно список юзеров получает через виндовый скрипт + длл

(2) нет, робот обмена. задача тривально проста:
робот при своей работе (форма.обработкаожидания) проверяет список активных пользователей. если активный пользователь один - то это есть сам рбот и он завершает свою работу. При старте пользователя любого провеяется - есть ли в списке активных пользователеей робот - если нет - стартруется внешней командой сеанс 1ски с пользователем робот.

(4) доверяю ;-) но неохота каждые 10-20 секунд стартовать ворд ;-) не нравится мне эта концепция.

хм. у меня его обработочка не стартует кажд 10сек ворд
я бы заметил наверное

завтра попробую через глобальную обработку ожидания - но глобальные обработкиожидания почему-то не люблю. И вооще - обработки ожидания - достаточно глючные вещи - не первый раз на грабли наступаю.

посмотрел в диспетчере задач - не появляется вордjвского exe

поначалу в говорилке я его обработку использовал для полученяи списка юзеров, но потом на админ1с перешел.

можно попробовать еще вместо обработки ожидания Душелововский генератор событий запулить - по идее сработает.

отправил, это не 100% оригинальная, я там что-то дорабатывал не помню сейчас уже что

Сейчас как:
В ПриНачалеРаботыСистемы() в конце процедуры стоит
.
сама обработка робот
.

кстати, если достаточно определять есть ли КТО-ТО в базе, то можно перед запуском скрипта захода в базу пытаться переименовать любой файл, который лочится при заходе в 1С (не забывая ессно переименовать потом обратно)

(17) ну тут еще надо атоматом роботу завершать самого себя если в базе никого нет.

обработку получил.
знакомое.
навкидку только не понял что там враппер делает..
для чего вот это:
.
.
.

блин..
попробовал не через обработку ожидания формы, а через генерацию внешнегособытия запускать нужную процедуру периодически - все равно падает. где-то что-то связано с тем. что запуск идет из процедуры приначалеработысистемы.

аааа блин. возможно проблема в правах доступа пользователя робот

(3) Канают, надо только не просто мониторить факт вхождения в список, но и дополнительно проверять, был-ли факт мониторинга по интервалу.
т.е. таблица с колонками "Пользователь, Время" - при обходе ставить время, одновременно с этим проверять существующие записи, и погрешность ранее сохраненного момента от текущего. Левые - стирать.

(24) не въехал.
ну вот зашли два пользователя. прописали себя в справочник счетчиков. зашел робот - ходит по этому справочнику - как он установит живой пользователь или нет, если какой-то пользователь отвалился из-за слома 1ски?

(26) Они себя не просто прописали. Каждый из них еще и прописал время, и через определенный интервал это время обновляется (поэтому лучше в внешний файл, имхо). В сессии каждого пользователя работает обработка ожидания, которая после того как установила время для текущего пользователя смотрит список остальных, и проверяет: на сколько велика разница между ИХ временем, и текущим. Если погрешность больше определенно константы - значит сессия пользователя столько время не работала - значит его нет в системе, вышел или вылетел, значит нужно удалить его из списка текущих.

(27) спсб за пояснялку!
не, ну егонафиг такие извращения. это применять уже если нет других возможностей.
.
особо мне не нравится обработки ожидания у каждого пользователя - ну его нафиг - источник постоянных проблем. то фокус теряется когда пользователь набирает что-нить, то еще чтонить некузявое.. не люблю я их.. юзаю только в крайнем случае.

(28) "то фокус теряется когда пользователь набирает что-нить" - в смысле, речь о предопределенной процедуре в ГМ? Есть сбои, после которых она вообще перестает работать.

(29) было что-то бяковое. запусти глобальный обработку ожидания и начни в поле текстовом в комментарии номенклатуры например что-то набирать - есть бяки.
.
но все равно спасибо за пояснения в (27) - если не забуду - применится когда-нить!

такс, резюме: проблему заборол.
чтобы robot с использованием ВК admin1c.dll получал список активных подключений типа глАдмин1С.АктивныеПодключения() - надо чтобы у пользователя робот были права на OLE
.
блин, я же уже наступал раньше на эти грабли!
склероз.

всем спсб.
ветку по моему вопрсоу можно закрыть.
.
ps: обработкаожидания еще и криво установленные интервалы отрабатывает. не ровно в указанное значение.

я пошел харить кришну, завтра надо обмен с wms дописать, всем успехов!

(18) внимательней прочитай (17) и не придектся закрывать робота в 1С

(34) хз.. тупой наверное. работало 30 пользователей. вместе с ними работает и робот. последний пользователь (не робот) вышел из базы - изменений данных нет, роботу нефиг вертеться - они заканчивается тоже.

в порядке бреда - если папки пользователей находяться на сервере, то можно пробовать проверять существует файл 1Cv7.lck или нет, или пробовать удалить его, если не удалился - пользователь в базе, перед этим каталог пользователя писать в справочник пользователи при его входе.

(38) почему не надежно?
ПС. Тогда вся инфа в базе данных получается не надежна

(40) Потому что при аварийном выходе там информация не меняется.

(41) а
select count(*) from master.dbo.sysprocesses where program_name = '1cv7' and dbid = db_id('Base1C').

Для всяких обменов может оказаться удобно использовать консольную утилиту. Кажется, usrmon называется. Доберусь до компа, посмотрю.


Пользователи

Откроется окно со списком всех пользователей информационной базы:

Пользователи

Для добавления нового пользователя нужно нажать на зеленую кнопку с плюсом. Будет открыто окно редактирования нового пользователя:

Пользователи

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

В поле Полное имя нужно ввести полное имя пользователя. Оно будет отображаться в программе, например: Иванов Иван Иванович.

Для аутентификации средствами платформы 1С нужно чтобы был установлен флаг Аутентификация 1С:Предприятия. В этом случае при входе нужно будет ввести логин и пароль.

В полях Пароль и Подтверждение пароля нужно указать пароль пользователя.

Заполним данные пользователя:

Пользователи

Пользователи

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

Роли и права доступа мы рассмотрим позднее, пока просто создадим одну роль Полные права, указав для нее максимально возможные права доступа.

ПолныеПрава

Дважды щелкнув по роли, откроем окно настроек прав доступа для данной роли:

ПолныеПрава

Установить все права

И сохраним конфигурацию базы данных.

Вернемся к настройке пользователя и на закладке Прочее установим флаг рядом с ролью Полные права в списке доступных ролей и нажмем ОК:

Доступные роли

И добавим еще одного пользователя:

Пользователь

Теперь при входе в базу нужно выбрать пользователя и ввести его пароль:

Пользователь

Идентификация пользователя не выполнена

Значит пользователя с таким именем нет в базе данных или введен неверный пароль.

Для удаления пользователя нужно выделить его в списке пользователей и нажать на кнопку с красным крестом:

Удалить пользователя

Список пользователей хранится в специальной таблице базы данных.

Показывать в списке выбора

В настройках пользователя есть флаг Показывать в списке выбора:

Показывать в списке выбора

Если данный флаг установлен, то пользователь будет доступен для выбора при входе в программу. Если снять этот флаг, то пользователя не будет в списке выбора, но можно будет ввести его имя вручную и войти под ним. Это можно использовать, чтобы скрыть администратора системы.

Например, создадим нового пользователя Администратор и снимем у него флаг Показывать в списке выбора:

Показывать в списке выбора

Теперь при входе в базу пользователь не будет в списке доступных пользователей:

Показывать в списке выбора

Но можно вручную ввести его логин и пароль и войти под ним:

Показывать в списке выбора

Защита от опасных действий

Потенциально опасными действиями считаются:

  • Загрузка внешней обработки или отчета
  • Подключение расширения
  • Обновление конфигурации
  • Выполнение команды операционной системы из внешней обработки/отчета или расширения
  • Программное добавление или удаление пользователей из внешней обработки/отчета или расширения
  • Загрузка внешней компоненты из внешней обработки/отчета или расширения
  • Использование COM-объекта из внешней обработки/отчета или расширения

Если в свойствах пользователя установлен флаг Защита от опасных действий:

Защита от опасных действий

предупреждение безопасности

Если нажать Нет, то внешняя обработка не будет открыта.

Если нажать Да, то внешняя обработка будет открыта и платформа запомнит, что данное действие было разрешено. При последующих открытиях этой же обработки предупреждения не будет. Платформа запоминает разрешение для хэша обработки. Если в дальнейшем обработка будет изменена, то при первом открытии обработки снова будет выдано предупреждение безопасности.

Активные пользователи

Активные пользователи

Будет открыт список активных пользователей:

Активные пользователи

Текущий пользователь выделен специальной пиктограммой с галочкой.

Параметры

В открывшемся окне нужно установить флажок Режим технического специалиста:

Режим технического специалиста

После этого в главном меню выбрать Функции для технического специалиста:

Функции для технического специалиста

В открывшемся окне в узле Стандартные нужно найти пункт меню Активные пользователи:

Активные пользователи

По двойному клику будет открыто окно с активными пользователями. Текущий пользователь будет выделен жирным шрифтом:

Активные пользователи

Активные пользователи
Активные пользователи

Если база клиент-серверная, то можно запустить утилиту для администрирования серверов 1С предприятие. Для этого в меню пуск нужно найти соответствующий пункт меню:

администрирование серверов 1С

В открывшемся окне нужно в списке информационных баз найти нужную базу, развернуть ее и выбрать пункт Сеансы:

Сеансы

Справа будут показаны все активные сеансы с текущей базой:

Сеансы

Если нужно просто узнать текущего пользователя, то он отображается в правом верхнем углу:

Текущий пользователь

Завершение работы пользователей

Чтобы завершить работу пользователей в 1С можно воспользоваться утилитой для администрирования серверов. Данный вариант подойдет только для клиент-серверных баз. В списке сеансов нужно выделить нужного пользователя и выбрать команду Удалить:

Завершение работы пользователей

Чтобы выгнать всех пользователей из базы нужно нажать ctrl+A, чтобы выделить всех пользователей. А потом выбрать в контекстном меню команду Удалить.

В конфигурациях на базе БСП, в списке активных пользователей есть кнопка Завершить сеанс, которая позволяет завершить сеанс пользователя:

Завершить сеанс

Чтобы выкинуть всех пользователей из файловой базы можно завершить их процессы операционной системы. Этот вариант подойдет если все пользователи работают на одном компьютере. Нужно запустить диспетчер задач (ctrl + alt + Del), на закладке Процессы найти все процессы 1С и завершить их, выбрав в контекстном меню Снять задачу:

Снять задачу

Программная работа с пользователями

Создать нового пользователя

Управление пользователями информационной базы выполняется с помощью объекта ПользователиИнформационнойБазы.

Для добавления нового пользователя нужно вызвать метод СоздатьПользователя у данного объекта. Затем заполнить все необходимые поля и записать пользователя в базу методом Записать:

НовыйПольз = ПользователиИнформационнойБазы . СоздатьПользователя ( ) ; ЗащитаОтОпасныхДействий = Новый ОписаниеЗащитыОтОпасныхДействий ; ЗащитаОтОпасныхДействий . ПредупреждатьОбОпасныхДействиях = Истина; НовыйПольз . ЗащитаОтОпасныхДействий = ЗащитаОтОпасныхДействий ; НовыйПольз . Роли . Добавить ( Метаданные . Роли . ПолныеПрава ) ;

В результате будет добавлен новый пользователь:

пользователь

Получить всех пользователей

Всех пользователей можно получить с помощью метода ПолучитьПользователей. Данный метод вернет массив объектов типа ПользовательИнформационнойБазы:

ВсеПользователи = ПользователиИнформационнойБазы . ПолучитьПользователей ( ) ;

Поиск пользователей

Найти пользователя можно или по имени или по идентификатору. Для поиска используются методы НайтиПоИмени и НайтиПоУникальномуИдентификатору:

НайдПольз = ПользователиИнформационнойБазы . НайтиПоИмени ( "Сидоров С.С." ) ; УИДПользователя = Новый УникальныйИдентификатор ( "0c3c8e07-c36a-41ce-977a-85ee65d03a00" ) ; НайдПольз = ПользователиИнформационнойБазы . НайтиПоУникальномуИдентификатору ( УИДПользователя ) ;

Удаление пользователя

Для удаления пользователя используется метод Удалить:

НайдПольз = ПользователиИнформационнойБазы . НайтиПоИмени ( "Сидоров С.С." ) ;

Текущий пользователь

Чтобы программно получить текущего пользователя можно воспользоваться методом ТекущийПользователь:

ТекПользователь = ПользователиИнформационнойБазы . ТекущийПользователь ( ) ;

Блокировка установки сеансов

Клиент-серверный вариант

Иногда требуется на некоторое время заблокировать вход пользователей в базу. Это можно сделать с помощью механизма установки блокировки сеансов пользователей. Блокировка настраивается через утилиту администрирования серверов 1С. В списке информационных баз нужно найти нужную базу и в контекстном меню выбрать пункт Свойства:

Свойства

В поле с администратором информационной базы нужно ввести логин и пароль пользователя 1С:

администратор информационной базы

Блокировка начала сеансов включена

Начало сеанса с информационной базой запрещено

Блокируются как пользовательские сеансы, так и конфигуратор. При этом, существующие сеансы смогут продолжить работать.

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

Код разрешения

Данный код указывается в свойствах базы в параметре Дополнительные параметры запуска после ключа /UC. Чтобы открыть свойства базы нужно в списке баз выделить нужную базу и нажать кнопку Изменить:

Дополнительные параметры запуска

Теперь в данную базу можно войти даже во время блокировки.

Чтобы снять блокировку до ее окончания нужно просто снять флаг Блокировка начала сеансов включена.

Список пользователей — это один из инструментов администрирования.

Система 1С:Предприятие позволяет вести список пользователей, которым разрешена работа с системой. Этот список не является частью прикладного решения, а создается отдельно в конкретной организации, в которой используется система:

Список пользователей

Администратор информационной базы имеет возможность добавлять, копировать, удалять пользователей, а также модифицировать данные пользователя. Создание новых пользователей возможно также путем копирования уже существующих пользователей.

Для каждого пользователя может быть задано имя, идентифицирующее пользователя в системе, полное имя, используемое при отображении справочной информации, и порядок аутентификации (опознавания) пользователя системой. В случае использования аутентификации 1С:Предприятия пользователю можно запретить изменять пароль.

Список пользователей

Также, с помощью параметров информационной базы, можно задать минимальную длину пароля пользователя и требование вводить сложный пароль, удовлетворяющий определенному набору правил.

Список пользователей

Кроме этого, список пользователей позволяет указать роли, которые будут доступны пользователю при работе с прикладным решением, а также язык, на котором будут отображаться надписи, содержащиеся в интерфейсе прикладного решения:

Список пользователей

Систему ролей, существующую в конкретном прикладном решении, определяет разработчик в процессе создания прикладного решения. Администратор может только выбирать среди существующих в прикладном решении ролей.

Помимо этого для каждого пользователя можно задать режим запуска, в котором будет запускаться конфигурация: обычный режим или режим управляемого приложения. Или предоставить платформе возможность самой выбрать подходящий режим запуска.

Список активных пользователей в конфигураторе можно получить через меню Администрирование ⇒ Активные пользователи.

Список активных пользователей в конфигураторе

В окне отображается имя пользователя, режим запуска, время начала работы, имя компьютера и номер сеанса. Из этого окна можно открыть журнал регистрации действий интересующего пользователя.

В режиме предприятия

Список активных пользователей в режиме предприятия


Функционал этого окна полностью повторяет рассмотренное окно в режиме конфигуратора.
2. Через специальную обработку библиотеки стандартных подсистем (встроена во все типовые прикладные решения). Обычно она располагается: Администрирование ⇒ Поддержка и обслуживание ⇒ Активные пользователи. Внешний вид обработки в разных конфигурациях может немного отличаться.

В консоли администрирования кластера серверов

Наиболее полную информацию по сеансам 1С (а значит и по активным пользователям) можно получить в консоли администрирования кластера серверов. Данный способ подходит только для серверных баз.

Список активных пользователей в консоли администрирования

Программно

Можно воспользоваться методом глобального контекста ПолучитьСоединенияИнформационнойБазы () . Функция доступна на сервере, не имеет входных параметров, а возвращает массив значений типа СоединениеИнформационнойБазы .
Значение типа СоединениеИнформационнойБазы имеет свойства:

  • ИмяКомпьютера(Строка);
  • ИмяПриложения(Строка);
  • НачалоСоединения(Дата);
  • НомерСеанса(Число);
  • НомерСоединения(Число);
  • Пользователь(ПользовательИнформационнойБазы).

Пример программного получения активных пользователей:

Остались вопросы?
Спросите в комментариях к статье.

Читайте также: