Отправляет email-рассылки с помощью сервиса Sendsay

Создаем свой бизнес

  Все выпуски  

Создаем свою информационную систему


Создаем свою информационную систему


Инвентаризация 2

Сегодня я продолжу расказ о проекте, связанном с инвентаризацией основных средтсв.

Про проблемму с требованием к базе данных я уже рассказывал в прошлом выпуске. Но это, на самом деле, была только часть проблеммы. 

Надо было еще обеспечить перенос данных на мобильное устройство, а потом обратно.   В принципе можно было организовать  передачу данных по WIFI, но надо было бы договоариваться со специалистами заказчика о параметрах такой сети, а взаимодействие в общем-то не складывалось…

В поставку мобильного терминала входил стандартный  кредл с подключением через USB, и мы решили не заморачиваясь особо использовать именно эту возможность для загрузки и выгрузки информации на терминал сбора данных (ТСД).

Если совсем просто, то алгоритм работы такой:

  1. Создать список инвентаризации ( выделить множество объектов, наличие которых должно быть проверено)
  2. Передать список на  ТСД
  3. Провести проверку наличия объектов ( в примитивном варианте отсканировать штрихкод на  ярыке объекта), в реальности можно вводить дополнительную информацию и делать несколько операций.
  4. Вернуть собранную на ТСД информацию в систему
  5. Напечатать сличительную ведомость. Это отчет  Должно ыть – есть в наличие

Если грубо, то терминальная часть вся.

Итак проблем несколько.

  1. Выбрать базу данных, которая может работать на терминале
  2. Определиться, как мы собственно будем выгружать и загружать информацию
  3. Обеспечить работу мобильного приложения с базой

С учетом проблем с требованием к базе данных, решили искать что-то  бесплантно открытое.

Буквально со второго выстрела, нам попался SQLite. И о чудо… у него есть все что нужно…

На клиентской мшине с ним работать можно, на ТСД – тоже можно. И главное! База данных это просто 1 файл, который можно просто скопировать.

Итак алгоритм работы сложился достаточно быстро.

На клиентской машине запускается процесс обмена со следующим алгоритмом:

  1. Проверить наличие ТСД в кредле
  2. Скопировать накопленную базу с терминала
  3. Если база получена, то загрузить данные в основную базу.  Тут надо было понять, что мы можем делать операцию много раз и правильно построить выгрузку ( без дублирования)
  4. Если необходимо, т.е. если пользователь запрсил выгрузку очередного списка для проверки, создать на клиентской машине базу SQLite и выгрузить в нее информацию.
  5. Скопировать новую базу данных на ТСД.

Я думаю не надо быть особо проницательным, чтобы понять, что программа сбора данных, которая работает на ТСД, должна быть закрыта к моменту обмена.

Примеры работы с SQLite найти не сложно, гавное было найти правильное API клиента, в нашем случае они были разные для VB6 на клиентской машине и VB.NET на ТСД.  Если интересно подробнее пишите, а еще лучше –активно  пользуйтесь поисковиками.

Хочу сказать еще вот что,  всегда страшно, что н разных платформах будет проблемма с кодировкой сиимволов.  Но оказалось, что в SQLite все нормально и хотя внутреннее представление похоже UTF8 но работа в разных клиентах никаких проблем не вызвала.

Чуть подробнее приведу строки по непосредстыенному обмену данными  между клиентской машиной и ТСД.  Мы искали примеры искали достаточно долго.

Пример кода  для копирования данных с устройства на клиентский компьютер.

 Ясно, что на компьютере должен быть установлен ActiveSync, без него  как-то не получается...

fname = temppath & "\TDS2OMK_" & Year(Date) & Month(Date) & Day(Date) & Hour(Now) & Minute(Now) & Second(Now) & ".db3"

    Log "Соединение с устройством"

     If RapiConnect Then

        DoEvents

        Log "Получение файла"

        Log ">Copy" & "/OMK.db3 to " & fname

        RAPICopyCEFileToPC "/OMK.db3", fname

        Log ">Copy OK"

        DoEvents

 

        Log "Disconnect"

        RapiDisconnect

        Log ">Disconnect OK"

     Else

        Log "Не найдено устройство"

     End If

Передача данных обратно на устройство

  fname = temppath & "\OMK2TDS_" & Year(Date) & Month(Date) & Day(Date) & Hour(Now) & Minute(Now) & Second(Now) & ".db3"

        Log "Выгрузка данных в файл " & fname

        BuildMobileDB fname  ‘эта процедура наша – она собствено и делает выгрузку данных

        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 часа.

Вот так, потом все просто…  

Ведущий рассылки: Михаил М. Баранов
http://www.abolsoft.ru bami@abolsoft.ru

В избранное