Снова к вопросу о работе торгового оборудования в терминальной сессии

Видел много вариантов реализации функции для получения имени компьютера для работы с торговым оборудованием в терминальной сессии. Данный вариант интересен на мой взгляд тем что нет необходимости перенастраивать привязки ТО при переключении между терминальной и локальной сессией запуска 1С. По русски говоря, как бы вы не запустили 1С: локально с доступом к базе на общем сетевом ресурсе или в терминальной сессии ваши привязки не "рухнут"
// Функция возвращает строку c именем компьютера для нужд торгового оборудования.
//
// Возвращаемое значение:
// Строка - имя компьютера для торгового оборудования.
//
Функция ПолучитьИмяКомпьютераТО() Экспорт
// Попытка получения имени компьютера из терминальной сессии
WshShell = Новый COMОбъект("WScript.Shell");
WshSysEnv = WshShell.Environment("Process");
ИмяКомпьютераТО = ВРег(WshSysEnv.Item("ClientName"));

Если ПустаяСтрока(ИмяКомпьютераТО) Тогда
// Скорее всего локальный запуск т.к. переменная "ClientName" не определена
// просто берем имя компьютера стандартной ф-цией платформы
ИмяКомпьютераТО = ВРег(ИмяКомпьютера());
КонецЕсли;

Возврат ИмяКомпьютераТО;
КонецФункции // ПолучитьИмяКомпьютераТО()

6 Comments

  1. Re:аниматор
    Видел много вариантов реализации функции для получения имени компьютера для работы с торговым оборудованием в терминальной сессии.

    Не знаю про какие «много вариантов», но лично я уже 5 лет назад такое сделал 🙂 привязку настроек ТО в терминальной сессии к локальному компьютеру, т.к. 3 терминальных сервера с 1 локального компа …

    Reply
  2. Berrimor

    видел на этом форуме такие варианты:

    1. мИмяКомпьютера = ВРег(ИмяКомпьютера()+»\»+ИмяПользователя())

    2. WshShell = Новый COMОбъект(«WScript.Network»); мИмяКомпьютера = ВРег(ИмяКомпьютера()+»\»+WshShell.UserName)

    считаю их менее удачными

    Reply
  3. CheBurator

    осталось уточнить — возвращается имя компа, ПРИКОННЕКТИВШЕГОСЯ к сессии (например оборванной день назад)..?

    Reply
  4. Berrimor

    (3) похоже именно так 🙂 не проверял, но подобные ситуации (незакрытая терминальная сессия) решаются другими способами, обычно на уровне администрирования терминального сервера, например установкой предельного времени жизни неактивной сессии

    Reply
  5. Berrimor

    Да, еще один момент: обнаружил что на некоторых компах локально выдает не пустое значение WshSysEnv.Item(«ClientName») а «CONSOLE». Причинно следственной связи между настройками ОС, ее версией и прочим не уловил :), одним словом для корректной работы в тексте приведенной ф-ции необходимо изменить:

    ПустаяСтрока(ИмяКомпьютераТО) на ПустаяСтрока(ИмяКомпьютераТО) ИЛИ ВРег(ИмяКомпьютераТО) = «CONSOLE»

    Reply
  6. Jogeedae

    у меня взлетел такой вариант:

    ///////Имя клиента и компьютера запустившего сеанс

    всШелл = Новый COMОбъект(«WScript.Shell»);

    ИмяСеанса = всШелл.ExpandEnvironmentStrings(«%SESSIONNAME%»);

    ИмяКлиента = всШелл.ExpandEnvironmentStrings(«%CLIENTNAME%»);

    Сообщить(?(нрег(ИмяСеанса) = «console», ИмяКомпьютера(), ИмяКлиента));

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *