При организации работы склада или торговой точки в терминальном режиме (RDP) на базе операционных систем Windows Server 2012 R2 и выше системные администраторы часто сталкиваются с капризным поведением принтеров этикеток. Особенно остро эта проблема проявляется на платформе 1С:Предприятие 7.7. Типичный сценарий: локально принтер (например, популярный Zebra GC420d с родным драйвером ZDesigner) печатает этикетки размером 70х40 мм идеально. Однако при подключении пользователя к серверу терминалов 1С упорно сбрасывает параметры страницы до максимальных физических размеров (например, 108х297 мм). Попытки изменить настройки непосредственно в диалоговом окне печати 1С помогают ровно на один раз.
Дополнительную путаницу вносит использование технологии Microsoft Easy Print. При ее активации геометрические размеры этикетки могут транслироваться корректно, но штрихкоды на распечатанной ленте перестают считываться сканером. В этой статье мы подробно разберем физические и программные причины такого поведения системы и пошагово настроим стабильную печать.
Проанализируем ситуацию. Почему в текстовом редакторе Блокнот или Microsoft Excel на сервере терминалов размеры этикетки отображаются корректно, а в 1С 7.7 — сбиваются? Дело в том, как именно устаревшая архитектура платформы 1С 7.7 взаимодействует с подсистемой печати Windows и системным реестром.
Когда вы отправляете документ на печать, 1С 7.7 пытается считать сохраненные настройки макета для конкретного пользователя. Эти параметры хранятся в ветке реестра сервера терминалов:
HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<Имя_Базы>\V7\<Имя_Пользователя>\Moxel\
Для каждой печатной формы там создается свой подраздел, где фиксируется имя принтера в параметре DefaultPrinter. Здесь и кроется первая ловушка. При подключении по RDP операционная система динамически перенаправляет локальные принтеры клиента, присваивая им сложные имена вида: ZDesigner GC420d (EPL) (перенаправлено 2). Номер сессии в конце имени меняется при каждом новом входе пользователя в систему.
Платформа 1С 7.7 имеет строгое ограничение на длину имени принтера и некорректно обрабатывает динамические имена со спецсимволами и скобками. Не сумев сопоставить сохраненный в реестре принтер с текущим перенаправленным устройством, 1С сбрасывает настройки макета (Moxel) к системным значениям по умолчанию. А так как драйвер ZDesigner по стандартам Microsoft обязан иметь базовый шаблон страницы, он предлагает программе свой максимальный размер — 108х297 мм.
Чтобы победить сброс размеров бумаги, нам необходимо жестко зафиксировать габариты этикетки в свойствах самого драйвера на сервере терминалов и на локальной машине. Изменять параметры внутри 1С бесполезно — они сотрутся при следующем перезапуске сессии.
Выполним следующие шаги под учетной записью с правами локального администратора:
ZDesigner GC420d (EPL)).70 мм, высота — 40 мм. Установим непечатные поля в значение 0 мм.После проведения этих манипуляций под правами администратора можно вернуть пользователю стандартные права доступа. Теперь при открытии печатной формы в 1С драйвер будет принудительно отдавать платформе жестко заданный размер 70х40 мм.
Рассмотрим ситуацию, когда при использовании технологии Terminal Services Easy Print размеры этикетки передаются корректно, но распечатанный штрихкод категорически отказывается считываться сканером. Выясним физику этого процесса.
Технология Easy Print работает по принципу преобразования отправляемого на печать документа в промежуточный векторный формат XPS на стороне сервера, после чего этот файл передается на клиентскую машину, где локальный драйвер выводит его на физическое устройство. В процессе этого транзита графика штрихкода подвергается сжатию и алгоритмам сглаживания (anti-aliasing) для "оптимизации" сетевого трафика.
Для обычного текста сглаживание размывает границы букв, делая их более мягкими для глаза. Но для лазерного или светодиодного сканера штрихкодов это фатально. Границы между черными и белыми полосами становятся серыми и нечеткими, а ширина линий искажается на доли миллиметра. Визуально штрихкод выглядит нормально, но сканироваться он не будет.
Для решения этой проблемы необходимо полностью отключить Easy Print для принтеров этикеток и использовать прямую печать через «родные» драйверы, установленные на сервере:
gpedit.msc).Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Перенаправление принтеров.gpupdate /force.После этого сервер перестанет использовать универсальный драйвер Easy Print и будет сопоставлять перенаправленный принтер с родным драйвером ZDesigner, установленным непосредственно в системе Windows Server. Это позволит передавать поток печати без промежуточного сжатия графики, «пиксель в пиксель», обеспечивая максимальную контрастность и четкость линий штрихкода.
Если после настройки драйверов 1С все еще продолжает выдавать неверный размер этикетки для конкретного пользователя, это означает, что старые некорректные параметры макета намертво закешировались в реестре. Нам необходимо произвести принудительную очистку.
Разберем, как безопасно очистить настройки печати табличных документов. На сервере под учетной записью проблемного пользователя выполним очистку ветки реестра. Мы можем сделать это вручную через regedit, либо воспользоваться командным файлом автоматической очистки.
Напишем простой скрипт на языке командного интерпретатора Windows (CMD), который автоматически сбросит настройки печати форм (таблиц Moxel) в 1С 7.7:
@echo off
echo Очистка кэша параметров печати 1С 7.7...
reg delete "HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Имя_Вашей_Базы\V7\Имя_Пользователя\Moxel" /f
echo Очистка успешно завершена!
pause
Обратите внимание: вместо Имя_Вашей_Базы и Имя_Пользователя необходимо подставить реальные значения параметров вашей информационной базы из окна запуска 1С. После выполнения этого скрипта при первом открытии печатной формы 1С 7.7 заново обратится к системному драйверу Zebra и подтянет наши идеальные настройки 70х40 мм.
Для минимизации проблем с сопоставлением имен принтеров в реестре 1С рекомендуется также зайти в свойства принтера на локальной машине пользователя и переименовать его, сделав имя максимально коротким и простым (например, просто Zebra70), избегая пробелов, русских букв и длинных названий.
Если стандартный механизм проброса портов RDP (redirected printers) в вашей сетевой инфраструктуре продолжает работать нестабильно, имеет смысл отказаться от маппинга принтера через сеанс удаленного рабочего стола.
Наиболее надежный промышленный метод — подключение принтера этикеток напрямую к серверу как сетевого устройства. Если принтер Zebra подключен к локальному компьютеру по USB, мы можем:
\\sklad-pc\zebra.Установленный таким образом сетевой принтер получит на сервере статическое, никогда не меняющееся имя. Платформа 1С 7.7 будет безупречно сохранять для него любые настройки размера бумаги в ветке Moxel, а отсутствие влияния механизмов сжатия RDP гарантирует моментальное распознавание напечатанных штрихкодов любыми типами сканеров.