Тип: Строка. Содержит имя аутентифицированного пользователя информационной базы.
Полное описание, параметры и ограничения
Сеанс.UserName (ISessionInfo.UserName)
Сеанс (ISessionInfo)
UserName (UserName)
Доступен, начиная с версии 8.2.
Использование:
Только чтение.
Описание:
Тип: Строка.
Содержит имя аутентифицированного пользователя информационной базы.
Доступность:
Интеграция.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Разобраться, что такое сеанс, соединение и спящий клиент
На выбранном учебном сеансе читаем паспорт, политику сна и необязательное описание соединения без выгрузки имени пользователя или компьютера.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Только собственный изолированный тестовый кластер на Windows. Зарегистрированная в нём база называется guide-owned-session-lab, имя конфигурации этой базы УчебнаяБазаСеансов. Запустите в ней отдельный учебный клиент.
Создайте собственную обработку с управляемой формой. Вставьте весь код одного урока в модуль этой формы и свяжите команду Прочитать с обработчиком Прочитать. Серверная часть должна исполняться на Windows. Уроки заменяют весь модуль, а не добавляют шесть одинаковых функций.
V85.COMConnector должен быть уже зарегистрирован администратором на Windows-сервере 1С с подходящей разрядностью. Пример ничего не устанавливает и не регистрирует. Если COM недоступен, остановитесь и обратитесь к администратору тестового стенда.
В форме собственной обработки создайте строковые реквизиты КлючКластера, ИмяАгента, ПарольАгента, ИмяАдминистратора, ПарольАдминистратора и числовой НомерСеанса. Для полей паролей включите режим пароля, не сохраняйте значения в настройках формы.
КлючКластера вручную возьмите из собственной консоли администрирования: имя кластера|имя сервера|основной порт, например Учебный|localhost|1541. Это порт кластера, не порт агента 1540 и не порт RAS 1545.
Серверный код связывается только с агентом 127.0.0.1:1540 на том Windows-сервере, где исполняется модуль. Вводятся существующие учебные учётные данные агента и кластера; права и пароли не изменяются.
Клиентский обработчик приведён полностью: он очищает поля паролей до вызова сервера и не печатает аргументы или технический текст ошибок. Это не гарантирует безопасное стирание строк из памяти; учебные учётные данные не должны сохраняться в настройках формы.
Сначала НомерСеанса = 0: получите только ID и AppID сеансов этой учебной базы. Затем введите один ID из этого списка. ID уникален внутри информационной базы, а не во всём кластере.
Ниже дан законченный серверный пример получения настоящего объекта Сеанс, а не функция, требующая неизвестный ИсходныйОбъект. COM и кластер при подготовке руководства не запускались; требуется ручной запуск на собственном стенде.
&НаКлиенте
Процедура Прочитать(Команда)
ЛокальныйПарольАгента = ПарольАгента;
ЛокальныйПарольАдминистратора = ПарольАдминистратора;
ПарольАгента = "";
ПарольАдминистратора = "";
Попытка
Отчет = ПрочитатьУчебныйСеанс(КлючКластера, ИмяАгента, ЛокальныйПарольАгента, ИмяАдминистратора, ЛокальныйПарольАдминистратора, НомерСеанса);
Исключение
ЛокальныйПарольАгента = "";
ЛокальныйПарольАдминистратора = "";
Сообщить("Чтение не выполнено. Проверьте собственный стенд, COM, ключ кластера, права и наличие выбранного сеанса. Технические сведения проверяет администратор стенда.");
Возврат;
КонецПопытки;
ЛокальныйПарольАгента = "";
ЛокальныйПарольАдминистратора = "";
Сообщить(Отчет);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПрочитатьУчебныйСеанс(КлючКластера, ИмяАгента, ПарольАгента, ИмяАдминистратора, ПарольАдминистратора, НомерСеанса)
Если ПустаяСтрока(КлючКластера) Тогда
ВызватьИсключение "Укажите точный ключ собственного тестового кластера";
КонецЕсли;
Если НомерСеанса < 0 Или Цел(НомерСеанса) <> НомерСеанса Тогда
ВызватьИсключение "Номер сеанса должен быть целым неотрицательным числом";
КонецЕсли;
Соединитель = Новый COMОбъект("V85.COMConnector");
Агент = Соединитель.ConnectAgent("127.0.0.1:1540");
Агент.AuthenticateAgent(ИмяАгента, ПарольАгента);
ПодходящиеКластеры = Новый Массив;
Для Каждого Кандидат Из Агент.GetClusters() Цикл
КлючКандидата = СтрШаблон("%1|%2|%3", Кандидат.ClusterName, Кандидат.HostName, Кандидат.MainPort);
Если НРег(КлючКандидата) = НРег(КлючКластера) Тогда
ПодходящиеКластеры.Добавить(Кандидат);
КонецЕсли;
КонецЦикла;
Если ПодходящиеКластеры.Количество() <> 1 Тогда
ВызватьИсключение "Собственный тестовый кластер не выбран однозначно";
КонецЕсли;
Кластер = ПодходящиеКластеры.Получить(0);
Агент.Authenticate(Кластер, ИмяАдминистратора, ПарольАдминистратора);
УчебныеБазы = Новый Массив;
Для Каждого ОписаниеБазы Из Агент.GetInfoBases(Кластер) Цикл
Если ОписаниеБазы.Name = "guide-owned-session-lab" Тогда
УчебныеБазы.Добавить(ОписаниеБазы);
КонецЕсли;
КонецЦикла;
Если УчебныеБазы.Количество() <> 1 Тогда
ВызватьИсключение "Зарегистрированная учебная база не выбрана однозначно";
КонецЕсли;
УчебнаяБаза = УчебныеБазы.Получить(0);
УчебныеСеансы = Агент.GetInfoBaseSessions(Кластер, УчебнаяБаза);
СтрокиОтчета = Новый Массив;
НайденныеСеансы = Новый Массив;
Для Каждого КандидатСеанс Из УчебныеСеансы Цикл
Если НомерСеанса = 0 Тогда
СтрокиОтчета.Добавить(СтрШаблон("Сеанс %1; приложение %2", КандидатСеанс.SessionID, КандидатСеанс.AppID));
ИначеЕсли КандидатСеанс.SessionID = НомерСеанса Тогда
НайденныеСеансы.Добавить(КандидатСеанс);
КонецЕсли;
КонецЦикла;
Если НомерСеанса = 0 Тогда
Если СтрокиОтчета.Количество() = 0 Тогда
Возврат "В учебной базе сейчас нет сеансов";
КонецЕсли;
Возврат СтрСоединить(СтрокиОтчета, Символы.ПС);
КонецЕсли;
Если НайденныеСеансы.Количество() <> 1 Тогда
ВызватьИсключение "Учебный сеанс исчез или не выбран однозначно; обновите список";
КонецЕсли;
Сеанс = НайденныеСеансы.Получить(0);
Если Сеанс.InfoBase.Name <> "guide-owned-session-lab" Тогда
ВызватьИсключение "Сеанс не принадлежит выбранной учебной базе";
КонецЕсли;
СтрокиОтчета.Добавить(СтрШаблон("ID=%1; AppID=%2; язык интерфейса=%3", Сеанс.SessionID, Сеанс.AppID, Сеанс.Locale));
СтрокиОтчета.Добавить(СтрШаблон("Начало=%1; последняя активность=%2", Сеанс.StartedAt, Сеанс.LastActiveAt));
СтрокиОтчета.Добавить(СтрШаблон("Имя клиента заполнено=%1; имя пользователя заполнено=%2", Не ПустаяСтрока(Сеанс.Host), Не ПустаяСтрока(Сеанс.UserName)));
СтрокиОтчета.Добавить(СтрШаблон("Описание учебной базы заполнено=%1", Не ПустаяСтрока(Сеанс.InfoBase.Descr)));
СтрокиОтчета.Добавить(СтрШаблон("Спящий=%1; простой до сна, с=%2; сон до завершения, с=%3", Сеанс.Hibernate, Сеанс.PassiveSessionHibernateTime, Сеанс.HibernateSessionTerminateTime));
СтрокиОтчета.Добавить(СтрШаблон("Есть рабочий процесс=%1; есть клиентская лицензия=%2", Сеанс.Process <> Неопределено, Сеанс.License <> Неопределено));
Соединение = Сеанс.Connection;
Если Соединение = Неопределено Тогда
СтрокиОтчета.Добавить("Соединение сейчас не назначено; это допустимое состояние сеанса");
Иначе
СтрокиОтчета.Добавить(СтрШаблон("Соединение=%1; приложение=%2; установлено=%3", Соединение.ConnID, Соединение.Application, Соединение.ConnectedAt));
СтрокиОтчета.Добавить(СтрШаблон("Связь с выбранным сеансом=%1; связь с учебной базой=%2", Соединение.SessionID = Сеанс.SessionID, Соединение.InfoBase.Name = "guide-owned-session-lab"));
СтрокиОтчета.Добавить(СтрШаблон("Имя клиента соединения заполнено=%1; рабочий процесс назначен=%2; блокирующий ID=%3", Не ПустаяСтрока(Соединение.Host), Соединение.Process <> Неопределено, Соединение.blockedByLS));
КонецЕсли;
Возврат СтрСоединить(СтрокиОтчета, Символы.ПС);
КонецФункцииРазбор по шагам
Сначала функция выбирает конкретный кластер и собственную зарегистрированную базу; только затем вызывает GetInfoBaseSessions.
SessionID относится к базе. ConnID — номер соединения; он не заменяет SessionID. Сеанс и соединение — разные сущности.
Connection/Process/License могут быть Неопределено; перед чтением вложенных свойств это проверяется.
Оба тайм-аута сна заданы в секундах. Hibernate показывает текущее состояние, а не распоряжение завершить клиента.
Locale — язык интерфейса и сообщений, не обещание регионального формата числа. Даты показываются как получены; часовой пояс не угадывается.
Как проверить результат
При НомерСеанса=0 видны только номера и AppID собственной базы; для выбранного ID показан паспорт.
Если соединение назначено, сравнения связи с сеансом и собственной базой ожидаются Истина. При конкурентном изменении состояния обновите снимок.
Имя пользователя, адрес клиента, описание базы не публикуются; выводится лишь признак заполненности.
Ожидаемый результат
Новичок видит реальный сеанс и различает его необязательные связи и настройки сна.
На что обратить внимание
Не считать спящий сеанс ошибочным и не завершать его ради учебного отчёта.
Описание соединения — отдельный интерфейс с восемью свойствами, не интерфейс Соединение с другим набором полей.
COM чтения не составляют транзакционный снимок; значения могли измениться между обращениями.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.