К статье
Практический материал

Администрирование · 13 мин

Как узнать текущее рабочее место в 1С

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

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

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

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

Что именно нужно узнать: уточняем задачу

Прежде чем выбирать инструмент, определите, какая информация требуется. Задачи бывают трёх типов. Первая — узнать, с какого компьютера работает конкретный пользователь прямо сейчас. Вторая — получить список всех активных рабочих мест, подключённых к базе. Третья — определить имя компьютера внутри прикладного кода, например чтобы привязать печать чеков к конкретной кассе или записать рабочее место в журнал операций.

Для первых двух задач достаточно штатных средств администрирования — консоли кластера или списка активных пользователей. Для третьей потребуется встроенный язык: функции ИмяКомпьютера() и ПользователиОС(), либо работа с объектом СеансИнформационнойБазы. Подходы не взаимозаменяемы: консоль показывает картину «снаружи», а код — параметры «изнутри» сеанса.

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

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

Самый быстрый способ увидеть, кто и откуда работает в базе, не требующий прав администратора сервера, — встроенный список активных пользователей. В типовых конфигурациях на базе Библиотеки стандартных подсистем он находится в разделе «Администрирование» → «Обслуживание» → «Активные пользователи». В старых конфигурациях аналогичная функция доступна через меню «Администрирование» → «Активные пользователи».

Список показывает имя пользователя, компьютер, время начала сеанса, режим работы (тонкий, толстый, веб-клиент) и номер сеанса. Для файловой базы колонка «Компьютер» заполняется именем машины пользователя, что и является ответом на вопрос о рабочем месте. Отсюда же можно при необходимости отправить пользователю сообщение или завершить его сеанс — при наличии соответствующих прав.

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

Как найти рабочее место пользователя через интерфейс
  1. 1
    Откройте раздел «Администрирование» → «Обслуживание» → «Активные пользователи»
  2. 2
    Найдите нужного пользователя в списке, при необходимости используйте поиск
  3. 3
    Посмотрите колонку «Компьютер» — это имя рабочего места
  4. 4
    Проверьте колонки «Начало работы» и «Клиент» для полной картины
  5. 5
    При нескольких сеансах одного пользователя сопоставьте их по времени начала

Консоль кластера серверов 1С

В клиент-серверном режиме самый полный источник данных о рабочих местах — консоль администрирования серверов 1С:Предприятия. Откройте её на сервере или на машине администратора, разверните нужный кластер, затем информационную базу и выберите ветку «Сеансы». В таблице по каждому сеансу отображаются пользователь, имя компьютера, приложение (тип клиента), время начала и длительность простоя.

Колонка «Компьютер» здесь показывает машину, с которой инициировано подключение. Для тонкого и толстого клиента это реальное рабочее место сотрудника. Для сеансов веб-клиента и фоновых заданий в этой колонке будет имя сервера 1С или веб-сервера — это ожидаемое поведение, а не ошибка данных.

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

Как узнать рабочее место программно

Когда данные о рабочем месте нужны внутри прикладной логики — например, для записи в документ, кто и откуда его создал, — используется встроенный язык. Базовая функция ИмяКомпьютера() возвращает сетевое имя машины, на которой выполняется код. Учитывайте контекст выполнения: в клиент-серверном режиме код, выполняемый на сервере, вернёт имя сервера, а не рабочей станции пользователя. Имя реального клиентского компьютера надёжно получается только в клиентском контексте.

Для получения списка всех сеансов с их рабочими местами служит метод ПолучитьСеансыИнформационнойБазы(). Он возвращает массив объектов, у каждого из которых есть свойства: Пользователь, ИмяКомпьютера, НачалоСеанса, ИмяПриложения, НомерСеанса. Текущий сеанс определяется через ПолучитьТекущийСеансИнформационнойБазы().

bsl
// Имя компьютера текущего рабочего места (клиентский контекст)
РабочееМесто = ИмяКомпьютера();

// Все активные сеансы с рабочими местами
Сеансы = ПолучитьСеансыИнформационнойБазы();
Для Каждого Сеанс Из Сеансы Цикл
    Сообщить(Сеанс.Пользователь.Имя + " | " + Сеанс.ИмяКомпьютера + " | " + Сеанс.ИмяПриложения);
КонецЦикла;

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

Журнал регистрации: история подключений

Если нужно узнать не текущее, а прошлое рабочее место — например, выяснить, откуда пользователь входил вчера, — используется журнал регистрации. Откройте его через меню «Администрирование» → «Обслуживание» → «Журнал регистрации» (в типовых) или через конфигуратор. Установите отбор по событию «Сеанс. Аутентификация» или «Сеанс. Начало» и по нужному пользователю.

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

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

Особенности терминальных и веб-подключений

При работе через терминальный сервер (RDP) ситуация меняется: все пользователи запускают клиент 1С на одной машине, поэтому в колонке «Компьютер» будет имя терминального сервера для всех сеансов. Различить реальные рабочие места сотрудников средствами 1С в этом случае нельзя — потребуются инструменты самого терминального сервера: диспетчер задач, диспетчер служб удалённых рабочих столов или команда query session / qwinsta, показывающие сессии RDP с именами клиентских машин.

Для веб-клиента и публикаций через веб-сервер в сеансах отображается имя сервера, обслуживающего соединение. IP-адрес конечного пользователя можно найти в журналах веб-сервера (IIS или Apache) и сопоставить по времени с событием в журнале регистрации 1С.

Если в прикладном коде критично знать реальное рабочее место в терминальном режиме, распространённая практика — использовать переменные окружения клиентской сессии (например, CLIENTNAME в RDP) через чтение переменных окружения ОС. Такое решение требует аккуратности: переменные доступны только на клиенте и только если сессия терминальная.

Маршрут решения

Как выбрать способ

Нужно быстро увидеть, кто сейчас в базе, без прав администратора сервераОткройте «Активные пользователи» в режиме Предприятия
База клиент-серверная и нужна полная детализация по сеансамИспользуйте консоль кластера, ветку «Сеансы»
Нужно рабочее место внутри прикладного кодаПрименяйте ИмяКомпьютера() в клиентском контексте или ПолучитьСеансыИнформационнойБазы()
Нужна история подключений за прошлый периодОткройте журнал регистрации с отбором по событиям сеанса
Пользователи работают через терминальный сервер и все сеансы показывают один компьютерИспользуйте инструменты терминального сервера (qwinsta, диспетчер RDS)

Частые ошибки и ограничения

Самая распространённая ошибка — вызов ИмяКомпьютера() в серверном контексте и ожидание имени машины пользователя. В клиент-серверной архитектуре серверный код исполняется на сервере 1С, поэтому функция вернёт имя сервера. Если данные нужны на сервере, передайте имя компьютера с клиента параметром или сохраните его при начале сеанса в параметрах сеанса.

Вторая ошибка — путать номер сеанса и номер соединения. Это разные идентификаторы: сеанс описывает логическое подключение пользователя, соединение — сетевой канал к рабочему процессу. При программной завершении «зависших» подключений используйте именно сеансы, иначе можно оборвать чужое соединение.

Третья типичная проблема — попытка получить список сеансов без административных прав. Обычный пользователь программно увидит только свой текущий сеанс; полный список доступен при наличии права «Администрирование». Наконец, в файловых базах, открытых через общий сетевой ресурс, сведения о компьютере могут быть неточными — это ограничение самого файлового режима.

Типичные ошибки
01
Вызов ИмяКомпьютера() на сервере — возвращается имя сервера, а не рабочей станции пользователя
02
Попытка различить терминальных пользователей средствами 1С — все сеансы показывают один сервер, нужен анализ RDP-сессий
03
Завершение сеансов без предупреждения пользователей — потеря несохранённых данных
04
Ожидание полного списка сеансов без административных прав — доступен только собственный сеанс
05
Игнорирование журнала регистрации при расследовании — список сеансов показывает только текущий момент

Проверка результата

После определения рабочего места убедитесь, что данные корректны. Сопоставьте имя компьютера с фактической машиной пользователя: в Windows его можно посмотреть в свойствах системы или командой hostname. Если имя в сеансе 1С совпадает — данные достоверны.

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

Контрольные точки

Как проверить результат

Имя компьютера в сеансе
Норма

Совпадает с реальным именем машины пользователя (hostname)

Тревожный признак

Показывает имя сервера 1С или веб-сервера у обычного клиента

Количество сеансов программно и в консоли
Норма

Числа совпадают

Тревожный признак

Программно виден только один сеанс — не хватает прав

Данные журнала регистрации
Норма

События входа содержат компьютер и время

Тревожный признак

Событий нет — журнал сокращён или отбор настроен неверно

FAQ

Как узнать, с какого компьютера пользователь работал вчера?

Откройте журнал регистрации, установите отбор по пользователю и событиям «Сеанс. Начало» или «Сеанс. Аутентификация» за нужную дату. В деталях каждого события указан компьютер и время подключения.

Почему ИмяКомпьютера() возвращает имя сервера, а не моего ПК?

Код выполняется в серверном контексте (на сервере 1С), поэтому функция возвращает имя той машины, где исполняется. Вызовите функцию в клиентской процедуре и передайте значение на сервер параметром.

Все сеансы показывают один и тот же компьютер — это ошибка?

Нет. Так бывает при работе через терминальный сервер или веб-сервер: все подключения физически инициируются одной машиной. Реальные рабочие места смотрите средствами терминального сервера (qwinsta) или в журналах веб-сервера.

Может ли обычный пользователь увидеть список всех рабочих мест?

Через «Активных пользователей» — да, если у него есть доступ к этой функции в конфигурации. Программно полный список сеансов через ПолучитьСеансыИнформационнойБазы() доступен только с правом «Администрирование».

Как определить рабочее место фонового задания?

Фоновые задания исполняются на сервере 1С, поэтому их «рабочее место» — это сервер. В консоли кластера такие сеансы видны с типом приложения «Фоновое задание», в колонке «Компьютер» будет имя сервера.

Как привязать в коде операцию к конкретному рабочему месту?

При начале работы сеанса сохраните ИмяКомпьютера(), полученное на клиенте, в параметры сеанса или в регистр сведений. Далее в прикладной логике сравнивайте текущее значение с сохранённым и разрешайте или запрещайте операцию.

Итог

Что важно запомнить

Текущее рабочее место смотрят в «Активных пользователях» или консоли кластера (ветка «Сеансы»), историю — в журнале регистрации, программно — через ИмяКомпьютера() в клиентском контексте. В терминальном режиме средств 1С недостаточно: нужны инструменты терминального сервера.