Поставлена задача по занесению данных в базу 1С по QR-кодам через мобильное устройство. От мобильного устройства требуется только распознать QR-код и отправить его на сервер. Все остальные вопросы должны решаться на сервере. Такой подход сводит к минимуму человеческий фактор и значительно ускоряет весь процесс по передаче данных.
Анализ вариантов показывает три возможных решения:
- Использование существующего мобильного приложения
- Создание собственного мобильного приложения на 1С
- Совмещенный вариант
Рассмотрим каждый подробнее.
1. Использование существующего мобильного приложения.
Анализ рынка в магазинах приложений показывает, что большинство существующих сканеров распознают QR-коды плохо, и лишь отдельные делают это на удивление моментально. А умеют отправлять данные на сервер - единицы. Рассмотрим реализацию на примере одного такого приложения: "Штрихкод Коммандер"
Подготовка серверной части
Обмен с мобильным приложением "Штрихкод Коммандер" выполняется через http-сервис. Поэтому на сервере в 1С создаем метод http-сервиса и описываем алгоритм обработки полученного QR-кода. Работа с http-сервисами не нова, поэтому комментарии опустим. Пример:
Функция ШаблонURL1Метод1(Запрос)
МассивОтветов = Новый Массив;
Для каждого ОдинКод Из ПреобразоватьJSONвДанные(Запрос.ПолучитьТелоКакСтроку()) Цикл
МассивОтветов.Добавить(ОбработатьШтрихКод(ОдинКод));
КонецЦикла;
Возврат СформироватьОтветHTTP(МассивОтветов);
КонецФункции
Функция ПреобразоватьJSONвДанные(СтрокаJSON)
мЧтениеJSON = Новый ЧтениеJSON;
мЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Результат = ПрочитатьJSON(мЧтениеJSON);
мЧтениеJSON.Закрыть();
Возврат Результат;
КонецФункции
Функция ОбработатьШтрихКод(ОдинКод)
Если ОдинКод.id = 1 Тогда
Возврат СформироватьОтвет(ОдинКод.id, "Аутентификация успешно пройдена.");
ИначеЕсли Сред(ОдинКод.barcode, 1, 4) = "Демо" Тогда
Возврат СформироватьОтвет(ОдинКод.id, "", 1,"Демо-режим", 3);
КонецЕсли;
// Обработка полученного штрихкода (ОдинКод.barcode) и описания (ОдинКод.description)
// Создание записи в журнале регистрации (при необходимости)
ЗаписьЖурналаРегистрации("HTTPСервис1.ШаблонURL1", УровеньЖурналаРегистрации.Ошибка, , ОдинКод.barcode, "Описание ошибки");
// Сообщение результатов обработки
Возврат СформироватьОтвет(ОдинКод.id, "Загрузка успешно завершена", 0,"Пример заголовока", 6);
КонецФункции
Функция СформироватьОтвет(Идентификатор, Отчет, НомерИконки=0, Заголовок="", ЦветИконки=0, Фото="")
Запись = Новый Структура;
Запись.Вставить("result_id", Идентификатор);
Запись.Вставить("result_title", Заголовок);
Запись.Вставить("result_color", ЦветИконки);
Запись.Вставить("result_icon", НомерИконки);
Запись.Вставить("result_report", Отчет);
Запись.Вставить("result_image", Фото);
Возврат Запись;
КонецФункции
Функция СформироватьОтветHTTP(МассивОтветов)
мЗаписьJSON = Новый ЗаписьJSON;
мЗаписьJSON.ПроверятьСтруктуру = Ложь;
мЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON());
ЗаписатьJSON(мЗаписьJSON, МассивОтветов);
СтрокаJSON = мЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Возврат Ответ;
КонецФункции
Проверяем, что брандмауэр и/или антивирус не мешают подключению к сервису.
Подготовка клиентской части
Устанавливаем приложение на мобильное устройство:
Переходим в настройки и включаем переключатель: "Веб-сервер". Указываем свой сервер в поле "Адрес URL" (в примере выше это был: "http://192.168.0.1/MyWS/hs/barcode/"). При необходимости вводим логин и пароль от базы 1С. При желании корректируем остальные настройки.
Вы, наверное, удивитесь, но на этом все! Сканируем и радуемся!
2. Создание собственного мобильного приложения на 1С
Так как в этом варианте мы самостоятельно разрабатываем и клиентскую, и серверную части, то вольны выбрать любую понравившуюся нам технологию передачи данных. Пример реализации http-сервиса мы рассмотрели выше, поэтому рассмотрим реализацию с использованием web-сервиса.
Подготовка серверной части
На сервере в 1С создаем метод web-сервиса и описываем алгоритм обработки полученного QR-кода. Пример:
Функция SetQR(QRKod)
// Обработка полученного QRKod
// Создание записи в журнале регистрации (при необходимости)
ЗаписьЖурналаРегистрации("WebService1.SetQR", УровеньЖурналаРегистрации.Ошибка, , QRKod, "Пример описания ошибки");
// Сообщение результатов обработки
Возврат "Загрузка успешно завершена";
КонецФункции
Подготовка клиентской части
У 1С есть встроенные методы по сканированию штрихкодов, что значительно облегчает разработку. Пример:
&НаКлиенте
Процедура Сканировать1С(Команда)
#Если МобильноеПриложениеКлиент Тогда
Если СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда
ОбработчикСканирования = Новый ОписаниеОповещения("ОбработкаРаспознанногоШтрихкода", ЭтаФорма);
СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Сканируйте", ОбработчикСканирования,,ТипШтрихКода.Двухмерный);
Иначе
Сообщить("Не поддерживается сканирование штрихкодов!");
КонецЕсли;
#КонецЕсли
КонецПроцедуры
Процедура ОбработкаРаспознанногоШтрихкода(Штрихкод, Результат, Сообщение, ДопПараметр)
Если Результат Тогда
Сообщение = ОтправитьQRКодНаСервере(Штрихкод);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ОтправитьQRКодНаСервере(Штрихкод)
ОписаниеСервиса = Новый WSОпределения("http://192.168.0.1/MyWS/ws/ws1.1cws?wsdl", "Login", "Password");
Прокси = Новый WSПрокси(ОписаниеСервиса, "http://192.168.0.1/", "WebService1", "WebService1Soap");
Прокси.Пользователь = "Login";
Прокси.Пароль = "Password";
Возврат Прокси.SetCheck(Штрихкод);
КонецФункции
Преимуществом данного варианта является гибкость и возможность реализации дополнительных требований к мобильному приложению. Но, к сожалению, качество сканирования при этом страдает. По сравнению с аналогами в магазинах приложений, сканер от 1С сканирует значительно хуже, медленнее, а иногда вообще не распознает QR-код. Также страдает и итоговый объем приложения, так как вместе с ним на мобильное устройство устанавливается и платформа 1С, которая занимает в несколько раз больше места.
Сравнение мобильных технологий сканирования штрихкодов приведены в следующей статье.
3. Совмещенный вариант
Данный вариант является попыткой использовать преимущества предыдущих двух вариантов: гибкости собственного мобильного приложения и хорошего сканера из магазина приложений. Реализация заключается в создании мобильного приложения на 1С, которое реализует весь необходимый функционал, в том числе и отправку данных на сервер, а сканирование QR-кода поручает выполнить другому приложению, предварительно установленному на устройстве.
Рассмотрим реализацию на примере того же приложения:
Отправка данных на сервер рассмотрена достаточно подробно, поэтому остановимся лишь на моменте взаимодействия с другим мобильным приложением. Пример:
&НаКлиенте
Процедура СканироватьAndroid(Команда)
#Если МобильноеПриложениеКлиент Тогда
Нов = Новый ЗапускПриложенияМобильногоУстройства("com.tamadosky.barcode.SCAN");
РезультатСканирования = Нов.Запустить(Истина);
Если РезультатСканирования = -1 Тогда
Штрихкод = Нов.ДополнительныеДанные.Получить("SCAN_RESULT").Значение;
ОтправитьQRКодНаСервере(Штрихкод);
КонецЕсли;
#КонецЕсли
КонецПроцедуры
К недостаткам данного варианта можно отнести необходимость установки двух мобильных приложений и относительно большое занимаемое место на мобильном устройстве.
Надеюсь, что изложенный материал ответит на некоторые ваши вопросы и поможет в автоматизации сканирования штрихкодов.