Итак, вводная. Возникла задача: в связи с увеличением товарооборота автоматизировать труд сотрудников склада на этапе отгрузки товара. А именно: для снижения вероятности пересортицы использовать механизм штрихового кодирования товара. Казалось бы - к чему изобретать очередной велосипед, если есть готовые решения (с рядом из них мне доводилось работать раньше)?
Но тут начинаются уточнения.
- кладовщики хотят работать с экраном побольше, чем позволяют популярные ТСД.
- кладовщиков много, а бюджет, мягко говоря, не поражает величиной. А при этом ТСД стоят недёшево.
- в качестве WMS используется древняя конфигурация 1С с закрытыми модулями, аппаратными ключами защиты и работающая на древней платформе 8.1. Т.е. рассчитывать на то, что поставщик ТСД организует работу "из коробки" - не вполне уместно.
- бизнес-процесс склада организован исходя из своих представлений о прекрасном, так что любой типовой (или условно-типовой) софт по любому придётся переписывать.
Все эти требования ненавязчиво укладываются в описываемую концепцию использования веб-интерфейса.
А именно:
- создание веб-приложения, организующего с одной стороны UI посредством браузера, а с другой стороны - интерфейс с базой WMS посредством файлов обмена.
- создание механизма синхронизации данных со стороны 1С (UI, выгрузка данных, загрузка данных)
- использование в качестве конечного оборудования любого мобильных устройств, отвечающего минимальным требованиям: возможность подключения сканера штрих-кодов, возможность работы с веб-приложением посредством браузера.
Иначе говоря, вместо "человеческого" ТСД используется дешёвый планшет, а то и вовсе мобильный телефон, к которому посредством Bluetooth подключён сканер штрих-кода. Разумеется, данная методика не исключает и использования терминалов сбора данных: главное - наличие браузера и сети.
Сканер при этом работает в режиме эмуляции клавиатуры, последовательно передавая массив символов при сканировании. Поступающие данные обрабатываются на уровне document.onkeypress в DOM клиента.
А дальше работа идёт следующими этапами:
- оператор склада формирует посредством внешней обработки 1С задачи кладовщикам (документы, корректность которых должна быть подтверждена).
- обработка ищет каталоги пользователей веб-приложения (каталог, именем которого является внутренний идентификатор пользователя в 1С, которому дано задание). Если не находит, то создаёт. В каталог пользователя 1С записывает .json файлы (имя файла соответствует внутреннему идентификатору документа в 1С, вся необходимая для работы информация записана в контексте объекта для последующей десериализации. Кроме того, 1С формирует .json файл с данными пользователей, которые смогут пользоваться веб-приложением. Сессионность в данном примере реализована посредством cookies, аутентификация выполняется с хешированием паролей (без соли).
- веб-приложение после успешной аутентификации предоставляет список документов, требующих обработки. При переходе в документ можно приступать к работе. Сканирование штрих-кода (в данном примере используется только EAN-13) позиционирует документ на искомой строке документа и выполняет инкремент фактического (подтверждённого) количества. Для простоты работы выполняется позиционирование по "якорю" и выделение строки цветом. При достижении требуемого количества строка выделяется зелёным цветом. Добавлена возможность ручного ввода количества товара.
- по завершении обработки документа, его следует "подтвердить" нажатием на соответствующую кнопку пользовательского интерфейса. В случае расхождений, приложение предупредит об этом пользователя. При попытке закрыть либо обновить окно браузера, приложение запросит подтверждение пользователя, во избежании утраты наработанных данных (в случае наличия таковых). В результате подтверждения будет сформирован файл с данными обработанного документа в соответствующем каталоге (если есть расхождения с плановыми данными, они будут зафиксированы), а файл со входными данными документа будет удалён и обработанный документ пропадёт из списка задач. WMS 1С мониторит каталог подтверждённых документов. При появлении там файлов с данными выполняет требуемые действия (от простого оповещения оператора системы об успешном или неуспешном выполнении, и до фактической корректировки документа в БД по данным веб-приложения).
Необходимые пояснения и уточнения.
Веб-сервер в данном примере реализован посредством Node.js. Объективно - это может быть любое средство, позволяющее организовать работу веб-приложения. Хоть Python, хоть вовсе C#. Это совершенно не принципиально.
Для обмена данными используются файлы, но и это совершенно не принципиально. В данном случае я счёт это решение более простым и универсальным, но не более того.
Для организации клиента и сервера веб-приложения в данном примере я использую AJAX, но более удачным решением, по-моему, является использование WebSocket. Так что и в этом вопросе простор для творчества.
На вопрос "почему не стандартные решения с ТСД?" я ответил выше. Теперь не лишне уточнить, "почему не механизмы 1С, в частности веб-сервисы?". Во-первых - и это невозбранно. Но есть и "во-вторых": используя полноценное решение (как, в данном случае, Node.js), мы получаем платформенную независимость. Это решение за несколько минут можно перестроить под работу с базой на платформе 1С 7.7, например. Нисколько не потеряв в функциональности. Ну и, опять же, убираем лишнее звено: саму 1С из пользовательского интерфейса. Положа руку на сердце - тут это не особо нужно. Плюсы сомнительны, а из минусов - снижение быстродействия, сложности с захватом свободной лицензии, ограничения в формировании интерфейса.
Тем не менее, данная статья не исключает и такого. Основная идея - использование, в качестве инструмента кладовщика, произвольного мобильного устройства в связке со сканером для работы с веб-приложением, общающимся с рабочей базой.
У данного решения есть и минусы. Как минимум - это усложнение системы из-за использования двух устройств вместо одного (впрочем, это не обязательно: есть множество аппаратных решений, вплоть до подключения сканера-"кольца на палец" по OTG к мини-планшету, закреплённому на браслете. Фантазия тут ничем не ограничена. Кроме того, мне довелось столкнуться со сложностями при выборе планшета: не все Bluetooth-устройства взаимно видимы, есть ряд нюансов. Опять же - не следует забывать о проблемах безопасности, если в качестве среды будет использована не локальная сеть, а интернет. Но по моим наблюдениям на текущий момент, эти минусы с запасом перекрываются плюсами такой реализации.