Предисловие
Пример работы с камерой устройства как сканер штрих кодов реализован в мобильном приложении «Мобильный кладовщик lite». Это простенькая программа для складского учета.
Программа реализована на платформе 1С Предприятие 8.3.5.823 и приложение собрано на мобильной платформе версии 8.3.5.52. Программа бесплатная.
На момент написания статьи обе версии находятся в тестовом режиме и возможно функция сканирования на некоторых устройствах, может быть недоступна или работать некорректно. С уверенность могу сказать, что тестирование функционала проводилось на некоторых устройствах Philips, Samsung, Iphone 4s и Ipad. На всех аппаратах камера включалась, фокусировалась на изображении штрих кода и производила захват изображения.
Возможно для сканирования, обработки и получения штрих кода 1С использует внешние компоненты сторонних разработчиков, хотя может и ошибаюсь.
Алгоритм реализации
Реализовал не сложный пример на основании документации встроенного языка.
1. В свойствах конфигурации в параметре «Требуемые разрешения мобильного приложения» установил «Мультимедиа». Кстати на размер собранного apk файла этот параметр не повлиял.
1. Создал общую форму, в которой будет производиться процесс заполнения документа на основании штрих кодирования.
2. Процедура формы ПриОткрытии с проверкой на поддержку устройства обработки сканирования данных. На моем китайском планшете функция проверки отработала и выдала сообщение, хотя планшет оснащен камерой.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
#Если МобильноеПриложениеКлиент Тогда
Если НЕ СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда
Сообщить(«Сканирование штрихкодов не поддерживается»);
Элементы.КомандаСделатьФотоШтрихкода.Доступность = Ложь;
КонецЕсли;
#КонецЕсли
КонецПроцедуры
4. Процедура команды формы связанная с элементом Кнопка. При нажатии создаем два обработчика на проверку сканирования изображения и закрытия интерфейса камеры устройства.
Оба обработчика будут параметрами встроенной процедуры для запуска интерфейса сканирования камерой устройства. Параметр тип штрих кода указал в моем случае Линейный. Возможно, указать QR или сразу оба. В случае если указать оба то возможно замедление в распознавании камерой изображения штрихкода. На тестируемых устройствах я этого не заметил.
&НаКлиенте
Процедура КомандаСделатьФотоШтрихкода(Команда)
#Если МобильноеПриложениеКлиент Тогда
ОбработчикСканирования = Новый ОписаниеОповещения(«ОбработкаСканирования», ЭтаФорма);
ОбработчикЗакрытия = Новый ОписаниеОповещения(«ОбработкаЗакрытияИнтерфейса», ЭтаФорма);
СредстваМультимедиа.ПоказатьСканированиеШтрихКодов(«Наведите камеру на штрихкод», ОбработчикСканирования, ОбработчикЗакрытия, ТипШтрихКода.Линейный);
#КонецЕсли
КонецПроцедуры
5. Процедура обработчика сканирования изображения штрих кода. В параметр «ШтрихКод» возвращается строка обработанного кода. Обработанный код необходимо проверять на соответствие ваших данных и возвращать результат пользователю. Параметр «Результат» получит значение ИСТИНА в случае фиксирования на изображении штрихкода и его обработки. Параметр «Сообщение» возможно, задавать ваше значение которое будет отображаться на интерфейсе сканирования штрих кода после его обработки. Сообщение отображается зеленым цветом. В справке по встроенному языку указано что если неудачное сканирование то цвет сообщения будет отображаться красным цветом. Я такого результата не смог добиться.
&НаКлиенте
Процедура ОбработкаСканирования(Штрихкод, Результат, Сообщение, ДополнительныеПараметры) Экспорт
Если Результат Тогда
Ошибка = ЕстьОшибкаВвода(Штрихкод);
Если Ошибка <> ЛОЖЬ Тогда
Сообщение = «Ошибка штрих кода»;
Иначе
ОбработатьШтрихКод(Штрихкод);
Сообщение = ТекущаяОперация;
КонецЕсли;
Иначе
Сообщение = «Ошибка обработки штрих кода»;
КонецЕсли;
КонецПроцедуры
6. Процедура обработчика закрытия интерфейса сканирования в моем случае пустая.
&НаКлиенте
Процедура ОбработкаЗакрытияИнтерфейса(ДополнительныеПараметры) Экспорт
//
КонецПроцедуры
Еще есть метод ЗакрытьСканированиеШтрихКодов() но я его не использовал. Позволяет программно закрыть интерфейс сканирования устройства.
В дальнейшем можно будет использовать Intenter для воспроизведения звукового сигнала и вибровызова в случае ошибок. Только его надо переписать под новые методы объекта «ЗапускПриложенияМобильногоУстройства»
Описание режима ввода документов
Небольшое описание процесса работы с режимом ввода документов.
Первоначально произведем привязку элементов справочника «Номенклатуры» к штрих кодам. Для этого перейдем в «Объекты данных» в меню «Штрих коды».
Указываем для каждого объекта свой код.
Далее заходим в меню «Команды штрихкода» и для команд «Запись», «Отмена», и Новые документы указываем штрихкоды. Тем самым каждый штрих код будет являться командой для системы.
Переходим в меню «Ввод документов». На форме отображены: Поле текущего штрих кода, кнопка запуска интерфейса сканирования, вкладка история ввода данных, текущая табличная часть документа и поле сформированного документа.
Нажав на кнопку сканирования штрих кода запускается алгоритм заполнения документа:
1 — Система ожидает штрих код, который соответствует коду создания нового документа указанного в справочнике «Команды штрих кода». Остальные коды игнорируются. После ввода кода на экране отобразиться надпись, например «Новый документ поступление». В таблице «История ввода данных» отображается информация о введенной команде. Далее система переходи к шагу 2.
2 — Ввод данных в таблицу товаров и их количество для документа. При положительном вводе данных отображается информация о товаре. В таблице история отображается информация о введенной команде по товару. Система принимает только коды товаров и команды «Отмена» и «Запись». Команда «Отмена» отменяет предыдущий ввод и очищает крайнюю команду из таблицы «История». Команда «Запись» — сохраняет текущий документ. После того как заполнили табличную часть документа необходимо перейти к шагу 3.
3 — Ввод данных команды «Запись». Эта команда доступна только после ввода табличной части документа.
Пока оформлял статью, придумал другой алгоритм формирования документов. Сначала вводим табличную часть товаров, указываем склад и завершением операции служит команда записи конкретного типа документа.
Спасибо за статью! Можете выложить исходную конфигурацию?
на данный момент не могу выложить. она будет дорабатываться.
Автор, выручайте, пожалуйста! 🙂
Какие у Вас версии android sdk и java skd?
У меня платформа 8.3.5.924 и мобильная 8.3.5.52, приложение собирается без ошибок, но на телефоне пишет «ошибка синтаксического анализа» или типа того. На платформе 8.3.4 всё работало нормально, версии андроид и джава сдк не обновлял.
В мобильном приложении при считывании шк говорит «операция не разрешена», но ШК в поле появляется. Это только у меня так?
1 собираете на новом сборщике (1.0.3.13) ?
2 в кладовщике в регистр сведений по объектам штрихкодов укажите правильно штрихкод для номенклатуры и проверьте ее в форме Информация по штрихкоду.
(5) Собираю в новом. Установил последний jsdk и последнее API для андроид, ошибка исчезла.
Подскажите пожалуйста, почему картинка со сканированием ШК получается перевернутой на 90 гр. и спозиционировать на ШК не получатся -ведешь в одну сторону, картинка двигается в повернутой на 90 гр. плоскости.
Спасибо!
(7) kosikov_oleg, модель устройства напишите пожалуйста
планшет китайский Sanei N10,
и на телефоне китайском (Jiayu G5) тоже самое
(9) kosikov_oleg, я так понимаю 1с тестирует работу камеры на флагманах а с остальными не будет заморачиваться. с этим я не помогу
(10) как всегда в 1С, спасибо борису
Спасибо за пример. Сталкивались с тем что при сканировании CODE_39 приложение просто отваливается без предупреждения. EAN_13 — отлично обрабатывает. Другие приложения обрабатывают любые типы кодов. Проблема видимо только с CODE_39, проверил на Codabar, QR, CODE_128 — работает
а кто нибудь сталкивался с тем что ЗакрытьСканированиеШтрихКодов() не работает? собирал приложение на API 17, пробовал в мобильной конфе, результат один. samsung galaxy s3
(13) baza1978, странно я на разных версиях этот функционал тестировал. напишите версию платформы.
Можете выложить исходную конфу?
Можете сказать, как сделать авто фокус в сканировании штрих кода?
Платформа — 8.3.7.2008.
Мобильная — (2.0.1.31)
Делаю для андроида 4.4 (апи — 18).
(16) Nuobu, в компоненту автофокус встроен. когда наводите камеру на штрихкод программа пытается считать код и видно как меняется резкость на экране. у вас так сейчас работает?
На Nexus 5 не стартует, т.к. сборка не для arm-v7, похоже что под x86!
а можно 1cema.xml ?
не получается закрыть камеру после сканирования (еще бы звук вставить но не Сигнал() не ВоспроизвестиЗвуковоеОповещение() не пашут)
как заставить работать ЗакрытьСканированиеШтрихКодов() ?
(20)
В процедуре ОбработкаСканирования:
А у кого-нибудь есть примеры с получением штрихкода через внешнее Android-приложение. Сканер из мобильной платформы прямо скажем на троечку. Или где-то в платформе настраивается возможность обращения к другому приложению (что все-таки вызывает сомнения). Если конкретно, то интересен вот этот:
(22) У меня та же задача. Но пока ни чего не нашел. А вы?
(23) Пока не раскопал, но и времени на эксперименты особо много не было.
Нашел такой пример, но тут речь о другом, более известном приложении, но беда в том, что оно не не сильно лучше того, которое в платформу вшито. Иногда даже кажется, что это оно и есть.
Показать
(23)получилось со сканером zxing. Результат лучше, чем с встроенным в платформу, но специфические коды все-равно не берет (В частности GS1 — (двустрочный), причем читает отдельные его части как EAN8). Однако, если столь экзотических кодов на практике не нужно, то подойдет. процедура из примера в итоге модифицировалась к следующему:
Показать
С приложением от Cognex Corporation к сожалению пока ничего не вышло.
(25)
Да, спасибо. Так лучше.