Видел много вариантов реализации функции для получения имени компьютера для работы с торговым оборудованием в терминальной сессии. Данный вариант интересен на мой взгляд тем что нет необходимости перенастраивать привязки ТО при переключении между терминальной и локальной сессией запуска 1С. По русски говоря, как бы вы не запустили 1С: локально с доступом к базе на общем сетевом ресурсе или в терминальной сессии ваши привязки не "рухнут"
// Функция возвращает строку c именем компьютера для нужд торгового оборудования. // // Возвращаемое значение: // Строка - имя компьютера для торгового оборудования. // Функция ПолучитьИмяКомпьютераТО() Экспорт // Попытка получения имени компьютера из терминальной сессии WshShell = Новый COMОбъект("WScript.Shell"); WshSysEnv = WshShell.Environment("Process"); ИмяКомпьютераТО = ВРег(WshSysEnv.Item("ClientName")); Если ПустаяСтрока(ИмяКомпьютераТО) Тогда // Скорее всего локальный запуск т.к. переменная "ClientName" не определена // просто берем имя компьютера стандартной ф-цией платформы ИмяКомпьютераТО = ВРег(ИмяКомпьютера()); КонецЕсли; Возврат ИмяКомпьютераТО; КонецФункции // ПолучитьИмяКомпьютераТО()
Не знаю про какие «много вариантов», но лично я уже 5 лет назад такое сделал 🙂 привязку настроек ТО в терминальной сессии к локальному компьютеру, т.к. 3 терминальных сервера с 1 локального компа …
видел на этом форуме такие варианты:
1. мИмяКомпьютера = ВРег(ИмяКомпьютера()+»\»+ИмяПользователя())
2. WshShell = Новый COMОбъект(«WScript.Network»); мИмяКомпьютера = ВРег(ИмяКомпьютера()+»\»+WshShell.UserName)
считаю их менее удачными
осталось уточнить — возвращается имя компа, ПРИКОННЕКТИВШЕГОСЯ к сессии (например оборванной день назад)..?
(3) похоже именно так 🙂 не проверял, но подобные ситуации (незакрытая терминальная сессия) решаются другими способами, обычно на уровне администрирования терминального сервера, например установкой предельного времени жизни неактивной сессии
Да, еще один момент: обнаружил что на некоторых компах локально выдает не пустое значение WshSysEnv.Item(«ClientName») а «CONSOLE». Причинно следственной связи между настройками ОС, ее версией и прочим не уловил :), одним словом для корректной работы в тексте приведенной ф-ции необходимо изменить:
ПустаяСтрока(ИмяКомпьютераТО) на ПустаяСтрока(ИмяКомпьютераТО) ИЛИ ВРег(ИмяКомпьютераТО) = «CONSOLE»
у меня взлетел такой вариант:
///////Имя клиента и компьютера запустившего сеанс
всШелл = Новый COMОбъект(«WScript.Shell»);
ИмяСеанса = всШелл.ExpandEnvironmentStrings(«%SESSIONNAME%»);
ИмяКлиента = всШелл.ExpandEnvironmentStrings(«%CLIENTNAME%»);
Сообщить(?(нрег(ИмяСеанса) = «console», ИмяКомпьютера(), ИмяКлиента));