Как настроить печать этикеток разного размера на принтере Zebra из 1С?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При автоматизации торговых точек и складов часто возникает задача печатать этикетки и ценники различных габаритов (например, стандартные 58х40 мм и компактные 29х20 мм) на одном физическом термопринтере (в частности, Zebra LP 2824 Plus). При выводе стандартного табличного документа из 1С возникает типовая сложность: если изменить размер макета только в базе данных, не меняя системные параметры драйвера печати в Windows, этикетка либо обрезается, либо сжимается в верхнем левом углу, либо принтер начинает прогонять пустую ленту. Предоставлять кассирам и операторам доступ к настройкам драйвера Windows небезопасно, поэтому разберем практические способы решения этой проблемы средствами операционной системы и встроенного языка 1С.

Причина некорректного масштабирования и прогона ленты

Проанализируем механизм взаимодействия платформы 1С и термопринтера. При формировании табличного документа 1С отправляет графическое задание через подсистему Windows GDI. Для нестандартных носителей драйвер принтера опирается на структуру DEVMODE. Если в системе не зафиксирован точный размер или 1С не передает кастомные габариты через диалог печати, драйвер использует размеры по умолчанию, заданные в операционной системе. В результате термопринтер либо ожидает длину этикетки 40 мм и позиционирует маленький макет 20 мм с огромным отступом, либо пытается прогнать ленту под размер стандартного листа.

Способ 1. Создание нескольких логических принтеров в Windows (рекомендуемый)

Самое стабильное и простое в реализации решение, не требующее глубокого изменения типовой конфигурации — создание нескольких независимых копий принтера в операционной системе, подключенных к одному и тому же физическому порту (USB или сетевому ресурсу).

Разберем по шагам, как настроить систему:

  1. Перейдем в системную панель управления «Устройства и принтеры» и установим драйвер для первого принтера с именем, например, Zebra_58x40.
  2. В свойствах и настройках печати этого устройства укажем точные физические размеры этикетки: ширина 58 мм, высота 40 мм, а также зададим корректный тип датчика (Web Sensing / зазор).
  3. Добавим новое локальное устройство (или используем функцию установки дубликата принтера), выберем тот же самый порт подключения и установим тот же драйвер, но присвоим имя Zebra_29x20.
  4. В свойствах второго устройства перейдем в параметры страницы и зададим размеры: ширина 29 мм, высота 20 мм.
  5. В обработке печати 1С реализуем программный выбор целевого принтера в зависимости от выбранного макета или размера этикетки через свойство табличного документа ИмяПринтера.

Посмотрим на пример кода во встроенном языке 1С:


ТабДокумент = Новый ТабличныйДокумент;
// Заполнение табличного документа макетом...

Если РазмерЭтикетки = "29x20" Тогда
    ТабДокумент.ИмяПринтера = "Zebra_29x20";
ИначеЕсли РазмерЭтикетки = "58x40" Тогда
    ТабДокумент.ИмяПринтера = "Zebra_58x40";
КонецЕсли;

ТабДокумент.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

При таком подходе каждый экземпляр принтера в Windows изолированно хранит свои параметры геометрии, и оператору не требуется вручную менять настройки драйвера.

Способ 2. Разделение параметров через свойство ИмяПараметровПечати

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

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

Посмотрим на пример установки уникального ключа параметров:


// Формируем уникальный идентификатор параметров под каждый размер
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка_" + СокрЛП(РазмерЭтикетки) + "_" + СокрЛП(ИмяКомпьютера());

Разберем порядок первоначальной настройки:

  1. В настройках драйвера Zebra в Windows создадим пользовательские образцы форматов (Stocks/Заготовки): зададим профиль «58x40» и профиль «29x20».
  2. В 1С откроем обработку печати для размера 58х40, выведем макет на экран, перейдем в меню «Файл — Параметры страницы», выберем принтер Zebra, установим соответствующий образец размера и нажмем «ОК». Настройки сохранятся в привязке к указанному имени параметров.
  3. Повторим процедуру для этикетки 29х20. При следующем формировании табличный документ автоматически подтянет сохраненный размер бумаги из профиля 1С.

Способ 3. Прямая печать командами EPL2 / ZPL (RAW-печать)

Для высоконагруженных складов и магазинов оптимальным техническим решением является отказ от графического табличного документа и переход на прямую отправку команд на языке управления принтером (EPL2 или ZPL II). Термопринтер Zebra LP 2824 Plus аппаратно поддерживает протоколы EPL/ZPL, что исключает зависимость от драйверов Windows и многократно увеличивает скорость печати.

Разберем базовые команды языка EPL2 для позиционирования этикеток:

  1. N — очистка буфера изображения перед началом формирования новой этикетки.
  2. q[ширина] — установка ширины области печати в точках (при стандартном разрешении 203 DPI плотность составляет 8 точек на 1 мм; для ширины 58 мм задается q464, для 29 мм — q232).
  3. Q[длина,зазор] — установка длины этикетки и высоты межэтикеточного зазора в точках (для высоты 40 мм с зазором 3 мм задается Q320,24, для 20 мм с зазором 3 мм — Q160,24).
  4. B — вывод штрихкода (Code 128, EAN-13 и др.) с точными координатами.
  5. P1 — команда запуска печати одной копии.

При формировании текстового файла с EPL-командами мы отправляем его напрямую в очередь печати как RAW-данные (например, через команду copy /b file.txt \\localhost\Zebra или системные функции библиотеки winspool.drv), что полностью исключает влияние настроек драйвера Windows на итоговый результат.

Особенности калибровки принтера при смене рулона

Обратим внимание на аппаратную часть: при физической замене рулона с одного типоразмера на другой (с 58х40 на 29х20) оптический датчик принтера должен заново определить расстояние между этикетками. Для корректного позиционирования необходимо выполнить калибровку: после установки новой ленты и закрытия крышки нажать и удерживать зеленую кнопку подачи (Feed) на корпусе Zebra до двукратного мигания индикатора, после чего отпустить ее. Принтер выполнит автокалибровку по подложке и точно выставит начало следующей этикетки.

← На главную