При работе в 1С через удаленный рабочий стол (RDP) с использованием операционных систем семейства Linux часто возникает специфическая проблема: этикетки на принтерах (например, TSC-TE210) печатаются некорректно. Это может проявляться в виде «съезжания» текста, печати одной этикетки с последующим прогоном нескольких пустых листов или нарушении масштаба. Рассмотрим подробно причины возникновения этой ситуации и разберем пошаговые методы ее решения.
Проанализируем архитектуру системы. Когда пользователь подключается с Linux к серверу Windows по протоколу RDP (используя Remmina или FreeRDP), подсистема печати CUPS пробрасывает локальный принтер в удаленную сессию. Основной конфликт заключается в том, что сервер не всегда правильно интерпретирует настройки «виртуального» принтера, которые передает Linux-клиент. Выясним основные факторы, влияющие на ошибку:
Прежде всего, проанализируем локальные настройки на стороне Linux-машины. Нам необходимо убедиться, что CUPS (Common Unix Printing System) передает корректные метаданные. Перейдем в веб-интерфейс настройки CUPS (обычно доступен по адресу localhost:631).
Рассмотрим шаги по настройке:
Label with Gaps. Это критически важно для предотвращения печати пустых этикеток.None. В Linux-системах «непечатные области», добавленные драйвером, часто суммируются с отступами из 1С, что вызывает смещение.Посмотрим на ситуацию со стороны RDP-клиента. При использовании FreeRDP или Remmina, принтер часто определяется на сервере как MS Publisher Imagesetter. Чтобы система использовала «родной» драйвер, установленный на сервере, проанализируем параметры запуска.
Если мы используем командную строку для запуска xfreerdp, можно принудительно указать имя драйвера:
/printer:name="TSC-TE210",driver="TSC TE210"
Это заставит сервер Windows искать соответствие драйвера по имени. Если драйвер на сервере совпадает с тем, что запрашивает клиент, настройки формата бумаги будут подтягиваться более корректно.
Рассмотрим наиболее профессиональный подход, который позволяет полностью исключить влияние драйверов CUPS и графической подсистемы Windows. Это использование языка команд принтера — TSPL (TSC Printer Language).
Вместо того чтобы формировать табличный документ и отправлять его на печать методом Напечатать(), мы сформируем текстовый файл с командами принтеру и отправим его в порт принтера напрямую. Выясним, как это реализовать в коде 1С.
Пример формирования команды для печати этикетки:
ТекстКоманд = "SIZE 58 mm, 40 mm" + Символы.ПС;
ТекстКоманд = ТекстКоманд + "GAP 3 mm, 0" + Символы.ПС;
ТекстКоманд = ТекстКоманд + "DIRECTION 1" + Символы.ПС;
ТекстКоманд = ТекстКоманд + "CLS" + Символы.ПС;
ТекстКоманд = ТекстКоманд + "TEXT 50,50,""3"",0,1,1,""Наименование товара""" + Символы.ПС;
ТекстКоманд = ТекстКоманд + "BARCODE 50,100,""128"",50,1,0,2,2,""123456789012""" + Символы.ПС;
ТекстКоманд = ТекстКоманд + "PRINT 1,1" + Символы.ПС;
// Запись во временный файл
ИмяФайла = ПолучитьИмяВременногоФайла("txt");
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст(ТекстКоманд);
ТекстовыйДокумент.Записать(ИмяФайла, КодировкаТекста.ANSI);
Для отправки этого файла на принтер из-под Linux-клиента через RDP, мы можем настроить принтер как Generic / Text Only. В этом режиме данные передаются «как есть», и принтер TSC выполнит команды SIZE, GAP и PRINT идеально точно, без лишних пустых страниц.
Проанализируем настройки на самом Windows-сервере. Даже если принтер проброшен, сервер хранит настройки «по умолчанию» для этого устройства. Часто 1С берет параметры именно оттуда.
Подводя итог, можно сказать, что проблема «корявой» печати этикеток в связке 1С + Linux + RDP чаще всего решается либо отключением отступов в CUPS, либо переходом на Raw-печать. Если ваша задача позволяет использовать команды TSPL, это сэкономит массу времени на администрирование драйверов в будущем, так как печать перестанет зависеть от графических обновлений системы и версий RDP-клиентов.
Также рекомендуется проверить физическую калибровку принтера. На самом устройстве TSC нажмите и удерживайте кнопку подачи при включении, пока индикатор не начнет мигать, чтобы принтер автоматически определил высоту этикетки и зазор. Это базовое действие часто помогает, когда программные методы кажутся бессильными.