Решение проблем с настройкой торгового оборудования при работе с базой в сервере терминалов.

Как известно, стандартная подсистема торгового обрудования в УТ10 регистрирует оборудование "на компьютер". В УТ11 сделано лучше, но на УТ10 работает еще достаточное количество организаций.

Такой подход, отчасти, логичен, так как на одном компе могут работать несколько смен кассиров, каждый из которых работает под своим пользователем 1С - и все решается одной настройкой.

Но если же база целиком и полностью крутится на серваке (пользователи через Цитрикс/удаленный рабочий стол подключаются к серверу и работают там) - то возникают проблемы. Причем, порты пробрасываются без проблем, и у кого оборудование реально подключенно - у них проблем нет. Но у остальных - при входе в систему начинается ругань на тему невозможности открыть порт и т.п.

Хорошо, что все проблемы разруливаются с эффективностью и качеством хорошего хирурга - одним выверенным движением. Главное - знать где резать.

Итак, приступим:

Открываем модуль обработки ТОСервер. Находим функцию ПолучитьИмяКомпьютераТО() - именно она отвечает за генерирование ключа, по которому будет сохраняться настройка ТО (в том числе - и определяться необходимость подключения ТО).

Переопределяя эту функцию, можно добиваться необходимой "тонкости" настройки. Главное - знать откуда получать, скажем, имя пользователя системы или имя клиентского компа.

Меньше слов, больше дела:

Функция ПолучитьИмяКомпьютераТО() Экспорт

Если мИмяКомпьютера = Неопределено Тогда
  ДопИмя = "";
  
  // получим имя клиентского компа
  Попытка
  objShell = Новый COMОбъект("WScript.Shell");
  ДопИмя = ДопИмя + ":" + objShell.RegRead("HKEY_CURRENT_USER\Volatile Environment\CLIENTNAME");
  Исключение
  КонецПопытки;
  
  //получим параметры сервера
  Попытка
  objNet = Новый COMОбъект("WScript.NetWork");
  ИмяСервераТерминалов = objNet.ComputerName;
  ИмяПользователяWindows = objNet.UserName;
  
  ДопИмя = ДопИмя + "@" + ИмяСервераТерминалов + "\" + ИмяПользователяWindows;
  Исключение
  КонецПопытки;
  
  мИмяКомпьютера = ВРЕГ(ИмяКомпьютера() + ДопИмя);
КонецЕсли;


Возврат мИмяКомпьютера;

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


Пример излишне брутален, зато отлично показывает что откуда получать.

Все, что нужно - иметь Windows Script Host (что это такое и с чем его едят - можно прочитать, например, здесь: необходимо зарегистрироваться для просмотра ссылки, который уже давно идет в винде"по дефолту".

Upd В Win7 ключ реестра HKCU\Volatile Environment:CLIENTNAME нужно смотреть как HKCU\Volatile Environment\xx:CLIENTNAME, где xx - номер терминальной сессии. В качестве решения можно использовать переменную среды:

objShell = Новый COMОбъект("WScript.Shell");
ДопИмя = ДопИмя + ":" + objShell.Environment("Process").Item("CLIENTNAME");


необходимо зарегистрироваться для просмотра ссылки