При работе с принтерами этикеток Godex, в частности моделью G500, многие разработчики сталкиваются с ситуацией, когда штрихкод в 1С печатается фиксированной ширины (обычно около 36 мм), несмотря на любые изменения размера в макете этикетки. Особенно это заметно при использовании драйверов «Сканкод» (технология Native API) в рамках БСП (Библиотеки стандартных подсистем) или БПО (Библиотеки подключаемого оборудования). Рассмотрим подробно, почему это происходит и как настроить корректную печать.
Проанализируем ситуацию. Когда мы печатаем из программы 1С на обычный офисный принтер, система формирует графический образ страницы (растр) и отправляет его драйверу. В случае с принтерами этикеток существует два принципиально разных подхода:
Выясним причину «магического» размера 36 мм. Принтер Godex G500 имеет разрешение 203 DPI (8 точек на миллиметр). В языке EZPL ширина штрихкода определяется множителем «узкого элемента». Ширина не может быть произвольной, она всегда кратна физической точке головки:
Для стандартного штрихкода EAN-13, состоящего из 95 модулей, при множителе «3» мы получаем: 95 * 0.375 = 35.625 мм. Это именно те 36 мм, которые наблюдает автор вопроса. Промежуточного значения (например, 30 мм) в командном режиме добиться невозможно, так как принтер не может напечатать «полторы точки».
Разберем, как повлиять на размер, оставаясь в рамках драйвера «Сканкод». Поскольку драйвер игнорирует визуальное растягивание объекта в макете 1С, нам нужно изменить настройки самого оборудования.
Выполним следующие шаги:
Ширина узкого элемента, Масштаб штрихкода или Narrow Bar Width.Важно помнить: если мы сделаем штрихкод слишком мелким (множитель 1), дешевые сканеры могут перестать его считывать из-за нехватки разрешения.
Если нам нужна гибкость и точное соответствие макету, проанализируем вариант отказа от командного режима в пользу формирования штрихкода как картинки. Для этого мы можем использовать стандартную внешнюю компоненту 1С:Печать штрихкодов.
Рассмотрим пример кода для формирования картинки штрихкода вручную, который можно вставить в типовой макет:
// Пример получения картинки штрихкода через стандартную компоненту БПО
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", 400);
ПараметрыШтрихкода.Вставить("Высота", 200);
ПараметрыШтрихкода.Вставить("ТипКода", 1); // EAN13
ПараметрыШтрихкода.Вставить("Значение", "2000000000015");
ДанныеШтрихкода = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
ОбластьМакета.Рисунки.Штрихкод.Картинка = ДанныеШтрихкода;
В этом случае принтер будет воспринимать всю этикетку как единое графическое полотно. Это позволит нам задавать штрихкоду любой размер в миллиметрах прямо в конфигураторе или в режиме «1С:Предприятие».
Если использование БПО и специализированных драйверов «Сканкод» не является критически обязательным, рассмотрим самый простой путь — установку обычного Windows-драйвера (например, от Seagull Scientific).
При таком подходе:
ТабличныйДокумент.Проанализируем важный нюанс: при печати через Windows-драйвер макеты могут «плыть» при переносе на другой компьютер. Чтобы этого избежать, убедимся, что в настройках драйвера (Свойства принтера — Настройка печати) поля (Margins) установлены в 0, а размер бумаги жестко задан в миллиметрах.
Посмотрим на ситуацию со стороны специализированного ПО. Программа GoLabel, которая идет в комплекте с принтером, очень умная. Она умеет комбинировать методы: она может отправить команду EZPL для простых текстов, но если видит, что пользователь задал «нестандартный» размер штрихкода, она сама пересчитывает его в графику и отправляет на принтер в виде бинарного потока. Драйвер 1С (особенно версии Native API) зачастую работает более «прямолинейно», строго следуя заложенным в него таблицам соответствия команд.
Подведем итоги. Если вам нужно быстро исправить ситуацию с фиксированным размером 36 мм:
Выбор конкретного метода зависит от ваших задач: командный режим (EZPL) работает быстрее и дает максимально четкие линии, а растровый режим (Windows-драйвер/Картинка) дает полную свободу в дизайне макета.