УТ10 КА1 в RDP-сеансе. Подключение торгового оборудования к терминальным сеансам
> 1С: ПредприятиеДата обновления: 6 сентября 2024 г. Дата публикации: 23 мая 2024 г.
Проблема
В конфигурациях «1С:Управление торговлей 10.x» и «1С:Комплексная автоматизация 1.» при работе в терминальном сеансе Windows Server нет возможности привязать торговое оборудование к имени сеанса.
Привязка в типовом коде происходит только к имени компьютера, на котором запущен клиент 1С. В данном случае — это имя терминального сервера.
В результате этого драйверы торгового оборудование всех пользователей загружаются у всех сеансов. Это обычно приводит к конфликтам в работе оборудования. Все пользователи, кроме кассиров будут наблюдать периодически сообщения об ошибках при попытке открыть кассовые документы, поскольку при открытии документов происходит безуспешная попытка подключения к ККМ.
При работе с продуктом «РБ-Софт: Сервер ККМ» кассир может ошибочно отправить печать чека на чужую кассу. Поэтому при использовании «Сервера ККМ» в условиях терминальных сеансов такая доработка является обязательной.
Решение
Решение очень простое. Надо изменить всего лишь одну функцию ПолучитьИмяКомпьютераТО() в модуле обработки ТОСервер.
ПолучитьИмяКомпьютераТО() Типовой код
// Функция возвращает строку c именем компьютера для нужд торгового оборудования.
//
// Возвращаемое значение:
// Строка - имя компьютера для торгового оборудования.
//
Функция ПолучитьИмяКомпьютераТО() Экспорт
Если мИмяКомпьютера = Неопределено Тогда
мИмяКомпьютера = ВРег(ИмяКомпьютера());
КонецЕсли;
Возврат мИмяКомпьютера;
КонецФункции // ПолучитьИмяКомпьютераТО()
ПолучитьИмяКомпьютераТО() Новый код
Функция ПолучитьИмяКомпьютераТО() Экспорт
Если мИмяКомпьютера = Неопределено Тогда
WshShell = Новый COMОбъект("WScript.Shell");
ИмяКомпьютераКлиента = WshShell.expandEnvironmentStrings("%CLIENTNAME%");
ИмяСессии = WshShell.expandEnvironmentStrings("%SESSIONNAME%");
Если ИмяСессии="Console" Тогда
//Имя Компьютера будет равно имени терминального сервера
//или имени рабочей станции, если запускали 1С не в терминальном сеансе
мИмяКомпьютера = ВРег(ИмяКомпьютера()); //Получили имя сервера
Иначе //Терминальный клиент
мИмяКомпьютера = "RDP_"+ИмяКомпьютераКлиента;
КонецЕсли;
КонецЕсли;
Возврат мИмяКомпьютера;
КонецФункции
В результате в настройке торгового оборудования увидим примерно такую картину.
Перенастройка торгового оборудования
После обновления настройки торгового оборудования будут привязаны к имени терминального сеанса, поэтому старые настройки не будут применяться. Если у нас большое число рабочих мест, новая настройка торгового оборудования может оказаться достаточно трудоемким процессом.
Для быстрой перенастройки торгового оборудования рекомендуем открыть на редактирование форму списка регистра сведений «Торговое оборудование». В поле «ИмяКомпьютера» записать новое значение имени компьютера. После запуска 1С старые настройки оборудования будут применены к новому имени компьютера (т.е. RDP_ИмяТерминальногоСеанса ).