Добрый день, дорогие друзья, недавно столкнулся с проблемой подключения торгового оборудования.
Имеем УТ 10.3, несколько рабочих мест, находящихся удаленно друг от друга, и сервер, где стоит 1С и к нему все подключаются через RDP.
Проблема заключается в следующем: к примеру, у нас есть 10 рабочих мест и 4 кассы ККТ. На тех компьютерах, где стоят кассы локально, настроен проброс портов, в 1С на стороне RDP все настроено корректно, связь есть, чеки печатаются, но на остальных компьютерах, где кассы не подключены, при создании документов каждый раз вылетает сообщение с ошибкой о подключении торгового оборудования. Как оказалось, типовая конфигурация к такому варианту работы не приспособлена, так как рабочее место в 1С ограничено именем компьютера см. скрин1.
Решение проблемы следующие:
1) В конфигурации включить возможность редактирования
2) В древе конфигурации найти обработку ТОСервер
3) В модуле обработке заменить текст процедуры "ПолучитьИмяКомпьютераТО()" на
Если мИмяКомпьютера = Неопределено Тогда
мИмяКомпьютера = ВРег(ИмяКомпьютера());
WshShell = Новый COMОбъект("WScript.Shell");
ИмяКомпьютераКлиента = WshShell.expandEnvironmentStrings("%CLIENTNAME%");
ИмяСессии = WshShell.expandEnvironmentStrings("%SESSIONNAME%");
ИмяПользователя = WshShell.expandEnvironmentStrings("%USERNAME%");
Если ИмяСессии="Console" Тогда
//Имя Компьютера будет равно имени терминального сервера
мИмяКомпьютера = мИмяКомпьютера + "_" + ИмяПользователя;
Иначе
//Терминальный клиент
мИмяКомпьютера = мИмяКомпьютера + "_"+ ИмяКомпьютераКлиента+ "_" + ИмяПользователя;
//мИмяКомпьютера = мИмяКомпьютера + "_"+ ИмяКомпьютераКлиента;
КонецЕсли;
КонецЕсли;
Возврат мИмяКомпьютера;
В итоге после принятия изменений в конфигурации получим следующее: для каждого пользователя имя компьютера будет складываться из имени сервера+имя компьютера локальной машины+имя пользователя, под которым зашли в RDP, см. скрин 2.
В итоге для каждого пользователя будет свой список оборудования (у других пользователь он отображаться не будет) . Ошибка у других пользователя вылетать не будет.
А если драйвер ТО «не понимает» что у него много подключений и он работает с удаленным оборудованием?
ИмяСервера+ИмяКомпьютера+ИмяПользователя нужно только при распределенной базе на разных серверах с RDP. При этом необходимость ИмяПользователя все равно под вопросом.
(1) При пробросе портов ТО не пересекается т.к. виртуализируется. И поэтому у всех кто подключился сканеры могут быть на «одинаковом» COM3.
Пы.Сы Уже лет десять ржу с типовых конфей и как люди гемороятся с ними. Или теряют деньгу на вот такие мелкие, но глобальные правки. ИМХО.
И еще … запрос через имена среды исполнения не всегда дает правильный ответ. А вот правильный всегда можно получить через реестр HKEY_CURRENT_USERVolatile Environment и дальше сами разберетесь … а еще WMI
(2) Да ТО не пересекается но 1С видит что оборудование есть на этом рабочем месте и пытается к нему подключаться из-за этого ошибка и возникает, или бывает другая ситуация открывают смену на одном компьютере, чек печатается на другом
Еще момент, если сеанс создан с одного компа, а потом в этот сеанс подключились с другого компа то все эти параметры %CLIENTNAME%, %SESSIONNAME%, %USERNAME% не переинициализируются и будете опять ловить ошибку…
(5) смотри (3) я об этом и писал
(4) печать нужно настраивать как ТО (я так и делал), т.е. в привязке к клиентскому компу и тогда проблем нет. А лучше всего печать настраивать через ScrewDrivers (ну да бесплатная реклама) и тогда все как часики работает.
(6) Да, в реестре обновляется. А можно ли узнать внешний ip того кто подключился к rdp?
(8) в принципе да, но толку будет не много, т.к. за NAT’ом вполне можно получать IP роутера (прокси) в локалке. А если настроить все по фэншую, то полученный IP (интернетовский) также может быть ни о чем …
(9) По IP (интернетовскому) можно определить страну, провайдера, проверить были ли раньше подключения с этого IP/диапазона. Уведомлять в телеграмм о подозрительных подключениях. Искал решение, компоненты выдают локальный IP клиента за натом/роутером который, пока нашел способ только парсить event log «Microsoft-Windows-TerminalServices-LocalSessionManager/Operational»:
https://mikecrowley.us/2015/04/08/a-new-and-an-updated-powershell-script/
Было —https://infostart.ru/public/679048/
И настраивай сам себе кассир(не админ, который пользуется торговым оборудованием) оборудование…
Если мне не изменяет память, когда-то давным давно в УТ был отдельный справочник «ГруппыПользователейТорговогоОборудования» через который можно было настроить конкретному пользователю доступ к подключению ТО и все замечательно работало под терминалом. Но потом (давно это было) при очередном обновлении конфигурации его убрали и сделали так как и сейчас. И зачем?
Плюс. Помогло для Вики-Принт
«На тех компьютерах, где стоят кассы локально, настроен проброс портов, в 1С на стороне RDP все настроено корректно…»
А можно ли развернуть информацию по пробросу портов и настройке RDP? Как организовано? (конфа БП 3.0)
Извиняюсь, случайно поставил и минус, и убрать не даёт. А автору спасибо.