Как решить проблему со сбросом размеров этикетки Zebra и нечитаемостью штрихкодов в 1С 7.7 через RDP?

Системный администратор 1С v7.7 Торговля и дистрибуция
← На главную

При организации работы склада или торговой точки в терминальном режиме (RDP) на базе операционных систем Windows Server 2012 R2 и выше системные администраторы часто сталкиваются с капризным поведением принтеров этикеток. Особенно остро эта проблема проявляется на платформе 1С:Предприятие 7.7. Типичный сценарий: локально принтер (например, популярный Zebra GC420d с родным драйвером ZDesigner) печатает этикетки размером 70х40 мм идеально. Однако при подключении пользователя к серверу терминалов 1С упорно сбрасывает параметры страницы до максимальных физических размеров (например, 108х297 мм). Попытки изменить настройки непосредственно в диалоговом окне печати 1С помогают ровно на один раз.

Дополнительную путаницу вносит использование технологии Microsoft Easy Print. При ее активации геометрические размеры этикетки могут транслироваться корректно, но штрихкоды на распечатанной ленте перестают считываться сканером. В этой статье мы подробно разберем физические и программные причины такого поведения системы и пошагово настроим стабильную печать.

Выясняем причины сбоя параметров бумаги в 1С 7.7

Проанализируем ситуацию. Почему в текстовом редакторе Блокнот или 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. Настройка параметров печати по умолчанию в Windows

Чтобы победить сброс размеров бумаги, нам необходимо жестко зафиксировать габариты этикетки в свойствах самого драйвера на сервере терминалов и на локальной машине. Изменять параметры внутри 1С бесполезно — они сотрутся при следующем перезапуске сессии.

Выполним следующие шаги под учетной записью с правами локального администратора:

  1. Убедимся, что на сервере терминалов и на клиентском компьютере установлена одна и та же версия родного драйвера (например, ZDesigner GC420d (EPL)).
  2. Обязательно закроем все запущенные сеансы 1С 7.7 у настраиваемого пользователя.
  3. Перейдем в меню «Панель управления» -> «Устройства и принтеры».
  4. Кликнем правой кнопкой мыши по принтеру Zebra и откроем «Свойства принтера» (именно свойства принтера, а не настройки печати).
  5. Перейдем на вкладку «Дополнительно» (Advanced) и нажмем кнопку «Печать по умолчанию» (Printing Defaults). Это критически важно! Изменения, внесенные на вкладке «Общие», сохраняются только для текущего сеанса пользователя, а нам нужно задать глобальный системный шаблон.
  6. В открывшемся окне настроек драйвера создадим новый профиль или отредактируем существующий, указав точные параметры нашей ленты: ширина — 70 мм, высота — 40 мм. Установим непечатные поля в значение 0 мм.
  7. Сохраним настройки, нажав «Применить» и «ОК».
  8. Теперь перейдем на вкладку «Общие», нажмем кнопку «Настройка» (Preferences) и убедимся, что там автоматически применились те же самые размеры 70х40 мм. Если нет — продублируем их вручную.
  9. В параметрах некоторых версий драйверов ZDesigner на вкладке «Параметры» (или «Прочее») установим флажок «Всегда использовать параметры драйвера» (Always use driver settings). Это запретит сторонним программам, включая 1С, навязывать свои форматы бумаги.

После проведения этих манипуляций под правами администратора можно вернуть пользователю стандартные права доступа. Теперь при открытии печатной формы в 1С драйвер будет принудительно отдавать платформе жестко заданный размер 70х40 мм.

Решение 2. Борьба с Easy Print и размытыми штрихкодами

Рассмотрим ситуацию, когда при использовании технологии Terminal Services Easy Print размеры этикетки передаются корректно, но распечатанный штрихкод категорически отказывается считываться сканером. Выясним физику этого процесса.

Технология Easy Print работает по принципу преобразования отправляемого на печать документа в промежуточный векторный формат XPS на стороне сервера, после чего этот файл передается на клиентскую машину, где локальный драйвер выводит его на физическое устройство. В процессе этого транзита графика штрихкода подвергается сжатию и алгоритмам сглаживания (anti-aliasing) для "оптимизации" сетевого трафика.

Для обычного текста сглаживание размывает границы букв, делая их более мягкими для глаза. Но для лазерного или светодиодного сканера штрихкодов это фатально. Границы между черными и белыми полосами становятся серыми и нечеткими, а ширина линий искажается на доли миллиметра. Визуально штрихкод выглядит нормально, но сканироваться он не будет.

Для решения этой проблемы необходимо полностью отключить Easy Print для принтеров этикеток и использовать прямую печать через «родные» драйверы, установленные на сервере:

  1. На сервере терминалов откроем Редактор локальной групповой политики (команда gpedit.msc).
  2. Перейдем по пути: Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Перенаправление принтеров.
  3. Найдем параметр «Использовать в первую очередь драйвер принтера Easy Print удаленного рабочего стола» (Use Remote Desktop Easy Print printer driver first).
  4. Установим значение этого параметра в положение «Отключено» (Disabled).
  5. Обновим групповые политики на сервере из командной строки с помощью команды gpupdate /force.

После этого сервер перестанет использовать универсальный драйвер Easy Print и будет сопоставлять перенаправленный принтер с родным драйвером ZDesigner, установленным непосредственно в системе Windows Server. Это позволит передавать поток печати без промежуточного сжатия графики, «пиксель в пиксель», обеспечивая максимальную контрастность и четкость линий штрихкода.

Решение 3. Очистка кэша принтеров в реестре 1С 7.7

Если после настройки драйверов 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), избегая пробелов, русских букв и длинных названий.

Альтернативное решение. Подключение принтера по TCP/IP

Если стандартный механизм проброса портов RDP (redirected printers) в вашей сетевой инфраструктуре продолжает работать нестабильно, имеет смысл отказаться от маппинга принтера через сеанс удаленного рабочего стола.

Наиболее надежный промышленный метод — подключение принтера этикеток напрямую к серверу как сетевого устройства. Если принтер Zebra подключен к локальному компьютеру по USB, мы можем:

  1. Предоставить к нему общий доступ (расшарить) в локальной сети под простым сетевым именем, например, \\sklad-pc\zebra.
  2. Если склад находится удаленно, настроить стабильный VPN-туннель между складом и сервером терминалов.
  3. На сервере терминалов добавить новый принтер, выбрав тип порта Local Port или создав стандартный порт TCP/IP (если принтер оборудован сетевой картой Print Server).
  4. Указать сетевой путь к общему принтеру на клиенте.

Установленный таким образом сетевой принтер получит на сервере статическое, никогда не меняющееся имя. Платформа 1С 7.7 будет безупречно сохранять для него любые настройки размера бумаги в ветке Moxel, а отсутствие влияния механизмов сжатия RDP гарантирует моментальное распознавание напечатанных штрихкодов любыми типами сканеров.

← На главную