Кто из пользователей работает в 1С через браузер: поиск сеансов веб-клиента

· 9 мин

Содержание

Веб-клиент 1С определяют по типу приложения сеанса. В консоли кластера это колонка «Приложение» со значением «Веб-клиент», в утилите rac — поле app-id : WebClient, во встроенном языке — ПолучитьТекущийСеансИнформационнойБазы().ИмяПриложения = "WebClient". Тот же признак работает как отбор в журнале регистрации.

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

Чем сеанс через браузер отличается от обычного

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

Из этого следуют три вещи, которые видно в любом инструменте диагностики:

  • 🖥️ Компьютер сеанса — имя веб-сервера. Если публикация стоит на машине WEB01, все браузерные сеансы будут «с компьютера» WEB01.
  • 🌐 IP пользователя знает только веб-сервер. Его ищут в логах IIS или Apache, а не в 1С.
  • 🔑 Лицензию для веб-клиента получает сервер 1С: клиентская лицензия берётся на сервере, локальный ключ пользователя тут не участвует.

Отдельный случай — тонкий клиент, подключённый к базе по адресу http:// или https://. Он тоже ходит через веб-сервер, и в поле «Компьютер» у него тоже веб-сервер. Но тип приложения у такого сеанса — «Тонкий клиент», а не «Веб-клиент».

Как подключилисьТип приложения в 1СЧто в поле «Компьютер»
БраузерВеб-клиент (WebClient)Веб-сервер с публикацией
Тонкий клиент по http/httpsТонкий клиент (1CV8C)Веб-сервер с публикацией
Тонкий клиент к серверу 1СТонкий клиент (1CV8C)ПК пользователя или терминальный сервер
Толстый клиентТолстый клиент (1CV8)ПК пользователя или терминальный сервер

Если в списке сеансов десятки строк с одним и тем же компьютером, это либо веб-сервер, либо терминальный сервер. Отличить их помогает колонка «Приложение».

Определяем веб-клиент в консоли администрирования кластера

Самый быстрый способ для клиент-серверной базы — оснастка «Администрирование серверов 1С Предприятия».

  1. Запустите консоль и откройте нужный центральный сервер. Если кластер защищён, введите логин и пароль администратора кластера.
  2. Разверните ветку Кластеры → <имя кластера> → Информационные базы → <база> → Сеансы.
  3. Найдите колонку «Приложение». Сеансы браузера подписаны «Веб-клиент».
  4. Щёлкните по заголовку колонки, чтобы собрать все веб-сеансы подряд.

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

Без доступа к серверу подойдёт список активных пользователей. В Конфигураторе он открывается через Администрирование → Активные пользователи, в нём та же колонка «Приложение». Этот вариант работает и для файловой базы, опубликованной на веб-сервере, где консоли кластера нет вовсе. Минус один: список показывает только текущую базу.

Колонка «Приложение» помогает и с соседними типами сеансов. Там же встречаются «Конфигуратор», «Фоновое задание», «COM-соединение», «Консоль кластера». Их легко принять за пользователей, если смотреть только на счётчик.

Команда «Удалить» у сеанса в консоли обрывает работу пользователя без сохранения. Перед этим предупредите человека или дождитесь, пока он закончит. Несохранённые данные в открытых формах пропадут.

Если консоль не открывается на машине администратора после обновления платформы, обычно не зарегистрирована библиотека radmin.dll нужной версии. Её регистрируют от имени администратора Windows командой regsvr32 с полным путём к файлу в каталоге bin установленной платформы.

Поиск браузерных сеансов через rac и ras

На Linux-серверах и для скриптов удобнее утилита rac. Она работает через сервер администрирования ras, который слушает порт 1545 по умолчанию.

Сначала узнайте идентификатор кластера:

rac cluster list

Затем выведите сеансы. Если на кластере есть администраторы, добавьте --cluster-user и --cluster-pwd:

rac session list --cluster=<uuid-кластера>

Каждый сеанс выводится блоком строк вида поле : значение, блоки разделены пустой строкой. Нужное поле — app-id. У веб-клиента оно равно WebClient. Другие значения, которые пригодятся для сравнения:

  • 1CV8C — тонкий клиент;
  • 1CV8 — толстый клиент;
  • Designer — конфигуратор;
  • BackgroundJob — фоновое задание;
  • COMConnection — внешнее соединение.

Чтобы отфильтровать только браузерные сеансы на Linux, используйте режим абзацев в awk:

rac session list --cluster=<uuid-кластера> | awk -v RS= '/app-id +: WebClient/'

На Windows то же самое делается в PowerShell:

$raw = & rac session list --cluster=<uuid-кластера> | Out-String
$raw -split "\r?\n\r?\n" | Where-Object { $_ -match 'app-id\s*:\s*WebClient' }

В каждом найденном блоке смотрите user-name, session-id, host, started-at и last-active-at. Ограничить вывод одной базой можно параметром --infobase с её идентификатором; список баз с идентификаторами даёт rac infobase summary list --cluster=<uuid-кластера>. Для сведений о выданных лицензиях есть rac session list --licenses. Точный набор параметров для вашей версии платформы показывает rac help session.

Где вы ищете веб-клиент?

Журнал регистрации: кто и когда заходил через браузер

Консоль и rac показывают только тех, кто сейчас в базе. Чтобы узнать, кто работал через браузер вчера или неделю назад, нужен журнал регистрации.

В типовых конфигурациях на интерфейсе «Такси» журнал открывается так: Администрирование → Обслуживание → Журнал регистрации. Далее:

  1. Откройте отбор журнала.
  2. В поле приложения оставьте только «Веб-клиент».
  3. В событиях выберите «Сеанс. Начало» — так вы получите список входов, а не все действия.
  4. Задайте период и примените отбор.

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

Тот же отбор работает из Конфигуратора: Администрирование → Журнал регистрации, отбор по колонке «Приложение».

Номер сеанса из журнала совпадает с номером в консоли кластера. По нему удобно связать «кто сейчас висит в базе» с тем, что этот сеанс успел сделать.

Если журналов много, выгрузите их программно. Обработку запускают на сервере, пользователю нужны административные права:

&НаСервере
Процедура ВходыЧерезБраузерНаСервере()

    Отбор = Новый Структура;
    Отбор.Вставить("ДатаНачала", НачалоДня(ТекущаяДатаСеанса()) - 7 * 86400);
    Отбор.Вставить("ИмяПриложения", "WebClient");
    Отбор.Вставить("Событие", "_$Session$_.Start");

    Данные = Новый ТаблицаЗначений;
    ВыгрузитьЖурналРегистрации(Данные, Отбор);

    Для Каждого Строка Из Данные Цикл
        Сообщить(СтрШаблон("%1 | %2 | сеанс %3 | %4",
            Формат(Строка.Дата, "ДФ='дд.ММ.гггг ЧЧ:мм'"),
            Строка.ИмяПользователя,
            Формат(Строка.Сеанс, "ЧГ=0"),
            Строка.Компьютер));
    КонецЦикла;

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

Код выводит входы через браузер за последние семь дней. Строку _$Session$_.Start менять не нужно: это служебный идентификатор события «Сеанс. Начало».

Как узнать тип клиента из кода конфигурации

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

На клиенте используйте инструкцию препроцессора. Код внутри неё попадёт только в веб-клиент:

&НаКлиенте
Процедура ПриОткрытии(Отказ)

    #Если ВебКлиент Тогда
        Элементы.ЗагрузитьИзФайла.Видимость = Ложь;
    #КонецЕсли

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

На сервере препроцессор не поможет: серверный код один для всех клиентов. Тип приложения берите из сеанса:

&НаСервере
Функция ЭтоВебКлиент()

    Возврат ПолучитьТекущийСеансИнформационнойБазы().ИмяПриложения = "WebClient";

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

Список всех веб-сеансов базы даёт функция ПолучитьСеансыИнформационнойБазы(). Ей нужны административные права:

&НаСервере
Процедура ВебСеансыНаСервере()

    Для Каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл
        Если Сеанс.ИмяПриложения <> "WebClient" Тогда
            Продолжить;
        КонецЕсли;
        ИмяПользователя = ?(Сеанс.Пользователь = Неопределено, "<без пользователя>", Сеанс.Пользователь.Имя);
        Сообщить(СтрШаблон("Сеанс %1 | %2 | %3 | с %4",
            Формат(Сеанс.НомерСеанса, "ЧГ=0"),
            ИмяПользователя,
            Сеанс.ИмяКомпьютера,
            Формат(Сеанс.НачалоСеанса, "ДФ='дд.ММ ЧЧ:мм'")));
    КонецЦикла;

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

Человекочитаемое название типа даёт ПредставлениеПриложения("WebClient") — функция вернёт «Веб-клиент».

Чтобы понять, какой браузер у пользователя, создайте на клиенте Новый СистемнаяИнформация и прочитайте свойство ИнформацияПрограммыПросмотра. В веб-клиенте там строка User-Agent браузера, в тонком клиенте — пусто. Это помогает при разборе жалоб вида «у меня не открывается форма»: часто дело в неподдерживаемой версии браузера.

Как запретить или ограничить вход через браузер

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

УровеньЧто делаемКого затрагивает
Права в конфигурацииСнимаем право «Веб-клиент» у ролиКонкретных пользователей
ПубликацияУбираем доступ клиентских приложений или саму публикациюВсех, кто ходит через этот веб-сервер
Веб-серверАутентификация, фильтр по IP, HTTPSВсех, кто открывает адрес публикации

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

Публикация. В Конфигураторе откройте Администрирование → Публикация на веб-сервере. Флажок «Публиковать доступ для клиентских приложений» отвечает за веб-клиент и тонкий клиент по http. Если снять его, останутся только опубликованные веб-сервисы и HTTP-сервисы. Публикацию можно и удалить целиком кнопкой «Отключить».

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

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

Проверка безопасности публикации
Выполнено: 0 / 5

Когда в 1С не видно, кто зашёл: связка с логами веб-сервера

Классическая задача: в журнале видно, что пользователь Бухгалтер2 вошёл через браузер в 22:40, а сам сотрудник это отрицает. 1С покажет только веб-сервер. Дальше работают с логами самого веб-сервера.

  1. Возьмите из журнала регистрации точное время начала сеанса.
  2. Откройте лог веб-сервера. У IIS он по умолчанию лежит в %SystemDrive%\inetpub\logs\LogFiles, у Apache — в каталоге логов, указанном в его конфигурации.
  3. Найдите запросы к адресу публикации в ту же минуту.
  4. В строке лога будет IP клиента и строка User-Agent браузера.

Учтите часовой пояс: IIS по умолчанию пишет время в UTC. Для Москвы к времени из лога IIS прибавьте 3 часа, чтобы сравнить его с журналом 1С.

Если перед веб-сервером стоит прокси или балансировщик, в логе окажется его адрес. Тогда нужен лог прокси или заголовок с исходным IP клиента, который прокси передаёт дальше.

Частые вопросы

Можно ли определить веб-клиент в файловой базе?
Да. Откройте «Активные пользователи» или журнал регистрации с отбором по приложению «Веб-клиент». Консоли кластера у файловой базы нет, но тип приложения сеанса фиксируется так же.
Почему тонкий клиент показывает компьютер веб-сервера?
Он подключён к базе по адресу http или https, то есть через публикацию. Тип приложения у него остаётся «Тонкий клиент», меняется только путь подключения.
Тратит ли веб-клиент лицензию?
Да, каждый сеанс веб-клиента занимает клиентскую лицензию, как и тонкий клиент. Получает её сервер 1С, а не компьютер пользователя.
Как в коде отличить веб-клиент от мобильного клиента?
На клиенте используйте препроцессор: #Если ВебКлиент Тогда и #Если МобильныйКлиент Тогда. На сервере сравнивайте ИмяПриложения текущего сеанса с нужным значением.
Можно ли разрешить браузер только одному пользователю?
Да. Право «Веб-клиент» должно быть в роли, которая есть только у этого пользователя. У остальных ролей это право снимают.