Проблема проброса торгового оборудования в терминальную сессию — одна из самых «болезненных» тем для системных администраторов и программистов 1С. Особенно остро она встает при использовании бюджетных моделей принтеров чеков (XP-58, POS-58 и аналоги), которые подключаются по USB. В локальном режиме такие устройства работают без нареканий, но при попытке «пробросить» их через Удаленный рабочий стол (RDP) 1С часто перестает их видеть, хотя в самой Windows пробная страница может печататься успешно.
В этой статье мы подробно разберем, почему возникает такая ситуация и как настроить оборудование так, чтобы кассир мог беспрепятственно пробивать чеки из РМК (рабочего места кассира) в терминальной сессии.
Прежде чем приступать к настройкам, давайте выясним причину сбоев. В современных версиях Windows Server по умолчанию работает технология Remote Desktop Easy Print. Она позволяет печатать на удаленный принтер без установки драйверов этого принтера на сервере. Однако для чековых принтеров это часто становится приговором: EasyPrint пытается универсализировать команды печати, преобразуя их в графический формат, в то время как компонента 1С:Принтер чеков ожидает прямой передачи текстовых команд или RAW-данных.
Рассмотрим первый и самый важный этап настройки — отключение этой функции.
Для того чтобы сервер «увидел» специфические возможности вашего 58-мм принтера, необходимо заставить систему использовать «родной» драйвер, установленный на сервере.
Win + R и введите gpedit.msc.Важно: Теперь при подключении пользователя сервер будет искать драйвер с тем же именем, что и на локальной машине, и создаст прямое перенаправление устройства.
Как мы видим из практики, в конфигурациях типа 1С:Розница для Казахстана (и многих других) в настройках торгового оборудования часто доступны только COM-порты (от COM1 до COM64). Если ваш принтер подключен по USB, 1С просто не сможет к нему обратиться напрямую. Проанализируем ситуацию: нам нужно создать виртуальный COM-порт, который будет перенаправлять данные на USB-принтер.
Для этого воспользуемся механизмом сетевого мапинга портов. Выполним следующие действия на локальном компьютере (где физически стоит принтер):
Printer58.
net use COM9: \\127.0.0.1\Printer58 /persistent:yes
Теперь в настройках RDP-клиента (mstsc) на вкладке «Локальные ресурсы» нажмите кнопку «Подробнее» и убедитесь, что стоит галочка «Порты». При подключении к серверу ваш локальный порт COM9 будет проброшен в сессию. В 1С теперь можно выбрать COM9, и данные будут уходить на ваш USB-принтер.
Если стандартный драйвер 1С:Принтер чеков не проходит тест (тишина при нажатии кнопки «Проверить оборудование»), рассмотрим альтернативный вариант настройки внутри 1С. Вместо специализированного драйвера производителя выберем универсальный подход.
В справочнике «Подключаемое оборудование» создайте новый элемент:
В настройках этого драйвера система предложит выбрать принтер из списка установленных в Windows. Выберите тот самый «перенаправленный» принтер, который появился в системе после подключения по RDP. В этом случае 1С будет взаимодействовать с устройством через стандартную подсистему печати Windows, что гораздо надежнее для бюджетных китайских моделей.
Бывают случаи, когда родные драйверы принтера при пробросе через RDP начинают выдавать ошибки «Access Denied» или печатать иероглифы. Проанализируем ситуацию: нам нужен максимально простой способ передачи текста.
Разберем по шагам установку универсального текстового драйвера:
Одной из проблем, озвученных пользователями, является необходимость ручного подтверждения печати (когда открывается окно выбора принтера). В розничной торговле это недопустимо. Чтобы чек выходил автоматически при нажатии кнопки «Пробить», выполните следующие настройки:
В настройках пользователя или РМК убедитесь, что оборудование подключено именно как «Подключаемое оборудование», а не просто как системный принтер. Если вы используете вариант «Печать на принтер Windows», то в настройках макета чека в 1С нужно установить параметры страницы:
Посмотрим на пример кода, который может использоваться в обработках для прямой печати, если штатный функционал дает сбои:
ТабДок = Новый ТабличныйДокумент;
// Формирование макета чека здесь...
ТабДок.ИмяПринтера = "Имя_Вашего_Проброшенного_Принтера";
ТабДок.Напечатать(РежимИспользованияПринтера.БезПредварительногоПросмотра);
Подводя итог, можно сказать, что стабильная работа дешевого принтера чеков через RDP возможна при соблюдении трех условий:
Если бюджет позволяет, для работы в терминальном режиме мы рекомендуем использовать Ethernet-принтеры (IP-принтеры). Они не требуют проброса через RDP, так как сервер подключается к ним напрямую по IP-адресу, что исключает все вышеописанные проблемы с портами и перенаправлением.