Приложение для Android на терминалах сбора данных склада регионального аптечного дистрибьютора: сборщик получает задание, идёт по ячейкам, сканирует упаковки и не берёт товар с неподходящей серией или коротким сроком. Его написал Евгений Росляков. Сайты и программы для бизнеса он делает с 2016 года, оформлен как самозанятый, работает по договору, а для юрлиц оформляет закрывающие документы. Заказы берёт в Москве и удалённо.
Дистрибьютор снабжает аптеки региона. Склад большой, заказов много, каждая аптека берёт понемногу из разных позиций. У лекарств важны серия и срок годности, а хранятся они в ячейках вперемешку: в одной ячейке могут лежать две серии одного препарата.
Сборщики работали по бумажным листам. Лист печатали утром, к обеду он был в пятнах, а изменения по заказу приходили уже после печати. Люди путали серии, брали упаковку с коротким сроком, когда нужна была с длинным, отправляли в аптеку не тот препарат. Пересорт обнаруживался, когда аптека принимала коробку и звонила на склад.
Нужно было перевести сборку на терминалы, которые уже стоят на складе, и остановить ошибку до упаковки, а не после жалобы.
Разработка приложений для Android здесь выбиралась почти сама собой: терминалы сбора данных работают на этой системе и имеют встроенный сканер. Покупать новую технику не пришлось.
Приложение написано на Java в Android Studio. Java выбрана осознанно: терминалы на складе довольно старые, и их IT-отделу проще сопровождать знакомый язык. Со сканером работаю через Android SDK и широковещательные сообщения (intent), которые отправляет программа сканера от производителя терминала: нажал кнопку, и прочитанный код приходит в открытый экран. Для двух моделей терминалов на складе настройки разбирал отдельно.
Сборщик открывает задание и видит маршрут по ячейкам, выстроенный так, чтобы не ходить туда-обратно. На каждом шаге приложение показывает ячейку, препарат и нужное количество. Сборщик сканирует штрихкод упаковки и код маркировки. Код маркировки определяет препарат и конкретную упаковку, а серию и срок для неё приложение берёт из учётной системы вместе с заданием. Если серия не подходит под условия заказа или срок слишком короткий, терминал останавливает шаг и подсказывает, что искать.
Если товара не хватает, сборщик отмечает недостачу, а приложение предлагает другую ячейку или передаёт вопрос оператору. Когда всё собрано, идёт упаковка: сканируются коробки, и заказ закрывается.
Связь в дальних рядах склада пропадает, поэтому задание хранится в памяти терминала, а сканы записываются в локальную базу. Синхронизация с учётной системой идёт, когда связь возвращается, и порядок событий сохраняется.
Дизайн пользовательского интерфейса Android делал под работу в перчатках: крупные кнопки, большой шрифт, высокий контраст для тусклого света в рядах. При ошибке терминал подаёт звук и вибрацию, потому что на экран сборщик смотрит не всегда. Лишних экранов нет: на каждом шаге одно действие.
Бумажные листы со склада ушли. Сборщик ведёт сборку по терминалу, а не по распечатке, которая устаревает к обеду. Неверную серию приложение ловит в момент скана, пока упаковка ещё в руке, и исправить можно сразу, а не ждать возврата от аптеки.
Перчатки, как показали первые смены, не мешают: по кнопкам попадаешь с первого раза, снимать перчатки ради экрана не нужно. Звук ошибки сначала раздражал, потом сборщики привыкли и сами попросили сделать разные сигналы для разных ошибок. Так и сделали: серия и срок звучат по-разному.
Опытные сборщики освоили терминал быстрее, чем я ожидал. Новичков теперь вводят в работу быстрее обычного, потому что приложение само ведёт по маршруту.
Остаётся одно ограничение: приложение проверяет то, что записано в данных. Если серию при приёмке внесли в учётную систему с ошибкой, терминал её не заметит. Поэтому следующим шагом планируется похожая проверка на приёмке товара.
Склад собирает заказы по бумаге, и хочется перенести это на терминалы? Отправьте мне сообщение через freelance.ru, укажите модели ваших терминалов. Скажу, что на них реально запустить.