Терминал сбора данных на базе Google Android. OLE-компонент. Программирование обмена данными.

Автор:   Кравченко Андрей, mail@andriy.co

Для обеспечения обмена данными между приложением Barcode Terminal Hosting и учетной системой используется пара xml-файлов InventoryListToTCD.xml и InventoryListFromTCD.xml

Файл InventoryListToTCD.xml нужен, чтобы записать данные о товарах из учетной системы в терминал сбора данных. Обычно это простейший справочник товаров, хранящий следующие поля:

  • BarCode – штрих-код в числовом, либо в буквенно-числовом виде
  • Description – наименование товара
  • Quantity – количество товара в учетной системе
  • Price – цена единицы товара

Опишем вкратце по шагам, как работает процесс записи справочника товаров в терминал сбора данных.

  • Из учетной системы мы должны записать данные в файл InventoryListToTCD.xml.
  • Когда терминал сбора данных обратится через Web-сервис к приложению BarCode Terminal Hosting за справочником товаров, то Barcode Terminal Hosting отдаст содержимое файла InventoryListToTCD.xml в терминал сбора данных.

После того, как мы произвели учет и ввели в терминал фактические остатки, наша задача – передать эти данные в учетную систему. Опишем процесс выгрузки данных из терминала по шагам.

  1. Терминал сбора данных обращается к Barcode Terminal Hosting и отдает данные об остатках через Web-сервис.
  2. Barcode Terminal Hosting записывает данные об остатках в файл InventoryFromTCD.xml.
  3. Учетная система читает файл InventoryListFromTCD.xml и забирает в себя фактические остатки. При этом данные могут быть загружены в документы различных типов. Данные можно загрузить в акт пересчета остатков (инвентаризационную ведомость), в приходную, либо расходную накладную, в клиентский заказ.

Структура файла InventoryListFromTCD.xml полностью идентична файлу InventoryToTCD.xml, только данные они передают в противоположных направлениях. Более подробно о процессе обмена данными можно почитать в статье

После того, как была разработана система обмена, а к ней выставились требования абсолютной универсальности и возможности сопряжения с любой учетной системой, встал вопрос упрощения работы программистов, которые будут сопрягать учетные системы с BarCode Terminal Hosting. Самое простое и правильное решение – создать OLE-компонент, ActiveX библиотеку, которая реализует классы обмена данными с методами чтения и записи. Данная библиотека называется BarCodeHosting.dll и поставляется совместно с приложением BarCode Terminal Hosting. В процессе инсталляции приложения библиотека размещается в папке Windows\System32 и автоматически регистрируется. Опишем классы, их свойства и методы, которые реализует данная библиотека.

  1. InventoryItem. Простейший класс, реализующий четыре свойства, описывающие товар:
    • Свойства:
      • BarCode (тип String) – штрих-код в числовом, либо в буквенно числовом виде
      • Description (тип String) – наименование товара
      • Quantity (тип Double) – количество товара в учетной системе
      • Price (тип Double) – цена единицы товара
  2. Writer – класс, который реализует запись данных в файл InventoryToTCD.xml из учетной системы.
    • Методы:
      • Public Sub OpenWriter(ByVal Path As String) – открывает объект на запись в файл InventoryListToTCD.xml, который расположен по пути в переменной Path
      • Public Sub AddItem(BarCode As String, Description As String, Quantity As Double, Price As Double) – добавляет в список товаров новый товар с параметрами, указанными в переменных BarCode, Description, Quantity и Price
      • Public Sub WriteData() – записывает товарный перечень в файл InventoryListToTCD.xml. Для повторной записи требуется заново открыть объект на запись методом OpenWriter и добавить товарный перечень.
    • Свойства:
      • Подкласс Recordset позволяет напрямую обращаться к данным для более тонкого управления.

    Пример использования класса Writer (из учебного приложения).

    1. 'Use BarCodeHosting.dll for write data to InventoryListToTCD.xml file
    2. Dim Writer As New BarCodeHosting.Writer 'create New Writer object
    3. Writer.OpenWriter Me.txtExchangePath.Text 'standby for write data to file
    4. Dim i As Long
    5. For i = 1 To Me.lstDataToTerminal.ListItems.Count 'Read List Items from ListView control and add it to the Writer object
    6.   Writer.AddItem Me.lstDataToTerminal.ListItems(i).Text, Me.lstDataToTerminal.ListItems(i).SubItems(1), Me.lstDataToTerminal.ListItems(i).SubItems(2), Me.lstDataToTerminal.ListItems(i).SubItems(3)
    7. Next i
    8. Writer.WriteData
    9. Set Writer = Nothing
    10. MsgBox "Data was written to file " & Me.txtExchangePath.Text & "\InventoryListToTCD.xml"
  3. Reader – класс, который реализует чтение данных из файла InventoryFromTCD.xml в учетную систему.
    • Методы:
      • Public Sub OpenReader(ByVal Path As String) – считывает данные из файла InventoryListFromTCD.xml в коллекцию объектов InventoryItem. Файл InventoryListFromTCD.xml должен находиться в папке, переданной в переменной Path
      • Public Sub MoveNext() – позволяет перейти к следующему элементу InventoryItem в коллекции
      • Public Sub MoveFirst() – позволяет вернуться к первому элементу InventoryItem в коллекции
    • Свойства:
      • Public Property RecordCount() As Long – свойство, которое возвращает количество загруженных товарных записей из файла InventoryFromTCD.xml
      • Public Property Get Item() As InventoryItem – ссылка на текущий элемент коллекции товарных записей
      • Public Property Get EOF() As Boolean – возвращает истину, если достигнута последняя товарная запись в коллекции
      • Подкласс Recordset позволяет напрямую обращаться к данным для более тонкого управления.

    Пример использования. В данном примере мы читаем данные из файла InventoryFromTCD.xml и добавляем их в цикле в объект lstDataFromTerminal (класс ListView), чтобы просмотреть на форме.

    1. 'Use BarCodeHosting.dll for read data from InventoryFromTCD.xml file
    2. Dim Reader As New BarCodeHosting.Reader 'create New Reader object
    3. Reader.OpenReader Me.txtExchangePath.Text 'read data to Reader object from file InventoryFromTCD.xml by path was sets in txtExchangePath field
    4. Me.lstDataFromTerminal.ListItems.Clear 'clear ListView
    5. While Not Reader.EOF 'from reader fill the listview in cycle
    6.   Me.lstDataFromTerminal.ListItems.Add , "k" & Me.lstDataFromTerminal.ListItems.Count, Reader.Item.BarCode
    7.   Me.lstDataFromTerminal.ListItems.Item(Me.lstDataFromTerminal.ListItems.Count).SubItems(1) = Reader.Item.Description
    8.   Me.lstDataFromTerminal.ListItems.Item(Me.lstDataFromTerminal.ListItems.Count).SubItems(2) = Reader.Item.Quantity
    9.   Me.lstDataFromTerminal.ListItems.Item(Me.lstDataFromTerminal.ListItems.Count).SubItems(3) = Reader.Item.Price
    10.   Reader.MoveNext
    11. Wend

Нужно заметить, что классы Reader и Writer являются обертками вокруг класса ADODB.Recordset с целью упростить программирование, ввиду специфичности и ограниченности задач.

Библиотека BarCodeHosting.dll может быть загружена в исходных текстах вместе учебным примером. Она является свободной для изучения и модификаций по усмотрению разработчиков систем сопряжений.
Данная библиотека специально была реализована в среде Visual Basic 6, так как эта среда разработки на данный момент обеспечивает самую простую реализацию ActiveX DLL, что весьма способствует изучению и пониманию.

Статья включена в следующие темы:

Вверх