При работе с торговым оборудованием в 1С:УНФ (прежде всего убедитесь, что выполнена базовая инструкция по настройке торгового места на базе РМК) или других конфигурациях пользователи часто сталкиваются со специфической проблемой: при печати этикеток на термопринтерах (например, популярных моделях Xprinter 420B) длинные наименования товаров переносятся некорректно. Вместо того чтобы переносить текст по словам, принтер разрывает слово на полуслове, ориентируясь только на физическую границу области печати. При этом на обычном офисном принтере тот же макет печатается идеально. Разберем детально, почему это происходит и как исправить ситуацию несколькими способами.
Прежде всего, нам необходимо понять механику взаимодействия 1С и принтера этикеток. Когда мы отправляем макет на печать, 1С формирует графический или текстовый поток. Часто в системе используются стандартные или внешние печатные формы для 1С:Управление нашей фирмой 3.0, которые по-разному интерпретируются драйвером. Обычные принтеры используют стандартные механизмы Windows (GDI), которые корректно обсчитывают шрифты. Термопринтеры же часто используют внутренние алгоритмы оптимизации. Если в настройках драйвера или 1С указано использование внутренних шрифтов принтера, устройство само решает, где обрезать строку. Выясним, как заставить систему соблюдать правила русского языка и переносить текст по пробелам.
Одной из самых частых причин проблем с Xprinter является штатное ПО, идущее в комплекте. Рассмотрим вариант замены драйвера на профессиональное решение от Seagull Scientific. Эти драйверы оптимизированы специально для работы с этикеточными принтерами в учетных системах.
Драйверы от Seagull корректнее передают информацию о границах текстовых полей, что позволяет 1С правильно рассчитать место для переноса строки до того, как данные уйдут в буфер принтера.
Если смена драйвера не помогла или невозможна, проанализируем настройки текущего драйвера. Нам нужно запретить принтеру использовать его встроенные «быстрые» шрифты и заставить его печатать текст как картинку. В этом случае рендеринг (отрисовка) текста происходит на стороне Windows, и 1С управляет каждым пикселем.
После включения этого режима принтер перестанет «умничать» и напечатает текст ровно так, как вы видите его в окне предпросмотра 1С.
Разберем ситуацию, когда 1С неправильно вычисляет ширину поля из-за несовпадения разрешения (DPI). Для Xprinter 420B стандартное разрешение составляет 203 dpi. Если в драйвере ошибочно указано 300 или 600, масштаб символов плывет.
Особенно критично это проявляется, когда выполняется массовая печать этикеток и ценников из документа Заказ покупателя или востребованная пользователями печать этикеток и ценников с показом остатков. Попробуем применить «хитрость» с буферной зоной: уменьшим ширину текстового поля внутри ячейки макета на 1-2 мм с каждой стороны. Это заставит алгоритм 1С выполнить перенос слова чуть раньше, не доходя до границы, на которой принтер начинает ломать символы.
Если стандартные настройки не помогают, рассмотрим программный метод управления переносами. Мы можем принудительно расставить знаки переноса строк Символы.ПС. Такой метод часто применяется в специализированных решениях, например, когда производится подготовка ячеек адресного склада и нужно уместить длинный адрес хранения на маленькой наклейке.
Предположим, нам нужно ограничить длину строки в 20 символов и переносить только по пробелам:
Функция ПодготовитьНаименованиеДляПечати(ИсходныйТекст, МаксДлинаСтроки)
МассивСлов = СтрРазбить(ИсходныйТекст, " ");
Результат = "";
ТекущаяСтрока = "";
Для Каждого Слово Из МассивСлов Цикл
Если СтрДлина(ТекущаяСтрока + " " + Слово) <= МаксДлинаСтроки Тогда
ТекущаяСтрока = ТекущаяСтрока + ?(ПустаяСтрока(ТекущаяСтрока), "", " ") + Слово;
Иначе
Результат = Результат + ?(ПустаяСтрока(Результат), "", Символы.ПС) + ТекущаяСтрока;
ТекущаяСтрока = Слово;
КонецЕсли;
КонецЦикла;
Результат = Результат + ?(ПустаяСтрока(Результат), "", Символы.ПС) + ТекущаяСтрока;
Возврат Результат;
КонецФункции
При использовании этого метода в макете обязательно должна быть снята галочка Многострочность, так как мы сами управляем структурой текста.
Выясним, как выбор шрифта влияет на результат. Стандартные шрифты с переменной шириной символов (Arial, Calibri) сложны для расчета драйвером принтера. Проанализируем использование моноширинных шрифтов, таких как Courier New. В моноширинном шрифте каждое слово занимает предсказуемое количество пикселей. Если дизайн этикетки позволяет, установите для поля Наименование шрифт Courier New. Это значительно повышает стабильность работы встроенных функций переноса 1С.
Мы рассмотрели различные уровни решения проблемы. Начните с самого простого — проверки свойств ячейки в 1С. Если это не помогает, переходите к настройкам драйвера (печать графикой). В случае использования мобильного оборудования, рекомендуем ознакомиться с особенностями печати на мобильных принтерах по bluetooth и сети, где используются языки ZPL и TSPL. Помните, что связка 1С + Термопринтер очень чувствительна к настройкам DPI, поэтому всегда проверяйте соответствие характеристик в свойствах принтера документации вашего устройства.