Мобильное приложение для склада с функцией голосового ввода

Программирование - Мобильные приложения

Несложное приложение под Андроид предназначенное для выполнения операций по наборке и приемке товаров на складе, а также выполнения других складских операций. Мобильная часть решения написана под терминалы сбора данных на Android. Транспорт данных - POST - запрос на HTTP сервис. Серверная часть - сервис на базе 1С сервера.

1. Цели и задачи внедрения решения

При разработке приложения решались сразу несколько задач, а именно:

- Обеспечить обработку наборки товара по документам перемещений;

- Обеспечить обработку оприходования товара из приходных накладных;

- Обеспечить инвентаризацию штрихкодов товаров (в .т.ч. новых);

- Обеспечить экономию средств.

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

2. Аппаратная часть часть решения

Для работы решения подходит, в принципе, любое устройство на Андроиде, будь то планшет, терминал сбора данных или даже телефон. Основные требования: 1. Наличие любого подключения к сети (локальной или интернет), 2. Наличие камеры с разрешением, достаточным для распознавания штрихкода и (или) наличие лазерного считывателя штрихкодов (1D или 2D). 3. Наличие микрофона. Уровень защищенности от внешней среды следует учесть при выборе устройства под конкретные условия эксплуатации и персонал. Стоимость таких устройств начинается от 18 т.р. Требования по серверной части: любой сервер, способный тянуть базу 1С + апач.

3. Программная часть решения

Решение состоит из приложения под ОС Андроид, версии не ниже 4.1 и HTTP-сервера, обрабатывающего запросы от мобильного приложения. В принципе, на стороне сервера может быть не обязательно 1С-сервер, но и сервис на php + СУБД на mySQL.

Как было ранее сказано, при разработке приложения следовало сделать его пригодным для решения наибольшего круга задач. Это привило к решению о необходимости универсализации структур данных и переноса основной бизнес-логики на сторону 1С. Проще говоря, мобильное приложение реализует только аппаратно специфичные функции (сканирование и распознавание штрихкода, запись и распознавание речи, отображение данных и интерфейс взаимодействия с кладовщиком). Приложение даже не имеет собственной СУБД (хотя она вполне несложно реализуется). Развертка СУБД повлекла бы необходимость создания планов обмена, хранения больших объемов данных на стороне ТСД, соблюдение правил синхронизации и т.д. В существующем-же решении приложение формирует запрос и передает его на сервер 1с, который возвращает минимум нужной информации. Недостаток этого подхода состоит в необходимости постоянного подключения к сети, но при тестировании решения ширина полосы пропускания 3G оказалась достаточной для комфортной работы.

Конфа 1С для формирования выходных и обработки входных структур прилагается. 

Реализованный функционал:

1. Сканирование штрихкода с использованием камеры (используется библиотека zxing)

2. Автофокус сканера (при сканировании камерой) с изменением частоты цикла автофокуса.

3. Куча других настроек zxing, призванных улучшить скорость сканирования и снизить количество ошибок.

4. Все настройки имеют подобранные эмпирически оптимальные значения "по умолчанию".

5. Подсветка при сканировании камерой в темное время суток (включается автоматически при начале сканирования).

6. Сканирование штрихкода с использованием аппаратного лазерного сканера устройства. Как это работает - описал в другой статье: //infostart.ru/public/623232/

7. Пароль супервизора на изменение настроек приложения (уж очень руки неспокойные у пользователей).

8. Возможность голосового ввода значений на русском языке (как цифр, так и фильтров поиска объектов по базе 1с). Есть один забавный момент. Например, чтобы Андроид интерпретировал слово как цифру "1", надо говорить не "один", а "раз". В остальном-же все распознает четко. Там есть куча настроек по распознаванию (уровень подавляемого шума, задержки всякие и т.д.). Я выведу их в настройки потом. 

9. Возможность работы с произвольным HTTP сервисом и унифицированность формата передаваемых данных.

10. Возможность адаптации несложного функционала на стороне сервера 1С под свои потребности.

11. Возможность добавлять, изменять, удалять номенклатуру; изменять единицы, серии, характеристики и качество номенклатуры, полученной из документа (поиск производится по фильтру, к наименованию - вводится с виртуальной клавиатуры или голосом. Вид сравнения "СОДЕРЖИТ", впрочем, тоже может быть изменен на стороне 1с. Кроме того, можно добавлять к фильтру кодовую фразу с меткой вида сравнения, например "Фильтр Равен ...." или "Фильтр не равен....", а на стороне 1с это все обрабатывать. Еще раз повторяю, что Андроид речь распознает очень четко.)

12. Исходники приложения на C# (Xamarin), PCL-проект (этот вид проекта позволяет махом его расширить на использование под IOS и Windows - такая вот магия).

Исходники не выкладываю. Т.к. здесь вряд-ли кто-то будет их качать, а размер большой. По запросу - могу скинуть.

Ссылка на исходники: https://github.com/KotVezdehod/ScanBee

Там-же, в проекте, есть и сборка. Так-же называется "СБОРКА.rar". В ней то-же самое, что и здесь, в прикрепленных файлах.

P.S.

Это версия не "из коробки". Предполагается, что в конфе есть реализация сервиса по обмену данными с устройством и при мер реализации алгоритма разбора получаемых данных и подготовки отправляемых данных, а также необходимые универсальные метаданные, наличие которых обусловлено обменным механизмом.
Итого там есть:
1. Общий модуль "ПодготовкаДанныхДляТСД"
2. HTTP-Сервис "Warehouse_1_0"
3. Перечисление "ФункциональноеНазначениеУстройства"
4. РС "ТоварКОбработкеВТСД" (хранятся данные о состоянии наборки документов)
5. РС "ФункциональнаяПривязкаУстройств" (данные о функции, для которой будет использоваться конкретное устройство)

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

Наименование Файл Версия Размер
Мобильное приложение и конфигурация 1с:
.rar 7,30Mb
09.08.17
2
.rar 7,30Mb 2 Скачать

См. также

Комментарии
1. Вова Вишин (Tahallus) 421 08.08.17 11:25 Сейчас в теме
Проще исходники выложить на github
myr4ik07; +1 Ответить
2. Two World (Prometeus2011) 51 08.08.17 12:24 Сейчас в теме
Да, сделаю - ссылку сюда кину.
starik-2005; myr4ik07; +2 Ответить
3. Константин Юрин (kostyaomsk) 72 09.08.17 06:34 Сейчас в теме
Хорошая идея приложения для склада с голосовым поиском.
4. Two World (Prometeus2011) 51 09.08.17 09:41 Сейчас в теме
(3), Видели бы вы изумление на лице коммерческого...
5. Ярослав Володимирович (myr4ik07) 106 09.08.17 10:14 Сейчас в теме
(4)двумя руками за исходники
6. WellMaster (WellMaster) 98 09.08.17 12:18 Сейчас в теме
Аналогично делал Акселот в своей 1с:WMS Управление складом. Я про то, что на ТСД мобильное приложение отрисовывает то, что ей "сообщит" сервер 1с.

А можно по-подробней про практическое применение голосового управления?
8. Two World (Prometeus2011) 51 09.08.17 13:50 Сейчас в теме
(6), Нет, приложение отрисовывает, то что зашито в коде и сказано ему отрисовать в настройках на стороне ТСД. Не так круто. Просто, например, поиск объектов ведется не на устройстве, по полным справочникам, которые туда надо загнать предварительно, а на стороне сервера. На сервер передается конкретный запрос.

Распознавание речи можно применять при вводе фильтров поиска объектов. Например, хочет кладовщик добавить в документ новую позицию, "Насос центробеж. НПЦ 400/30 "Калибр"", ему надо ввести фильтр поиска на стороне ТСД. Можно в окошечко вбивать "насос", а можно нажать большую кнопку и сказать "насос" или "калибр". Все быстрее. Цифры тоже можно голосом вводить.
7. WellMaster (WellMaster) 98 09.08.17 12:24 Сейчас в теме
Еще ничего не сказано про минимальную версию платформы 8.3.10
9. Two World (Prometeus2011) 51 09.08.17 13:54 Сейчас в теме
Не, версия платформы - любая, главное чтобы функционал http- запросов был.
14. WellMaster (WellMaster) 98 09.08.17 20:46 Сейчас в теме
(9) Попробовал открыть конфу платформой 8.3.9, ругнулось, что нужна 8.3.10.
15. Two World (Prometeus2011) 51 09.08.17 21:09 Сейчас в теме
(14). Да, совместимость конфигурации была отключена по-умолчанию. Поставил 8.3.8. Перезалил.
Как тут сделать скачку бесплатной?
18. Александр Закиров (sasha777666) 211 11.08.17 17:40 Сейчас в теме
(15) никак, инфостарт не разрешает :(
10. Дмитрий Шерстобитов (DitriX) 2505 09.08.17 16:27 Сейчас в теме
Дык, в мобильной 1С такое юзается уже года два. По фикту - кроме эффекта "вау" ничего не дает. Так как на шумном складе, с ветром, с криками и т.д. - очень плохо идет распознание. А каждый раз подносить к лицу и кричать - бред.
Так что используется только отделом брака, где надо надиктовать причину, по которой некая модель была посчитана браком.
11. Two World (Prometeus2011) 51 09.08.17 16:35 Сейчас в теме
(10), В мобильной платформе 1с есть распознавание речи?
12. Дмитрий Шерстобитов (DitriX) 2505 09.08.17 19:32 Сейчас в теме
(11) а чего бы и нет? Это стандартный функционал андроида :) Там много чего есть, резка фото, маршруты и куча разных других приколов. Но для этого надо знать - что такое андроид и как он работает. Добавить в 1С ввод голосом - 3 строки кода :)
13. Two World (Prometeus2011) 51 09.08.17 20:43 Сейчас в теме
(12), Ниче себе! А что за метод или объект платформы??? На Шарпе настроек-то специфичных только строк на 9! На форумах все шлют ко внешним компонентам. Ну, а внешняя компонента - геморрой больший, чем сборка чисто на C#. Собственно, из-за недостатков в реализации взаимодействия с аппаратной частью и многими функциями оси, выбрал другую среду разработки. Если на 1с реализовать перехват адресного системного Intent'a проще - значит 1сники сильно вперед продвинулись.
16. Дмитрий Шерстобитов (DitriX) 2505 09.08.17 22:22 Сейчас в теме
(13)
	
        НовВз = Новый ЗапускПриложенияМобильногоУстройства("android.speech.action.RECOGNIZE_SPEECH");
	
	Если НовВз.Запустить(Истина) = 0 Тогда
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не поддерживается на вашем устройстве.");
	Иначе
		Объект.Комментарий = НовВз.ДополнительныеДанные.Получить("query").Значение;
	КонецЕсли;
Показать


Это если грубо говоря.
17. Two World (Prometeus2011) 51 10.08.17 09:36 Сейчас в теме
(16). Спасибо. В принципе, то-же самое.

 
var voiceIntent = new Intent(RecognizerIntent.ActionRecognizeSpeech);
StartActivityForResult(voiceIntent, Globals.VOICE);

Только классы констант с нужными строками из СДК есть.
Но, откровенно говоря, там еще процедуру для перехвата результата активити надо реализовывать. На 1с - проще, конечно.
19. WellMaster (WellMaster) 98 14.08.17 21:08 Сейчас в теме
Запустил на 8.3.10
В конфе почти ничего нет.
Что с ней делать - не ясно.
Зря потраченное время
20. Two World (Prometeus2011) 51 15.08.17 09:51 Сейчас в теме
(19)1. Это версия не "из коробки". Предполагается, что в конфе есть реализация сервиса по обмену данными с устройством и при мер реализации алгоритма разбора получаемых данных и подготовки отправляемых данных, а также необходимые универсальные метаданные, наличие которых обусловлено обменным механизмом.
Итого там есть:
1. Общий модуль "ПодготовкаДанныхДляТСД"
2. HTTP-Сервис "Warehouse_1_0"
3. Перечисление "ФункциональноеНазначениеУстройства"
4. РС "ТоварКОбработкеВТСД" (хранятся данные о состоянии наборки документов)
5. РС "ФункциональнаяПривязкаУстройств" (данные о функции, для которой будет использоваться конкретное устройство)

Я мог-бы просто выложить описание обменных структур, но это сложно и затратно по времени, как для меня, так и для читающего. По-этому проще выложить функционал.
Если-бы решение было адаптировано ко всем конфигурациям, то я-бы запросил за решение денег. А за бесплатно, я гарантирую, что решение рабочее, но на внедрение и отладку - надо потратить время.
Оставьте свое сообщение