Как организовать печать этикеток на мобильном принтере TSC из 1С:Мобильной платформы

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

При разработке мобильных приложений на платформе 1С:Предприятие часто возникает задача прямой печати этикеток на мобильных термопринтерах (например, серии TSC Alpha). Стандартная Библиотека подключаемого оборудования (БПО) для мобильной платформы поддерживает ограниченный перечень устройств, а попытка печати через обычный ТабличныйДокумент часто приводит к зависанию принтера или некорректному выводу данных. В этой статье мы подробно разберем, как обойти эти ограничения, используя прямую передачу команд на языке принтера через механизм Android Intent.

Почему стандартная печать не всегда работает

Проанализируем ситуацию: мобильный принтер этикеток — это специализированное устройство, которое ожидает данные в виде набора низкоуровневых команд (языки TSPL, ZPL, CPCL или ESC/POS). Когда мы пытаемся распечатать ТабличныйДокумент средствами 1С, платформа формирует графический образ страницы. Если драйвер принтера или операционная система Android не могут корректно преобразовать этот образ в команды, понятные принтеру, устройство может сигнализировать об ошибке «Печать остановлена» или просто игнорировать входящие данные.

Выясним причину: принтер TSC Alpha-3RB поддерживает эмуляцию нескольких языков, включая TSPL-EZ. Чтобы печать была быстрой и стабильной, нам нужно передавать на принтер именно текстовые команды управления, минуя сложные графические преобразования. Рассмотрим, как реализовать это через промежуточное приложение-прослойку.

Решение через Android Intent и приложение-посредник

Самый эффективный способ подружить 1С и мобильный принтер — использовать механизм Intent (Намерения). Мы создадим в 1С строку команд на языке TSPL и передадим её специальному Android-приложению, которое уже умеет работать с Bluetooth-стеком принтера. Разберем этот процесс по шагам.

Шаг 1. Подготовка команд печати

Для начала нам необходимо сформировать строку данных. В языке TSPL каждая команда должна заканчиваться символом переноса строки. Рассмотрим пример формирования этикетки с текстом и QR-кодом:


КомандыДляПечати = "SIZE 58 mm, 40 mm" + Символы.ПС; // Установка размера этикетки
КомандыДляПечати = КомандыДляПечати + "GAP 3 mm, 0" + Символы.ПС; // Установка зазора
КомандыДляПечати = КомандыДляПечати + "CLS" + Символы.ПС; // Очистка буфера
КомандыДляПечати = КомандыДляПечати + "CODEPAGE 1251" + Символы.ПС; // Установка кодировки для кириллицы

// Печать текста: TEXT x, y, \"font\", rotation, x-multi, y-multi, alignment, \"content\"
КомандыДляПечати = КомандыДляПечати + "TEXT 10, 10, ""4"", 0, 1, 1, 2, ""Товар: Смесь Гавайская""" + Символы.ПС;

// Печать QR-кода: QRCODE x, y, ECC, cell_width, mode, rotation, \"content\"
КомандыДляПечати = КомандыДляПечати + "QRCODE 100, 100, H, 4, A, 0, ""850000001323898""" + Символы.ПС;

КомандыДляПечати = КомандыДляПечати + "PRINT 1, 1" + Символы.ПС; // Команда печати 1 копии

Шаг 2. Вызов внешнего приложения из 1С

Для передачи этих данных в Android-систему используем объект ЗапускПриложенияМобильногоУстройства. Нам потребуется стороннее приложение (например, TscBluetoothSample), которое выступает в роли драйвера. Проанализируем пример кода для запуска печати:


Если ЗначениеЗаполнено(КомандыДляПечати) Тогда
    НовВз = Новый ЗапускПриложенияМобильногоУстройства;
    
    // Указываем ключ данных, который ожидает принимающее приложение
    НовВз.ДополнительныеДанные.Добавить("com.example.tscsample.PrintData", КомандыДляПечати);
    
    // Указываем идентификатор приложения-прослойки
    НовВз.Приложение = "com.example.tscsample";
    
    // Указываем класс (активити), отвечающий за обработку печати
    НовВз.ИмяКласса = "com.example.tscsample.DeviceListActivity";
    
    // Запускаем приложение. Ложь означает, что мы не ждем возврата управления
    НовВз.Запустить(Ложь);
Иначе
    ПоказатьПредупреждение(, "Команды для печати этикетки не были сформированы!");
КонецЕсли;

Важные нюансы настройки оборудования

При использовании данного метода важно обратить внимание на настройки самого принтера. Разберем основные моменты:

  1. Сопряжение устройств: Перед началом работы принтер должен быть сопряжен с мобильным устройством (смартфоном или ТСД) в настройках Bluetooth Android. В приложении-прослойке обычно требуется один раз выбрать нужное устройство из списка.
  2. Режим эмуляции: Некоторые принтеры (например, Datamax-O'Neil) по умолчанию могут принимать данные только в родном формате (DPL). Посмотрим на ситуацию: если принтер получает данные, но не печатает, проверьте в настройках принтера параметр Input Mode. Рекомендуется установить значение Auto, чтобы принтер сам определял тип входящего потока (TSPL или ZPL).
  3. Кодировка кириллицы: Для печати русского текста обязательно отправляйте команду CODEPAGE 1251 или CODEPAGE UTF-8. Если этого не сделать, вместо букв вы увидите знаки вопроса или иероглифы.

Альтернативный метод: Печать через PDF и системные службы

Если вы не хотите использовать сторонние APK-прослойки, можно рассмотреть вариант использования системных средств печати Android, которые стали доступны начиная с платформы версии 8.3.18. Проанализируем этот путь:

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

  1. Вы сохраняете печатную форму (этикетку) в формате PDF во временное хранилище мобильного устройства.
  2. Используете системную службу печати (например, Mopria Print Service или официальный TSC Print Service из Google Play).
  3. Система Android открывает окно предпросмотра, где пользователь подтверждает печать.

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

Недостатки: требуется больше действий от пользователя (лишние клики), а также возможны искажения масштаба при преобразовании PDF в термопечать.

Особенности работы на разных моделях ТСД

Если ваша задача — печать со встроенного принтера Терминала Сбора Данных (например, Urovo или Honeywell), производители часто предоставляют готовые SDK. Рассмотрим, как это работает: ПО оборудования висит в системе как фоновая служба (демон). 1С отправляет интент, служба его подхватывает и отправляет данные на внутренний порт принтера.

Совет для разработчика: Если вы используете устройства китайских брендов (например, Xiaomi), помните, что их агрессивная политика энергосбережения может "убивать" фоновые службы драйверов печати. Для стабильной работы рекомендуется добавлять приложения-драйверы в исключения режима экономии энергии.

Заключение

Мы рассмотрели основной способ решения проблемы интеграции мобильной 1С с принтерами этикеток. Использование механизма ЗапускПриложенияМобильногоУстройства в сочетании с прямой отправкой TSPL-команд является наиболее гибким и быстрым решением для профессиональной автоматизации склада или розничной точки. Это позволяет полностью контролировать содержимое этикетки и добиваться высокой скорости печати без лишних диалоговых окон.

← На главную