Возвращает текущий сеанс информационной базы.
Синтаксис
ПолучитьТекущийСеансИнформационнойБазы()Полное описание, параметры и ограничения
Глобальный контекст.ПолучитьТекущийСеансИнформационнойБазы (Global context.GetCurrentInfoBaseSession)
Глобальный контекст (Global context)
ПолучитьТекущийСеансИнформационнойБазы (GetCurrentInfoBaseSession)
Доступен, начиная с версии 8.3.7.
Синтаксис:
ПолучитьТекущийСеансИнформационнойБазы()
Возвращаемое значение:
Тип: СеансИнформационнойБазы.
Описание:
Возвращает текущий сеанс информационной базы.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.3.7.
Методическая информация
Практические примеры
Получить текущий сеанс, не выводя персональные сведения
Сеанс и физическое соединение — разные объекты. НомерСоединения = 0 означает отсутствие назначенного соединения, а не повреждённый сеанс.
Где и как запускать
Полный серверный общий модуль учебной копии базы. Чтение встроенного API, не администрирование RAS/COM.
Подготовка
Только отдельная учебная копия базы. Создайте серверный общий модуль УчебныеЗадачи; вставьте полный модуль выбранного урока и вызовите ВыполнитьПример() из серверной учебной команды.
Это встроенный API 1С, не COM/RAS. Соединение с агентом кластера, логин администратора и регистрация COM не нужны. Тонкий клиент вызывает серверную команду, не выполняет эти функции напрямую.
Для списков сеансов/соединений по локальной справке нужно право АктивныеПользователи. Если его нет, пример останавливается с пояснением; права и привилегированный режим код не меняет.
Проверки только читают данные. Они не завершают сеансы, не отключают соединения, не меняют часовые пояса и не выводят IP, имя компьютера или имя пользователя в журнал.
Процедура ВыполнитьПример() Экспорт
Текущий = ПолучитьТекущийСеансИнформационнойБазы();
Если ТипЗнч(Текущий) <> Тип("СеансИнформационнойБазы") Тогда
ВызватьИсключение "Ожидался встроенный СеансИнформационнойБазы, не COM Сеанс";
КонецЕсли;
Сообщить(ТипЗнч(Текущий.НомерСеанса) = Тип("Число"));
Сообщить(ТипЗнч(Текущий.НачалоСеанса) = Тип("Дата"));
Сообщить("Номер своего сеанса: " + Строка(Текущий.НомерСеанса));
Сообщить("Приложение: " + Текущий.ИмяПриложения);
Сообщить("Имя компьютера заполнено: " + Строка(НЕ ПустаяСтрока(Текущий.ИмяКомпьютера)));
Сообщить("Адрес клиента заполнен: " + Строка(НЕ ПустаяСтрока(Текущий.IPАдресКлиента)));
Если Текущий.Пользователь = Неопределено Тогда
Сообщить("Пользователь этого сеанса не определён");
Иначе
Сообщить("Объект пользователя присутствует; имя не выводится");
КонецЕсли;
Если Текущий.НомерСоединения = 0 Тогда
Сообщить("У сеанса сейчас нет назначенного соединения");
Иначе
Сообщить("Номер текущего соединения: " + Строка(Текущий.НомерСоединения));
КонецЕсли;
Фоновое = Текущий.ПолучитьФоновоеЗадание();
Если Фоновое = Неопределено Тогда
Сообщить("Сеанс не связан с выполнением фонового задания");
Иначе
Сообщить(ТипЗнч(Фоновое) = Тип("ФоновоеЗадание"));
Сообщить("Сеанс принадлежит фоновому заданию; оно не отменяется");
КонецЕсли;
КонецПроцедурыРазбор по шагам
Функция возвращает СеансИнформационнойБазы, а не административный COM-объект Сеанс с английскими полями.
Номер сеанса уникален среди сеансов текущей базы. НомерСоединения — отдельное число и по справке может быть 0.
ИмяПриложения показывает контекст: например 1CV8C, WebClient, BackgroundJob. Не объявляем все вызовы обязательно пользовательским тонким клиентом.
IP и имя компьютера проверяются на заполненность, но сами строки не выводятся. Пользователь может быть Неопределено и проверяется до возможного дальнейшего обращения.
ПолучитьФоновоеЗадание возвращает связанное задание или Неопределено. Выполнение из обычной команды обычно не связано с фоновым заданием; в фоновой процедуре появляется другая ветка. Новое задание не запускается.
Как проверить результат
Две контрольные Истина, фактический номер и идентификатор приложения, два признака заполненности и пояснения пользователя/соединения.
Нулевой номер соединения обрабатывается штатно; положительное число не навязывается как обязательный результат.
Ожидаемый результат
Свой сеанс исследован без персональных значений и без административного подключения.
На что обратить внимание
Сеанс может пережить разрыв соединения: не используйте номер соединения как постоянный идентификатор сеанса.
Не добавляйте в диагностику имена пользователей, IP и токены без отдельной необходимости.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Сопоставить свой сеанс с описанием соединения
У СоединениеИнформационнойБазы есть время начала соединения и время начала сеанса. Не подменяем одно другим и не раскрываем список пользователей.
Где и как запускать
Полный серверный общий модуль учебной копии базы. Чтение встроенного API, не администрирование RAS/COM.
Подготовка
Только отдельная учебная копия базы. Создайте серверный общий модуль УчебныеЗадачи; вставьте полный модуль выбранного урока и вызовите ВыполнитьПример() из серверной учебной команды.
Это встроенный API 1С, не COM/RAS. Соединение с агентом кластера, логин администратора и регистрация COM не нужны. Тонкий клиент вызывает серверную команду, не выполняет эти функции напрямую.
Для списков сеансов/соединений по локальной справке нужно право АктивныеПользователи. Если его нет, пример останавливается с пояснением; права и привилегированный режим код не меняет.
Проверки только читают данные. Они не завершают сеансы, не отключают соединения, не меняют часовые пояса и не выводят IP, имя компьютера или имя пользователя в журнал.
Процедура ВыполнитьПример() Экспорт
Текущий = ПолучитьТекущийСеансИнформационнойБазы();
Если ТипЗнч(Текущий) <> Тип("СеансИнформационнойБазы") Тогда
ВызватьИсключение "Ожидался встроенный СеансИнформационнойБазы, не COM Сеанс";
КонецЕсли;
Попытка
Соединения = ПолучитьСоединенияИнформационнойБазы();
Исключение
Сообщить("Список соединений недоступен; проверьте право АктивныеПользователи и причину ошибки: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
СвязейСвоегоСеанса = 0;
Для Каждого Соединение Из Соединения Цикл
Если Соединение.НомерСеанса <> Текущий.НомерСеанса Тогда
Продолжить;
КонецЕсли;
СвязейСвоегоСеанса = СвязейСвоегоСеанса + 1;
Сообщить("Номер собственного соединения: " + Строка(Соединение.НомерСоединения));
Сообщить(ТипЗнч(Соединение.НачалоСоединения) = Тип("Дата"));
Сообщить(ТипЗнч(Соединение.НачалоСеанса) = Тип("Дата"));
Сообщить("Приложение соединения: " + Соединение.ИмяПриложения);
Сообщить("Компьютер указан: " + Строка(НЕ ПустаяСтрока(Соединение.ИмяКомпьютера)));
Сообщить("Пользователь определён: " + Строка(Соединение.Пользователь <> Неопределено));
КонецЦикла;
Сообщить("Связей собственного сеанса в снимке: " + Строка(СвязейСвоегоСеанса));
Если СвязейСвоегоСеанса = 0 Тогда
Сообщить("Снимок не нашёл назначенного соединения; это не команда завершения сеанса");
КонецЕсли;
КонецПроцедурыРазбор по шагам
Список соединений тоже требует право АктивныеПользователи. Ошибка не заменяется молча пустым массивом.
Обрабатываются только записи с номером текущего сеанса. Другие сведения пользователей не выводятся.
НачалоСоединения и НачалоСеанса — разные даты. Проверяются типы, но не навязывается порядок двух дат или их равенство.
Вызовы дают отдельные снимки: связь может измениться между чтением текущего сеанса и получением массива. Нулевое количество обработано явно.
Как проверить результат
Для каждой найденной своей связи два Истина о типах дат и безопасная диагностика.
При отсутствии связи — количество 0 и пояснение; ошибки отсоединения и завершение сеанса не вызываются.
Ожидаемый результат
Сеанс сопоставлен с текущими описаниями соединений без смешивания времён начала.
На что обратить внимание
Не утверждайте, что каждый сеанс обязан иметь ровно одно соединение в любом снимке.
Список соединений не является обещанием состояния на момент следующей команды.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.