Доброго времени суток Дамы и Господа.
Прошу Вашей помощи.
Имеется принтер этикеток TSC Alpha-3RB.
Хочу написать мобильное приложение, для возможности печати этикеток нужного мне шаблона.
Возникла проблема, как подключить и передать данные на принтер. Сопряжение я выполняю, но последующие действия для печати никак не могу найти.
Если не трудно, подскажите, где я могу найти об этом информацию.
Смотрел в сторону Библиотека подключаемого оборудования мобильная платформа, но там поддержка данного устройства не указана :(
Alpha-3R
• IP54-rated protective case to resist dust and water
• Plastic design with rubber over-mold construction that withstands 5 ft. (1.5 m) drop
• Wired & wireless communication interfaces: USB 2.0, RS-232, Bluetooth, and 802.11 a/b/g/n
• High capacity 2500 mAh rechargeable Lithium Ion batteries
• Large Paper capacity to reduce the frequency of changing paper roll
• High-speed processor and extensive memory for fast print speeds of up to 4" (102 mm) per second
• Last more than 30 hours of printing receipts on a single battery charge
• Supports TSPL-EZ (EPL2 and ZPL emulations), ESC-POS or CPCL emulation • 2-Year Warranty
Все таки никак не могу добить печать :(
Решил использовать мобильную кассу - через стандартные драйвера происходит подключение, но когда отправляю команду на языке принтера, вижу, что индикатор BT моргает, то есть принтер получает данные, но ничего не печатает.
Пробовал через типовой механизм "Напечатать" ТабДока, подключение производиться, но принтер сигнализирует об остановки печати. :(
Аналогичная ситуация и с 1С:Библиотека подключаемого оборудования для мобильных приложений.
Может быть как то я могу напрямую отправлять текст на принтер?
А то я уже всю голову сломал, как подружить Моб платформу и принтер :(
(5) А вообще с телефона печатать можете из других приложений? Посмотрите на 8.3.18, там реализовали печать на принтеры средствами системы, возможно стоит в эту сторону посмотреть.
В сборщике приложений в группе приложений ищите:
Поле Режим печати позволяет указать, какой способ печати будет использовать собираемое мобильное приложение. Это поле задается как в сборщике (описываемое поле), так и в свойствах информационной базы на мобильном устройстве. Приоритет имеет настройка, установленная в свойствах информационной базы. Каждая настройка может быть установлена в одно из следующих значений:
● Авто ‑ в этом случае режим печати выбирается автоматически:
● Если из приложения на устройстве ранее выполнялась печать встроенными средствами приложения ‑ будет продолжено использование этого способа печати.
● Иначе будет использовать печать средствами устройства.
Рекомендуется указывать это значение по умолчанию.
● Средствами устройства ‑ используется печать с использованием инструментов мобильной операционной системы, под управлением которой работает мобильное приложение. Печать выполняется на принтерах, которые поддерживает мобильная операционная система. При сборке приложений рекомендуется использовать этот способ печати в том случае, если собирается новая версия мобильного приложения, которое ранее выполняло печать встроенными средствами приложения, а теперь надо изменить для него режим печати.
● Встроенными средствами приложения ‑ в этом случае используется печать на принтерах, которые поддерживают языки PCL3 и ZPL. Печать выполняется только на поддерживаемых моделях принтеров. При сборке приложения рекомендуется указывать данный режим печати в том случае, когда у потребителей мобильного приложения имеется парк принтеров, совместимых с мобильной версией «1С:Предприятие» и эти принтера не поддерживаются используемой мобильной операционной системой.
Добрый день.
Да, из стандартной утилиты TSC Mobile Utility печать производиться.
Кроме того, поставил тестовую версию приложения RS: Mobile ACS «1С:Мобильная торговля» (мобильная конфигурация), так же печать идет.
"Посмотрите на 8.3.18, там реализовали печать на принтеры средствами системы, возможно стоит в эту сторону посмотреть." - до сборки еще не доходил. Пытаюсь распечатать из-под мобильной платформы.
Насколько я понимаю - это и есть печать ТабДока. В данном случае принтер зависает с индикацией "печать остановлена".
То есть типовыми драйверами 1С отправляет на печать, но принтер не понимает полученную команду, при печати типовыми средствами платформы принтер "зависает".
Вот и не могу найти способ, при котором 1С отправляет только структуру, которая понятна принтеру, а не форматирует комаенду или средствами драйвера, или средствами самой платформы :(
(7) Т.е. у вас сейчас мобильное приложение опубликовано на веб-сервере?
Поставьте мобильную платформу 8.3.18 на устройство и там в меню Сервис и настройки - Настройки будет 2 варианта печати на принтер. Попробуйте, возможно смена варианта поможет без бубна напечатать.
Немного не верно выразился.
Вот ссылка на видео, как это сейчас происходит.
https://www.youtube.com/watch?v=L7pOVk7EgvM То есть я могу выбрать что печатать, картинка попадает в утилиту, и печать происходит через утилиту.
Это очень не удобно, так как печать идет не напрямую, из 1С, а через посредника в виде TSC Mobile Utilites.
То есть печать есть, но печать отправляется не из самой 1С.
Нашел на просторах интернета форум, в котором пользователь упомянул, что написал java-прослойку между 1С и принтером.
Связался с ним, попросил apk, через данное приложение через intent'ы все печатает.
Доброго времени суток, прошу прощения, что не отвечал - завал на работе
My Webpage
Ниже переписка с автором приложения
Скрытый текст
Здравствуйте!
Сделал, чтобы в этикетке печатался кладовщик в последней строки, и название товара в первой строке. Изображение этикетки в картинке во вложении.
1С должна передать в приложение Андроид следующий текст:
TEXT 400,590,"4",180,1,1,2,"Смесь Гавайская с/м"
TEXT 400,550,"4",180,1,1,2,"ФЗП ООО"
QRCODE 300,310,H,9,A,0,M2,S7,"850000001323898"
TEXT 400,290,"4",180,1,1,2,"850000001323898"
TEXT 400,260,"4",180,1,1,2,"Коробок на паллете: 35"
TEXT 400,220,"3",180,1,1,2,"Единицы измерения шт 80"
TEXT 400,180,"2",180,1,1,2,"ИД 1323898 Приходный ордер (склад) 002486498 от 01.11.2017 0:00:00"
TEXT 400,150,"2",180,1,1,2,"Склад хранения: Склад_Заморозки_БГ"
TEXT 400,120,"2",180,1,1,2,"Кладовщик: Денисов Алексей Николаевич"
Также прилагаются файлы TscBluetoothSample.apk и TscBluetoothCaller.apk
Приложение TscBluetoothSample.apk - печатает тот текст, который 1С ему передает. Перед первым использованием в приложении TscBluetoothSample.apk надо задать название устройства Bluetooth, которое является принтером этикеток. Для этого надо запустить на телефоне это приложение, и в поле ввода ввести название принтера и нажать ОК. Пример названия принтера: BT-SPP. Имеет значение регистр букв - заглавные или строчные. Отличие этого приложения от прошлого в том, что оно может печатать на принтере с произвольным именем, а не только на том принтере, который называется "BT-SPP", как печатало предыдущее приложение.
Приложение TscBluetoothCaller.apk - печатает пример чека, который я вложил в картинке в этом письме. Оно в данном случае выполняет роль 1С, и нужно только для тестирования. В рабочем режиме его ставить на телефон не обязательно.
КомандыДляПечати = "TEXT 400,590,""4"",180,1,1,2,"""+Строка(Номенклатура)+""""+Символы.ПС+"
|TEXT 400,550,""4"",180,1,1,2,"""+Строка(Характеристика)+""""+Символы.ПС+"
|QRCODE 300,310,H,9,A,0,M2,S7,\"""+Штрихкод+""""+Символы.ПС+"
|TEXT 400,290,""4"",180,1,1,2,"""+Штрихкод+""""+Символы.ПС+"
|TEXT 400,260,""4"",180,1,1,2,""Коробок на паллете: "+Строка(МасСтр[0].КоличествоКоробокПринятое)+""""+Символы.ПС+"
|TEXT 400,220,""3"",180,1,1,2,""Единицы измерения "+Строка(МасСтр[0].ЕдиницаИзмерения)+" "+Строка(МасСтр[0].КоличествоПринятое)+""""+Символы.ПС+"
|TEXT 400,180,""2"",180,1,1,2,""ИД "+СтрЗаменить(Строка(ИД)," ","")+" "+Док+""""+Символы.ПС+"
|TEXT 400,150,""2"",180,1,1,2,""Склад хранения: "+Склад+""""+Символы.ПС+"
|TEXT 400,120,""2"",180,1,1,2,""Кладовщик: "+ФИОКладовщика+""""+Символы.ПС;
Если ЗначениеЗаполнено(КомандыДляПечати) Тогда
//Сообщить(КомандыДляПечати);
БылаПечатьЭтикетки = Истина;
НовВз = Новый ЗапускПриложенияМобильногоУстройства();
НовВз.ДополнительныеДанные.Добавить("com.example.tscsample.PrintData", КомандыДляПечати);
НовВз.Приложение = "com.example.tscsample";
НовВз.ИмяКласса = "com.example.tscsample.DeviceListActivity";
НовВз.Запустить(Ложь);
Иначе
ПоказатьПредупреждение(, "Команды для печати этикетки не были сформированы!");
Возврат;
КонецЕсли;
(18) Добрый день. Подскажите пожалуйста в апк где-то заполняются размеры этикетки?
Суть в чем: у нас есть мобильный принтер TSC Alpha-30RB. В нем заданы параметры этикетки 20 на 30мм, но при печати через приложение TscBluetoothSample.apk размеры меняются на 72 на 80мм. В принтер передаем при этом просто "TEXT 400,590,""4"",180,1,1,2,""TEST"""
Как только я сохраняю файл на диск, mopria сразу же открывается сама с предпросмотром и параметрами печати. Но это если принтер обыкновенный, А4.
Был случай когда передо мной стояла задача печатать что-либо на встроенный прямо в ТСД термопринтер из мобильного приложения 1С. Тут уже фирма производитель ТСД предоставляла демо-программку наподобие той что в видео и СДК с исходниками той программки на java. Суть сводилась к тому, что принтеру надо дать одну из предопределённых команд - "печать картинки" (и картинку подать на вход), "печать штрихкода" (с указанием типа штрихкода и его содержимого), "печать текста" (тут указывался текст, его позиция на бумаге, наклон, жирность, шрифт), "прогон бумаги" (с указанием на сколько строк). В общем, в конце концов, для конкретно этого принтера, встроенного в ТСД, была написана внешняя компонента для мобильной платформы, с элементами кода на java, реализующая функции описанные в СДК. Думаю, что этот термопринтер тоже потребовал такого подхода - программа принимающая на вход команду из 1С и на выходе выдающая результат на принтер посредством работы с СДК производителя.
(21) Доброго времени суток.
Все верно. В андроиде этот функционал называется интенты (намерения).
ПО оборудования висит в системе в виде служб (демонов, если их называть именами Linux) и ждет внешней команды.
Кодом выше 1С отправляет именно такую команду в ПО, которое уже и отправляет команду на устроство.
В данном случае как раз у меня и была проблема в поиске это "прослойке" между 1С и принтером.
Поэтому, если производитель не позаботился о программном обеспечении приходиться или искать стороннее ПО, или писать ПО самому. Для мобильных касс мне самому приходилось написать такую прослойку на Android Studio, но, так как я ява язык не знаю, это заняло довольно много времени и услилий.
По поводу Mopria и подобных им - такую идею сразу отмел по двум причинам: 1) Для печати приходиться выполнять много телодвижений (выходит окно Mopria, печать и т. д.), 2) В таких программах может возникать проблема с размерами картинки (несколько раз сталкивался, что табдок имеет определенные размеры, а при печати размеры меняются в большую или меньшую сторону).
Но спасибо большое за Ваш опыт работы в подобных ситуациях :)
(22) Спасибо огромное, что поделились!!! Работает на ура!
Но - у меня перед печатью открывается окошко со списком принтеров (DeviceListActivity), так и должно быть? как-то можно добиться, чтоб оно не открывалось?
Я это к тому, что люди у Вас просят волшебный апк-файл, но им должно быть известно что он спасёт только тех кто имеет дело с таким же принтером. Вы сделали AccessibilityService - вещь годная. Висит себе резидентно, когда нужна - срабатывает. А если клиент берёт какой-нибудь условный xiaomi, я не знаю что с ними не так, но эти телефоны рано или поздно убивают такого-рода процессы. Да, потом появляются заявления от производителей устройств что их телефоны с батареей на 3500 mA живут неделю без подзарядки, и нигде не упоминают, что цена вот такая - вырубить всё, что не их. Я уже наперёд интересуюсь у заказчиков на чём они планируют работать, и рекомендую, пусть может самые дешёвенькие, но честные самсунги, тогда нормально оформить драйвер в виде резидентного сервиса. А когда хотят сидеть на китайфонах, предлагаю драйвер делать в виде внешней компоненты под мобильную платформу, что существенно сложнее.
Была проблема с принтером этикеток Datamax-O'Neil E-4206P Mark III . Не мог средствами 1С отправить на печать этикетку через сеть из мобильного приложения 1С (ТСД Urovo i6200S). Выставлял IP - адрес , порт , формат ZPL. Принтер задумывался и выдавал ошибку, что принтер недоступен.
Оказалось, что в настройках по умолчанию принтер принимал данные только в формате DPL (своем родном).
Переключил в настройках "Input mode" в режим "Auto" и все заработало.