Разделение рабочих мест для подключения торгового оборудования через RDP

Информация по настройке торгового оборудования.

Добрый день, дорогие друзья, недавно столкнулся с проблемой подключения торгового оборудования.

Имеем УТ 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.

В итоге для каждого пользователя будет свой список оборудования (у других пользователь он отображаться не будет) . Ошибка у других пользователя вылетать не будет. 

16 Comments

  1. gorakh

    А если драйвер ТО «не понимает» что у него много подключений и он работает с удаленным оборудованием?

    Reply
  2. VRP

    ИмяСервера+ИмяКомпьютера+ИмяПользователя нужно только при распределенной базе на разных серверах с RDP. При этом необходимость ИмяПользователя все равно под вопросом.

    (1) При пробросе портов ТО не пересекается т.к. виртуализируется. И поэтому у всех кто подключился сканеры могут быть на «одинаковом» COM3.

    Пы.Сы Уже лет десять ржу с типовых конфей и как люди гемороятся с ними. Или теряют деньгу на вот такие мелкие, но глобальные правки. ИМХО.

    Reply
  3. VRP

    И еще … запрос через имена среды исполнения не всегда дает правильный ответ. А вот правильный всегда можно получить через реестр HKEY_CURRENT_USERVolatile Environment и дальше сами разберетесь … а еще WMI

    Reply
  4. Xellsing

    (2) Да ТО не пересекается но 1С видит что оборудование есть на этом рабочем месте и пытается к нему подключаться из-за этого ошибка и возникает, или бывает другая ситуация открывают смену на одном компьютере, чек печатается на другом

    Reply
  5. azubar

    Еще момент, если сеанс создан с одного компа, а потом в этот сеанс подключились с другого компа то все эти параметры %CLIENTNAME%, %SESSIONNAME%, %USERNAME% не переинициализируются и будете опять ловить ошибку…

    Reply
  6. VRP

    (5) смотри (3) я об этом и писал

    Reply
  7. VRP

    (4) печать нужно настраивать как ТО (я так и делал), т.е. в привязке к клиентскому компу и тогда проблем нет. А лучше всего печать настраивать через ScrewDrivers (ну да бесплатная реклама) и тогда все как часики работает.

    Reply
  8. azubar

    (6) Да, в реестре обновляется. А можно ли узнать внешний ip того кто подключился к rdp?

    Reply
  9. VRP

    (8) в принципе да, но толку будет не много, т.к. за NAT’ом вполне можно получать IP роутера (прокси) в локалке. А если настроить все по фэншую, то полученный IP (интернетовский) также может быть ни о чем …

    Reply
  10. azubar

    (9) По IP (интернетовскому) можно определить страну, провайдера, проверить были ли раньше подключения с этого IP/диапазона. Уведомлять в телеграмм о подозрительных подключениях. Искал решение, компоненты выдают локальный IP клиента за натом/роутером который, пока нашел способ только парсить event log «Microsoft-Windows-TerminalServices-LocalSessionManager/Operational»:

    https://mikecrowley.us/2015/04/08/a-new-and-an-updated-powershell-script/

    Reply
  11. rpgshnik
  12. Shevon
    В итоге для каждого пользователя будет свой список оборудования (у других пользователь он отображаться не будет) . Ошибка у других пользователя вылетать не будет.

    И настраивай сам себе кассир(не админ, который пользуется торговым оборудованием) оборудование…

    Reply
  13. Некто A. Petti

    Если мне не изменяет память, когда-то давным давно в УТ был отдельный справочник «ГруппыПользователейТорговогоОборудования» через который можно было настроить конкретному пользователю доступ к подключению ТО и все замечательно работало под терминалом. Но потом (давно это было) при очередном обновлении конфигурации его убрали и сделали так как и сейчас. И зачем?

    Reply
  14. newold2

    Плюс. Помогло для Вики-Принт

    Reply
  15. denis1c@

    «На тех компьютерах, где стоят кассы локально, настроен проброс портов, в 1С на стороне RDP все настроено корректно…»

    А можно ли развернуть информацию по пробросу портов и настройке RDP? Как организовано? (конфа БП 3.0)

    Reply
  16. Бит

    Извиняюсь, случайно поставил и минус, и убрать не даёт. А автору спасибо.

    Reply

Leave a Comment

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