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