gifts2017

Мобильное приложение. Пример реализации сканирования штрих кодов

Опубликовал Ruslan (flyer) в раздел Оборудование - Сканер штрих-кода

Пример реализации сканирования штрих кода с помощью мобильного приложения на платформе Android и IOS.

Предисловие

Пример работы с камерой устройства как сканер штрих кодов реализован в мобильном приложении "Мобильный кладовщик 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 - Ввод данных команды "Запись". Эта команда доступна только после ввода табличной части документа.

 

Пока оформлял статью, придумал другой алгоритм формирования документов. Сначала вводим табличную часть товаров, указываем склад и завершением операции служит команда записи конкретного типа документа.


 

 

 


Скачать файлы

Наименование Файл Версия Размер
Мобильный кладовщик lite. Android 66
.apk 29,06Mb
18.05.14
66
.apk 29,06Mb Скачать
Мобильный кладовщик lite. IOS 8
.ipa 30,21Mb
18.05.14
8
.ipa 30,21Mb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. jack jack (jack_kkm) 03.06.14 14:47
Спасибо за статью! Можете выложить исходную конфигурацию?
2. Ruslan (flyer) 03.06.14 15:12
на данный момент не могу выложить. она будет дорабатываться.
3. jack jack (jack_kkm) 04.06.14 15:00
Автор, выручайте, пожалуйста! :)

Какие у Вас версии android sdk и java skd?

У меня платформа 8.3.5.924 и мобильная 8.3.5.52, приложение собирается без ошибок, но на телефоне пишет "ошибка синтаксического анализа" или типа того. На платформе 8.3.4 всё работало нормально, версии андроид и джава сдк не обновлял.
4. jack jack (jack_kkm) 04.06.14 15:25
В мобильном приложении при считывании шк говорит "операция не разрешена", но ШК в поле появляется. Это только у меня так?
5. Ruslan (flyer) 04.06.14 15:41
1 собираете на новом сборщике (1.0.3.13) ?
2 в кладовщике в регистр сведений по объектам штрихкодов укажите правильно штрихкод для номенклатуры и проверьте ее в форме Информация по штрихкоду.
6. jack jack (jack_kkm) 05.06.14 09:54
(5) flyer, Собираю в новом. Установил последний jsdk и последнее API для андроид, ошибка исчезла.
7. Олег Козиков (kosikov_oleg) 16.09.14 11:56
Подскажите пожалуйста, почему картинка со сканированием ШК получается перевернутой на 90 гр. и спозиционировать на ШК не получатся -ведешь в одну сторону, картинка двигается в повернутой на 90 гр. плоскости.
Спасибо!
8. Ruslan (flyer) 16.09.14 12:06
(7) kosikov_oleg, модель устройства напишите пожалуйста
9. Олег Козиков (kosikov_oleg) 16.09.14 12:10
планшет китайский Sanei N10,
и на телефоне китайском (Jiayu G5) тоже самое
10. Ruslan (flyer) 16.09.14 12:24
(9) kosikov_oleg, я так понимаю 1с тестирует работу камеры на флагманах а с остальными не будет заморачиваться. с этим я не помогу
Yaroslav.Tabachnyy; kosikov_oleg; +2 Ответить 1
11. John Smith (PiccaHut001) 22.10.14 12:32
(10) flyer, как всегда в 1С, спасибо борису
12. Игорь Х (HIgor) 27.11.14 13:54
Спасибо за пример. Сталкивались с тем что при сканировании CODE_39 приложение просто отваливается без предупреждения. EAN_13 - отлично обрабатывает. Другие приложения обрабатывают любые типы кодов. Проблема видимо только с CODE_39, проверил на Codabar, QR, CODE_128 - работает
13. Andrei (baza1978) 06.07.15 13:16
а кто нибудь сталкивался с тем что ЗакрытьСканированиеШтрихКодов() не работает? собирал приложение на API 17, пробовал в мобильной конфе, результат один. samsung galaxy s3
14. Ruslan (flyer) 06.07.15 17:35
(13) baza1978, странно я на разных версиях этот функционал тестировал. напишите версию платформы.
15. Дима Путин (dimasikus31) 24.08.15 16:51
Можете выложить исходную конфу?
16. Алексей Подсолнух (Nuobu) 08.04.16 12:04
Можете сказать, как сделать авто фокус в сканировании штрих кода?
Платформа - 8.3.7.2008.
Мобильная - (2.0.1.31)
Делаю для андроида 4.4 (апи - 18).
17. Ruslan (flyer) 10.04.16 22:36
(16) Nuobu, в компоненту автофокус встроен. когда наводите камеру на штрихкод программа пытается считать код и видно как меняется резкость на экране. у вас так сейчас работает?
18. Александр Синиченко (nytlenc) 26.05.16 04:33
На Nexus 5 не стартует, т.к. сборка не для arm-v7, похоже что под x86!
19. Андрей Тарлыков (Tarlich) 27.11.16 20:59
20. Андрей Тарлыков (Tarlich) 28.11.16 12:06
не получается закрыть камеру после сканирования (еще бы звук вставить но не Сигнал() не ВоспроизвестиЗвуковоеОповещение() не пашут)
как заставить работать ЗакрытьСканированиеШтрихКодов() ?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа