Я реализовал работу с базой данных в Simple WMS на чистом SQL-е. Т.е. это просто SQLсервер в приложении (SQLite 3) с которым можно общаться извне через HTTP-сервер приложения (в каждом клиенте встроен свой веб сервер) посредством SQL запросов или само приложение общается с ним SQL-запросами -как это заложено в конфигурации. Т.е. можно оправлять приложению POST запросы с SQLкомандами либо дать ему конфигурацию в которой эти самые SQL-запросы прописаны в логике работы. Это очень простое решение, но оно дает всю мощь SQL. Теперь можно делать автономные приложения без сервера. Конечно там есть обертки для упрощения этого процесса. Но я не пошел путем 1С и не стал создавать слой бизнеслогики – весь этот конструктор документов и справочников. Хочешь создать справочник – пиши CREATE TABLE. Да, это не визуальных конструктор конечно, но посмотрите на статьи на этом ресурсе – половину времени мы создаем решения, а вторую половину разбираемся как заставить 3-х звенную архитектуру работать быстрее. Как то мой препод по БД рассказывал что когда то давно (видимо во времена когда операционные системы были с строковым интерфейсом) язык SQL создавался как язык для пользователя. Т.е. пользователь приходил например в библиотеку и писал SELECT WHERE те книги которые ему нужны. Так что я думаю это не очень сложно.
В среде фрондендщков есть такое понятие как CRUD-приложения (от слов Create, Read, Update, Delete). Таким приложением является и Simple WMS. Только раньше оно общалось с БД учетной системы а сейчас со свой БД тоже. Я проанализировал основные места где приложение обращается к БД и теперь можно в конфигурации прописать тоже самое для off-line режима. Никакого кода в обработчиках. Только SQL-запросы.
Например вот так создаются таблицы:
Вот так происходит поиск товара:
Вот так например заполняются таблицы. Кстати таблицы теперь можно выводить на форму. Вот как это выглядит:
Режимы работы
-
Полностью автономная работа.
При таком режиме ставится галка «Off-line» в настройках приложения и устройство не пытается что либо передать и забрать с Веб-сервера учётной системы. Веб-сервера на бекэнде может не быть вовсе. Работа клиента визуально никак не отличается от работы в он-лайн режиме, просто вместо обращения к серверу устройство делает запросы к своему SQL-серверу
-
Автоматическое переключение в off-line при отсутствии связи.
Рассмотрим пример: вы сканируете приход (2 экрана: сканирование товара и ввод количества). Вы работаете в онлайн, но отошли от wi-fi и связь прервалась. На экране где идет сканирование товара вам надо распознавать штрихкод и проверять есть ли он в базе. Если в экране определена офф-лайн функция то будет исполнена она и ошибки об обрыве связи не будет.
На экране ввода количества уже что то надо записать в базу, но связи нет. Для этого достаточно в конфигурации определить галочку «Записать отложенную задачу». Что произойдет на устройстве? Оно сохранить состояние hashmap (Переменные) в свою БД и потом когда связь появится передаст ее в 1С. Т.е. если в отсутствии связи прошло 5 циклов то клиент запомнит что нужно передать 5 записей. Для обработки отложенных задач теперь есть отдельный веб-сервис и обработчик
-
Гибридный режим: запросы могут выполняться в он-лайн
SQL-ная часть выполняется до отправки запроса send_input в учетную систему. Зачем это нужно? Часто критерием производительности WMS систем называют скорость сканирования (вместе с поиском товара) и сравнивают системы по этому параметру. Поиск в собственной таблице может обеспечить суперскорость. Это возможно по 2м причинам:
-
- это прямой запрос к таблице БД. Он очень быстрый в отличии от 1С например;
- таблицу конкретного устройства можно подготовить для конкретного рабочего места – это будет выборка из справочника а не весь справочник (например только сырье, в то время как в регистре Штрихкодов все подряд. Кроме того это таблица в 1NF сразу с теми полями которые нужны а не со ссылками;
Общение с учетной системой
Из 1С можно работать с SQL сервером конкретного устройства передавая команды через http. Например отправлять справочники и забирать результаты заполнения документов. Ну или создавать свои структуры данных.
Например этот запрос создает таблицу товаров:
Запрос = "create table IF NOT EXISTS goods (id integer primary key autoincrement,art text unique, barcode text, title text)";
ПараметрыЗапроса = "";
СтрокаОтвета = Справочники.scМобильныеКлиенты.ОтправитьSQLЗапросМобильныйКлиент(URLМобильногоУстройства,"ExecSQL","","&query="+Запрос+"¶ms="+ПараметрыЗапроса);
Этим запросом запрашиваются отсканированные товары.
Запрос = "create table IF NOT EXISTS goods (id integer primary key autoincrement,art text unique, barcode text, title text)";
ПараметрыЗапроса = "";
СтрокаОтвета = Справочники.scМобильныеКлиенты.ОтправитьSQLЗапросМобильныйКлиент(URLМобильногоУстройства,"ExecSQL","","&query="+Запрос+"¶ms="+ПараметрыЗапроса);
На всякий случай есть консоль запросов
Также есть примеры работы
В разделе к основной статье //infostart.ru/public/976636/ обновлены разделы документации, база 1С содержит пример конфигурации для работы с OFF-line режимом.