Печать этикеток из мобильного клиента 1С — это задача, требующая понимания взаимодействия между мобильным устройством, сервером 1С и физическим принтером. В отличие от стационарного компьютера, мобильное устройство не всегда имеет прямой доступ к драйверам Windows-spooler. Разберем основные стратегии реализации этой задачи, проанализируем их плюсы и минусы, а также выясним, какие механизмы платформы нам в этом помогут.
Проанализируем наиболее универсальный способ, который не требует установки сложных драйверов на мобильное устройство. Часто такая методика описывается как организация универсального принт-сервера для мобильных приложений, где мобильный клиент не печатает напрямую, а создает «заявку» на печать в базе данных.
Рассмотрим по шагам, как это работает:
ОчередьПечати), куда записываются данные этикетки: номенклатура, количество, штрихкод и идентификатор принтера.ТабличныйДокумент.Напечатать().Пример кода для записи в очередь на мобильном клиенте:
&НаСервере
Процедура ОтправитьВQueueНаСервере(ДанныеЭтикетки)
НоваяЗапись = РегистрыСведений.ОчередьПечати.СоздатьМенеджерЗаписи();
НоваяЗапись.Период = ТекущаяДата();
НоваяЗапись.ОбъектПечати = ДанныеЭтикетки.Ссылка;
НоваяЗапись.Принтер = ДанныеЭтикетки.ИмяПринтера;
НоваяЗапись.Статус = Перечисления.СтатусыПечати.ВТрабте;
НоваяЗапись.Записать();
КонецПроцедуры
Этот метод хорош тем, что мы используем привычные Макеты и ТабличныеДокументы, не заботясь о протоколах связи принтера.
Если нам требуется мгновенная печать без задержек на опрос регистра, стоит рассмотреть, как реализуется печать на мобильных принтерах по bluetooth и сети (ZPL, TSPL, CPCL) из 1С:Мобильный клиент. Многие современные принтеры этикеток поддерживают языки команд ZPL (Zebra Programming Language) или TSPL.
Проанализируем ситуацию: мобильный клиент может сформировать текстовую строку команд, которая описывает геометрию этикетки и штрихкод. Далее эта строка передается на принтер через Bluetooth или TCP/IP сокет. Для работы с сокетами и портами в мобильном клиенте удобно использовать технологию Native API.
Пример формирования простой ZPL-команды:
ТекстКоманды = "^XA" + // Начало этикетки
"^FO50,50^ADN,36,20^FD" + ТекстЭтикетки + "^FS" + // Текст
"^FO50,100^B3N,N,100,Y,N^FD" + Штрихкод + "^FS" + // Текст
"^XZ"; // Конец
Выясним причину, почему это эффективно: принтер сам отрисовывает штрихкод из полученных координат. Это гарантирует идеальную четкость линий, что критично для маленьких этикеток, где обычная «картинка» может размыться при масштабировании.
Начиная с современных версий платформы 1С (8.3.18+), мобильный клиент научился лучше взаимодействовать с системными механизмами Android. В частности, стала доступна штатная работа с Android Print Framework, позволяющая выводить документы на печать через системные службы.
Разберем алгоритм:
мы формируем этикетку как ТабличныйДокумент, затем сохраняем её во временный PDF-файл. Платформа позволяет вызвать системное окно печати, где пользователь выбирает найденный в сети принтер.
Важный момент: для этого способа необходимо, чтобы принтер «понимал» PDF или графический растр, что характерно для более дорогих моделей.
Рассмотрим ситуацию, когда нужно подключить дешевый китайский термопринтер по Bluetooth. Зачастую у таких устройств нет полноценных драйверов для Android, работающих с 1С напрямую. В этом случае наиболее стабильным решением будет интеграция мобильного клиента 1С с устройством Android через сторонние приложения, такие как RawBT — универсальный драйвер для Android-устройств.
Механизм взаимодействия будет следующим:
ЗапуститьПриложение с передачей данных через Intent.Посмотрим на пример вызова внешнего приложения из кода 1С:
ПараметрыЗапуска = "intent:base64," + ДанныеBase64 + "#Intent;scheme=rawbt;package=ru.a402d.rawbtprinter;end;";
ЗапуститьПриложение(ПараметрыЗапуска);
Этот способ является одним из самых стабильных для мобильной автоматизации складов, так как приложение-посредник берет на себя все сложности удержания Bluetooth-соединения.
Выясним важную техническую деталь: борьба за качество и оптимизация печати крайне важны для таких задач, как заказ кодов маркировки и печать их на этикетках. При генерации картинки на сервере 1С она может быть подвергнута сглаживанию. На термопринтере это превращается в серые пиксели, которые сканер не сможет прочитать.
Рекомендации для качественной печати:
Подводя итог, выбор метода зависит от вашего оборудования. Если принтеры стационарные — используйте серверную очередь. Если сотрудники склада перемещаются с мобильными принтерами на поясе — лучше всего подойдут внешние компоненты Native API или приложения-посредники.