В условиях интенсивной складской логистики или маркировки товаров стандартная печать через графическую подсистему Windows (драйвер принтера) часто становится «узким местом». Медленный выход первой этикетки, необходимость постоянного взаимодействия пользователя с диалоговыми окнами и привязка к конкретному рабочему месту с установленным драйвером — всё это снижает эффективность. В данной статье мы разберем, как реализовать прямую отправку команд на языке TSPL (Taiwan Semiconductor Printing Language) из 1С напрямую на сетевые принтеры Xprinter, что позволяет добиться мгновенного отклика оборудования.
Когда мы печатаем «как на обычный принтер», система Windows сначала отрисовывает графическое изображение этикетки, затем драйвер переводит это изображение в понятный принтеру код (растр). В случае с бюджетными принтерами через LAN-порт этот процесс может занимать несколько секунд на каждую этикетку. Прямая отправка текстовых команд TSPL позволяет принтеру самому генерировать штрихкоды и текст, что происходит практически мгновенно. Это критично для «тети Клавы» на складе, которой нужно просто отсканировать товар и сразу получить напечатанную марку без лишних нажатий на кнопки.
Для начала проанализируем базовый набор команд, который необходим для формирования этикетки. Код TSPL представляет собой последовательность текстовых инструкций. Рассмотрим типовой пример сообщения для печати:
SIZE 58 mm, 40 mm
GAP 2 mm, 0 mm
DIRECTION 1
CLS
CODEPAGE 1251
TEXT 10,10,"ROMAN.TTF",0,1,1,"Привет, мир!"
BARCODE 10,60,"128",50,1,0,2,2,"1234567890"
PRINT 1
Разберем, что делает каждая команда:
1251.Бюджетные модели Xprinter часто не имеют встроенных русских шрифтов «из коробки». Чтобы принтер понял кириллицу при прямой печати, мы можем пойти двумя путями. Рассмотрим их подробнее.
Способ 1: Использование утилиты Diagnostic Tool
Производитель предоставляет сервисную утилиту (Printer Tool), в которой есть раздел для загрузки шрифтов. Мы можем сконвертировать стандартный шрифт Arial.ttf в формат, понятный принтеру, и прошить его во внутреннюю память под определенным именем (например, "ArialRus"). После этого в команде TEXT мы будем обращаться именно к этому имени.
Способ 2: Печать через картинку (BITMAP)
Если нет возможности прошивать шрифты или конфигурация должна быть универсальной, мы можем сформировать макет этикетки в 1С как обычный ТабличныйДокумент, сохранить его в картинку и отправить командой BITMAP. Однако помните, что это увеличит объем передаваемых данных по сети.
Самое интересное — как отправить этот текст на принтер, зная только его IP-адрес, не устанавливая драйвер в систему. Для этого мы будем использовать сетевой порт 9100, который предназначен для RAW-печати. В 1С это реализуется через работу с сокетами.
Рассмотрим пример кода для отправки сформированной строки КомандыTSPL на принтер:
// Предположим, переменная ТекстКоманд уже содержит сформированный набор TSPL
IPАдресПринтера = "192.168.1.100";
Порт = 9100;
// Используем объект для работы с TCP-соединением
// В зависимости от версии платформы это может быть внешняя компонента или Native API
Сокет = Новый ("НизкоуровневыеСредства.Socket");
Попытка
Сокет.Подключиться(IPАдресПринтера, Порт, 5); // Таймаут 5 секунд
ДанныеДляОтправки = ПолучитьДвоичныеДанныеИзСтроки(ТекстКоманд, КодировкаТекста.ANSI);
Сокет.Отправить(ДанныеДляОтправки);
Сокет.Закрыть();
Исключение
Сообщить("Не удалось связаться с принтером: " + ОписаниеОшибки());
КонецПопытки;
Проанализируем этот подход: мы переводим нашу строку команд в кодировку ANSI (Windows-1251), так как именно ее ожидает принтер после команды CODEPAGE 1251, и отправляем как «сырой» поток байтов. Принтер, получив данные на порт 9100, немедленно начинает их интерпретировать.
Чтобы реализовать сценарий «без кнопок», о котором говорил автор темы, рекомендуем придерживаться следующего алгоритма:
ПриСканировании в форме рабочего места кладовщика. Как только сканер считывает ШК товара или заказа, система автоматически генерирует строку TSPL и отправляет её на сокет.GAP 2 mm, 0 и следом команду автоматической калибровки ленты.IPАдресПринтераЭтикеток. Это позволит 1С динамически определять, на какой аппарат слать команду в зависимости от того, где находится сотрудник.Таким образом, использование протокола TSPL в связке с сетевыми возможностями 1С позволяет создавать высокопроизводительные системы маркировки. Мы избавились от зависимости от драйверов, ускорили печать и сделали процесс максимально прозрачным для конечного пользователя. Теперь тетя Клава может спокойно работать, а принтер будет печатать этикетку ровно в тот момент, когда она ей нужна.