Термінал збору даних на базі 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, що дуже сприяє вивченню і розумінню.

Теми, що посилаються на статтю:

Вгору