При работе с принтерами этикеток часто возникает комплексная задача: нужно не только сформировать макет, но и правильно настроить его печать. Проблемы могут возникнуть на нескольких этапах: установка нестандартного размера страницы, генерация специфического штрихкода и обеспечение стабильной печати больших партий без смещения. Разберем все эти вопросы по шагам и найдем надежные решения.
Предположим, наша задача — создать этикетку размером 58x40 мм. Мы пишем код для формирования табличного документа, указывая нужные размеры, но при предварительном просмотре или печати все равно получаем стандартный лист А4. Давайте проанализируем ситуацию.
Исходный код может выглядеть так:
ТабличныйДокумент = Новый ТабличныйДокумент;
// Убираем поля и колонтитулы
ТабличныйДокумент.ПолеСверху = 0;
ТабличныйДокумент.ПолеСлева = 0;
ТабличныйДокумент.ПолеСнизу = 0;
ТабличныйДокумент.ПолеСправа = 0;
ТабличныйДокумент.РазмерКолонтитулаСверху = 0;
ТабличныйДокумент.РазмерКолонтитулаСнизу = 0;
// Устанавливаем параметры страницы
ТабличныйДокумент.РазмерСтраницы = "Custom"; //нестандартный размер
ТабличныйДокумент.ВысотаСтраницы = 40; // в миллиметрах
ТабличныйДокумент.ШиринаСтраницы = 58; // в миллиметрах
На первый взгляд, код абсолютно корректен. Однако, платформа 1С не управляет принтером напрямую. Чтобы лучше понимать внутреннюю логику работы с документами, полезно изучить, как устроена объектная модель печатной формы. В данном случае 1С лишь передает принтеру набор команд через драйвер Windows. Если драйвер "не знает" о формате 58x40 мм, он проигнорирует эти настройки.
Решение состоит из двух шагов:
Прежде чем 1С сможет использовать нестандартный размер, его нужно "объявить" в операционной системе. В «Свойствах сервера печати» (вкладка «Формы») создайте новую форму, например, "Этикетка 58x40", и укажите размеры. Если вы разрабатываете решение для современных конфигураций, возьмите за основу классический корректный пример внешней печатной формы на БСП 3.1.10.
Чтобы 1С автоматически применяла параметры, используйте свойство ИмяПараметровПечати. Это позволит системе запомнить принтер и размер бумаги для конкретного макета.
Добавим в наш код строку:
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка_58x40";
После этого нужно один раз выполнить настройку вручную в режиме «1С:Предприятие» через «Параметры страницы». Для быстрой проверки корректности вывода можно использовать универсальную форму отладки для внешних обработок.
Часто на этикетках требуется размещать штрихкоды, которые не соответствуют популярным форматам EAN-13 или EAN-8. Попытка сгенерировать буквенно-цифровой код маркетплейса с типом по умолчанию приведет к ошибке.
Рассмотрим код генерации:
ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();
ПараметрыШтрихкода.Ширина = 300;
ПараметрыШтрихкода.Высота = 100;
ПараметрыШтрихкода.ТипКода = 1; // 1 - это EAN13, здесь и кроется проблема
ПараметрыШтрихкода.ОтображатьТекст = Истина;
ПараметрыШтрихкода.Штрихкод = "OZN1566917233"; // Не кодируется в EAN13
ИзображениеШтрихкода = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);
рис.Картинка = ИзображениеШтрихкода.Картинка;
Решение: необходимо выбрать правильный тип кода (например, Code128). Если вы хотите избежать сложностей с установкой компонент, существует простая генерация QR и штрихкодов без библиотек и внешних компонент, которая работает даже в мобильной платформе.
В стандартной компоненте для исправления достаточно изменить одну строку:
ПараметрыШтрихкода.ТипКода = 4; // Указываем тип Code128
Проблема смещения при печати больших партий обычно связана с рассинхронизацией принтера и программных настроек. Погрешность в доли миллиметра накапливается и приводит к печати «по зазорам».
Запустите автокалибровку принтера, чтобы датчик зазора (gap) определил физическую длину этикетки. В настройках драйвера (Media Settings) убедитесь, что выбран тип "Этикетки с зазорами", а не "Непрерывная лента".
Для максимальной надежности в высоконагруженных системах стоит отказаться от графической печати через Windows-драйвер и перейти к отправке текстовых команд. Это исключает влияние обновлений ОС и настроек шрифтов.
Например, реализовать печать на мобильных принтерах по bluetooth и сети (ZPL, TSPL, CPCL) можно напрямую из мобильных приложений или учетных систем 1С. Этот метод гарантирует, что принтер будет точно позиционировать ленту при каждом задании.
Хотя разработка макета на языке принтера сложнее обычной верстки, это самый надежный способ раз и навсегда решить проблемы со смещением при печати тысяч этикеток.