Сегодня я продолжу расказ о проекте, связанном с
инвентаризацией основных средтсв.
Про проблемму с требованием к базе данных я уже рассказывал
в прошлом выпуске. Но это, на самом деле, была только часть проблеммы.
Надо было еще обеспечить перенос данных на мобильное
устройство, а потом обратно. В принципе можно было организовать передачу
данных по WIFI, но надо было бы договоариваться со
специалистами заказчика о параметрах такой сети, а взаимодействие в общем-то не
складывалось…
В поставку мобильного терминала входил стандартный кредл с
подключением через USB, и мы решили не заморачиваясь
особо использовать именно эту возможность для загрузки и выгрузки информации на
терминал сбора данных (ТСД).
Если совсем просто, то алгоритм работы такой:
Создать список инвентаризации ( выделить множество
объектов, наличие которых должно быть проверено)
Передать список на ТСД
Провести проверку наличия объектов ( в примитивном
варианте отсканировать штрихкод на ярыке объекта), в реальности можно
вводить дополнительную информацию и делать несколько операций.
Вернуть собранную на ТСД информацию в систему
Напечатать сличительную ведомость. Это отчет Должно ыть –
есть в наличие
Если грубо, то терминальная часть вся.
Итак проблем несколько.
Выбрать базу данных, которая может работать на терминале
Определиться, как мы собственно будем выгружать и
загружать информацию
Обеспечить работу мобильного приложения с базой
С учетом проблем с требованием к
базе данных, решили искать что-то бесплантно открытое.
Буквально со второго выстрела,
нам попался SQLite. И о чудо… у него есть все что
нужно…
На клиентской мшине с ним
работать можно, на ТСД – тоже можно. И главное! База данных это просто 1 файл,
который можно просто скопировать.
Итак алгоритм работы сложился
достаточно быстро.
На клиентской машине запускается
процесс обмена со следующим алгоритмом:
Проверить наличие ТСД в кредле
Скопировать накопленную базу с терминала
Если база получена, то загрузить данные в основную базу.
Тут надо было понять, что мы можем делать операцию много раз и правильно
построить выгрузку ( без дублирования)
Если необходимо, т.е. если пользователь запрсил выгрузку
очередного списка для проверки, создать на клиентской машине базу SQLite и выгрузить в нее информацию.
Скопировать новую базу данных на ТСД.
Я думаю не надо быть особо проницательным, чтобы понять, что
программа сбора данных, которая работает на ТСД, должна быть закрыта к моменту
обмена.
Примеры работы с SQLiteнайти не сложно, гавное было найти правильное API клиента, в нашем случае они были разные для VB6 на клиентской машине и VB.NET на ТСД. Если интересно
подробнее пишите, а еще лучше –активно пользуйтесь поисковиками.
Хочу сказать еще вот что, всегда страшно, что н разных
платформах будет проблемма с кодировкой сиимволов. Но оказалось, что в SQLite все нормально и хотя внутреннее представление похоже UTF8 но работа в разных клиентах никаких проблем не вызвала.
Чуть подробнее приведу строки по непосредстыенному обмену
данными между клиентской машиной и ТСД. Мы искали примеры искали достаточно
долго.
Пример кода для копирования данных с устройства на клиентский компьютер.
Ясно, что на компьютере должен быть установлен ActiveSync, без него как-то не получается...
BuildMobileDBfname ‘эта процедура наша – она
собствено и делает выгрузку данных
If FileExists(fname) Then
Log "Соединение с
устройством"
If RapiConnect Then
Log "Удаление файла на усройстве"
CeDeleteFile "/OMK.db3"
Log "Кпирование данных на устройство"
RAPICopyPCFileToCE fname, "/OMK.db3"
Log "Отключение от устройства"
RapiDisconnect
Log "Устройство отключено"
Else
MsgBox "Вставте Терминал сбора данных в
кредл.", vbInformation, "Ошибка передачи данных"
Log "Вставте Терминал сбора данных в
кредл."
Exit Sub
End If
MsgBox "Данные переданы на терминал",
vbOKOnly, "Выгрузка данных"
Вот так все достаточно банально и просто.
Хочу на последок сказать еще одну вещь. Про дешевые варианты
решения. На днях меня попросили сделать клиента к одному мотороловскому прибору.
Я сначала долго не мог понять а нафига собственно он нужен. Это просто
автономный сканер баркодов без всякого интерфейса, только USB разъем для слива накопленных данных. Если интересно, то
модель Motorola CS 1504.
А потом я понял… так вот оно средство для совсем дешевого
решения вопроса инвентаризации. Прибор, ну копеешный, но можно
сделатьнебольшую модификацию программы и будет совершенно полноценное решение.
Написание клиента, кстати, заняло ровна 2 часа.