Где увидеть данные текущего сеанса и значения ПараметрыСеанса
Содержание
Быстрее всего посмотреть параметры сеанса в 1С так: поставьте точку останова в серверной процедуре, запустите отладку и вычислите выражение ПараметрыСеанса.ИмяПараметра через Отладка → Вычислить выражение (Shift+F9). Если нужен не объект метаданных «Параметр сеанса», а сведения о самом сеансе — номер, компьютер, приложение, время входа, — их показывают консоль администрирования серверов, окно «Активные пользователи» и функция ПолучитьТекущийСеансИнформационнойБазы().
Выбор способа зависит от задачи. Разработчик проверяет значения в отладчике или выводит их кодом. Администратор смотрит список сеансов в консоли кластера или через rac. Пользователь без прав на Конфигуратор видит только активных пользователей и журнал регистрации.
Два смысла «параметров сеанса» и где искать каждый
Под одним запросом прячутся два разных вопроса. Их полезно развести сразу, иначе легко искать не там.
📌 Параметры сеанса как объект метаданных. В дереве конфигурации это ветка Общие → Параметры сеанса. Каждый параметр — именованное значение, которое живёт, пока открыт сеанс: текущий пользователь, организация по умолчанию, флаги режима работы. Значения задаются в модуле сеанса, в процедуре УстановкаПараметровСеанса, а читаются через свойство глобального контекста ПараметрыСеанса.
📌 Свойства самого сеанса. Номер сеанса, имя компьютера, тип клиента, время начала, пользователь информационной базы, признак фонового задания. Это объект СеансИнформационнойБазы, и в конфигурации его настраивать не нужно — платформа заполняет его сама.
| Что нужно увидеть | Где смотреть | Кому доступно |
|---|---|---|
| Значение конкретного параметра сеанса | Отладчик, «Вычислить выражение» | Разработчик |
| Все параметры сеанса разом | Код-обработка с обходом Метаданные.ПараметрыСеанса | Разработчик, администратор |
| Номер и данные текущего сеанса | ПолучитьТекущийСеансИнформационнойБазы() | Любой код на сервере |
| Все сеансы базы на сервере | Консоль администрирования, rac session list | Администратор кластера |
| Кто сейчас в базе | «Активные пользователи» | Пользователь с правом администрирования |
| Что сеанс делал раньше | Журнал регистрации, отбор по сеансу | Администратор |
Данные текущего сеанса: объект СеансИнформационнойБазы
Платформа отдаёт описание текущего сеанса функцией ПолучитьТекущийСеансИнформационнойБазы(). Она доступна на сервере, поэтому с клиента её вызывают через серверную функцию. Самые полезные свойства:
- 🔢
НомерСеанса— тот самый номер, который видно в консоли кластера и в журнале регистрации; - 🖥
ИмяКомпьютера— машина, с которой подключились; - 🧩
ИмяПриложения— тип клиента (1CV8C— тонкий клиент,1CV8— толстый,WebClient— веб-клиент,Designer— Конфигуратор,BackgroundJob— фоновое задание); - 🕐
НачалоСеанса— дата и время входа; - 👤
Пользователь— пользователь информационной базы.
Если нужен только номер, есть короткая функция НомерСеансаИнформационнойБазы(). Пример для формы обработки, который собирает сводку и показывает её пользователю:
&НаСервереБезКонтекста
Функция ОписаниеТекущегоСеанса()
Сеанс = ПолучитьТекущийСеансИнформационнойБазы();
Возврат СтрШаблон("Сеанс № %1, начат %2, компьютер %3, приложение %4, пользователь %5",
Формат(Сеанс.НомерСеанса, "ЧГ=0"),
Строка(Сеанс.НачалоСеанса),
Сеанс.ИмяКомпьютера,
ПредставлениеПриложения(Сеанс.ИмяПриложения),
ИмяПользователя());
КонецФункции
&НаКлиенте
Процедура ПоказатьСеанс(Команда)
Сообщить(ОписаниеТекущегоСеанса());
КонецПроцедуры
Функция ПредставлениеПриложения превращает служебное 1CV8C в читаемое «Тонкий клиент». Формат(..., "ЧГ=0") убирает разделитель разрядов, иначе номер 12345 превратится в «12 345».
Если пользователей в базе нет, ИмяПользователя() вернёт пустую строку. Это не ошибка, а признак того, что вход идёт без авторизации.
Список всех сеансов базы даёт функция ПолучитьСеансыИнформационнойБазы(): она возвращает массив тех же объектов СеансИнформационнойБазы. Для неё нужны административные права, обычному пользователю она недоступна.
Значения ПараметрыСеанса: отладчик и код
Через отладчик
Это основной способ для разработчика. Порядок такой:
- Откройте Конфигуратор и запустите отладку (
Отладка → Начать отладку). - Поставьте точку останова в серверном коде: в модуле объекта, в процедуре
&НаСервереили в общем модуле с флагом «Сервер». - Выполните действие в клиенте, чтобы программа остановилась на точке.
- Нажмите Shift+F9 и введите выражение, например
ПараметрыСеанса.ТекущийПользователь. - Чтобы увидеть всю коллекцию, вычислите просто
ПараметрыСеансаи разверните её в окне результата.
Значение можно перенести в «Табло», тогда оно будет обновляться на каждом шаге отладки.
Если точка останова стоит в клиентской процедуре (&НаКлиенте), выражение с ПараметрыСеанса не вычислится. В тонком и веб-клиенте это свойство на клиенте недоступно — остановитесь в серверном коде.
Кодом: все параметры одним списком
Когда параметров много или отладка недоступна (например, нужно проверить рабочую базу), удобнее внешняя обработка. Она обходит метаданные и читает значения по имени:
&НаСервереБезКонтекста
Функция ЗначенияПараметровСеанса()
Результат = Новый Соответствие;
Для Каждого ОписаниеПараметра Из Метаданные.ПараметрыСеанса Цикл
Имя = ОписаниеПараметра.Имя;
Попытка
Результат.Вставить(Имя, Строка(ПараметрыСеанса[Имя]));
Исключение
Результат.Вставить(Имя, "<не прочитан: "
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + ">");
КонецПопытки;
КонецЦикла;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ВывестиПараметры(Команда)
Для Каждого Элемент Из ЗначенияПараметровСеанса() Цикл
Сообщить(Элемент.Ключ + " = " + Элемент.Значение);
КонецЦикла;
КонецПроцедуры
Блок Попытка здесь не для красоты. Чтение параметра, у которого нет значения, вызывает процедуру УстановкаПараметровСеанса в модуле сеанса. Если она его не заполнила, платформа выдаёт исключение — и без перехвата обработка упадёт на первом же таком параметре.
Второй источник исключений — права. У каждого параметра сеанса в ролях есть права «Получение» и «Установка». Пользователю без права «Получение» значение не покажут.
В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) почти всегда есть ПараметрыСеанса.ТекущийПользователь — ссылка на элемент справочника «Пользователи». С неё удобно начинать проверку, если не знаете имён других параметров.
Из чего состоит значение
Строковое представление скрывает тип. Ссылка на справочник покажет наименование, фиксированный массив — строку «ФиксированныйМассив». Если нужно содержимое коллекции, вычислите её в отладчике и разверните, а не печатайте через Строка().
Сеансы в консоли администрирования серверов и через rac
В клиент-серверном варианте все сеансы видны в консоли администрирования серверов 1С:Предприятия. Путь в дереве консоли:
Central 1C:Enterprise 8.3 servers → <имя сервера> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы
В списке видны пользователь, компьютер, приложение, номер сеанса, время начала и последней активности, а также рабочий процесс, на котором сеанс обслуживается. Двойной щелчок открывает свойства сеанса с подробностями: объём вызовов, время работы с СУБД, блокировки.
Консоль подключается к агенту сервера (по умолчанию порт 1540). Если консоль не открывается после переустановки платформы, обычно помогает перерегистрация оснастки — запуск RegMSC.cmd из каталога bin нужной версии платформы от имени администратора.
На Linux и в скриптах тот же список даёт утилита rac, которая работает через сервер администрирования ras:
rac cluster list
rac infobase summary list --cluster=<uuid_кластера>
rac session list --cluster=<uuid_кластера> --infobase=<uuid_базы>
Первая команда даёт идентификатор кластера, вторая — идентификатор базы, третья — сеансы только этой базы. Номер сеанса в выводе совпадает с НомерСеанса в коде и с полем «Сеанс» в журнале регистрации. Остальные параметры команд смотрите в rac help session.
Из консоли можно удалить сеанс — пользователь потеряет несохранённые данные. Перед удалением убедитесь, что это зависший сеанс, а не человек посреди проведения документа. Делайте это вне рабочего времени или после предупреждения пользователя.
Параметры сеанса как объекты метаданных консоль не показывает. Их значения живут внутри рабочего процесса, и увидеть их можно только из кода или отладчика.
Окно «Активные пользователи» и файловая база
Для файловой базы консоли кластера нет. Посмотреть, кто сейчас работает, можно двумя путями:
- в режиме 1С:Предприятие:
Главное меню → Все функции → Стандартные → Активные пользователи(если пункта «Все функции» нет, включите отображение этой команды вГлавное меню → Сервис → Параметры); - в Конфигураторе:
Администрирование → Активные пользователи.
В списке видны пользователь, компьютер, приложение, время начала работы и номер сеанса. Из окна «Активные пользователи» можно перейти в журнал регистрации с отбором по выбранному сеансу — это быстрый способ понять, что конкретный человек делал за день.
Окно показывает не только людей: в нём видны и открытые Конфигураторы, и фоновые задания, и внешние соединения. Если в списке есть сеанс с приложением «Фоновое задание», это не забытый пользователь, а работа регламентного задания.
Диагностика: записать параметры сеанса в журнал
Отладчик неудобен, когда ошибка воспроизводится только у одного пользователя или только в рабочей базе. Тогда значения параметров пишут в журнал регистрации прямо из кода:
Процедура ЗаписатьПараметрыСеансаВЖурнал() Экспорт
Сеанс = ПолучитьТекущийСеансИнформационнойБазы();
Строки = Новый Массив;
Строки.Добавить("Приложение: " + Сеанс.ИмяПриложения);
Строки.Добавить("Компьютер: " + Сеанс.ИмяКомпьютера);
Для Каждого ОписаниеПараметра Из Метаданные.ПараметрыСеанса Цикл
Попытка
Значение = Строка(ПараметрыСеанса[ОписаниеПараметра.Имя]);
Исключение
Значение = "<не прочитан>";
КонецПопытки;
Строки.Добавить(ОписаниеПараметра.Имя + ": " + Значение);
КонецЦикла;
ЗаписьЖурналаРегистрации("Диагностика.ПараметрыСеанса",
УровеньЖурналаРегистрации.Информация, , ,
СтрСоединить(Строки, Символы.ПС));
КонецПроцедуры
Процедуру кладут в серверный общий модуль и вызывают в том месте, где поведение расходится с ожидаемым. Потом журнал открывают через Все функции → Стандартные → Журнал регистрации и ставят отбор по событию «Диагностика.ПараметрыСеанса».
Что важно при такой записи:
- 🧹 Уберите вызов после поиска причины. Запись на каждом проведении раздувает журнал.
- 🔒 Не пишите в журнал пароли, токены и персональные данные, даже если они хранятся в параметрах сеанса.
- 🔎 Сравнивайте две записи: «как у того, у кого работает» и «как у того, у кого ошибка». Разница в одном параметре обычно и есть ответ.
Для разбора на уровне сервера есть технологический журнал. Его настраивают файлом logcfg.xml в каталоге conf платформы; события сеансов попадают туда со свойством идентификатора сеанса. Технологический журнал быстро занимает диск: включайте только нужные события и задавайте срок хранения.
Веб-клиент, тонкий и мобильный клиент: что доступно на клиенте
Главное правило: ПараметрыСеанса — свойство серверного контекста. В тонком клиенте, веб-клиенте и мобильном клиенте к нему нельзя обратиться из процедуры &НаКлиенте. Читайте значение в серверной функции и возвращайте результат на клиент, как в примерах выше.
Отличия по клиентам:
| Клиент | ИмяПриложения | Что учесть |
|---|---|---|
| Тонкий клиент | 1CV8C | Параметры сеанса — только через сервер |
| Толстый клиент | 1CV8 | Свойство доступно и в клиентском коде |
| Веб-клиент | WebClient | ИмяКомпьютера обычно показывает веб-сервер, а не машину пользователя |
| Фоновое задание | BackgroundJob | Параметры заполняются заново, в новом сеансе |
Фоновое задание — это отдельный сеанс. Значения, которые вы установили в сеансе пользователя, туда не переходят: модуль сеанса отработает для задания заново. Если задаче нужны данные из пользовательского сеанса, передавайте их параметрами задания.
Для веб-клиента сведения о браузере даёт объект СистемнаяИнформация: в нём есть версия приложения, тип платформы и информация о программе просмотра. Мобильный клиент работает с базой через веб-сервер, поэтому для него действуют те же ограничения, что для тонкого клиента
.
Для отличия веб-клиента от прочих в клиентском коде служит инструкция препроцессора #Если ВебКлиент Тогда. Это быстрее, чем гонять вызов на сервер ради ИмяПриложения.
Частые вопросы
Можно ли изменить параметр сеанса, не перезапуская 1С?
ПараметрыСеанса.Имя = Значение. Нужно право «Установка» на этот параметр. Новое значение действует до конца текущего сеанса.Почему значение параметра сеанса разное у двух пользователей?
УстановкаПараметровСеанса, обычно на основе пользователя и его настроек.