Глобальный контекст.ПолучитьТекущийСеансИнформационнойБазы

Методы · GetCurrentInfoBaseSession

Возвращает текущий сеанс информационной базы.

Синтаксис

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

Глобальный контекст.ПолучитьТекущийСеансИнформационнойБазы (Global context.GetCurrentInfoBaseSession)

Глобальный контекст (Global context)

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

Доступен, начиная с версии 8.3.7.

Синтаксис:
ПолучитьТекущийСеансИнформационнойБазы()
Возвращаемое значение:
Тип: СеансИнформационнойБазы.

Описание:

Возвращает текущий сеанс информационной базы.

Доступность:

Сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.3.7.

Методическая информация

Практические примеры

Получить текущий сеанс, не выводя персональные сведения

Сеанс и физическое соединение — разные объекты. НомерСоединения = 0 означает отсутствие назначенного соединения, а не повреждённый сеанс.

Где и как запускать

Полный серверный общий модуль учебной копии базы. Чтение встроенного API, не администрирование RAS/COM.

Подготовка

  1. Только отдельная учебная копия базы. Создайте серверный общий модуль УчебныеЗадачи; вставьте полный модуль выбранного урока и вызовите ВыполнитьПример() из серверной учебной команды.

  2. Это встроенный API 1С, не COM/RAS. Соединение с агентом кластера, логин администратора и регистрация COM не нужны. Тонкий клиент вызывает серверную команду, не выполняет эти функции напрямую.

  3. Для списков сеансов/соединений по локальной справке нужно право АктивныеПользователи. Если его нет, пример останавливается с пояснением; права и привилегированный режим код не меняет.

  4. Проверки только читают данные. Они не завершают сеансы, не отключают соединения, не меняют часовые пояса и не выводят IP, имя компьютера или имя пользователя в журнал.

Процедура ВыполнитьПример() Экспорт
    Текущий = ПолучитьТекущийСеансИнформационнойБазы();
    Если ТипЗнч(Текущий) <> Тип("СеансИнформационнойБазы") Тогда
        ВызватьИсключение "Ожидался встроенный СеансИнформационнойБазы, не COM Сеанс";
    КонецЕсли;
    Сообщить(ТипЗнч(Текущий.НомерСеанса) = Тип("Число"));
    Сообщить(ТипЗнч(Текущий.НачалоСеанса) = Тип("Дата"));
    Сообщить("Номер своего сеанса: " + Строка(Текущий.НомерСеанса));
    Сообщить("Приложение: " + Текущий.ИмяПриложения);
    Сообщить("Имя компьютера заполнено: " + Строка(НЕ ПустаяСтрока(Текущий.ИмяКомпьютера)));
    Сообщить("Адрес клиента заполнен: " + Строка(НЕ ПустаяСтрока(Текущий.IPАдресКлиента)));
    Если Текущий.Пользователь = Неопределено Тогда
        Сообщить("Пользователь этого сеанса не определён");
    Иначе
        Сообщить("Объект пользователя присутствует; имя не выводится");
    КонецЕсли;
    Если Текущий.НомерСоединения = 0 Тогда
        Сообщить("У сеанса сейчас нет назначенного соединения");
    Иначе
        Сообщить("Номер текущего соединения: " + Строка(Текущий.НомерСоединения));
    КонецЕсли;
    Фоновое = Текущий.ПолучитьФоновоеЗадание();
    Если Фоновое = Неопределено Тогда
        Сообщить("Сеанс не связан с выполнением фонового задания");
    Иначе
        Сообщить(ТипЗнч(Фоновое) = Тип("ФоновоеЗадание"));
        Сообщить("Сеанс принадлежит фоновому заданию; оно не отменяется");
    КонецЕсли;
КонецПроцедуры

Разбор по шагам

  1. Функция возвращает СеансИнформационнойБазы, а не административный COM-объект Сеанс с английскими полями.

  2. Номер сеанса уникален среди сеансов текущей базы. НомерСоединения — отдельное число и по справке может быть 0.

  3. ИмяПриложения показывает контекст: например 1CV8C, WebClient, BackgroundJob. Не объявляем все вызовы обязательно пользовательским тонким клиентом.

  4. IP и имя компьютера проверяются на заполненность, но сами строки не выводятся. Пользователь может быть Неопределено и проверяется до возможного дальнейшего обращения.

  5. ПолучитьФоновоеЗадание возвращает связанное задание или Неопределено. Выполнение из обычной команды обычно не связано с фоновым заданием; в фоновой процедуре появляется другая ветка. Новое задание не запускается.

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

  1. Две контрольные Истина, фактический номер и идентификатор приложения, два признака заполненности и пояснения пользователя/соединения.

  2. Нулевой номер соединения обрабатывается штатно; положительное число не навязывается как обязательный результат.

Ожидаемый результат

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

На что обратить внимание

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

  2. Не добавляйте в диагностику имена пользователей, IP и токены без отдельной необходимости.

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

Сопоставить свой сеанс с описанием соединения

У СоединениеИнформационнойБазы есть время начала соединения и время начала сеанса. Не подменяем одно другим и не раскрываем список пользователей.

Где и как запускать

Полный серверный общий модуль учебной копии базы. Чтение встроенного API, не администрирование RAS/COM.

Подготовка

  1. Только отдельная учебная копия базы. Создайте серверный общий модуль УчебныеЗадачи; вставьте полный модуль выбранного урока и вызовите ВыполнитьПример() из серверной учебной команды.

  2. Это встроенный API 1С, не COM/RAS. Соединение с агентом кластера, логин администратора и регистрация COM не нужны. Тонкий клиент вызывает серверную команду, не выполняет эти функции напрямую.

  3. Для списков сеансов/соединений по локальной справке нужно право АктивныеПользователи. Если его нет, пример останавливается с пояснением; права и привилегированный режим код не меняет.

  4. Проверки только читают данные. Они не завершают сеансы, не отключают соединения, не меняют часовые пояса и не выводят IP, имя компьютера или имя пользователя в журнал.

Процедура ВыполнитьПример() Экспорт
    Текущий = ПолучитьТекущийСеансИнформационнойБазы();
    Если ТипЗнч(Текущий) <> Тип("СеансИнформационнойБазы") Тогда
        ВызватьИсключение "Ожидался встроенный СеансИнформационнойБазы, не COM Сеанс";
    КонецЕсли;
    Попытка
        Соединения = ПолучитьСоединенияИнформационнойБазы();
    Исключение
        Сообщить("Список соединений недоступен; проверьте право АктивныеПользователи и причину ошибки: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    СвязейСвоегоСеанса = 0;
    Для Каждого Соединение Из Соединения Цикл
        Если Соединение.НомерСеанса <> Текущий.НомерСеанса Тогда
            Продолжить;
        КонецЕсли;
        СвязейСвоегоСеанса = СвязейСвоегоСеанса + 1;
        Сообщить("Номер собственного соединения: " + Строка(Соединение.НомерСоединения));
        Сообщить(ТипЗнч(Соединение.НачалоСоединения) = Тип("Дата"));
        Сообщить(ТипЗнч(Соединение.НачалоСеанса) = Тип("Дата"));
        Сообщить("Приложение соединения: " + Соединение.ИмяПриложения);
        Сообщить("Компьютер указан: " + Строка(НЕ ПустаяСтрока(Соединение.ИмяКомпьютера)));
        Сообщить("Пользователь определён: " + Строка(Соединение.Пользователь <> Неопределено));
    КонецЦикла;
    Сообщить("Связей собственного сеанса в снимке: " + Строка(СвязейСвоегоСеанса));
    Если СвязейСвоегоСеанса = 0 Тогда
        Сообщить("Снимок не нашёл назначенного соединения; это не команда завершения сеанса");
    КонецЕсли;
КонецПроцедуры

Разбор по шагам

  1. Список соединений тоже требует право АктивныеПользователи. Ошибка не заменяется молча пустым массивом.

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

  3. НачалоСоединения и НачалоСеанса — разные даты. Проверяются типы, но не навязывается порядок двух дат или их равенство.

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

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

  1. Для каждой найденной своей связи два Истина о типах дат и безопасная диагностика.

  2. При отсутствии связи — количество 0 и пояснение; ошибки отсоединения и завершение сеанса не вызываются.

Ожидаемый результат

Сеанс сопоставлен с текущими описаниями соединений без смешивания времён начала.

На что обратить внимание

  1. Не утверждайте, что каждый сеанс обязан иметь ровно одно соединение в любом снимке.

  2. Список соединений не является обещанием состояния на момент следующей команды.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.