При разработке мобильных приложений на платформе 1С:Предприятие часто возникает задача прямой печати этикеток на мобильных термопринтерах (например, серии TSC Alpha). Стандартная Библиотека подключаемого оборудования (БПО) для мобильной платформы поддерживает ограниченный перечень устройств, а попытка печати через обычный ТабличныйДокумент часто приводит к зависанию принтера или некорректному выводу данных. В этой статье мы подробно разберем, как обойти эти ограничения, используя прямую передачу команд на языке принтера через механизм Android Intent.
Проанализируем ситуацию: мобильный принтер этикеток — это специализированное устройство, которое ожидает данные в виде набора низкоуровневых команд (языки TSPL, ZPL, CPCL или ESC/POS). Когда мы пытаемся распечатать ТабличныйДокумент средствами 1С, платформа формирует графический образ страницы. Если драйвер принтера или операционная система Android не могут корректно преобразовать этот образ в команды, понятные принтеру, устройство может сигнализировать об ошибке «Печать остановлена» или просто игнорировать входящие данные.
Выясним причину: принтер TSC Alpha-3RB поддерживает эмуляцию нескольких языков, включая TSPL-EZ. Чтобы печать была быстрой и стабильной, нам нужно передавать на принтер именно текстовые команды управления, минуя сложные графические преобразования. Рассмотрим, как реализовать это через промежуточное приложение-прослойку.
Самый эффективный способ подружить 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";
// Запускаем приложение. Ложь означает, что мы не ждем возврата управления
НовВз.Запустить(Ложь);
Иначе
ПоказатьПредупреждение(, "Команды для печати этикетки не были сформированы!");
КонецЕсли;
При использовании данного метода важно обратить внимание на настройки самого принтера. Разберем основные моменты:
CODEPAGE 1251 или CODEPAGE UTF-8. Если этого не сделать, вместо букв вы увидите знаки вопроса или иероглифы.Если вы не хотите использовать сторонние APK-прослойки, можно рассмотреть вариант использования системных средств печати Android, которые стали доступны начиная с платформы версии 8.3.18. Проанализируем этот путь:
В настройках мобильного приложения в сборщике можно указать режим печати "Средствами устройства". В этом случае работа строится следующим образом:
Преимущества этого метода: не нужно писать код на языке принтера, можно использовать привычный конструктор макетов 1С.
Недостатки: требуется больше действий от пользователя (лишние клики), а также возможны искажения масштаба при преобразовании PDF в термопечать.
Если ваша задача — печать со встроенного принтера Терминала Сбора Данных (например, Urovo или Honeywell), производители часто предоставляют готовые SDK. Рассмотрим, как это работает: ПО оборудования висит в системе как фоновая служба (демон). 1С отправляет интент, служба его подхватывает и отправляет данные на внутренний порт принтера.
Совет для разработчика: Если вы используете устройства китайских брендов (например, Xiaomi), помните, что их агрессивная политика энергосбережения может "убивать" фоновые службы драйверов печати. Для стабильной работы рекомендуется добавлять приложения-драйверы в исключения режима экономии энергии.
Мы рассмотрели основной способ решения проблемы интеграции мобильной 1С с принтерами этикеток. Использование механизма ЗапускПриложенияМобильногоУстройства в сочетании с прямой отправкой TSPL-команд является наиболее гибким и быстрым решением для профессиональной автоматизации склада или розничной точки. Это позволяет полностью контролировать содержимое этикетки и добиваться высокой скорости печати без лишних диалоговых окон.