gifts2017

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

Опубликовал Евгений (Berrimor) в раздел Программирование - Универсальные функции

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Пример работы функции
.epf 6,19Kb
27.03.14
5
.epf 6,19Kb 5 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Дмитрий Бухалов (Re:аниматор) 28.03.14 03:24
Видел много вариантов реализации функции для получения имени компьютера для работы с торговым оборудованием в терминальной сессии.


Не знаю про какие "много вариантов", но лично я уже 5 лет назад такое сделал :-) привязку настроек ТО в терминальной сессии к локальному компьютеру, т.к. 3 терминальных сервера с 1 локального компа ...
2. Евгений (Berrimor) 28.03.14 05:05
видел на этом форуме такие варианты:

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

считаю их менее удачными
3. Сергей (Che) Коцюра (CheBurator) 02.04.14 04:33
осталось уточнить - возвращается имя компа, ПРИКОННЕКТИВШЕГОСЯ к сессии (например оборванной день назад)..?
4. Евгений (Berrimor) 02.04.14 04:56
(3) похоже именно так :) не проверял, но подобные ситуации (незакрытая терминальная сессия) решаются другими способами, обычно на уровне администрирования терминального сервера, например установкой предельного времени жизни неактивной сессии
5. Евгений (Berrimor) 02.04.14 05:02
Да, еще один момент: обнаружил что на некоторых компах локально выдает не пустое значение WshSysEnv.Item("ClientName") а "CONSOLE". Причинно следственной связи между настройками ОС, ее версией и прочим не уловил :), одним словом для корректной работы в тексте приведенной ф-ции необходимо изменить:

ПустаяСтрока(ИмяКомпьютераТО) на ПустаяСтрока(ИмяКомпьютераТО) ИЛИ ВРег(ИмяКомпьютераТО) = "CONSOLE"
6. PlatonovStepan (Jogeedae) 09.06.14 10:58
у меня взлетел такой вариант:
///////Имя клиента и компьютера запустившего сеанс
всШелл = Новый COMОбъект("WScript.Shell");
ИмяСеанса = всШелл.ExpandEnvironmentStrings("%SESSIONNAME%");
ИмяКлиента = всШелл.ExpandEnvironmentStrings("%CLIENTNAME%");
Сообщить(?(нрег(ИмяСеанса) = "console", ИмяКомпьютера(), ИмяКлиента));
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа