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

Перенастройка торгового оборудования
После обновления настройки торгового оборудования будут привязаны к имени терминального сеанса, поэтому старые настройки не будут применяться. Если у нас большое число рабочих мест, новая настройка торгового оборудования может оказаться достаточно трудоемким процессом.
Для быстрой перенастройки торгового оборудования рекомендуем открыть на редактирование форму списка регистра сведений «Торговое оборудование». В поле «ИмяКомпьютера» записать новое значение имени компьютера. После запуска 1С старые настройки оборудования будут применены к новому имени компьютера (т.е. RDP_ИмяТерминальногоСеанса ).