Важно: новая версия продукта теперь - Simple UI, рекомендую перейти на нее, так как поддержка и развитие только для Simple UI.
Постановка задачи
Системы управления складом (WMS), логистикой и подобные осуществляют процессный подход к управлению в альтернативу документному подходу, который используется в учетных системах. Грубо говоря в учетной системе(например 1С:УТ или ERP) все отталкивается от документа: есть приходная накладная – есть ее аналог в учетной системе. В процессном подходе все не так :например, есть приход паллеты товара – это действие нужно сразу же отразить в системе, т.е. отразить каждую операцию процесса, поэтому такой учет более оперативный и требует автоматизации мобильными терминалами.
Соответственно, работники склада выполняют определенную последовательность действий, которые должны управляться из системы и отражаться в ней. Например работник должен отправиться на определенный адрес (последовательность обхода адресов рассчитывается исходя из топологии склада), обнаружить там паллету, взять определенное количество товара.
При этом требуется совершать учетные действия: отсканировать адрес, с которого забирается товар, отсканировать паллету, товар и наконец ввести количество товара. После чего произведенную операцию требуется отразить в программе чтобы товар списался. И повторять этот процесс до тех пор пока все товары заказа не будут отобраны к отгрузке.
Таким образом для каждого такого процесса в мобильном клиенте должна быть последовательность экранов, на которых выводятся подсказки, содержатся элементы ввода, контроль ввода и т.д. Эта последовательность далее называется Процессом и для конструирования этих процессов для мобильного клиента и создан этот модуль.
Архитектура
Во вступлении я назвал эту систему «открытой» вот почему: ничто не ограничивает внедренца в использовании своей логики в приложении, потому что все происходит на стороне 1С в открытом коде. Android-клиент ничего не рассчитывает, ничего не хранит, не осуществляет логических переходов и обработки данных – все это происходит в обработчиках в веб-сервисе. Вариант исполнения клиента для 1С-клиента - такой же, т.е. он просто отрисовывает фронт и исполняет обработчики. Это абсолютно тонкий клиент, который умеет только отображать и получать/передавать данные от источников ввода. Конфигурация, которая является конструктором и одновременно модулем интеграции также не содержит ограничений.
Каждый клиент работает со своей конфигурацией рабочего места (например «Приемка», «Выпуск» и т.д.) содержащей набор процессов. Конфигурация клиента задается в виде строки XML и передается на клиент в момент открытия приложения: приложение посылает запрос и конфигурация приходит в ответе. Таким образом для того что бы что то поменять у клиента ему достаточно просто перезайти. В принципе конфигурацию можно редактировать и просто в XML но для удобства я сделал редактор в 1С, который автоматизирует создание конфигурации.
В редакторе создаются различные конфигурации клиентов (например в демо-базе есть конфигурации для рабочего места «Приемка», «Отгрузка» и «Инвентаризация ОС»). Конфигурации содержат процессы, а процессы состоят из последовательностей экранов и/или циклов. Например это – состав одного из процессов:
В справочнике Экраны задаются визуальные элементы и элементы ввода для каждого шага процесса. Например так:
При этом клиент может отображать значения переменных в визуальных элементах.
Например, на первом экране сканируется штрих/код, а на следующем, показывается товар и расширенное описание товара. Это задается и отображается так:
А вот так на одной картинке выглядит весть процесс вместе. Тут видно что пользователя при запуске встречает стартовый экран, а потом начинается цикл приемки товара, пока пользователь не выйдет. Вот таким примерно образом и создаются все процессы.
Помимо полей ввода и чтения штрихкодов клиент может взаимодействовать с пользователем с помощью диалога вопроса:
Элементы ввода (штрихкод, поля ввода) размещенные на экране мобильного приложения передаются в переменные и обрабатываются на стороне 1С. Клиент пишет в переменные (котрые задаются в конфигурации клиентов) и читает переменные для отображения на экране, 1С читает переменные и может добавлять свои в обработчиках. Кроме того особняком идет передача таблицы строк (например табличная часть заказа) и работа с ней.
Архитектура обмена между сервером и клиентом показана на следующей схеме:
Приложение отправляет на сервер запросы при начале и окончании процесса, которые пишутся в регистр сведений. Это нужно для определения статуса занятости клиента перед тем как отправить ему задание при автоматической диспетчеризации (рассылки заданий). Ну и, кроме того, так как фиксируется время начала и окончания процесса, то эти данные можно использовать для построения отчетов от KPI работников (время выполнения различных процессов)
На каждый клиент можно отправлять распоряжения(заказы, задания) с таблицами котрые будут запускать процессы. Это работает не через пуш, а через http-запросы. Вот пример отправки заказа клиента. В результате отправки у пользователя проигрывается звук приема сообщения и возникает диалог приема заказа, если он готов принять то стартует выполнение процесса. Кстати тут еще одни контроль того, занят клиент в данный момент или нет:
Заказ можно получить и по инициативе клиента, через сканирование штрих-кода например или поиск по номеру
Ну и обещанный бонус – распознавание голоса
Пример работы с голосом есть в демо базе. Распознавание голосом может понадобиться в случаях когда штрих коды использовать нельзя. Например, недавно ко мне обратились с учетом номеров шин на транспорте -вот тут то как раз тот случай: штрихкоды на шины в эксплуатации не наклеишь, frid-ы сомнительно. Номер состоит из 6 цифр, и на морозе вбить его затруднительно, а вот проговорить -легко. Точность распознавания товара стремиться к 100%. Даже если чтото не так, то можно переделать.
Еще вариант использования – ввод нового товара, которого нет в базе.
Честно говоря, распознавание от Google в сочетании с такой оберткой -это уже не игрушка а претендент на полноценную замену другим способам идентификации.
Вот как это выглядит:
Примеры процессов, реализованные на конструкторе
Инвентаризация ОС
Работа клиента такая: сканируется штрих-код помещения, с сервера подгружается таблица ОС которые должны быть по учету, и цикл из одного действия – сканирования штрих-кода основного средства. В помещении может быть ОС которого нет по учету (принесли из другого помещения). Может чего-то не быть. В общем, все видно по план-факту. В результате в базе заполняется «Инвентаризация ОС» - заполняется колонка «Факт»
Клиент приемки
Клиент участка приемки содержит два процесса: «Приемка по факту» и «Приемка по заказу».. Если нет распоряжения на приемку(Заказа поставщику), но нужно принять товар, на клиенте выбирается «Приемка по факту», если заказ есть, то «Приемка по заказу». Соответственно в первом случае – создается просто новый документ «Приемка», во втором случае тоже создается приемка, но привязанная к заказу поставщику, кроме того можно смотреть «План-факт» приемки
Клиент отгрузки.
Также в демо базе есть пример рабочего места отгрузки. Там содержится 2 процесса – отгрузка по заказу со сканом и отгрузка с приемом заказа, с сервера. Но в клиенте отображается только один процесс, так как второй-скрытый, его нельзя запустить вручную – только с сервера.
Клиент службы доставки.
Так как приложение работает через веб-сервисы оно может работать не только во внутренней сети, но и через интернет. На этом модуле можно разработать рабочее место курьера который будет отмечать доставку, возвращенные покупателем товары, оплату (сумма оплаты будет рассчитываться от суммы возврата).
Заключение. Описание поставки.
Конфигурация для инвентаризации ОС содержит всего 2 экрана, 2 обработчика и 155 строчек кода. Полноценное рабочее место для проведения инвентаризации было сделано и готово к работе за 20 минут. Это быстро. Альтернативой могло бы стать: 1. написание мобильного приложения на платформе 1С;2. Мобильный клиент на 1С 3. написание интерфейса 1C+RDP. Но это все делается дольше, кроме того для 1С нужны лицензии и для RDP тоже нужны лицензии, а для приложения - нет. Кроме того, 1С не умеет всего того, что умеет нативное приложение Android. Например сканирование обычный штрихкодов (например EAN-13), на момент написания статьи вызывает большие вопросы.
Данный модуль и клиент предоставляют программисту инструмент котрый можно сравнить с Конвертацией данных: можно писать свой обмен между базами полностью с нуля, а можно воспользоваться КД, чтобы она взяла на себя всю инфраструктуру, оставив программисту работу с непосредственно логикой. Вопрос выбора данного инструмента – это вопрос экономии времени и денег.
Скорость работы через веб-сервисы на ранних версиях 1С могла бы стать проблемой, но теперь, когда есть переиспользование сеансов – все работает быстро. Первый запрос, например когда в клиент заходишь идет с задержкой – это создается сеанс, а потом сеанс переиспользуется и это происходит мгновенно.
Для работы на устройство нужно поставить приложение Simple WMS:
В архиве находится база с примерами, в базе – конфигурация с модулем для объединения и подробная инструкция по внедрению с картинками, в которой содержится все необходимое. Работа по конфигурировнию своих клиентов и интеграции со своей конфигурацией рассчитана на 1С-программиста. Требуется публикация веб-сервиса.
Конфигурация тестировалась на платформе 8.3.12.1412
Никаких защит, скрытых модулей, библиотек, покупок в приложении, ограничений в приложении в данном проекте не предусмотрено.
Обновление от 12.01.19:
-Добавлена совместимость с Android 4.2
-Добавлен элемент экрана "Картинка". В демо базе сделан пример работы с картинкой. Вот так это может выглядеть.
Обновление от 15.01.19:
-Добавлена совместимость с Android начиная с 4.0.3 (пока только в apk-файле, в магазине нет)
-Увеличен шрифт надписей
Обновление от 16.01.19 :
-Добавлена совместимость с 4.0.3 (IcecreamSandwich)
-Увеличен шрифт
-Теперь можно передвать надписи в виже html-строки.
Надписи в виде html-строки позволяют задавать форматирование в строке - увеличивать шрифт, делать подчеркивание , выделение жирным и т.д. Как это происходит например в Ворде.
Например, задав строку в 1С в таком виде: Абразивный порошок(02-2,2) с МКР (<u>ТУ 3989-003-82101794-2008</u>) <b>Шлак гранулированный</b>
На экране она выйдет в таком виде:
HTML-строка дает большие возможности. Для того чтобы выделить часть строки надо заключить часть строки в тег. Например <b>Шлак гранулированный</b> - это bold - жирный текст.
Вот список поддерживаемых тегов:
- p
- ul
- li
- div
- span
- strong
- b
- em
- cite
- dfn
- i
- big
- small
- font
- blockquote
- tt
- a
- u
- del
- s
- strike
- sup
- sub
- h1
- h2
- h3
- h4
- h5
- h6
- img
- br
Обновление от 17.01.19:
- добавлена обработка аппаратной кнопки Enter на ТСД
- вопрос при выходе из процесса
- базовая авторизация в сервисе
Обновление от 21.01.19 (обновлена инструкция и демо-база):
- Функции для логина(авторизации): процесс, который запускается при входе в приложение, загрузка нужного клиента
- Мелкие улучшения. автоматический переход при диалоге (раньше не работал)
- Передача изображения с камеры устройства. Можно разместить на экране кнопку камеры и получать полноразмерные снимки в 1С в виде строки base64. Теперь с телефона можно например организовать ввод нового товара с фотографиями, штрих кодом. Можно использовать для функции мерчендайзинга например. Или для фотографирования сотрудников.
Обновление от 31.01.19 (обновилось только приложение):
- Добавлен запуск процессов из процессов (StartProcess). Описано ранее в инструкции.
- Пропуск экранов по условию (надо разблокировать поле в конфигурации)
- исправлена ошибка вылета при неправильных учетных данных на некоторых устройствах
- html в диалогах
Обновление от 04.02.16 (Android и 1C конфигурация):
- Теперь доступен клиент 1С для варианта работы через RDP/веб-клиент. Более подробно тут: //infostart.ru/public/995673/
Новые функции (оба клиента):
- Сохранение структуры переменных при запуске процесса из процесса
- Команда break для немедленного закрытия процесса
- Обработчики "при открытии" для каждого экрана
Обновление от 11.02.19 (приложение, демо-база, инструкция):
- Передача GPS координат и прочей информации о положении
Обновление от 16.02.19 (Только приложение):
- Исправлена проблема с режимом пропуска экранов в цикле
- Добавлено сворачивание экранной клавиатуры при переключениях экранов
Обновление от 23.02.19 (Приложение, Демо-база и конфигурация, инструкция):
- Добавлен элемент управления "Список значений" (в оба клиента). Добавлен пример работы со списком
Обновление от 02.03.19 (Приложение, база, инструкция):
- Добавлен синтез речи. Теперь можно передавать текст для озвучки
Обновление от 16.03.19 (моб. приложение, демо база, инструкция):
-Режим списка задач, запуск процессов из списка. Это может быть список заказов на доставку, список заказов для контроля, список задач, вообще люой список представленный в виде карточек
По кнопке «Задачи» теперь можно запросить учетную систему не предмет какого то списка задач, заказов и т.д. Например это могут быть «Текущие заказы к доставке для определенного пользователя»
В момент нажатии кнопки приложение делает запрос к сервису (/get_tasklist/), и он возвращает некий список. Этот список представляется пользователю как список карточек с определенным оформлением
Вместе со списком можно передать наименование операции которую надо запустить при клике на задачу, ID задачи, некий параметр который записывается в orderRef и который потом можно прочитать в обработчике.
При клике на задачу передается запрос на специальный сервис (taskcommit) с ID задачи. Это можно использовать для биллинга например
Обновление от 23.03.19 (моб. приложение, демо база, инструкция):
- Теперь доступен ввод подписи с экрана. Подпись отправляется в 1С как картинка:
Обновление от 30.03.19 (демо-база, инструкция, приложение)
- В моб. приложении:настройка колонок "план, факт" таблицы строк и названия кнопки "план-факт"
Обновление от 12.04.19 (демо-база, инструкция, приложение)
- Теперь можно добавлять свои кнопки (одну или блок кнопок) на экранах
Обновление от 14.05.19 (пока только приложение):
- Отрисовка списка задач при активизации (запрос на состав списка при активизации)
- Управление выходом из цикла с помощью переменной-флага "exitloop" (любое значение)
Обновление от 08.06.19 (демо база, инструкция, приложение):
- Элемент ввода "Дата"
- Команда выхода из процесса переименована в break
- исправление ошибок
Обновление от 22.06.19 (демо база, инструкция, андроид-приложение):
- Добавлена настраиваемая кнопка "Повтор экрана" без переключения экрана. Иногда требуется обновить, оставаясь на экране, пропустить задание и т.д. Т.е. отсылка запроса идет, а экран не переключается.
Обновление от 15.07.19 (демо база, инструкция, андроид-приложение):
Подробности тут: //infostart.ru/public/1093292/
- Произвольные таблицы отдельно и встраиваемые в экран. Раскраска, ширина колонок и т.д.
- Переработанный запуск процесса. Цикл в цикле
- "Не переключать экран"
- Горизонтальный блок кнопок
Обновление от 15.08.19 (демо база, инструкция, андроид-приложение):
- Офф-лайн режим. Подробности тут: //infostart.ru/public/1108116/
- Работа с некоторыми режимами сканеров
- Изменения в интерфейсе
Опубликовано готовое расширение для типовых конфигураций для работы с ордерным складом через Simple WMS: //infostart.ru/public/1066904/
Ознакомительное видео доступно тут:https://youtu.be/T_OY-fqyJQ8
Пожалуйста, вопросы присылайте в тему форума http://forum.infostart.ru/forum104/topic211360/message2158160/#message2158160
НОВАЯ ВЕРСИЯ ПЛАТФОРМЫ - Simple UI - ДОСТУПНА ТУТ: //infostart.ru/public/1153616/