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