Как организовать печать этикеток с мобильного клиента 1С на Android?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Печать этикеток из мобильного клиента 1С — это задача, требующая понимания взаимодействия между мобильным устройством, сервером 1С и физическим принтером. В отличие от стационарного компьютера, мобильное устройство не всегда имеет прямой доступ к драйверам Windows-spooler. Разберем основные стратегии реализации этой задачи, проанализируем их плюсы и минусы, а также выясним, какие механизмы платформы нам в этом помогут.

Вариант 1: Использование серверной очереди печати (метод «Посредника»)

Проанализируем наиболее универсальный способ, который не требует установки сложных драйверов на мобильное устройство. Часто такая методика описывается как организация универсального принт-сервера для мобильных приложений, где мобильный клиент не печатает напрямую, а создает «заявку» на печать в базе данных.

Рассмотрим по шагам, как это работает:

  1. Мобильный пользователь в интерфейсе нажимает кнопку «Печать».
  2. В базе данных создается запись в специально подготовленном регистре сведений (например, ОчередьПечати), куда записываются данные этикетки: номенклатура, количество, штрихкод и идентификатор принтера.
  3. На компьютере, к которому физически подключен принтер, запущен сеанс 1С (Тонкий клиент). В этом сеансе работает обработчик ожидания или регламентное задание.
  4. Этот «принт-сервер» считывает новые записи из регистра и отправляет их на локальный принтер, используя стандартный метод ТабличныйДокумент.Напечатать().

Пример кода для записи в очередь на мобильном клиенте:


&НаСервере
Процедура ОтправитьВQueueНаСервере(ДанныеЭтикетки)
    НоваяЗапись = РегистрыСведений.ОчередьПечати.СоздатьМенеджерЗаписи();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.ОбъектПечати = ДанныеЭтикетки.Ссылка;
    НоваяЗапись.Принтер = ДанныеЭтикетки.ИмяПринтера;
    НоваяЗапись.Статус = Перечисления.СтатусыПечати.ВТрабте;
    НоваяЗапись.Записать();
КонецПроцедуры

Этот метод хорош тем, что мы используем привычные Макеты и ТабличныеДокументы, не заботясь о протоколах связи принтера.

Вариант 2: Прямая печать через внешние компоненты и протокол ZPL

Если нам требуется мгновенная печать без задержек на опрос регистра, стоит рассмотреть, как реализуется печать на мобильных принтерах по 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"; // Конец

Выясним причину, почему это эффективно: принтер сам отрисовывает штрихкод из полученных координат. Это гарантирует идеальную четкость линий, что критично для маленьких этикеток, где обычная «картинка» может размыться при масштабировании.

Вариант 3: Использование Android Print Framework

Начиная с современных версий платформы 1С (8.3.18+), мобильный клиент научился лучше взаимодействовать с системными механизмами Android. В частности, стала доступна штатная работа с Android Print Framework, позволяющая выводить документы на печать через системные службы.

Разберем алгоритм: мы формируем этикетку как ТабличныйДокумент, затем сохраняем её во временный PDF-файл. Платформа позволяет вызвать системное окно печати, где пользователь выбирает найденный в сети принтер.

Важный момент: для этого способа необходимо, чтобы принтер «понимал» PDF или графический растр, что характерно для более дорогих моделей.

Вариант 4: Интеграция с приложением-посредником (например, RawBT)

Рассмотрим ситуацию, когда нужно подключить дешевый китайский термопринтер по Bluetooth. Зачастую у таких устройств нет полноценных драйверов для Android, работающих с 1С напрямую. В этом случае наиболее стабильным решением будет интеграция мобильного клиента 1С с устройством Android через сторонние приложения, такие как RawBT — универсальный драйвер для Android-устройств.

Механизм взаимодействия будет следующим:

  1. Устанавливаем на Android приложение-драйвер (например, RawBT).
  2. В 1С формируем данные (текст или картинку).
  3. Используем команду ЗапуститьПриложение с передачей данных через Intent.

Посмотрим на пример вызова внешнего приложения из кода 1С:


ПараметрыЗапуска = "intent:base64," + ДанныеBase64 + "#Intent;scheme=rawbt;package=ru.a402d.rawbtprinter;end;";
ЗапуститьПриложение(ПараметрыЗапуска);

Этот способ является одним из самых стабильных для мобильной автоматизации складов, так как приложение-посредник берет на себя все сложности удержания Bluetooth-соединения.

Нюансы формирования графики и штрихкодов

Выясним важную техническую деталь: борьба за качество и оптимизация печати крайне важны для таких задач, как заказ кодов маркировки и печать их на этикетках. При генерации картинки на сервере 1С она может быть подвергнута сглаживанию. На термопринтере это превращается в серые пиксели, которые сканер не сможет прочитать.

Рекомендации для качественной печати:

Подводя итог, выбор метода зависит от вашего оборудования. Если принтеры стационарные — используйте серверную очередь. Если сотрудники склада перемещаются с мобильными принтерами на поясе — лучше всего подойдут внешние компоненты Native API или приложения-посредники.

← На главную