Где увидеть данные текущего сеанса и значения ПараметрыСеанса

· 9 мин

Содержание

Быстрее всего посмотреть параметры сеанса в 1С так: поставьте точку останова в серверной процедуре, запустите отладку и вычислите выражение ПараметрыСеанса.ИмяПараметра через Отладка → Вычислить выражение (Shift+F9). Если нужен не объект метаданных «Параметр сеанса», а сведения о самом сеансе — номер, компьютер, приложение, время входа, — их показывают консоль администрирования серверов, окно «Активные пользователи» и функция ПолучитьТекущийСеансИнформационнойБазы().

Выбор способа зависит от задачи. Разработчик проверяет значения в отладчике или выводит их кодом. Администратор смотрит список сеансов в консоли кластера или через rac. Пользователь без прав на Конфигуратор видит только активных пользователей и журнал регистрации.

Два смысла «параметров сеанса» и где искать каждый

Под одним запросом прячутся два разных вопроса. Их полезно развести сразу, иначе легко искать не там.

📌 Параметры сеанса как объект метаданных. В дереве конфигурации это ветка Общие → Параметры сеанса. Каждый параметр — именованное значение, которое живёт, пока открыт сеанс: текущий пользователь, организация по умолчанию, флаги режима работы. Значения задаются в модуле сеанса, в процедуре УстановкаПараметровСеанса, а читаются через свойство глобального контекста ПараметрыСеанса.

📌 Свойства самого сеанса. Номер сеанса, имя компьютера, тип клиента, время начала, пользователь информационной базы, признак фонового задания. Это объект СеансИнформационнойБазы, и в конфигурации его настраивать не нужно — платформа заполняет его сама.

Что нужно увидетьГде смотретьКому доступно
Значение конкретного параметра сеансаОтладчик, «Вычислить выражение»Разработчик
Все параметры сеанса разомКод-обработка с обходом Метаданные.ПараметрыСеансаРазработчик, администратор
Номер и данные текущего сеансаПолучитьТекущийСеансИнформационнойБазы()Любой код на сервере
Все сеансы базы на сервереКонсоль администрирования, rac session listАдминистратор кластера
Кто сейчас в базе«Активные пользователи»Пользователь с правом администрирования
Что сеанс делал раньшеЖурнал регистрации, отбор по сеансуАдминистратор

Данные текущего сеанса: объект СеансИнформационнойБазы

Платформа отдаёт описание текущего сеанса функцией ПолучитьТекущийСеансИнформационнойБазы(). Она доступна на сервере, поэтому с клиента её вызывают через серверную функцию. Самые полезные свойства:

  • 🔢 НомерСеанса — тот самый номер, который видно в консоли кластера и в журнале регистрации;
  • 🖥 ИмяКомпьютера — машина, с которой подключились;
  • 🧩 ИмяПриложения — тип клиента (1CV8C — тонкий клиент, 1CV8 — толстый, WebClient — веб-клиент, Designer — Конфигуратор, BackgroundJob — фоновое задание);
  • 🕐 НачалоСеанса — дата и время входа;
  • 👤 Пользователь — пользователь информационной базы.

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

&НаСервереБезКонтекста
Функция ОписаниеТекущегоСеанса()

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

    Возврат СтрШаблон("Сеанс № %1, начат %2, компьютер %3, приложение %4, пользователь %5",
        Формат(Сеанс.НомерСеанса, "ЧГ=0"),
        Строка(Сеанс.НачалоСеанса),
        Сеанс.ИмяКомпьютера,
        ПредставлениеПриложения(Сеанс.ИмяПриложения),
        ИмяПользователя());

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

&НаКлиенте
Процедура ПоказатьСеанс(Команда)
    Сообщить(ОписаниеТекущегоСеанса());
КонецПроцедуры

Функция ПредставлениеПриложения превращает служебное 1CV8C в читаемое «Тонкий клиент». Формат(..., "ЧГ=0") убирает разделитель разрядов, иначе номер 12345 превратится в «12 345».

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

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

Значения ПараметрыСеанса: отладчик и код

Через отладчик

Это основной способ для разработчика. Порядок такой:

  1. Откройте Конфигуратор и запустите отладку (Отладка → Начать отладку).
  2. Поставьте точку останова в серверном коде: в модуле объекта, в процедуре &НаСервере или в общем модуле с флагом «Сервер».
  3. Выполните действие в клиенте, чтобы программа остановилась на точке.
  4. Нажмите Shift+F9 и введите выражение, например ПараметрыСеанса.ТекущийПользователь.
  5. Чтобы увидеть всю коллекцию, вычислите просто ПараметрыСеанса и разверните её в окне результата.

Значение можно перенести в «Табло», тогда оно будет обновляться на каждом шаге отладки.

Если точка останова стоит в клиентской процедуре (&НаКлиенте), выражение с ПараметрыСеанса не вычислится. В тонком и веб-клиенте это свойство на клиенте недоступно — остановитесь в серверном коде.

Кодом: все параметры одним списком

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

&НаСервереБезКонтекста
Функция ЗначенияПараметровСеанса()

    Результат = Новый Соответствие;

    Для Каждого ОписаниеПараметра Из Метаданные.ПараметрыСеанса Цикл
        Имя = ОписаниеПараметра.Имя;
        Попытка
            Результат.Вставить(Имя, Строка(ПараметрыСеанса[Имя]));
        Исключение
            Результат.Вставить(Имя, "<не прочитан: "
                + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + ">");
        КонецПопытки;
    КонецЦикла;

    Возврат Результат;

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

&НаКлиенте
Процедура ВывестиПараметры(Команда)
    Для Каждого Элемент Из ЗначенияПараметровСеанса() Цикл
        Сообщить(Элемент.Ключ + " = " + Элемент.Значение);
    КонецЦикла;
КонецПроцедуры

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

Второй источник исключений — права. У каждого параметра сеанса в ролях есть права «Получение» и «Установка». Пользователю без права «Получение» значение не покажут.

В конфигурациях на БСП (Бухгалтерия 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С?
Да, присвоением в серверном коде: ПараметрыСеанса.Имя = Значение. Нужно право «Установка» на этот параметр. Новое значение действует до конца текущего сеанса.
Почему значение параметра сеанса разное у двух пользователей?
Параметры принадлежат сеансу, а не базе. Каждый сеанс заполняет их сам в процедуре УстановкаПараметровСеанса, обычно на основе пользователя и его настроек.
Сохраняются ли параметры сеанса после выхода из программы?
Нет. При завершении сеанса значения теряются. Для хранения между сеансами используют константы, регистры сведений или хранилища настроек.
Как найти номер своего сеанса без Конфигуратора?
Откройте «Активные пользователи» через «Все функции» и найдите строку со своим компьютером. Номер есть в колонке сеанса.
Можно ли хранить в параметре сеанса таблицу значений?
Нет, тип параметра выбирается из ограниченного набора. Для коллекций используют фиксированные массивы и структуры или хранилище значения.