Для обеспечения обмена данными между приложением 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 в терминал сбора
данных.
После того, как мы произвели учет и ввели в терминал фактические
остатки, наша задача – передать эти данные в учетную систему. Опишем
процесс выгрузки данных из терминала по шагам.
- Терминал сбора данных обращается к Barcode Terminal Hosting и
отдает данные об остатках через Web-сервис.
- Barcode Terminal Hosting записывает данные об остатках в файл
InventoryFromTCD.xml.
- Учетная система читает файл InventoryListFromTCD.xml и забирает в
себя фактические остатки. При этом данные могут быть загружены в
документы различных типов. Данные можно загрузить в акт пересчета
остатков (инвентаризационную ведомость), в приходную, либо расходную
накладную, в клиентский заказ.
Структура файла InventoryListFromTCD.xml полностью идентична файлу
InventoryToTCD.xml, только данные они передают в противоположных
направлениях. Более подробно о процессе обмена данными можно почитать в статье
После того, как была разработана система обмена, а к ней выставились
требования абсолютной универсальности и возможности сопряжения с любой
учетной системой, встал вопрос упрощения работы программистов, которые
будут сопрягать учетные системы с BarCode Terminal Hosting. Самое простое и правильное решение – создать OLE-компонент, ActiveX
библиотеку, которая реализует классы обмена данными с методами чтения и
записи. Данная библиотека называется BarCodeHosting.dll и поставляется
совместно с приложением BarCode
Terminal Hosting. В процессе инсталляции приложения библиотека
размещается в папке Windows\System32 и автоматически регистрируется.
Опишем классы, их свойства и методы, которые реализует данная
библиотека.
-
InventoryItem. Простейший класс, реализующий четыре свойства,
описывающие товар:
-
Свойства:
- BarCode (тип String) – штрих-код в числовом, либо в
буквенно числовом виде
- Description (тип String) – наименование товара
- Quantity (тип Double) – количество товара в учетной системе
- Price (тип Double) – цена единицы товара
-
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 (из учебного приложения).
-
'Use BarCodeHosting.dll for write
data to InventoryListToTCD.xml file
-
Dim Writer As New
BarCodeHosting.Writer 'create New Writer
object
-
Writer.OpenWriter Me.txtExchangePath.Text 'standby for write data to file
-
Dim i As Long
-
For i = 1 To Me.lstDataToTerminal.ListItems.Count 'Read List Items from ListView control and add it to
the Writer object
-
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)
-
Next i
-
Writer.WriteData
-
Set Writer = Nothing
-
MsgBox
"Data was written to file " &
Me.txtExchangePath.Text &
"\InventoryListToTCD.xml"
-
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), чтобы просмотреть на форме.
-
'Use BarCodeHosting.dll for read
data from InventoryFromTCD.xml file
-
Dim Reader As New
BarCodeHosting.Reader 'create New Reader
object
-
Reader.OpenReader Me.txtExchangePath.Text 'read
data to Reader object from file InventoryFromTCD.xml by path
was sets in txtExchangePath field
-
Me.lstDataFromTerminal.ListItems.Clear
'clear ListView
-
While Not Reader.EOF 'from reader
fill the listview in cycle
-
Me.lstDataFromTerminal.ListItems.Add ,
"k" & Me.lstDataFromTerminal.ListItems.Count,
Reader.Item.BarCode
-
Me.lstDataFromTerminal.ListItems.Item(Me.lstDataFromTerminal.ListItems.Count).SubItems(1)
= Reader.Item.Description
-
Me.lstDataFromTerminal.ListItems.Item(Me.lstDataFromTerminal.ListItems.Count).SubItems(2)
= Reader.Item.Quantity
-
Me.lstDataFromTerminal.ListItems.Item(Me.lstDataFromTerminal.ListItems.Count).SubItems(3)
= Reader.Item.Price
-
Reader.MoveNext
-
Wend
Нужно заметить, что классы Reader и Writer являются обертками вокруг
класса ADODB.Recordset с целью упростить программирование, ввиду
специфичности и ограниченности задач.
Библиотека BarCodeHosting.dll может быть загружена в исходных текстах
вместе учебным
примером. Она является свободной для изучения и модификаций по
усмотрению разработчиков систем сопряжений.
Данная библиотека специально была реализована в среде Visual Basic 6,
так как эта среда разработки на данный момент обеспечивает самую
простую реализацию ActiveX DLL, что весьма способствует изучению и
пониманию.