Рекомендации по программированию POS-Client

POS Client

Программирование POSClient

POSClient - компонент, предназначенный для организации связи учетных программ (back-office) с сервером Point-of-sale-приложений (front-office).

Взаимодействие с унифицированным интерфейсом сервера POS-приложений избавляет разработчика учетной системы от необходимости разрабатывать множество программных механизмов для связи с разнотипным торговым программным обеспечением и оборудованием. В простейшем случае для подключения к учетной системе широкого класса ПО и устройств (POS-терминалов mPOS и SMarket 4 POS, работающих с большиством типов фискальных регистраторов на украинском рынке, кассовых серверов CashTAN P9/P9 Pro, автоматизирующих работу ЭККА, терминалов сбора данных XL100) необходимо организовать передачу списка товаров в сервер POS-приложений и обработку обобщенного списка проданного.

С помощью POSClient осуществляется загрузка через сервер на удаленные POS-приложения (рабочие места кассиров) справочников товаров, имеющихся остатков, дисконтных карт и прочих, в том числе произвольных файлов. В том случае, если эти файлы изменялись в POS-приложениях, они могут быть получены с сервера обратно для обработки в учетной системе back-office. С сервера могут быть считаны список POS-приложений и протоколы продаж, совершенных на этих рабочих местах.

Полученные файлы справочников товаров, дискотных карт и протоколов продаж могут быть представлены в удобном табличном виде с помощью объекта Recordset, входящего в состав компонента POSClient.


Основные понятия

POSClient - компонент, предназначенный для организации связи учетных программ (back-office) с сервером Point-of-sale-приложений (front-office).

POS-приложение - аппаратно-программный комплекс, реализующий функции рабочего места кассира по обслуживанию розничных клиентов.

Примерами POS-приложений могут служить:

  • аппаратно-программный POS-терминал mPOS;
  • программный POS-терминал SMarket 4 POS;
  • кассовый сервер CashTAN P9/P9 Pro;
  • терминал сбора данных XL100.

Сервер POS-приложений - серверное программное обеспечение, предназначенное для обмена, хранения и управления данными между back-office и front-office. Сервер POS-приложений обеспечивает унифицированный программный интерфейс для связи учетных систем back-office с разнотипным торговым программным обеспечением и оборудованием (POS-приложениями).

Front-office - в данном приложении, програмные и аппаратные ресурсы, предназначенные для обслуживания розничных покупателей.

Back-office - в данном приложении, програмные и аппаратные ресурсы, предназначенные для решения задач ведения внутреннего документооборота организации.

Учетная система - программная система, реализующая функции back-office.

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

Протокол - перечень операций с товарными позициями, произведенных на POS-приложении и приводящих к изменению остатков: продаж, возвратов, приходов и пр. Протокол может находиться в трех состояниях:

  • текущий (в этот протокол сохраняются операции в настоящий момент времени);
  • открытый (создан одним из POS-приложений и ожидает обработки в учетных системах back-office);
  • закрытый (обработан и учтен в учетных системах back-office).

Текущие остатки в секции автоматически рассчитываются сервером исходя из остатков, переданных из back-office, текущего и открытых протоколов. Продажи (а также другие виды расходов) в этих протоколах приводят к уменьшению остатков, возвраты (а также другие виды приходов) к увеличению. Закрытые протоколы не участвуют в расчете остатков, т.к. считается что они обработаны учетной системой back-office.

Текущие остатки, рассчитываемые сервером, используются в клиентах сервера (POS-приложениях). Учетная система back-office должна проводить собственный анализ протоколов и расчет остатков.


Объектная модель

Объектная модель представляет собой дерево, корень которого - объект Connection. Через методы и свойства этого объекта прикладная программа получает доступ ко всем программно изменяемым свойствам и данным приложения.

Приведённый ниже рисунок наглядно демонстрирует, каким образом можно получить ссылку на каждый из объектов приложения. Для получения информации об объекте, его свойствах и методах, достаточно выбрать его на рисунке.


Connection, объект

Объект Connection отвечает за соединение с сервером POS-приложений. Он позволяет получать файлы данных с сервера и загружать их на сервер.

Установка соединения с сервером выполняется с помощью методов Connect и ConnectNow. Cвойство IsConnected показывает текущее состояния соединения.

Получение файлов с сервера при установленном соединении выполняют асинхронные методы DownloadGoodsList, DownloadCounts, DownloadDiscountCards, DownloadProtocol, DownloadFile (загрузка справочника товаров, текущих остатков, дискотных карт, протоколов и произвольных файлов соответственно). Загрузка файлов на сервер выполняется асинхронными методами UploadGoodsList, UploadDiscountCards, UploadFile (загрузка справочника товаров, дискотных карт и произвольных файлов соответственно).

Для определения окончания процесса загрузки файла с сервера используется метод FinishTask или свойство IsTaskComplete. Полученные файлы могут быть преобразованы с помощью свойства TaskRecordset и методов LoadGoodsList, LoadCards, LoadProtocol, LoadRecordset к удобному для обработки набору записей в виде объекта Recordset.

Объект Connection предоставляет методы для получения списка POS-приложений GetClientsList, секций GetSectionsList и протоколов GetProtocolsList. Он также обеспечивает управление данными, расположенными на сервере, на файловом уровне с помощью методов CreateDirectory, RemoveDirectory, DeleteFile.

Разрыв соединения осуществляется методом Disconnect.


Field, объект

Field

Объект Field представляет поле для текущей записи родительского объекта типа "набор записей" семейства Fields, которому принадлежит поле. Изменение свойства Value поля возможна только после вызова метода Edit набора записей (при условии возможности записи в данное поле), для сохранения изменений необходимо вызывать метод Update этого же набора записей.

Замечание: если текущая запись отсутствует, при обращении к свойствам поля возникнет ошибка.


Fields, коллекция

Fields

Коллекция Fields используется для доступа к объектам Field и представляет текущую запись родительского объекта типа "набор записей". Получить ссылку на объект Field можно либо по порядковому номеру, либо по имени поля.

Набор полей коллекции Fields объекта RecordSet зависит от типа открытых в этом объекте данных. Для справочника товаров коллекция Fields включает следующие поля:
Имя поля | Заголовок поля | Тип данных
LocalCode | Локальный код | Long (длинное целое)
Name | Наименование | String (строка)
BarCode | Штрихкод | Currency (денежное)
Price | Цена | Currency (денежное)
Count | Количество | Double (вещественное двойной точности)
Dividable | Делимость (признак весового товара) | Boolean (логическое)
Department | Отдел | Integer (целое)
Tax | Налог | Integer (целое)

Для справочника дисконтных карт коллекция Fields включает следующие поля:
Имя поля | Заголовок поля | Тип данных
CardId | Индентификатор карты | Long (длинное целое)
CardGroup | Категория скидок | Byte (байт)
Номер записи AbsolutePosition справочника дисконтных карт соответствует полю CardId + 1.

Протокол POS-приложения включает следующие поля:
Имя поля | Заголовок поля | Тип данных
RecordType | Тип записи | Byte (байт)
LocalCode | Локальный код | Long (длинное целое)
Count | Количество | Double (вещественное двойной точности)
Price | Цена | Currency (денежное)
Sum | Сумма | Currency (денежное)
DiscountSum | Сумма скидки | Currency (денежное)
DateTime | ДатаВремя | Date (дата)
Percent | Процент | Double (вещественное двойной точности)
CheckNumber | Номер чека | Integer (целое)
PaymentData | Данные оплаты | Long (длинное целое)
CurrentCheck | Текущий чек | Byte (байт)
LoginId | № пользователя | Byte (байт)
PortType | Тип порта | Integer (целое)
Refund | Возвратный | Boolean (логическое)
CardGroup | Группа | Byte (байт)
CardId | Карта | Currency (денежное)
InfoType | Тип информации | Byte (байт)
DocType | Тип документа | Byte (байт)
OperatorId | Номер оператора | Byte (байт)
Text | Текстовая информация | String (строка)

Пример

Варианты написания выражения для чтения полей рекордсета (пример на Visual Basic):

' Объявление объекта Recordset и переменных
Dim rs as Recordset, v as Variant
...
' Чтение значения поля с именем Code
v = rs.Fields("Code").Value
v = rs.Fields("Code")
v = rs!Code
' Чтение значения поля с индексом 2
v = rs.Fields(2).Value
v = rs.Fields(2)
v = rs(2).Value
v = rs(2)

Перебор полей в записи рекордсета (пример на Visual Basic):

' Объявление объекта Recordset и переменных
Dim rs as Recordset, i as Long, s as Sting, v as Variant
...
' Цикл от 1 до количества полей в коллекции Fields
For i = 1 To rs.Fields.Count
' Чтение имени и значения поля с индексом i
s = rs.Fields(i).Name
v = rs.Fields(i).Value
Next i

Совет: Для перебора всех компонентов коллекции желательно использовать конструкцию For Each...Next

Перебор полей в записи рекордсета конструкцией For Each...Next (пример на Visual Basic):

' Объявление объектов Recordset, Field и переменных
Dim rs as Recordset, f as Field, s as Sting, v as Variant
...
' Цикл по коллекции Fields
For Each f In rs.Fields
' Чтение имени и значения поля f
s = f.Name
v = f.Value
Next


Recordset, объект

Recordset

Объект RecordSet - динамический объект доступа к данным, представляет собой набор записей. Он предназначен для просмотра и редактирования в удобном табличном виде данных, содержащихся в файлах справочника товаров, дисконтных карт и протоколов. Объект RecordSet также может представлять произвольный файл с периодической структурой данных. Тип открытых в рекордсете данных можно получить с помощью свойства ObjectType.

С точки зрения организации доступа к данным объект RecordSet можно представить себе как таблицу, строки которой - являются элементами (записями) объекта, а столбцы представлены полями (объектами Field), объединенными в коллекцию Fields.

Записи | Коллекция полей Fileds
№ | Поле Код товара | Поле Цена | Поле Кол-во
1 | 12708 | 1.35 | 2
2 | 345 | 10.80 | 1
3 | 1002 | 22.12 | 1.250
текущая запись | 1034 | 5.67 | 1
5 | 26089 | 41.92 | 0.350
6 | 1406 | 4.90 | 1

Порядковый номер текущей записи возвращает свойство AbsolutePosition.

Положение текущей записи в наборе записей можно изменить с помощью методов Move, MoveFirst, MoveLast, MoveNext, MovePrevious. Запись может быть найдена по определенному значению поля с помощью методов FindFirst, FindLast, FindNext, FindPrevious

Добавление новых записей в набор производится с помощью метода AddNew, а редактирование с помощью метода Edit. После добавления или изменения записи должен быть вызван метод Update, а для отмены произведенных изменений - метод CancelUpdate.


AbsolutePosition, свойство

Свойство AbsolutePosition

Задает или возвращает порядковый номер текущей записи объекта типа набор записей.

Синтаксис

Чтение: Результат = Объект.AbsolutePosition

Синтаксис свойства AbsolutePosition имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Long.
Объект
Переменная, содержащая ссылку на объект Recordset.

Устанавливаемые и возвращаемые значения

Устанавливаемое или возвращаемое значение должно иметь тип Long от 1 до числа записей объекта. Если у объекта нет текущей записи или записи отсутствуют, AbsolutePosition возвращает 0.

Не следует использовать значение этого свойства в качестве ссылки на запись. Для сохранения ссылки на запись следует воспользоваться свойством Bookmark, так как порядковый номер записи может измениться вследствие удаления предстоящей записи.


AdditionalFields, свойство

Свойство AdditionalFields

Свойство AdditionalFields возвращает коллекцию дополнительных полей родительского объекта доступа к данным.

Синтаксис

Чтение: Set Результат = Объект.AdditionalFields

Синтаксис свойства AdditionalFields имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Fields.
Объект
Переменная, содержащая ссылку на объект Recordset.

Получаемое значение имеет тип Fields.

Состав полей отличается для разных файлов данных. Для объекта Recordset, представляющего справочник товаров, в состав коллекции AdditionalFields входят следующие поля:
Имя поля | Заголовок поля | Тип данных
Price0 | Цена0 | Currency (денежное)
Count0 | Количество0 | Double (вещественное двойной точности)
Price1 | Цена1 | Currency (денежное)
Count1 | Количество1 | Double (вещественное двойной точности)
Price2 | Цена2 | Currency (денежное)
Count2 | Количество2 | Double (вещественное двойной точности)
Price3 | Цена3 | Currency (денежное)
Count3 | Количество3 | Double (вещественное двойной точности)
Price4 | Цена4 | Currency (денежное)
Count4 | Количество4 | Double (вещественное двойной точности)
Price5 | Цена5 | Currency (денежное)
Count5 | Количество5 | Double (вещественное двойной точности)
Price6 | Цена6 | Currency (денежное)
Count6 | Количество6 | Double (вещественное двойной точности)
Price7 | Цена7 | Currency (денежное)
Count7 | Количество7 | Double (вещественное двойной точности)
Price8 | Цена8 | Currency (денежное)
Count8 | Количество8 | Double (вещественное двойной точности)
Price9 | Цена9 | Currency (денежное)
Count9 | Количество9 | Double (вещественное двойной точности)
Price10 | Цена10 | Currency (денежное)
Count10 | Количество10 | Double (вещественное двойной точности)
Price11 | Цена11 | Currency (денежное)
Count11 | Количество11 | Double (вещественное двойной точности)
Price12 | Цена12 | Currency (денежное)
Count12 | Количество12 | Double (вещественное двойной точности)
Price13 | Цена13 | Currency (денежное)
Count13 | Количество13 | Double (вещественное двойной точности)
Price14 | Цена14 | Currency (денежное)
Count14 | Количество14 | Double (вещественное двойной точности)
Price15 | Цена15 | Currency (денежное)
Count15 | Количество15 | Double (вещественное двойной точности)
Discount0 | Скидка0 | Integer (целое), значение 1 соответствует 1%, 2 = 2%... 100 = 100%
Discount1 | Скидка1 | Integer (целое)
Discount2 | Скидка2 | Integer (целое)
Discount3 | Скидка3 | Integer (целое)
Discount4 | Скидка4 | Integer (целое)
Discount5 | Скидка5 | Integer (целое)
Discount6 | Скидка6 | Integer (целое)
Discount7 | Скидка7 | Integer (целое)
Discount8 | Скидка8 | Integer (целое)
Discount9 | Скидка9 | Integer (целое)
Discount10 | Скидка10 | Integer (целое)
Discount11 | Скидка11 | Integer (целое)
Discount12 | Скидка12 | Integer (целое)
Discount13 | Скидка13 | Integer (целое)
Discount14 | Скидка14 | Integer (целое)
AddFlags | ДопФлаги | Byte (байт)
BarCodeEx | РасшШтрихкод | String (строка)
SertCode | Сертификат | String (строка)
Date1 | Дата1 | Date (дата)
Date2 | Дата2 | Date (дата)
Param1 | Параметр1 | Long (длинное целое)
Param2 | Параметр2 | Long (длинное целое)
Param3 | Параметр3 | Long (длинное целое)
Param4 | Параметр4 | Long (длинное целое)

Для файлов дисконтных карт, протоколов и файлов произвольных типов данное свойство зарезервировано для возможного использования.


AsString, свойство

Свойство AsString

Свойство AsString позволяет получить значение поля, преобразованное в строку.

Синтаксис

Чтение: Результат = Объект.AsString

Синтаксис свойства AsString имеет следующие составляющие:

Результат
Переменная, поддерживающая тип String.
Объект
Переменная, содержащая ссылку на объект Field.


BOF, свойство

Свойство BOF

Свойство BOF возвращает признак того, что указатель текущей записи находится перед первой записью объекта.

Синтаксис

Чтение: Результат = Объект.BOF

Синтаксис свойства BOF имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Boolean.
Объект
Переменная, содержащая ссылку на объект Recordset.

Возвращаемое значение имеет тип Boolean.

BOF возвращает True, если указатель текущей записи находится перед первой записью объекта и False в противном случае.

Пример

Свойство BOF совместно со свойством EOF применяется для проверки на наличие в рекордсете записей (пример на Visual Basic):

' Объявление объекта типа Recordset
Dim rs as Recordset
...
' Если не установлены флаги выхода за конец и начало таблицы одновременно...
if not (rs.EOF AND rs.BOF) Then
...
end if

Свойство также может применяться для организации циклов перебора записей рекордсета в обратном порядке начиная с последней записи (пример на Visual Basic):

' Объявление объекта типа Recordset
Dim rs as Recordset
...
' Переход к последней записи
rs.MoveLast
' Цикл до достижения начала набора записей
Do Until rs.BOF
...
' Переход к предыдущей записи
rs.MovePrevious
Loop


BookMark, свойство

Свойство BookMark

Устанавливает или возвращает закладку, уникально определяющую запись в объекте.

Синтаксис

Чтение: Результат = Объект.BookMark
Запись: Объект.BookMark = Значение

Синтаксис свойства BookMark имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Variant.
Объект
Переменная, содержащая ссылку на объект Recordset.
Значение
Переменная, поддерживающая тип Variant.

После открытия объекта все записи объекта имеют уникальную закладку. Для сохранения закладки следует сохранить значение свойства Bookmark в переменной. Для быстрого возврата к записи следует задать свойству Bookmark сохраненное значение. Ограничения на количество создаваемых закладок нет.

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

Значение свойства Bookmark отличается от номера записи.


Caption, свойство

Свойство Caption

Свойство Caption возвращает текстовое описание (заголовок) экземпляра объекта.

Синтаксис

Чтение: Результат = Объект.Caption

Синтаксис свойства Caption имеет следующие составляющие:

Результат
Переменная, поддерживающая тип String.
Объект
Переменная, содержащая ссылку на объект Field.


Collection, свойство

Свойство Collection

Свойство Collection возвращает коллекцию для данного элемента.

Синтаксис

Чтение: Set Результат = Объект.Collection

Синтаксис свойства Collection имеет следующие составляющие:

Результат
Переменная, поддерживающая тип коллекции данного элемента.
Объект
Переменная, содержащая ссылку на элемент коллекции.

Для поля Field свойство Collection возвращает коллекцию полей типа Fields.


Count, свойство

Свойство Count

Свойство Count возвращает количество элементов данной коллекции.

Синтаксис

Чтение: Результат = Объект.Count

Синтаксис свойства Count имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Long.
Объект
Переменная, содержащая ссылку на коллекцию.

Пример

Свойство применяется для организации циклов перебора, например, полей в записи рекордсета (пример на Visual Basic):

Dim rs as Recordset, i as Long, s as Sting, v as Variant
...
' Цикл от 1 до количества полей в коллекции Fields
For i = 1 To rs.Fields.Count
' Чтение свойств поля с индексом i
s = rs.Fields(i).Name
v = rs.Fields(i).Value
Next i


EOF, свойство

Свойство EOF

Свойство EOF возвращает признак того, что указатель текущей записи находится после последней записи объекта

Синтаксис

Чтение: Результат = Объект.EOF

Синтаксис свойства EOF имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Boolean.
Объект
Переменная, содержащая ссылку на объект Recordset.

EOF возвращает True, если указатель текущей записи находится после последней записи объекта и False в противном случае.

Пример

Свойство применяется для организации циклов перебора записей рекордсета (пример на Visual Basic):

' Объявление объекта типа Recordset
Dim rs as Recordset
...
' Переход к первой записи
rs.MoveFirst
' Цикл до достижения конца набора записей
Do Until rs.EOF
...
' Переход к следующей записи
rs.MoveNext
Loop

Совместно со свойством BOF применяется для проверки на наличие в рекордсете записей (пример на Visual Basic):

' Объявление объекта типа Recordset
Dim rs as Recordset
...
' Если не установлены флаги выхода за конец и начало таблицы одновременно...
if not (rs.EOF AND rs.BOF) Then
...
end if


Field, свойство

Свойство Field

Свойство Field возвращает объект Field, представляющий поле текущей записи родительского объекта рекордсет (набор записей). Объект Field входит в семейство полей Fields. Свойство по умолчанию.

Синтаксис

Чтение: Set Результат = Объект.Field(Индекс)

Синтаксис свойства Field имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Field.
Объект
Переменная, содержащая ссылку на объект Fields.
Индекс
Переменная типа Variant, содержащая числовой индекс (нумерация с 1) или имя поля.

Пример

Свойство применяется для доступа по индексу или имени к полю рекордсета и его свойствам (пример на Visual Basic):

' Объявление объекта типа Recordset, коллекции полей типа Fields и переменных
Dim rs as Recordset, fs as Fields, s as Sting, v as Variant
...
' Получение коллекции Fields у объекта типа Recordset
Set fs = rs.Fields
' Считывание имени первого поля из коллекции в переменную
s = fs.Field(1).Name
' Считывание значения поля LocalCode в переменную
v = fs.Field("LocalCode").Value


Fields, свойство

Свойство Fields

Свойство Fields возвращает коллекцию полей родительского объекта доступа к данным. Свойство по умолчанию.

Синтаксис

Чтение: Set Результат = Объект.Fields

Синтаксис свойства Fields имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Fields.
Объект
Переменная, содержащая ссылку на объект Recordset.

Получаемое значение имеет тип Fields.

Пример

Свойство применяется, например, для организации циклов перебора полей в записи рекордсета (пример на Visual Basic):

Dim rs as Recordset, i as Long, s as Sting, v as Variant
...
' Цикл от 1 до количества полей в коллекции Fields
For i = 1 To rs.Fields.Count
' Чтение свойств поля с индексом i
s = rs.Fields(i).Name
v = rs.Fields(i).Value
Next i


FileDosDateTime, свойство

Свойство FileDosDateTime

Свойство FileDosDateTime возвращает дату и время файла рекордсета в формате MS DOS.

Синтаксис

Чтение: Результат = Объект.FileDosDateTime

Синтаксис свойства FileDosDateTime имеет следующие составляющие:

Результат
Переменная типа Long.
Объект
Переменная, содержащая ссылку на объект Recordset.

Значение, полученное FileDosDateTime, используется в качестве одного из параметров метода InstallHook для установки триггера события обновления файла.


FileName, свойство

Свойство FileName

Свойство FileName возвращает имя файла из которого развернут объект Recordset.

Синтаксис

Чтение: Результат = Объект.FileName

Синтаксис свойства FileName имеет следующие составляющие:

Результат
Переменная, поддерживающая тип String.
Объект
Переменная, содержащая ссылку на объект Recordset.


InstalledHooks, свойство

Свойство InstalledHooks

Свойство InstalledHooks возвращает битовую маску с признаками установленных триггеров.

Синтаксис

Чтение: Результат = Объект.InstalledHooks

Синтаксис свойства InstalledHooks имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Long.
Объект
Переменная, содержащая ссылку на объект Connection.

Свойство InstalledHooks возвращает битовую маску с признаками установленных методом InstallHook триггеров. Метод InstallHook назначает триггеру индентификатор в виде установленного бита. Для проверки, установлен ли триггер с известным индентификатором, необходимо проверить состояние этого бита в возвращаемом свойством InstalledHooks значении.

Пример

Проверка триггера (пример на Visual Basic):

' Проверка установленных триггеров на триггер с индентификатором 16 (0x10)
if (Connection.InstalledHooks AND &H10) then
' Произвольная обработка
...
end if


IsConnected, свойство

Свойство IsConnected

Свойство IsConnected возвращает признак, установлено ли в настоящий момент соединение.

Синтаксис

Чтение: Результат = Объект.IsConnected

Синтаксис свойства IsConnected имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Boolean.
Объект
Переменная, содержащая ссылку на объект Connection.

Свойство IsConnected возвращает булевое значение True в том случае, если для объекта Connection установлено соединение с сервером POS-приложений. В противном случае возвращается False.

Установка соединения с сервером выполняется с помощью методов Connect и ConnectNow объекта Connection. Для разрыва соединения используется метод Disconnect.


IsFiltered, свойство

Свойство IsFiltered

Свойство IsFiltered cообщает применялся ли фильтр к текущему объекту.

Синтаксис

Чтение: Результат = Объект.IsFiltered

Синтаксис свойства IsFiltered имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Boolean, True - если к объекту применили метод ApplyFilter с аргументами, для фильтрации и сортировки записей, False - если метод не применялся или фильтр был отменен методом ApplyFilter без аргументов
Объект
Переменная, содержащая ссылку на объект Recordset.


IsTable, свойство

Свойство IsTable

Свойство IsTable указывает в каком режиме находится открытый объект Recordset доступа к данным.

Синтаксис

Чтение: Результат = Объект.IsTable

Синтаксис свойства IsTable имеет следующие составляющие:

Результат
Переменная типа Boolean
Объект
Переменная, содержащая ссылку на объект Recordset.
Возвращаемое значение свойства типа Boolean доступно только для чтения. Значение свойства соответствует следующим состояниям:
Значение | Описание
True | Рекордсет открыт в виде таблицы
False | Рекордсет открыт в виде динамического набора записей


IsTaskComplete, свойство

Свойство IsTaskComplete

Свойство IsTaskComplete возвращает признак, завершено ли выполнение задачи по истечении указанного времени.

Синтаксис

Чтение: Результат = Объект.IsTaskComplete(ВремяОжидания)

Синтаксис свойства IsTaskComplete имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Boolean.
Объект
Переменная, содержащая ссылку на объект Connection.
ВремяОжидания
Время ожидания в миллисекундах перед проверкой состояния задачи. Тип Long.

Если текущая задача выполняется, свойство IsTaskComplete возвращает False. Если задача выполнена или задач нет, свойство возвращает значение True.

Свойство IsTaskComplete не гарантирует корректного выполнения задачи. Оно возвращает True не только в случае успешного завершения задачи, но и также в случае завершения задачи по причине возникновения ошибки. Для определения некорректного завершения задачи можно воспользоваться свойствами TaskErrorCode и TaskErrorMessage, которые возвращают код завершения задачи и текст ошибки.

Эффективная проверка на корректность завершения задачи реализуется методом FinishTask.

Дополнительные сведения

Параметр ВремяОжидания может принимать значение -1. В этом случае операция IsTaskComplete завершится (будет передано управление последующим участкам программы) только после завершения выполнения текущей задачи.


LastModified, свойство

Свойство LastModified

Возвращает закладку, уникально определяющую последнюю запись в объекте, к которой был применён метод Update. Если такой записи не существует, свойство возвращает значение Null.

Синтаксис

Чтение: Результат = Объект.LastModified

Синтаксис свойства LastModified имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Variant.
Объект
Переменная, содержащая ссылку на объект Recordset.

Замечание: После добавления новой записи текущая запись остаётся той же, что и до вызова метода AddNew. Для перемещения к новой записи следует воспользоваться свойством BookMark:

Значение свойства LastModified отличается от номера записи.


Name, свойство

Свойство Name

Свойство Name возвращает имя объекта. Если объект входит в коллекцию, то это имя может быть использовано как индекс для получения элемента.

Синтаксис

Чтение: Результат = Объект.Name

Синтаксис свойства Name имеет следующие составляющие:

Результат
Переменная, поддерживающая тип String.
Объект
Переменная, содержащая ссылку на объект Connection, Recordset, Field.


NoMatch, свойство

Свойство NoMatch

Признак того, что запись не была найдена одним из методов Find.

Синтаксис

Чтение: Результат = Объект.NoMatch

Синтаксис свойства NoMatch имеет следующие составляющие:

Результат
Переменная типа Boolean.
Объект
Переменная, содержащая ссылку на объект Recordset.

Возвращаемое значение

Свойство доступно только для чтения. Возвращает значение типа Boolean, как описано в нижеследующей таблице.

Значение | Описание
True | Если требуемая запись не найдена.
False | Если требуемая запись найдена.

При открытии или создании набора свойство NoMatch имеет значение False.

Дополнительные сведения

Для поиска записи используйте методы FindFirst, FindLast, FindNext, FindPrevious. Для получения результата поиска можно использовать значения возвращаемые методами поиска или значение свойства NoMatch. Причем, следует учесть что NoMatch возвращает значение противоположное тому, которое возвращает метод поиска.

Если результат поиска при помощи методов Find отрицателен, текущая запись отсутствует. Перед осуществлением поиска указанными методами рекомендуется сохранить закладку текущей записи (свойство BookMark) для быстрого возврата.

Замечание

Использование любого из методов Move не влияет на свойство NoMatch

Пример

Поиск записи (пример на Visual Basic):

Dim rs as Recordset
...
' Поиск по значению поля Code, равному 123
rs.FindFirst "Code=123"
' Если запись найдена (не ненайдена), то выполняем какие-либо действия
if not rs.NoMatch then
...
end if


ObjectType, свойство

Свойство ObjectType

Свойство ObjectType возвращает тип открытых данных в рекордсете (наборе записей). Типы данных: справочник товаров, справочник дисконтных карт, протокол и произвольный набор записей описаны в перечислении PosDataObjectType.

Синтаксис

Чтение: Результат = Объект.ObjectType

Синтаксис свойства ObjectType имеет следующие составляющие:

Результат
Переменная, поддерживающая тип перечисления PosDataObjectType.
Объект
Переменная, содержащая ссылку на объект Recordset.


Parent, свойство

Свойство Parent

Свойство Parent возвращает родительский объект.

Синтаксис

Чтение: Set Результат = Объект.Parent

Синтаксис свойства Parent имеет следующие составляющие:

Результат
Переменная, поддерживающая тип родительского объекта.
Объект
Переменная, содержащая ссылку на объект Fields, Recordset.

Возвращаемые значения

Объект Родитель


RecordCount, свойство

Свойство RecordCount

Свойство RecordCount возвращает общее количество записей объекта Recordset.

Синтаксис

Чтение: Результат = Объект.RecordCount

Синтаксис свойства RecordCount имеет следующие составляющие:

Результат
Переменная типа Long.
Объект
Переменная, содержащая ссылку на объект Recordset.


RootDataDirectory, свойство

Свойство RootDataDirectory

Свойство RootDataDirectory позволяет получать и устанавливать корневой каталог данных для файлов на локальном компьютере, участвующих в процессах передачи данных.

Синтаксис

Чтение: Результат = Объект.RootDataDirectory
Запись: Объект.RootDataDirectory = Значение

Синтаксис свойства RootDataDirectory имеет следующие составляющие:

Результат
Переменная, поддерживающая тип String.
Объект
Переменная, содержащая ссылку на объект Connection.
Значение
Переменная, поддерживающая тип String.

Дополнительные сведения

Корневой каталог данных для файлов на локальном компьютере может использоваться для задания путей к локальным файлам в методах передачи данных DownloadFile, UploadFile, GetFileDosDateTime.

По умолчанию значение свойства RootDataDirectory указывает на папку "POSDATAC", расположенную в одном каталоге с компонентом POSClien.dll.


SectionName, свойство

Кассовый сервер CashTAN: OLE сервер

Свойство SectionName

Свойство SectionName возвращает имя секции для текущего установленного соединения с сервером POS-приложений.

Синтаксис

Чтение: Результат = Объект.SectionName

Синтаксис свойства SectionName имеет следующие составляющие:

Результат
Переменная, поддерживающая тип String.
Объект
Переменная, содержащая ссылку на объект Connection.

Возвращаемое значение

Возвращаемое свойством SectionName значение соответствует параметру ИмяСекции, передаваемому в вызов метода Connect.


ServerDateTime, свойство

Свойство ServerDateTime

Свойство ServerDateTime возвращает текущие дату и время сервера POS-приложений.

Синтаксис

Чтение: Результат = Объект.ServerDateTime

Синтаксис свойства ServerDateTime имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Date.
Объект
Переменная, содержащая ссылку на объект Connection.


ServerIp, свойство

Свойство ServerIp

Свойство ServerIp возвращает IP-адрес сервера POS-приложений с которым установлено соединение.

Синтаксис

Чтение: Результат = Объект.ServerIp

Синтаксис свойства ServerIp имеет следующие составляющие:

Результат
Переменная, поддерживающая тип String.
Объект
Переменная, содержащая ссылку на объект Connection.

Возвращаемое значение

Возвращаемое свойством ServerIp значение соответствует параметру IP-адрес, передаваемому в вызов метода Connect.


ServerPort, свойство

Свойство ServerPort

Свойство ServerPort возвращает номер порта сервера POS-приложений с которым установлено соединение.

Синтаксис

Чтение: Результат = Объект.ServerPort

Синтаксис свойства ServerPort имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Integer.
Объект
Переменная, содержащая ссылку на объект Connection.

Возвращаемое значение

Возвращаемое свойством ServerPort значение соответствует параметру Порт, передаваемому в вызов метода Connect.


TaskErrorCode, свойство

Свойство TaskErrorCode

Свойство TaskErrorCode возвращает код ошибки в случае ее возникновения при выполнении задачи.

Синтаксис

Чтение: Результат = Объект.TaskErrorCode

Синтаксис свойства TaskErrorCode имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Long
Объект
Переменная, содержащая ссылку на объект Connection.


TaskErrorMessage, свойство

Свойство TaskErrorMessage

Свойство TaskErrorMessage возвращает текст ошибки в случае ее возникновения при выполнении задачи.

Синтаксис

Чтение: Результат = Объект.TaskErrorMessage

Синтаксис свойства TaskErrorMessage имеет следующие составляющие:

Результат
Переменная, поддерживающая тип String.
Объект
Переменная, содержащая ссылку на объект Connection.


TaskFolder, свойство

Свойство TaskFolder

Свойство TaskFolder возвращает тип каталога задачи на сервере POS-приложений.

Синтаксис

Чтение: Результат = Объект.TaskFolder

Синтаксис свойства TaskFolder имеет следующие составляющие:

Результат
Переменная, поддерживающая тип PosFolder.
Объект
Переменная, содержащая ссылку на объект Connection.


TaskLocalPath, свойство

Свойство TaskLocalPath

Свойство TaskLocalPath возвращает полный путь и имя файла на локальном компьютере, с которым оперирует текущая или оперировала последняя задача.

Синтаксис

Чтение: Результат = Объект.TaskLocalPath

Синтаксис свойства TaskLocalPath имеет следующие составляющие:

Результат
Переменная, поддерживающая тип String.
Объект
Переменная, содержащая ссылку на объект Connection.


TaskProgress, свойство

Свойство TaskProgress

Свойство TaskProgress возвращает процент выполнения текущей задачи.

Синтаксис

Чтение: Результат = Объект.TaskProgress

Синтаксис свойства TaskProgress имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Long.
Объект
Переменная, содержащая ссылку на объект Connection.

Возвращаемое значение

Свойство TaskProgress возвращает значения в диапазоне от 0 до 100, что соответствует проценту выполнения текущей задачи. Свойство используется для организации индикаторов выполнения процессов в пользовательском интерфейсе.

Наявность задачи на стадии выполнения можно проверить с помощью свойства IsTaskComplete.


TaskRecordset, свойство

Свойство TaskRecordset

Свойство TaskRecordset возвращает объект типа Recordset, в котором данные последней выполненной задачи развернуты в виде набора записей.

Синтаксис

Чтение: Результат = Объект.TaskRecordset

Синтаксис свойства TaskRecordset имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Recordset.
Объект
Переменная, содержащая ссылку на объект Connection.

Свойство TaskRecordset применяется для преобразования данных из файлов последней выполненной задачи (справочников товаров, дисконтных карт, протоколов) в удобный для обработки табличный вид объекта Recordset.

Пример

Пример загрузки и обработки справочника товаров (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection As PosClient.Connection
Dim rs As PosClient.Recordset
Dim s As Sting, i as Long
...
' Асинхронная загрузка справочника товаров
Connection.DownloadGoodsList
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - набора записей со списком товаров
Set rs = Connection.TaskRecordset
' Обработка списка товаров если список не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменные кода и названия товара
i = rs.Fileds("LocalCode")
s = rs.Fileds("Name")
' Произвольная обработка товаров
...
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
end if


TaskRemotePath, свойство

Свойство TaskRemotePath

Свойство TaskRemotePath возвращает путь и имя файла на сервере POS-приложений, с которым оперирует текущая или оперировала последняя задача.

Синтаксис

Чтение: Результат = Объект.TaskRemotePath

Синтаксис свойства TaskRemotePath имеет следующие составляющие:

Результат
Переменная, поддерживающая тип String.
Объект
Переменная, содержащая ссылку на объект Connection.

Возвращаемое значение

Свойство TaskRemotePath возвращает путь и имя файла относительно папки задачи на сервере POS-приложений. Папку задачи можно определить с помощью свойства TaskFolder.


TaskType, свойство

Свойство TaskType

Свойство TaskType возвращает тип текущей или последней выполненной задачи.

Синтаксис

Чтение: Результат = Объект.TaskType

Синтаксис свойства TaskType имеет следующие составляющие:

Результат
Переменная, поддерживающая тип PosTaskType.
Объект
Переменная, содержащая ссылку на объект Connection.

Возвращаемое значение

Возможные типы возвращаемых значений TaskType включают прием и передачу файлов справочников товаров, дисконтных карт, протоколов, управление файлами и каталогами и пр. Полный перечень типов задач описан в перечислении PosTaskType.


TriggeredHooks, свойство

Свойство TriggeredHooks

Свойство TriggeredHooks возвращает битовую маску с признаками сработавших триггеров.

Синтаксис

Чтение: Результат = Объект.TriggeredHooks

Синтаксис свойства TriggeredHooks имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Long
Объект
Переменная, содержащая ссылку на объект Connection.

Свойство TriggeredHooks применяется для проверки на обновление файлов на сервере POS-приложений. В теле события HookTriggered с помощью свойства TriggeredHooks определяются сработавшие триггера и выполняется загрузка обновленных файлов.

Свойство TriggeredHooks возвращает битовую маску с признаками сработавших триггеров. Триггер на определенный файл на сервере POS-приложений устанавливается методом InstallHook. Этот метод назначает триггеру индентификатор в виде установленного бита. Для проверки, сработал ли триггер с известным индентификатором, необходимо проверить состояние этого бита в возвращаемом свойством TriggeredHooks значении. Сработавший триггер соответствует установленному биту (1). Несработавший или неустановленный триггер соответствует неустановленному биту (0).

Битовые флаги сработавших триггеров считываются из свойства только 1 раз. При повторном вызове свойства TriggeredHooks биты будут обнулены.

Пример

Проверка, сработал ли триггер (пример на Visual Basic):

' Объявление переменной
Dim lHook as Long
' Считывание битовой маски
lHook = Connection.TriggeredHooks
' Проверка, сработал ли триггер с индентификатором 16 (0x10)
if (lHook AND &H10) then
' Произвольная обработка
...
end if


Value, свойство

Свойство Value

Свойство Value возвращает значение поля текущей записи рекордсета (набора записей). Свойство по умолчанию.

Синтаксис

Чтение: Результат = Объект.Value
Запись: Объект.Value = Значение

Синтаксис свойства Value имеет следующие составляющие:

Результат
Переменная, поддерживающая тип данных выбранного поля.
Объект
Переменная, содержащая ссылку на объект Field.
Значение
Данные, которые поддерживаются выбранным полем.


ValueType, свойство

Свойство ValueType

Свойство ValueType возвращает тип поля рекордсета.

Синтаксис

Чтение: Результат = Объект.ValueType

Синтаксис свойства ValueType имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Long.
Объект
Переменная, содержащая ссылку на объект Field.
Возвращаемые значения
Значение | Тип данных
2 | Integer (целое)
3 | Long (длинное целое)
4 | Single (вещественное одинарной точности)
5 | Double (вещественное двойной точности)
6 | Currency (денежное)
7 | Date (дата)
8 | String (строка)
11 | Boolean (логическое)
17 | Byte (байт)


Version, свойство

Свойство Version

Свойство Version возвращает версию dll в формате "<vHigh>.<vLow>.<vLib>.<Build>"("2.2.2997.2997"), где:

  • vHigh: старший номер версии
  • vLow: младший номер версии
  • vLib: номер версии библиотеки tlb
  • Build: номер сборки приложения

Синтаксис

Чтение: Результат = Объект.Version

Синтаксис свойства Version имеет следующие составляющие:

Результат
Переменная, поддерживающая тип String.
Объект
Переменная, содержащая ссылку на объект Connection.


AddNew, метод

Метод AddNew

Метод AddNew предназначен для начала добавления новой записи в набор записей Recordset при помощи коллекции полей Fields. Для завершения добавления записи следует вызвать метод Update, а для отмены - метод CancelUpdate.

Между вызовами методов AddNew и Update не следует использовать другие методы или свойства объекта (кроме Fields, разумеется), так как это может привести к внутреннему вызову метода CancelUpdate.

Предупреждение: после вызова метода Update только что добавленная запись не становится текущей. Для перемещения к ней необходимо воспользоваться свойствами BookMark и LastModified.

Синтаксис

Объект.AddNew

Синтаксис метода AddNew имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Recordset.

Пример

Добавление новой записи (пример на Visual Basic):

' Объявление объекта Recordset
Dim rs as Recordset
...
' Начало добавления новой записи
rs.AddNew
' Инициализация полей записи
rs.Fields("Code") = 1028
rs.Fields("BarCode")="4808900098344"
rs.Fields("Name") = "Кефир 3.2%"
' Завершение добавления новой записи
rs.Update


ApplyFilter, метод

Метод ApplyFilter

Метод ApplyFilter для объекта Recordset отфильтровывает и сортирует записи согласно заданным условиям.

Синтаксис

Объект.ApplyFilter ([Условия, Параметр1, Параметр2, ..., ПараметрN])

Синтаксис метода ApplyFilter имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект RecordSet.
Условия
Необязательный параметр. Переменная типа String содержащая условия для отбора записей
Параметр1, Параметр2, ..., ПараметрN
Необязательный набор параметров, для подстановки в условия.

Пример

Фильтрация записей в рекордсете (пример на Visual Basic):

' Объявление объекта Recordset
Dim rs as Recordset
...
' Фильтр по значению поля Code, равному 123
rs.ApplyFilter "Code=123"
' Фильтр по значению полей Code и Name
rs.ApplyFilter "Code=123 AND Name='Кефир 3.2%'"
' Фильтр по полю Name, с критерием включающим все названия товаров, которые начинаются с "Кефир..."
rs.ApplyFilter "Name LIKE 'Кефир*'"
' Фильтр по значению параметров-переменных, типы которых соответствуют типам полей
Dim k as Long, s as String
k = 123
s = "Кефир 3.2%"
rs.ApplyFilter "Code={1} AND Name={2}", k, s
' Снятие фильтра
rs.ApplyFilter ""


CancelTask, метод

Метод CancelTask

Метод CancelTask отменяет выполнение текущей задачи. Синхронный метод.

Синтаксис

Объект.CancelTask

Синтаксис метода CancelTask имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.


CancelUpdate, метод

Метод CancelUpdate

Метод CancelUpdate предназначен отмены изменения или добавления записи в объекте Recordset после вызова методов Edit или AddNew.

Cинтаксис

Объект.CancelUpdate

Cинтаксис метода CancelUpdate имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Recordset.


ChangeProtocolState, метод

Метод ChangeProtocolState

Метод ChangeProtocolState позволяет изменять состояние протокола.

Синтаксис

Объект.ChangeProtocolState (НовоеСостояние, ИмяФайла, ИмяКлиента, [ИзменитьОстатки])

Синтаксис метода ChangeProtocolState имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
НовоеСостояние
Значение состояния протокола, соответствующее перечислению PosProtocolState.
ИмяФайла
Имя файла протокола. Тип String.
ИмяКлиента
Имя POS-приложения, создавшего протокол. Тип String.
ИзменитьОстатки
Необязательный параметр. Тип Boolean. Значение по умолчанию True.

Дополнительные сведения

Протокол POS-приложения может находиться в одном из трех возможных состояний: текущий, открытый, закрытый. Эти состояния описываются перечислением PosProtocolState.

Установка флага ИзменитьОстатки в True приводит к автоматическому обновлению локальных остатков в секции сервера POS-приложения. Локальные остатки в секции рассчитываются сервером исходя из остатков, переданных из back-office, текущего и открытых протоколов. Закрытые протоколы не участвуют в расчете остатков, т.к. считается что они обработаны учетной системой back-office.

Автоматическое обновление локальных остатков в секции сервера POS-приложения приведет к появлению событий обновления остатков для тех клиентов сервера, у которых установлены соответствующие триггера методом InstallHook.


Connect, метод

Метод Connect

Метод Connect устанавливает параметры соединения и выполняет подключение к серверу POS-приложений в асинхронном режиме.

Синтаксис

Объект.Connect (ИмяСекции, Пароль, IP-адрес, Порт, [ВремяОжидания])

Синтаксис метода Connect имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
ИмяСекции
Имя секции - группы POS-приложений с общими справочниками. Тип String.
Пароль
Пароль пользователя для подключения к серверу POS-приложений. Тип String.
IP-адрес
IP-адрес сервера POS-приложений. Тип String.
Порт
Порт сервера POS-приложений. Тип Integer.
ВремяОжидания
Необязательный параметр. Время ожидания ответа от сервера об успешной установке соединения. Тип Long.

Передаваемые значения

Для подключения к серверу в сети Интернет обязательно необходимо указывать IP-адрес. Значение строкового параметра IP-адрес записывается в формате IP-адресов "aaa.bbb.ccc.ddd". Вместо IP-адреса можно указать имя сервера, например "tfpk.com.ua".

Значение параметра IP-адрес равное "255.255.255.255" означает подключение к первому попавшемуся серверу и подходит для работы без сети или в локальной сети с одним сервером POS-приложений. Для подключения к серверу, установленному на локальном компьютере, при наличии локальной сети следует использовать значение IP-адрес равное "127.0.0.1".

Параметр Порт индентифицирует несколько серверов POS-приложений на одном IP. Значение по умолчанию 11111.

Параметр ВремяОжидания задается в миллисекундах в пределах от 100 мсек до 60 сек. Типичное значение для локальной сети составляет 200 мсек, для сети Интернет - 5000 мсек (5 сек).

При вызове метода Connect с параметром ИмяСекции равным пустой строке будут недоступны операции загрузки/выгрузки справочника товаров, остатков и протоколов. Однако будет доступна функция GetSectionsList, с помощью которой можно получить перечень имеющихся секций. После выбора имени секции следует повторить вызов метода Connect с указанием параметра ИмяСекции.

Дополнительные сведения

После вызова метода Connect компонент POSClient проверяет и, в случае необходимости, восстанавливает соединение каждые 30 сек до вызова метода Disconnect.

Для проверки подключения к серверу на наличие ошибок соединения следует использовать синхронный метод ConnectNow. В случае невозможности установки соединения с сервером возникнет обрабатываемая ошибка времени выполнения.

Пример

Пример установки соединения (пример на Visual Basic):

' Объявление объекта типа Connection
Dim Connection As PosClient.Connection
' Создание объекта типа Connection
Set Connection = New PosClient.Connection
' Асинхронная установка соединения к секции SectionA произвольного сервера локальной сети по порту 11111 с паролем 12345
Connection.Connect "SectionA", "12345", "255.255.255.255", 11111
...
' Завершение соединения
Connection.Disconnect

Пример поиска имени секции (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection As PosClient.Connection
Dim rs As PosClient.Recordset
Dim s As String
' Создание объекта типа Connection
Set Connection = New PosClient.Connection
' Асинхронная установка соединения к произвольному серверу локальной сети по порту 11111 с паролем 12345
Connection.Connect "", "12345", "255.255.255.255", 11111
' Асинхронная загрузка списка секций
Connection.GetSectionsList
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - набора записей со списком секций
Set rs = Connection.TaskRecordset
' Если рекордсет не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Запоминание имени секции
s = rs.Fields("Name")
end if
' Асинхронная установка соединения к определенной секции
Connection.Connect s, "12345", "255.255.255.255", 11111
...
' Завершение соединения
Connection.Disconnect


ConnectNow, метод

Метод ConnectNow

Метод ConnectNow выполняет синхронное подключение к серверу POS-приложений. Параметры соединения должны быть определены в ранее вызванном методе Connect.

Синтаксис

Объект.ConnectNow

Синтаксис метода ConnectNow имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

Метод используется для проверки подключения к серверу POS-приложений на наличие ошибок соединения.

Метод ConnectNow является синхронным методом, поэтому выполнение программы продолжается только после успешного выполнения операции соединения с сервером. В случае невозможности установки соединения с сервером возникнет обрабатываемая ошибка времени выполнения.


CreateDirectory, метод

Метод CreateDirectory

Метод CreateDirectory позволяет создать каталог на сервере POS-приложений.

Синтаксис

Объект.CreateDirectory (ТипПапки, Путь)

Синтаксис метода CreateDirectory имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
ТипПапки
Значение, поддерживающие тип PosFolder. Указывает один из возможных корневых каталогов сервера POS-приложений для создания нового каталога.
Путь
Путь и имя нового каталога относительно корневого каталога, определенного параметром ТипПапки. Тип String.

Метод CreateDirectory применяется для создания дополнительных папок на сервере POS-приложений. Эти папки могут использоваться для обмена произвольными файлами и данными между учетной системой back-office и POS-приложениями.


CreateRecordset, метод

Метод CreateRecordset

Метод CreateRecordset предназначен для создания набора записей, представляющего новый справочник товаров или протокол. Метод возвращает объект типа Recordset.

Синтаксис

Результат = Объект.CreateRecordset (ТипНабораЗаписей, [ОпределениеПолей])

Синтаксис метода CreateRecordset имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Recordset.
Объект
Переменная, содержащая ссылку на объект Connection.
ТипНабораЗаписей
Значение перечисления POSDataObjectType, соответствующее типу представляемых данных.
ОпределениеПолей
Зарезервировано для дальнейшего использования. Текстовое описание перечня полей в создаваемом наборе записей. Тип String.

Дополнительные сведения

Метод CreateRecordset применяется для создания нового набора записей для представления справочника товаров или протокола POS-приложения.

Схема передачи справочника товаров из back-office приложения в POS-приложение включает:

  • Создание с помошью метода CreateRecordset(poGoodsList) нового набора записей типа Recordset.
  • Заполнение полей набора записей (ячеек таблицы) в соответствии со справочником back-office приложения.
  • Сохранение набора записей методом SaveAs и передача его на сервер POS-приложений методом UploadGoodsList.

Объект Recordset можно представить себе как набор записей или таблицу, строки которой являются элементами (записями) объекта, а столбцы представлены полями (объектами Field), объединенными в коллекцию Fields.

Коллекция Fields объекта Recordset, представляющего справочник товаров, включает следующие поля:
Имя поля | Заголовок поля | Тип данных
LocalCode | Локальный код | Long (длинное целое)
Name | Наименование | String (строка)
BarCode | Штрихкод | Currency (денежное)
Price | Цена | Currency (денежное)
Count | Количество | Double (вещественное двойной точности)
Dividable | Делимость (признак весового товара) | Boolean (логическое)
Department | Отдел | Integer (целое)
Tax | Налог | Integer (целое)

Коллекция Fields объекта Recordset, представляющего протокол POS-приложения, включает следующие поля:
Имя поля | Заголовок поля | Тип данных
RecordType | Тип записи | Byte (байт)
LocalCode | Локальный код | Long (длинное целое)
Count | Количество | Double (вещественное двойной точности)
Price | Цена | Currency (денежное)
Sum | Сумма | Currency (денежное)
DiscountSum | Сумма скидки | Currency (денежное)
DateTime | ДатаВремя | Date (дата)
Percent | Процент | Double (вещественное двойной точности)
CheckNumber | Номер чека | Integer (целое)
PaymentData | Данные оплаты | Long (длинное целое)
CurrentCheck | Текущий чек | Byte (байт)
LoginId | № пользователя | Byte (байт)
PortType | Тип порта | Integer (целое)
Refund | Возвратный | Boolean (логическое)
CardGroup | Группа | Byte (байт)
CardId | Карта | Currency (денежное)
InfoType | Тип информации | Byte (байт)
DocType | Тип документа | Byte (байт)
OperatorId | Номер оператора | Byte (байт)
Text | Текстовая информация | String (строка)

Коллекция Fields объекта Recordset, представляющего справочник дисконтных карт, включает следующие поля:
Имя поля | Заголовок поля | Тип данных
CardId | Индентификатор карты | Long (длинное целое)
CardGroup | Категория скидок | Byte (байт)
Номер записи AbsolutePosition этого объекта Recordset соответствует полю CardId + 1.

Пример

Пример создания справочника товаров (пример на Visual Basic):

Sub NewGoods()
' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset
Dim id as Long, cat as Byte
On Error GoTo er
' Создание объекта типа Connection
Set Connection = New PosClient.Connection
' Установка соединения
Connection.Connect SectionName, ServerPassword, ServerIP, ServerPort
' Создание набора записей и перенос в него справочника товаров
Set rs = Connection.CreateRecordSet(poGoodsList)
' Цикл по справочнику товаров back-office приложения
for ...
' Создание новой записи
rs.AddNew
rs!Department = ЗначениеОтдела
rs!Tax = ЗначениеНалоговойГруппы
rs!Dividable = ФлагВесовогоТовара
rs!LocalCode = КодТовара
rs!BarCode = Штрих-кодТовара
rs!Name = НазваниеТовара
rs!Count = Кол-воТовара
rs!Price = ЦенаТовара
' Добавление скидок по дисконтным категориям
rs!Discount0 = ЗначениеСкидкиОтНуляДоЕдиницы * 100
...
rs!Discount14 = ЗначениеСкидкиОтНуляДоЕдиницы * 100
' Добавление цен зависящих от количества
rs!Count0 = Предел кол-ва №1
rs!Price0 = Цена при превышении кол-ва №1
...
rs!Count15 = Предел кол-ва №15
rs!Price15 = Цена при превышении кол-ва №15
rs.Update
' Завершение цикла
next ...
' Сохраниение справочника товаров
rs.SaveAs "Goods.Pgl"
' Асинхронная загрузка справочника товаров на сервер
Connection.UploadGoodsList
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Завершение соединения
Connection.Disconnect
End Sub

Пример загрузки с сервера и обновления справочника дисконтных карт (пример на Visual Basic):

Sub NewDiscountCards()
' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset
Dim id as Long, cat as Byte
On Error GoTo er
' Создание объекта типа Connection
Set Connection = New PosClient.Connection
' Установка соединения
Connection.Connect SectionName, ServerPassword, ServerIP, ServerPort
' Асинхронная загрузка справочника дисконтных карт
Connection.DownloadDiscountCards
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset - набора записей со списком дисконтных карт
Set rs = Connection.TaskRecordset
' Проверка - в наборе записей уже должны быть карты (кол-во карт соответствует настройкам на сервере)
If (rs.EOF AND rs.BOF) Then
MsgBox "На сервере не сконфигурировано кол-во дисконтных карт."
Connection.Disconnect
Exit sub
End If
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменные кода и категории дисконтной карты из справочника back-office приложения
id = ... : cat = ...
' Установка специализированного обработчика ошибок
On Error GoTo outofrange
' Переход к записи по порядковому номеру карты
rs.Bookmark = id - 1
On Error GoTo er
' Заполнение записи
rs.Edit
rs.Fileds("CardGroup").Value = Cat
rs.Update
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
' Сохраниение списка карт
rs.Save
' Асинхронная загрузка списка карт на сервер
Connection.UploadDiscountCards
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Завершение соединения
Connection.Disconnect
Exit sub
' Специализированный обработчик ошибки
outofrange:
On Error Resume Next
Connection.Disconnect
MsgBox "Номер карты " + CStr(id) + " превысил кол-во карт доступных в устройстве.", vbCritical
Exit sub
' Общий обработчик ошибки
er:
...
End Sub


Delete, метод

Метод Delete

Метод Delete предназначен для удаления записи из набора записей Recordset.

Предупреждение: после вызова метода Delete текущая запись может быть не определена.

Синтаксис

Объект.Delete

Синтаксис метода Delete имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Recordset.


DeleteFile, метод

Метод DeleteFile

Метод DeleteFile позволяет удалить файл на сервере POS-приложений.

Синтаксис

Объект.DeleteFile (ТипПапки, Путь)

Синтаксис метода DeleteFile имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
ТипПапки
Значение, поддерживающие тип PosFolder. Указывает один из возможных корневых каталогов сервера POS-приложений, в котором расположен файл.
Путь
Путь и имя удаляемого файла относительно корневого каталога, определенного параметром ТипПапки. Тип String.


Disconnect, метод

Метод Disconnect

Метод Disconnect завершает соединение с сервером POS-приложений. Синхронный метод.

Синтаксис

Объект.Disconnect

Синтаксис метода Disconnect имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.


DownloadCounts, метод

Метод DownloadCounts

Метод DownloadCounts запускает задачу загрузки с сервера POS-приложений текущих остатков. Асинхронный метод.

Синтаксис

Объект.DownloadCounts

Синтаксис метода DownloadCounts имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

Метод DownloadCounts применяется для получения с сервера файла текущих остатков, общих для секции - группы POS-приложений. Для определения окончания процесса загрузки файла следует использовать метод FinishTask или свойство IsTaskComplete.

Полученный файл остатков добавляется к справочнику товаров и заполняет поля справочника Count. Cправочник товаров, включающий текущие остатки, может быть преобразован с помощью метода LoadGoodsList к удобному для обработки табличному виду объекта Recordset.

В один момент времени для одного клиента может выполняться только одна задача передачи данных клиент - сервер. Вызов метода DownloadCounts при запущенной иной задаче генерирует обрабатываемую ошибку времени выполнения.

Текущие остатки

Текущие остатки в секции автоматически рассчитываются сервером исходя из остатков, переданных из back-office, текущего и открытых протоколов. Продажи (а также другие виды расходов) в этих протоколах приводят к уменьшению остатков, возвраты (а также другие виды приходов) к увеличению. Закрытые протоколы не участвуют в расчете остатков, т.к. считается что они обработаны учетной системой back-office. Текущие остатки, рассчитываемые сервером, используются в клиентах сервера (POS-приложениях). Метод DownloadCounts неприминим для учетной системы back-office, она должна проводить собственный анализ протоколов и расчет остатков.

Пример

Пример загрузки и обработки текущих остатков (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset
Dim dAmt as Double, iCode as Long, sName as String
...
' Асинхронная загрузка текущих остатков
Connection.DownloadCounts
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным справочника товаров и текущих остатков
Set rs = Connection.LoadGoodsList
' Обработка набора записей, если он не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменную количества, кода и названия товара
dAmt = rs.Fileds("Count")
iCode = rs.Fileds("LocalCode")
sName = rs.Fileds("Name")
' Произвольная обработка
...
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
end if


DownloadDiscountCards, метод

Метод DownloadDiscountCards

Метод DownloadDiscountCards запускает задачу загрузки с сервера POS-приложений справочника дисконтных карт. Асинхронный метод.

Синтаксис

Объект.DownloadDiscountCards

Синтаксис метода DownloadDiscountCards имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

Метод DownloadDiscountCards применяется для получения файла справочника дисконтных карт с сервера POS-приложений. Справочник дисконтных карт является общим для всех POS-приложений сервера одной организации. Справочник содержит такие признаки карт скидок как: ФИО и ID клиента, категорию или процент скидки и пр.

Для определения окончания процесса загрузки файла с сервера следует использовать метод FinishTask или свойство IsTaskComplete. Полученный файл справочника дисконтных карт может быть преобразован с помощью свойства TaskRecordset к удобному для обработки табличному виду объекта Recordset.

В один момент времени для одного клиента может выполняться только одна задача передачи данных клиент - сервер. Вызов метода DownloadDiscountCards при запущенной иной задаче генерирует обрабатываемую ошибку времени выполнения.

Пример

Пример загрузки и обработки справочника дисконтных карт (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset
Dim id as Long, cat as Byte
...
' Асинхронная загрузка справочника дисконтных карт
Connection.DownloadDiscountCards
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - набора записей со списком дисконтных карт
Set rs = Connection.TaskRecordset
' Обработка набора записей, если он не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменные кода дисконтной карты и соответствующей ей категории скидок
id = rs.Fileds("CardId")
cat = rs.Fileds("CardGroup")
' Произвольная обработка
...
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
end if


DownloadFile, метод

Метод DownloadFile

Метод DownloadFile запускает задачу загрузки произвольного файла с сервера POS-приложений. Асинхронный метод.

Синтаксис

Объект.DownloadFile (ТипПапки, ПутьНаСервере, ЛокальныйПуть, [РежимПерезаписи])

Синтаксис метода DownloadFile имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
ТипПапки
Значение, поддерживающие тип PosFolder. Указывает один из возможных корневых каталогов сервера POS-приложений, в котором расположен файл.
ПутьНаСервере
Путь и имя загружаемого файла на сервере относительно корневого каталога, определенного параметром ТипПапки. Тип String.
ЛокальныйПуть
Путь и имя для размещения загружаемого файла на локальном компьютере. Тип String.
РежимПерезаписи
Необязательный параметр. Определяет режим перезаписи файлов. Имеет тип PosOverwriteMode. Значение по умолчанию poCanOverwrite.

Передаваемые значения

Параметр ЛокальныйПуть может указывать путь и имя файла как в виде полного пути на дисках локального компьютера ("C:/Program Files/..", "D:/.." и т.д.), так и пути относительно корневого каталога, заданного свойством RootDataDirectory.

Дополнительные сведения

В один момент времени для одного клиента может выполняться только одна задача передачи данных клиент - сервер. Вызов метода DownloadFile при запущенной иной задаче генерирует обрабатываемую ошибку времени выполнения.

Для определения окончания процесса загрузки файла с сервера следует использовать метод FinishTask или свойство IsTaskComplete.


DownloadGoodsList, метод

Метод DownloadGoodsList

Метод DownloadGoodsList запускает задачу загрузки с сервера POS-приложений справочника товаров. Асинхронный метод.

Синтаксис

Объект.DownloadGoodsList

Синтаксис метода DownloadGoodsList имеет следующие составляющие:

Объект
Объекты типа Connection.

Дополнительные сведения

Метод DownloadGoodsList применяется для получения файла справочника товаров с сервера POS-приложений. Справочник товаров является общим для всей секции - группы POS-приложений в одном торговом зале. Справочник содержит такие признаки товара как: текстовое описание, код, штрих-код, цену, налоговую группу и пр.

Для определения окончания процесса загрузки файла с сервера следует использовать метод FinishTask или свойство IsTaskComplete. Полученный файл справочника товаров может быть преобразован с помощью свойства TaskRecordset к удобному для обработки табличному виду объекта Recordset.

В один момент времени для одного клиента может выполняться только одна задача передачи данных клиент - сервер. Вызов метода DownloadGoodsList при запущенной иной задаче генерирует обрабатываемую ошибку времени выполнения.

Метод DownloadGoodsList не выполняет загрузку с сервера текущих остатков, для этого применяется метод DownloadCounts.

Пример

Пример загрузки и обработки справочника товаров (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset
Dim iCode as Long, cBarCode as Currency, sName as String
...
' Асинхронная загрузка справочника товаров
Connection.DownloadGoodsList
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - набора записей со списком товаров
Set rs = Connection.TaskRecordset
' Обработка набора записей, если он не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменную кода товара
iCode = rs.Fileds("LocalCode")
' Другие варианты записи
' iCode = rs.Fileds("LocalCode").Value
' iCode = rs.Fileds(1)
' iCode = rs!LocalCode
' Считывание в переменную штрих-кода и названия товара
cBarCode = rs.Fileds("BarCode")
sName = rs.Fileds("Name")
' Произвольная обработка
...
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
end if


DownloadProtocol, метод

Метод DownloadProtocol

Метод DownloadProtocol запускает задачу загрузки с сервера протокола указанного POS-приложения. Асинхронный метод.

Синтаксис

Объект.DownloadProtocol (ИмяФайла, ИмяКлиента)

Синтаксис метода DownloadProtocol имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
ИмяФайла
Имя файла протокола POS-приложения. Тип String.
ИмяКлиента
Уникальное имя POS-приложения. Тип String.

Дополнительные сведения

Метод DownloadProtocol применяется для получения с сервера файла протокола POS-приложения. Протокол содержит операции с товарными позициями, приводящие к изменению остатков: продажи, возвраты, приходы и пр.

Для определения окончания процесса загрузки файла с сервера следует использовать метод FinishTask или свойство IsTaskComplete. Полученный файл протокола может быть преобразован с помощью свойства TaskRecordset к удобному для обработки табличному виду объекта Recordset.

В один момент времени для одного клиента может выполняться только одна задача передачи данных клиент - сервер. Вызов метода DownloadProtocol при запущенной иной задаче генерирует обрабатываемую ошибку времени выполнения.

Если имя файла протокола неизвестно, а также в случае автоматизированной обработки протоколов, список протоколов определенного POS-приложения может быть получен с помощью метода GetProtocolsList. Список имен клиентов (POS-приложений) может быть получен с помощью метода GetClientsList.

Пример

Пример загрузки и обработки протокола (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset
Dim iCode as Long, dAmt as Double, dPrice as Double
...
' Асинхронная загрузка протокола
Connection.DownloadProtocol "38F57F34.PRT", "mPOS_00000070"
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - набора записей протокола
Set rs = Connection.TaskRecordset
' Обработка набора записей, если он не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменные кода товара, кол-ва и цены реализации данной товарной позиции
iCode = rs.Fileds("LocalCode")
dAmt = rs.Fileds("Count")
dPrice = rs.Fileds("Price")
' Произвольная обработка
...
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
end if

Пример поиска самого старого открытого (необработанного) протокола и его загрузка (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset
Dim iCode as Long, dAmt as Double, dPrice as Double
Dim sProt as String, sPOS as String
...
' Асинхронная загрузка списка открытых протоколов для всех POS-приложений
Connection.GetProtocolsList poOpenedProtocol, "*"
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - набора записей открытых протоколов
Set rs = Connection.TaskRecordset
' Сортировка набора записей в порядке увеличения даты последнего изменения
rs.ApplyFilter "ORDER BY Changed"
' Если набор записей пуст - выход из процедуры
if (rs.EOF AND rs.BOF) then MsgBox "Нет открытых протоколов": Exit Sub
' Считывание в переменные названия файла протокола и имени клиента
sProt = rs.Fileds("Name"): sPOS = rs.Fileds("PosName")
' Асинхронная загрузка самого старого открытого протокола
Connection.DownloadProtocol sProt, sPOS
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - набора записей протокола
Set rs = Connection.TaskRecordset
' Обработка набора записей, если он не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменные кода товара, кол-ва и цены реализации данной товарной позиции
iCode = rs.Fileds("LocalCode")
dAmt = rs.Fileds("Count")
dPrice = rs.Fileds("Price")
' Произвольная обработка
...
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
end if


Edit, метод

Метод Edit

Метод Edit предназначен для начала изменения записи в наборе записей Recordset при помощи коллекции полей Fields. Для завершения добавления записи следует вызвать метод Update, а для отмены - метод CancelUpdate.

Между вызовами методов Edit и Update не следует использовать другие методы или свойства объекта (кроме Fields, разумеется), так как это может привести к внутреннему вызову метода CancelUpdate.

Предупреждение: после вызова метода Update только что добавленная запись не становится текущей. Для перемещения к ней необходимо воспользоваться свойствами BookMark и LastModified.

Синтаксис

Объект.Edit

Синтаксис метода Edit имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Recordset.

Пример

Редактирование названия товара (пример на Visual Basic):

' Объявление объекта типа Recordset
Dim rs as Recordset
...
' Начало редактирования записи
rs.Edit
' Изменение значения поля Name
rs.Fields("Name") = rs.Fields("Name") + " (уцененный)"
' Завершение редактирования записи
rs.Update


FindFirst, метод

Методы FindFirst, FindLast, FindNext, FindPrevious

Методы FindFirst, FindLast, FindNext, FindPrevious осуществляют переход на первую, последнюю, следующую и предыдущую записи в объекте Recordset в соответствии с критерием и делают найденную запись текущей.

Синтаксис

Объект.{FindFirst | FindLast | FindNext | FindPrevious} (Критерий[, Параметр1, Параметр2, ..., ПараметрN])

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

Объект
Переменная, содержащая ссылку на объект Recordset.
Критерий
Выражение. Переменная типа String содержащая условия поиска записей
Параметр1, Параметр2, ..., ПараметрN
Необязательный набор параметров, для подстановки в условия.

Возвращаемое значение

Значение типа Boolean: True - если запись удовлетворяющая условию найдена, False - если запись не найдена.

Дополнительные сведения

Если запись найдена, то указатель текущей записи устанавливается на эту запись и метод возвращает True, а свойство NoMatch устанавливается в False. Если запись не найдена, то указатель на текущую запись не определен и метод возвращает False, а свойство NoMatch устанавливается в True. Если набор включает более одной записи, удовлетворяющей критерию, при помощи FindFirst осуществляется поиск первого совпадения, FindNext - следующего и так далее. Каждый из методов Find осуществляет поиск в направлении, указанном в нижеследующей таблице:

Метод Find | Начало поиска | Направление поиска
FindFirst | С начала набора | К концу набора
FindLast | С конца набора | К началу набора
FindNext | С текущей записи | К концу набора
FindPrevious | С текущей записи | К началу набора

Пример

Поиск записи (пример на Visual Basic):

Dim rs as Recordset
...
' Поиск по значению поля Code, равному 123
if rs.FindFirst("Code=123") then
...
end if

' Поиск первого товара с названием, которое начинается с "Кефир..."
if rs.FindFirst("Name LIKE 'Кефир*'") then
' Перебор всех товаров с названием, которое начинается с "Кефир..."
Do
...
Loop While rs.FindNext("Name LIKE 'Кефир*'")
end if

' Поиск по значению параметров-переменных, типы которых соответствуют типам полей
Dim k as Long, s as String
k = 123
s = "Кефир 3.2%"
if rs.FindFirst(Code={1} AND Name={2}", k, s) then
...
end if


FinishTask, метод

Метод FinishTask

Метод FinishTask ожидает окончания выполнения текущей задачи и затем передает управление следующим участкам программы. Синхронный метод.

Синтаксис

Объект.FinishTask

Синтаксис метода FinishTask имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

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

Пример

Пример загрузки справочника товаров (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection As PosClient.Connection
Dim rs As PosClient.Recordset
...
' Асинхронная загрузка справочника товаров
Connection.DownloadGoodsList
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - набора записей со списком товаров
Set rs = Connection.TaskRecordset
' Обработка списка товаров
...


GetAllFields, метод

Метод GetAllFields

Метод GetAllFields позволяет получить значения всех полей коллекции Fields текущей записи объекта Recordset в виде строки.

Синтаксис

Результат = Объект.GetAllFields

Синтаксис метода GetAllFields имеет следующие составляющие:

Результат
Переменная типа String.
Объект
Переменная, содержащая ссылку на объект Recordset.

Возвращаемое значение

Результат представляется в виде списка всех полей в формате: "ИмяПоля1=ЗачениеПоля1; ИмяПоля2=ЗачениеПоля2 ;...; ИмяПоляN=ЗачениеПоляN;".

Текстовые поля заключены в фигурные скобки {...}. Формат числовых значений совпададает с форматом, установленным в панели управления операционной системой (региональные установки).

Пример возвращаемого значения

"LocalCode=1000;Name={Кефир 3.2%};BarCode=1234567890;Price=5,00 грн.;Count=10,000;Dividable=False; Department=0;Tax=0;Price0=0,20 грн.;Count0=2,000;Discount0=10;Discount2=30;Discount3=40;"


GetClientsList, метод

Метод GetClientsList

Метод GetClientsList запускает задачу загрузки с сервера списка POS-приложений. Асинхронный метод.

Синтаксис

Объект.GetClientsList

Синтаксис метода GetClientsList имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

Метод GetClientsList применяется для получения с сервера списка POS-приложений. POS-приложение - это аппаратно-программный комплекс, реализующий функции рабочего места кассира по обслуживанию розничных клиентов.

Для определения окончания процесса загрузки файла с сервера следует использовать метод FinishTask или свойство IsTaskComplete. Полученный файл может быть преобразован с помощью свойства TaskRecordset к удобному для обработки табличному виду объекта Recordset. Коллекция полей Fields объекта Recordset для списка клиентов включает одно поле:
Имя поля | Заголовок поля | Тип данных
Name | Наименование | String (строка)

В один момент времени для одного клиента может выполняться только одна задача передачи данных клиент - сервер. Вызов метода GetClientsList при запущенной иной задаче генерирует обрабатываемую ошибку времени выполнения.

Пример

Пример получения списка клиентов и сортировки их по названию (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset, s as String
...
' Асинхронная загрузка списка клиентов
Connection.GetClientsList
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - перечню клиентов
Set rs = Connection.TaskRecordset
' Сортировка набора записей по полю Name
rs.ApplyFilter "ORDER BY Name"
' Обработка набора записей, если он не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменную названия клиента
s = rs.Fileds("Name")
' Произвольная обработка
...
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
end if


GetFileDosDateTime, метод

Метод GetFileDosDateTime

Метод GetFileDosDateTime возвращает дату и время файла в формате MS DOS.

Синтаксис

Результат = Объект.GetFileDosDateTime (ИмяФайла)

Синтаксис метода GetFileDosDateTime имеет следующие составляющие:

Результат
Переменная типа Long.
Объект
Переменная, содержащая ссылку на объект Connection.
ИмяФайла
Имя файла, находящегося на локальном компьютере. Тип String.

Значение, полученное GetFileDosDateTime, используется в качестве одного из параметров метода InstallHook для установки триггера события обновления файла.


GetFolderContent, метод

Метод GetFolderContent

Метод GetFolderContent запускает задачу получения содержимого каталога с сервера POS-приложений. Асинхронный метод.

Синтаксис

Объект.GetFolderContent (ТипПапки, ПутьНаСервере)

Синтаксис метода GetFolderContent имеет следующие составляющие:

Объект
Объекты типа Connection.
ТипПапки
Значение, поддерживающие тип PosFolder. Указывает один из возможных корневых каталогов сервера POS-приложений.
ПутьНаСервере
Путь и имя подчиненного каталога на сервере относительно корневого каталога, определенного параметром ТипПапки. Тип String.

Передаваемые значения

Для получения всего содержимого каталога в параметре ПутьНаСервере следует указывать маску имени файла "*.*".

Дополнительные сведения

Для определения окончания процесса загрузки списка с сервера следует использовать метод FinishTask или свойство IsTaskComplete. Полученный список может быть преобразован с помощью свойства TaskRecordset к удобному для обработки табличному виду объекта Recordset. Коллекция полей Fields объекта Recordset для списка содержимого каталога включает следующие поля:
Имя поля | Заголовок поля | Тип данных
Name | Наименование | String (строка)
Size | Размер | Long (длинное целое)
Date | Дата | Date (дата)
Attribute | Атрибуты | Byte (байт)

В один момент времени для одного клиента может выполняться только одна задача передачи данных клиент - сервер. Вызов метода GetFolderContent при запущенной иной задаче генерирует обрабатываемую ошибку времени выполнения.


GetProtocolsList, метод

Метод GetProtocolsList

Метод GetProtocolsList запускает задачу загрузки с сервера списка протоколов POS-приложения. Асинхронный метод.

Синтаксис

Объект.GetProtocolsList (ТипПротоколов, ИмяКлиента)

Синтаксис метода GetProtocolsList имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
ТипПротоколов
Состояния протоколов POS-приложения, соответствующее перечислению PosProtocolState.
ИмяКлиента
Уникальное имя POS-приложения. Тип String.

Передаваемые значения

Параметр ТипПротоколов выполняет функцию фильтра для получения протоколов состояния PosProtocolState. Для того чтобы получить протоколы нескольких состояний используйте в качестве параметра ТипПротоколов выражение, объединяющее значения перечисления битовой операцией "ИЛИ". Например: poOpenedProtocol OR poClosedProtocol.

Параметр ИмяКлиента может принимать значение "*", что соответствует всем POS-приложениям сервера.

Дополнительные сведения

Метод GetProtocolsList применяется для получения с сервера списка протоколов одного или всех POS-приложений. Протокол содержит операции с товарными позициями, приводящие к изменению остатков: продажи, возвраты, приходы и пр.

Для определения окончания процесса загрузки файла с сервера следует использовать метод FinishTask или свойство IsTaskComplete. Полученный файл может быть преобразован с помощью свойства TaskRecordset к удобному для обработки табличному виду объекта Recordset. Коллекция полей Fields объекта Recordset для списка протоколов включает следующие поля:
Имя поля | Заголовок поля | Тип данных
Name | Наименование | String (строка)
PosName | Имя POS-приложения | String (строка)
State | Состояние | PosProtocolState (перечисление)
Created | Дата создания | Date (дата)
Changed | Дата изменения | Date (дата)

В один момент времени для одного клиента может выполняться только одна задача передачи данных клиент - сервер. Вызов метода GetProtocolsList при запущенной иной задаче генерирует обрабатываемую ошибку времени выполнения.

Пример

Примеры получения протоколов (пример на Visual Basic):

' Получение протоколов всех состояний для POS-приложения mPOS_00000075
Connection.GetProtocolsList poOpenedProtocol OR poClosedProtocol OR poCurentProtocol, "mPOS_00000075"
' Получение открытых протоколов для всех POS-приложений
Connection.GetProtocolsList poOpenedProtocol, "*"

Пример поиска самого старого открытого (необработанного) протокола и его загрузка (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset
Dim iCode as Long, dAmt as Double, dPrice as Double
Dim sProt as String, sPOS as String
...
' Асинхронная загрузка списка открытых протоколов для всех POS-приложений
Connection.GetProtocolsList poOpenedProtocol, "*"
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - набора записей открытых протоколов
Set rs = Connection.TaskRecordset
' Сортировка набора записей в порядке увеличения даты последнего изменения
rs.ApplyFilter "ORDER BY Changed"
' Если набор записей пуст - выход из процедуры
if (rs.EOF AND rs.BOF) then MsgBox "Нет открытых протоколов": Exit Sub
' Считывание в переменные названия файла протокола и имени клиента
sProt = rs.Fileds("Name"): sPOS = rs.Fileds("PosName")
' Асинхронная загрузка самого старого открытого протокола
Connection.DownloadProtocol sProt, sPOS
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - набора записей протокола
Set rs = Connection.TaskRecordset
' Обработка набора записей, если он не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменные кода товара, кол-ва и цены реализации данной товарной позиции
iCode = rs.Fileds("LocalCode")
dAmt = rs.Fileds("Count")
dPrice = rs.Fileds("Price")
' Произвольная обработка
...
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
end if


GetSectionsList, метод

Метод GetSectionsList

Метод GetSectionsList запускает задачу загрузки с сервера списка секций. Асинхронный метод.

Синтаксис

Объект.GetSectionsList

Синтаксис метода GetSectionsList имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

Метод GetSectionsList применяется для получения списка секций с сервера POS-приложений. Секция - это группа POS-приложений, сгруппированых по принадлежности одной торговой площади и имеющих единый справочник товаров.

Для определения окончания процесса загрузки файла с сервера следует использовать метод FinishTask или свойство IsTaskComplete. Полученный файл может быть преобразован с помощью свойства TaskRecordset к удобному для обработки табличному виду объекта Recordset. Коллекция полей Fields объекта Recordset для списка секций включает одно поле:
Имя поля | Заголовок поля | Тип данных
Name | Наименование | String (строка)

В один момент времени для одного клиента может выполняться только одна задача передачи данных клиент - сервер. Вызов метода GetSectionsList при запущенной иной задаче генерирует обрабатываемую ошибку времени выполнения.

Пример

Пример получения списка секций и сортировки их по названию (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset, s as String
...
' Асинхронная загрузка списка секций
Connection.GetSectionsList
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - перечню секций
Set rs = Connection.TaskRecordset
' Сортировка набора записей по полю Name
rs.ApplyFilter "ORDER BY Name"
' Обработка набора записей, если он не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменную названия секции
s = rs.Fileds("Name")
' Произвольная обработка
...
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
end if


InstallHook, свойство

Метод InstallHook

Метод InstallHook установливает триггер на обновление файла на сервере POS-приложений.

Синтаксис

Объект.InstallHook (Индентификатор, ТипПапки, Путь, ДатаВремя)

Синтаксис метода InstallHook имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
Индентификатор
Битовый индентификатор триггера. Тип Long.
ТипПапки
Значение, поддерживающие тип PosFolder. Указывает один из возможных корневых каталогов сервера POS-приложений, в котором расположен файл.
Путь
Путь и имя файла на сервере относительно корневого каталога, определенного параметром ТипПапки. Тип String.
ДатаВремя
Дата и время файла. Тип Date.

Метод InstallHook установливает триггер на файл и вызывает событие HookTriggered в случае изменения или обновления файла на сервере POS-приложений.

Передаваемые значения

Метод назначает триггеру Индентификатор в виде установленного бита. Возможные значения параметра 2 в степени n, где n=0,...,31 (Индентификатор = 1,2,4,8,..., 2147483648). Этот индентификатор может применяться в программе для проверки типа сработавшего триггера в событии HookTriggered с помощью свойства TriggeredHooks, а также для проверки установленніх триггеров свойством InstalledHooks.

Параметр ДатаВремя указывает серверу дату и время копии файла, которая уже имеется у клиента. Эта дата в формате MS DOS определяется свойством GetFileDosDateTime объекта Connection или свойством FileDosDateTime объекта Recordset. Если дата файла, на который установлен триггер, изменяется на более позднюю по сравнению с датой, переданной в параметре ДатаВремя, возникает событие HookTriggered.

Параметры ТипПапки и Путь указывают корневой каталог, путь и имя файла на сервере, на который устанавливается триггер. Файлы различных типов данных располагаются в следующих каталогах:
Тип данных | Название файла | Каталог на сервере | Каталог на локальном компьютере*
Справочник товаров | Goods.Pgl | poSectionFolder | "..\ИмяСекции\"
Наличные остатки для клиентов | G_Qnty.Cdf | poSectionFolder | "..\ИмяСекции\"
Справочник дисконтных карт | D_Card.Cdf | poCommonFolder | "..\ИмяСекции\"
Протоколы | *.Prt | poProtocolsFolder | "..\ИмяСекции\Protocols\ИмяКлиента\"
*относительно корневой папки, определенной свойством RootDataDirectory.

Пример

Установка триггера на справочник товаров (пример на Visual Basic):

' Объявление переменной
Dim lDate as Long
' Считывание даты локальной копии файла справочника товаров в формате MS DOS
lDate = Connection.GetFileDosDateTime("..\Section\Goods.Pgl")
' Установка триггера с индентификатором 1 на справочник товаров
Connection.InstallHook 1, poSectionFolder, "Goods.Pgl", lDate

Установка триггера на протокол (пример на Visual Basic):

' Объявление переменной
Dim lDate as Long
' Считывание даты локальной копии файла 379374d2.prt в формате MS DOS
lDate = Connection.GetFileDosDateTime("..\Section\Protocols\CashTN_CTP00030\379374d2.prt")
' Установка триггера с индентификатором 16 (0x10) на протокол 379374d2.prt
Connection.InstallHook &H10, poProtocolsFolder, "379374d2.prt", lDate


LoadCards, метод

Метод LoadCards

Метод LoadCards преобразует файл дисконтных карт в набор записей и возвращает объект типа Recordset.

Синтаксис

Результат = Объект.LoadCards

Синтаксис метода LoadCards имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Recordset.
Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

Метод LoadCards применяется для преобразования файла дисконтных карт, ранее полученного с сервера POS-приложений методом DownloadDiscountCards, в удобный для обработки табличный вид объекта Recordset. Этот объект можно представить себе как набор записей или таблицу, строки которой - являются элементами (записями) объекта, а столбцы представлены полями (объектами Field), объединенными в коллекцию Fields.

Коллекция Fields объекта Recordset, представляющего справочник дисконтных карт, включает следующие поля:
Имя поля | Заголовок поля | Тип данных
CardId | Индентификатор карты | Long (длинное целое)
CardGroup | Категория скидок | Byte (байт)
Номер записи AbsolutePosition этого объекта Recordset соответствует полю CardId + 1.

В отличие от свойства TaskRecordset (которое преобразует в набор записей файл последней задачи), метод LoadCards можно применять в любое время независимо от текущих задач приема/передачи файлов.

Пример

Пример загрузки и обработки справочника дисконтных карт (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset
Dim id as Long, cat as Byte
...
' Асинхронная загрузка справочника дисконтных карт
Connection.DownloadDiscountCards
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Другие задачи загрузки/выгрузки файлов
...
' Создание объекта типа Recordset - набора записей со списком дисконтных карт
Set rs = Connection.LoadCards
' Обработка набора записей, если он не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменные кода дисконтной карты и соответствующей ей категории скидок
id = rs.Fileds("CardId")
cat = rs.Fileds("CardGroup")
' Произвольная обработка
...
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
end if


LoadGoodsList, метод

Метод LoadGoodsList

Метод LoadGoodsList преобразует файл справочника товаров в набор записей и возвращает объект типа Recordset.

Синтаксис

Результат = Объект.LoadGoodsList

Синтаксис метода LoadGoodsList имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Recordset.
Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

Метод LoadGoodsList применяется для преобразования файла справочника товаров, ранее полученного с сервера POS-приложений методом DownloadGoodsList, в удобный для обработки табличный вид объекта Recordset. Этот объект можно представить себе как набор записей или таблицу, строки которой - являются элементами (записями) объекта, а столбцы представлены полями (объектами Field), объединенными в коллекцию Fields.

Коллекция Fields объекта Recordset, представляющего справочник товаров, включает следующие поля:
Имя поля | Заголовок поля | Тип данных
LocalCode | Локальный код | Long (длинное целое)
Name | Наименование | String (строка)
BarCode | Штрихкод | Currency (денежное)
Price | Цена | Currency (денежное)
Count | Количество | Double (вещественное двойной точности)
Dividable | Делимость (признак весового товара) | Boolean (логическое)
Department | Отдел | Integer (целое)
Tax | Налог | Integer (целое)

Для расширения описания товарных позиций объект Recordset справочника товаров также содержит коллекцию дополнительных полей AdditionalFields.

В отличие от свойства TaskRecordset (которое преобразует в набор записей файл последней задачи), метод LoadGoodsList можно применять в любое время независимо от текущих задач приема/передачи файлов.

Пример

Пример загрузки и обработки справочника товаров (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset
Dim iCode as Long, cBarCode as Currency, sName as String
...
' Асинхронная загрузка справочника товаров
Connection.DownloadGoodsList
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Другие задачи загрузки/выгрузки файлов
...
' Создание объекта типа Recordset - набора записей со списком товаров
Set rs = Connection.LoadGoodsList
' Обработка набора записей, если он не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменную кода товара
iCode = rs.Fileds("LocalCode")
' Другие варианты записи
' iCode = rs.Fileds("LocalCode").Value
' iCode = rs.Fileds(1)
' iCode = rs!LocalCode
' Считывание в переменную штрих-кода и названия товара
cBarCode = rs.Fileds("BarCode")
sName = rs.Fileds("Name")
' Произвольная обработка
...
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
end if


LoadProtocol, метод

Метод LoadProtocol

Метод LoadProtocol преобразует файл протокола в набор записей и возвращает объект типа Recordset.

Синтаксис

Результат = Объект.LoadProtocol (ИмяФайла)

Синтаксис метода LoadProtocol имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Recordset.
Объект
Переменная, содержащая ссылку на объект Connection.
ИмяФайла
Имя файла протокола, находящегося на локальном компьютере. Тип String.

Дополнительные сведения

Метод LoadProtocol применяется для преобразования файла протокола, полученного ранее с сервера POS-приложений методом DownloadProtocol, в удобный для обработки табличный вид объекта Recordset. Этот объект можно представить себе как набор записей или таблицу, строки которой - являются элементами (записями) объекта, а столбцы представлены полями (объектами Field), объединенными в коллекцию Fields.

Коллекция Fields объекта Recordset, представляющего протокол POS-приложения, включает следующие поля:
Имя поля | Заголовок поля | Тип данных
RecordType | Тип записи | Byte (байт)
LocalCode | Локальный код | Long (длинное целое)
Count | Количество | Double (вещественное двойной точности)
Price | Цена | Currency (денежное)
Sum | Сумма | Currency (денежное)
DiscountSum | Сумма скидки | Currency (денежное)
DateTime | ДатаВремя | Date (дата)
Percent | Процент | Double (вещественное двойной точности)
CheckNumber | Номер чека | Integer (целое)
PaymentData | Данные оплаты | Long (длинное целое)
CurrentCheck | Текущий чек | Byte (байт)
LoginId | № пользователя | Byte (байт)
PortType | Тип порта | Integer (целое)
Refund | Возвратный | Boolean (логическое)
CardGroup | Группа | Byte (байт)
CardId | Карта | Currency (денежное)

В отличие от свойства TaskRecordset (которое преобразует в набор записей файл последней задачи), метод LoadProtocol можно применять в любое время независимо от текущих задач приема/передачи файлов.

Пример

Пример загрузки и обработки протокола (пример на Visual Basic):

' Объявление объектов типа Connection и Recordset
Dim Connection as PosClient.Connection
Dim rs as PosClient.Recordset
Dim iCode as Long, dAmt as Double, dPrice as Double
...
' Асинхронная загрузка протокола
Connection.DownloadProtocol "38F57F34.PRT", "mPOS_00000070"
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Другие задачи загрузки/выгрузки файлов
...
' Создание объекта типа Recordset - набора записей протокола 38F57F34.PRT
Set rs = Connection.LoadProtocol ("38F57F34.PRT")
' Обработка набора записей, если он не пуст
if not (rs.EOF AND rs.BOF) then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец таблицы
do until rs.EOF
' Считывание в переменные кода товара, кол-ва и цены реализации данной товарной позиции
iCode = rs.Fileds("LocalCode")
dAmt = rs.Fileds("Count")
dPrice = rs.Fileds("Price")
' Произвольная обработка
...
' Переход к следующей записи и продолжение цикла
rs.MoveNext: loop
end if


LoadRecordset, метод

Метод LoadRecordset

Метод LoadRecordset преобразует файл указанного типа в набор записей и возвращает объект типа Recordset.

Синтаксис

Результат = Объект.LoadCards (ТипДанных, ИмяФайла)

Синтаксис метода LoadCards имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Recordset.
Объект
Переменная, содержащая ссылку на объект Connection.
ТипДанных
Значение типа данных, открываемого в наборе записей Recordset. Имеет тип PosDataObjectType.
ИмяФайла
Путь и имя к загружаемому файлу на локальном компьютере.

Дополнительные сведения

Метод LoadRecordset применяется для преобразования файлов справочника товаров, дисконтных карт, протоколов и файлов произвольного типа, ранее полученных с сервера POS-приложений методами DownloadGoodsList, DownloadCounts, DownloadDiscountCards, DownloadProtocol, DownloadFile, в удобный для обработки табличный вид объекта Recordset.

Объект Recordset можно представить себе как набор записей или таблицу, строки которой - являются элементами (записями) объекта, а столбцы представлены полями (объектами Field), объединенными в коллекцию Fields. Состав полей коллекции Fields может быть различным в зависимости от типа данных, открытых в объекте RecordSet.

В отличие от свойства TaskRecordset (которое преобразует в набор записей файл последней задачи), метод LoadRecordset можно применять в любое время независимо от текущих задач приема/передачи файлов.


Move, метод

Метод Move

Метод Move перемещает позицию текущей записи в объекте Recordset на указанное количество записей.

Синтаксис

Объект.Move (КолчичествоЗаписей, [Начало])

Синтаксис метода Move имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Recordset.
КолчичествоЗаписей
Значение типа Long, указывающее на сколько записей будет перемещена текущая запись. Если значение положительное - указатель перемещается вперед (к концу набора), если отрицательное - назад (к началу набора).
Начало
Необязательный параметр. Закладка записи (свойство BookMark), с которой производится движение. Значение по умолчанию - закладка текущей записи.

Дополнительные сведения

Если Move используется для позиционирования текущей записи за первой записью набора, указатель текущей записи перемещается в начало набора. Если в наборе нет записей и свойство BOF имеет значение True, вызов метода для движения назад вызывает ошибку.

Если Move используется для позиционирования текущей записи за последней записью набора, указатель текущей записи перемещается в конец набора. Если в наборе нет записей и свойство EOF имеет значение True, вызов метода для движения вперед вызывает ошибку.

Замечания

  • Для перемещения на первую, последнюю, следующую и предыдущую запись набора используйте один из методов: MoveFirst, MoveLast, MoveNext, MovePrevious.
  • Вызов Move с КоличествоЗаписей равным нулю является простым способом обновления данных записи.
  • Перемещение на другую запись во время редактирования записи без предварительного применения метода Update приводит к отмене редактирования записи без предупреждения.

Пример

Перемещение указателя текущей записи в таблице (пример на Visual Basic):

' Объявление объекта Recordset
Dim rs as Recordset
...
' Перемещение на 2 записи к концу таблицы
rs.Move 2


MoveFile, метод

Метод MoveFile

Метод MoveFile позволяет переместить файл на сервере POS-приложений.

Синтаксис

Объект.MoveFile (ТипПапкиОткуда, ПутьОткуда, ТипПапкиКуда, ПутьКуда)

Синтаксис метода MoveFile имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
ТипПапкиОткуда
Значение указывает исходный корневой каталог сервера POS-приложений, в котором расположен файл. Имеет тип PosFolder.
ПутьОткуда
Исходный путь и имя перемещаемого файла относительно корневого каталога, определенного параметром ТипПапкиОткуда. Тип String.
ТипПапкиКуда
Значение указывает конечный корневой каталог сервера POS-приложений. Имеет тип PosFolder.
ПутьКуда
Конечный путь и имя файла относительно корневого каталога, определенного параметром ТипПапкиКуда. Тип String.


MoveFirst, MoveLast, MoveNext, MovePrevious, методы

Методы MoveFirst, MoveLast, MoveNext, MovePrevious

Метод MoveFirst, MoveLast, MoveNext, MovePrevious перемещает позицию текущей записи объекта Recordset на первую, последнюю, следующую или предыдущую запись соответственно.

Синтаксис

Объект.MoveFirst | MoveLast | MoveNext | MovePrevious

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

Объект
Переменная, содержащая ссылку на объект Recordset.

Дополнительные сведения

Для перемещения с записи на запись без условия используйте методы MoveFirst, MoveLast, MoveNext, MovePrevious.

После открытия набора текущей становится первая запись и свойство BOF принимает значение False. Если у объекта нет записей, свойство BOF установлено в True и текущая запись отсутствует.

Если первая или последняя запись уже текущая, применение методов MoveFirst или MoveLast соответственно не изменяет текущую запись.

После применения MovePrevious для первой записи объекта - устанавливается флаг BOF и текущей записи нет. При повторном применении метода возникает ошибка.

После применения MoveNext для последней записи набора устанавливается флаг EOF и текущей записи нет. При повторном применении метода возникает ошибка.

При использовании объекта открытого как таблица переход по записям производится в порядке, установленном индексом. Если индекс не установлен, порядок записей не определен.

Для полного заполнения объекта открытого как динамического набора записей следует применить метод MoveLast. Однако делать это нужно только в случае абсолютной необходимости, так как эта операция может существенно отразиться на производительности.

Для перемещения текущей записи на определенной число записей используйте метод Move.

Замечание. Перемещение на другую запись во время редактирования записи без предварительного применения метода Update приводит к отмене редактирования записи без предупреждения.

Пример

Методы широко применяются для организации циклов перебора записей рекордсета в прямом порядке (пример на Visual Basic):

Dim rs as Recordset
...
' Переход к первой записи
rs.MoveFirst
' Цикл до достижения конца набора записей
Do Until rs.EOF
...
' Переход к следующей записи
rs.MoveNext
Loop

А также в обратном порядке, начиная с последней записи (пример на Visual Basic):

Dim rs as Recordset
...
' Переход к последней записи
rs.MoveLast
' Цикл до достижения начала набора записей
Do Until rs.BOF
...
' Переход к предыдущей записи
rs.MovePrevious
Loop


PutAllFields, метод

Метод PutAllFields

Метод PutAllFields позволяет задать в строковом виде значения полей коллекции Fields для текущей записи объекта Recordset.

Синтаксис

Объект.PutAllFields (Значение)

Синтаксис метода PutAllFields имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Recordset.
Значение
Перечень полей и их значений типа String.

Дополнительные сведения

Перед применением метода необходимо создать новую запись методом AddNew или начать изменение текущей записи методом Edit. Для завершения добавления или изменения записи следует вызвать метод Update, а для отмены - метод CancelUpdate.

Передаваемое значение

Значение типа String должно включать список необходимых полей (не обязательно всех полей записи) в формате: "ИмяПоля1=ЗачениеПоля1; ИмяПоля2=ЗачениеПоля2 ;...; ИмяПоляN=ЗачениеПоляN;".

Текстовые поля заключаются в фигурные скобки {...}. Формат числовых значений для строки метода PutAllFields должен совпадать с форматом, установленным в панели управления операционной системой (региональные установки).

Пример передаваемого значения

"LocalCode=1000;Name={Кефир 3.2%};BarCode=1234567890;Price=5,00 грн.;Count=10,000;Dividable=False; Department=0;Tax=0;Price0=0,20 грн.;Count0=2,000;Discount0=10;Discount2=30;Discount3=40;"


RemoveDirectory, метод

Метод RemoveDirectory

Метод RemoveDirectory позволяет удалить пользовательский каталог на сервере POS-приложений.

Синтаксис

Объект.RemoveDirectory (ТипПапки, Путь)

Синтаксис метода RemoveDirectory имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
ТипПапки
Значение, поддерживающие тип PosFolder. Указывает один из возможных корневых каталогов сервера POS-приложений, в котором расположен пользовательский каталог.
Путь
Путь и имя удаляемого каталога относительно корневого каталога, определенного параметром ТипПапки. Тип String.


Requery, метод

Метод Requery

Метод Requery обновляет содержимое набора записей Recordset путем повторного выполнения запроса, на котором основан набор.

Синтаксис

Объект.Requery

Синтаксис метода Requery имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Recordset.

Дополнительные сведения

Используйте этот метод для того, чтобы обновить данные объекта Recordset в режиме динамического доступа к данным. После применения метода Requery текущей становится первая запись объекта.

Если оба свойства BOF и EOF установлены в True после применения метода Requery, объект не содержит записей.

Метод применим только для объектов открытых как динамический набор записей. Для таблиц обновление происходит в момент перехода на новую запись.


Save, метод

Метод Save

Метод Save выполняет сохранение набора записей Recordset, включая произведенные изменения, в исходный файл.

Синтаксис

Объект.Save

Синтаксис метода Save имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Recordset.

Дополнительные сведения

Метод Save используется для сохранения изменений в справочниках товаров и дисконтных карт после их редактирования в объекте Recordset.


SaveAs, метод

Метод SaveAs

Метод SaveAs выполняет сохранение набора записей Recordset в файле под указанным именем.

Синтаксис

Объект.SaveAs ИмяФайла

Синтаксис метода SaveAs имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Recordset.
ИмяФайла
Имя файла для сохранения набора записей, соответствующее типу String.

Дополнительные сведения

Метод SaveAs используется для сохранения изменений в справочниках товаров и дисконтных карт после их редактирования в объекте Recordset.


SetFileAttributes, метод

Метод SetFileAttributes

Метод SetFileAttributes позволяет установить новые аттрибуты для файла на сервере POS-приложений.

Синтаксис

Объект.SetFileAttributes (ТипПапки, Путь, Аттрибуты)

Синтаксис метода SetFileAttributes имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
ТипПапки
Значение, поддерживающие тип PosFolder. Указывает один из возможных корневых каталогов сервера POS-приложений, в котором расположен файл.
Путь
Путь и имя файла относительно корневого каталога, определенного параметром ТипПапки. Тип String.
Аттрибуты
Новые аттрибуты файла. Тип Long.

Параметр Аттрибуты может принимать следующие значения:
Значение | Название
1 | READONLY (только для чтения)
2 | HIDDEN (скрытый)
4 | SYSTEM (системный)
16 | DIRECTORY (каталог)
32 | ARCHIVE (архивный)
128 | NORMAL (нормальный)


SetFileTime, метод

Метод SetFileTime

Метод SetFileTime позволяет установить новое время для файла на сервере POS-приложений.

Синтаксис

Объект.SetFileTime (ТипПапки, Путь, Время)

Синтаксис метода SetFileTime имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
ТипПапки
Значение, поддерживающие тип PosFolder. Указывает один из возможных корневых каталогов сервера POS-приложений, в котором расположен файл.
Путь
Путь и имя файла относительно корневого каталога, определенного параметром ТипПапки. Тип String.
Время
Новое время файла. Тип Date.


Update, метод

Метод Update

Метод Update завершает добавление или изменение записи в объекте Recordset и вносит окончательные изменения из буфера редактирования в набор записей.

Синтаксис

Объект.Update

Синтаксис метода Update имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Recordset.

Дополнительные сведения

Используйте метод Update для сохранения любых изменений текущей записи.

Для создания новой записи следует предварительно вызвать метод AddNew. Перед началом редактирования записи следует вызвать метод Edit. Вызов метода Update без предварительного вызова Edit или AddNew приводит к возникновению обрабатываемой ошибки.

Предупреждение

Изменения для текущей записи будут потеряны в следующих ситуациях:

  • Был вызван метод Edit или AddNew с последующим переходом на другую запись без предварительного применения метода Update.
  • Был вызван метод Edit или AddNew с повторным вызовом Edit или AddNew без предварительного вызова метода Update.
  • Свойство Bookmark было установлено на другую запись.
  • Объект был закрыт без предварительного вызова метода Update.
  • Редактирование было отменено вызовом метода CancelUpdate.

Пример

Редактирование названия товара (пример на Visual Basic):

' Объявление объекта типа Recordset
Dim rs as Recordset
...
' Начало редактирования записи
rs.Edit
' Изменение значения поля Name
rs.Fields("Name") = rs.Fields("Name") + " (уцененный)"
' Завершение редактирования записи
rs.Update


UploadDiscountCards, метод

Метод UploadDiscountCards

Метод UploadDiscountCards запускает задачу загрузки на сервер POS-приложений файла справочника дисконтных карт с локального компьютера. Асинхронный метод.

Синтаксис

Объект.UploadDiscountCards

Синтаксис метода UploadDiscountCards имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

Метод UploadDiscountCards применяется для пересылки локального файла справочника дисконтных карт на сервер POS-приложений. Справочник дисконтных карт является общим для всех POS-приложений сервера одной организации. Справочник содержит такие признаки карт скидок как: ФИО и ID клиента, категорию или процент скидки и пр.

Для определения окончания процесса передачи файла на сервер следует использовать метод FinishTask или свойство IsTaskComplete.

В один момент времени для одного клиента может выполняться только одна задача передачи данных клиент - сервер. Вызов метода UploadDiscountCards при запущенной иной задаче генерирует обрабатываемую ошибку времени выполнения.

Пример

Пример выгрузки справочника дисконтных карт (пример на Visual Basic):

' Объявление объекта типа Connection
Dim Connection as PosClient.Connection
...
' Асинхронная выгрузка справочника дисконтных карт
Connection.UploadDiscountCards
' Синхронное ожидание окончания задачи
Connection.FinishTask
...


UploadFile, метод

Метод UploadFile

Метод UploadFile запускает задачу загрузки произвольного файла на сервер POS-приложений с локального компьютера. Асинхронный метод.

Синтаксис

Объект.UploadFile (ТипПапки, ПутьНаСервере, ЛокальныйПуть, [РежимПерезаписи])

Синтаксис метода UploadFile имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
ТипПапки
Значение, поддерживающие тип PosFolder. Указывает один из возможных корневых каталогов сервера POS-приложений для расположения файла.
ПутьНаСервере
Путь и имя для размещения файла на сервере относительно корневого каталога, определенного параметром ТипПапки. Тип String.
ЛокальныйПуть
Путь и имя файла на локальном компьютере. Тип String.
РежимПерезаписи
Необязательный параметр. Определяет режим перезаписи файлов. Имеет тип PosOverwriteMode. Значение по умолчанию poCanOverwrite.

Передаваемые значения

Параметр ЛокальныйПуть может указывать путь и имя файла как в виде полного пути на дисках локального компьютера ("C:/Program Files/..", "D:/.." и т.д.), так и пути относительно корневого каталога, заданного свойством RootDataDirectory.

Дополнительные сведения

В один момент времени для одного клиента может выполняться только одна задача передачи данных клиент - сервер. Вызов метода UploadFile при запущенной иной задаче генерирует обрабатываемую ошибку времени выполнения.

Для определения окончания процесса загрузки файла на сервер следует использовать метод FinishTask или свойство IsTaskComplete.


UploadGoodsList, метод

Метод UploadGoodsList

Метод UploadGoodsList запускает задачу загрузки на сервер POS-приложений файла справочника товаров с локального компьютера. Асинхронный метод.

Синтаксис

Объект.UploadGoodsList

Синтаксис метода UploadGoodsList имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

Метод UploadGoodsList применяется для пересылки локального файла справочника товаров на сервер POS-приложений. Справочник товаров является общим для всей секции - группы POS-приложений в одном торговом зале. Справочник содержит такие признаки товара как: текстовое описание, код, штрих-код, цену, налоговую группу и пр.

Для определения окончания процесса передачи файла на сервер следует использовать метод FinishTask или свойство IsTaskComplete.

В один момент времени для одного клиента может выполняться только одна задача передачи данных клиент - сервер. Вызов метода UploadGoodsList при запущенной иной задаче генерирует обрабатываемую ошибку времени выполнения.

Текущие остатки

При выгрузке справочника товаров из учетной системы back-office в поле справочника Count должно содержаться текущее количество товара. Сервер произведет перерасчет доступного для POS-приложений кол-ва товара исходя из данных back-office и еще не обработанных в системе back-office продаж (текущего и открытых протоколов).

Пример

Пример выгрузки справочника товаров (пример на Visual Basic):

' Объявление объекта типа Connection
Dim Connection as PosClient.Connection
...
' Асинхронная выгрузка справочника товаров
Connection.UploadGoodsList
' Синхронное ожидание окончания задачи
Connection.FinishTask
...


Connected, событие

Событие Connected

Событие Connected возникает после успешного соединения с сервером POS-приложений.

Синтаксис

Объект.Connected ()

Синтаксис события Connected имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

Событие Connected применяется, как правило, для установки необходимых тригерров обновления данных, поскольку при рассоединении с сервером триггеры снимаются.

Событие Connected повторяется до тех пор, пока не будет считано значение свойства ServerIp.

Пример

Пример обработки события Connected (пример на Visual Basic):

' Событие Connected
Private Sub Connection_Connected()
' Объявление переменной
Dim lDate as Long, s as String
' Считывание ServerIp
s = Connection.ServerIp
' Установка триггера на справочник товаров
Connection.InstallHook 1, poSectionFolder, "Goods.Pgl", Connection.GetFileDosDateTime("..\Section\Goods.Pgl")
' Произвольная обработка
...
End Sub


ConnectError, событие

Событие ConnectError

Событие ConnectError возникает в случае ошибки соединения с сервером POS-приложений.

Синтаксис

Объект.ConnectError (КодОшибки, Сообщение)

Синтаксис события ConnectError имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
КодОшибки
Возвращаемый код ошибки. Тип Long.
Сообщение
Возвращаемое сообщение об ошибке. Тип String.

Дополнительные сведения

Событие ConnectError применяется, как правило, для вывода сообщения об ошибке соединения с сервером POS-приложений.

Событие возникает 1 раз.

Пример

Пример обработки события ConnectError (пример на Visual Basic):

' Событие ConnectError
Private Sub Connection_ConnectError(ByVal Error As Long, ByVal Message As String)
' Сообщение об ошибке
MsgBox "Ошибка соединения №" + CStr(Error) + ", " + Message
End Sub


Disconnected, событие

Событие Disconnected

Событие Disconnected возникает после рассоединения с сервером POS-приложений.

Синтаксис

Объект.Disconnected (КодОшибки, Сообщение)

Синтаксис события Disconnected имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
КодОшибки
Возвращаемый код ошибки. Тип Long.
Сообщение
Возвращаемое сообщение об ошибке. Тип String.

Дополнительные сведения

Событие Disconnected может возникать как вследствие применения метода Disconnect, так и вследствие рассоединения с сервером POS-приложений из-за ошибки соединения (обрыва соединения и пр.). В последнем случае возвращаемые событием значения КодОшибки и Сообщение будут содержать информацию об ошибке.

Событие возникает 1 раз.

Пример

Пример обработки события Disconnected (пример на Visual Basic):

' Событие Disconnected
Private Sub Connection_Disconnected(ByVal Error As Long, ByVal Message As String)
' Сообщение об рассоединении
MsgBox "Рассоединение с сервером " + Message
End Sub


HookTriggered, событие

Событие HookTriggered

Событие HookTriggered возникает после срабатывания одного из триггеров.

Синтаксис

Объект.HookTriggered ()

Синтаксис события HookTriggered имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

Событие HookTriggered применяется для обработки событий обновления файлов на сервере POS-приложений. Событие возникает вследствие срабатывания триггера, установленного методом InstallHook на определенный файл на сервере (справочник товаров, дисконтных карт, протокол), при изменении или обновлении данного файла.

При возникновении события HookTriggered следует проверить битовую маску, возвращаемую свойством TriggeredHooks, определить тип сработавшего триггера и выполнить соответствующие действия по загрузке обновленных данных с сервера.

Пример

Пример обработки события HookTriggered (пример на Visual Basic):

' Событие HookTriggered
Private Sub Connection_HookTriggered()
' Если сработал триггер с ID=1 (ранее установленный с таким ID методом InstallHook), то выполнить загрузку справочника товаров
If Connection.TriggeredHooks(1) Then Connection.DownloadGoodsList
' Если сработал триггер с ID=2, то выполнить загрузку текущих остатков
If Connection.TriggeredHooks(2) Then Connection.DownloadCounts
' Если сработал триггер с ID=4, то выполнить загрузку списка дисконтных карт
If Connection.TriggeredHooks(4) Then Connection.DownloadDiscountCards
' Произвольная обработка
...
End Sub


TaskComplete, событие

Событие TaskComplete

Событие TaskComplete возникает после завершения текущей задачи.

Синтаксис

Объект.TaskComplete ()

Синтаксис события TaskComplete имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.

Дополнительные сведения

Событие TaskComplete применяется для обработки результатов выполненной задачи по обмену данными между сервером POS-приложений и клиенским приложением.

Тип последней выполненной задачи можно узнать с помощью метода TaskType. Пути к локальному файлу и файлу на сервере, участвующим в последей задаче, можно выяснить с помощью свойств TaskLocalPath и TaskRemotePath.

Событие TaskComplete повторяется до тех пор, пока не будет считано значение свойства TaskErrorCode.

Пример

Пример обработки события TaskComplete (пример на Visual Basic):

' Объявление объектов типа Recordset для обработки справочника товаров и карт скидок
Dim GoodsRecordset as PosClient.Recordset, CardsRecordset as PosClient.Recordset
....
' Событие TaskComplete
Private Sub Connection_TaskComplete()
' Обработка в зависимости от типа выполненной задачи
Select Case Connection.TaskType
' Если выполненная задача - загрузка с сервера файла справочника товаров, то представить файл товаров в виде набора записей
Case poDownloadGoods
Set GoodsRecordset = Connection.LoadGoodsList
' Если выполненная задача - загрузка с сервера файла дисконтных карт, то представить файл карт в виде набора записей
Case poDownloadCards
Set CardsRecordset = Connection.LoadCards
...
End Select
End Sub


TaskProgress, событие

Событие TaskProgress

Событие TaskProgress возникает в процессе выполнения задачи и возвращает процент ее выполнения.

Синтаксис

Объект.TaskProgress (Процент)

Синтаксис события TaskProgress имеет следующие составляющие:

Объект
Переменная, содержащая ссылку на объект Connection.
Процент
Возвращаемое значение процента готовности задачи. Тип Long.

Дополнительные сведения

Событие TaskProgress применяется индикации процесса выполнения задачи.

Событие TaskProgress с новым значением процента готовности задачи возникает только в том случае, если обработано предыдущее событие TaskProgress.

Пример

Пример обработки события TaskProgress (пример на Visual Basic):

' Событие TaskProgress
Private Sub Connection_TaskProgress(ByVal PercentCompleted As Long)
' Индикация в контроле процента выполнения задачи
label.Caption = "Выполнено " + CStr(PercentCompleted) + "%"
End Sub


PosOperationType, перечисление

Перечисление PosOperationType

Перечисление описывает типы папок POS-сервера, предназначенные для обмена данным:
Константа | Значение | Описание | Поля протокола
Операции с товарными позициями
poArtPlus | 1 | +Артикул | LocalCode, Count
poArtMinus | 2 | -Артикул | LocalCode, Count
poDiscountPerc | 3 | Скидка % | Percent
poDiscountSum | 4 | Скидка суммовая | Sum
poMarkupPerc | 5 | Надбавка % | Percent
poMarkupSum | 6 | Надбавка суммовая | Sum
poSubtotal | 7 | Итого (промежуточный итог) |
poRejectLast | 8 | Отказ от последней операции |
poRejectAll | 9 | Очистка чека |
Операции оплаты
poCash | 10 | Оплата: Наличные | Sum, PaymentData, InfoType (номер регистратора)
poCheck | 11 | Оплата: Чек | Sum, PaymentData, InfoType (номер регистратора)
poCard | 12 | Оплата: Карта | Sum, PaymentData, InfoType (номер регистратора)
poCredit | 13 | Оплата: Кредит | Sum, PaymentData, InfoType (номер регистратора)
poOther | 14 | Оплата: Прочее | Sum, PaymentData, InfoType (номер регистратора)
Прочие операции
poDiscountCard | 16 | Дисконтная карта | CardId, CardGroup
poCheckBegin | 32 | Начало чека | Refund, DateTime
poCheckEnd | 33 | Конец чека | CheckNumber, DateTime
poSaledArt | 34 | Проданный товар | LocalCode, Count, Price, Sum, InfoType (номер регистратора)
poCashIn | 35 | Служебный внос | Sum, DateTime, InfoType (номер регистратора)
poCashOut | 36 | Служебный вынос | Sum, DateTime, InfoType (номер регистратора)
poComment | 37 | Комментарий | Text, DateTime, InfoType
poInfo | 38 | Служебная информация | Text, DateTime, InfoType
poSetCheckId | 39 | Выбор чека | CurrentCheck
poLogin | 48 | Вход кассира | LoginId, DateTime
poLogout | 49 | Выход кассира | DateTime
poWorkBegin | 50 | Начало работы | DateTime
poWorkEnd | 51 | Конец работы | DateTime
poWorkBrief | 52 | Итоги работы | InfoType, дополнительные поля в таблице ниже
poDocBegin | 64 | Начало документа | DocType, OpId, DateTime, Text
poDocEnd | 65 | Конец документа |
poArtMove | 66 | Движение артикула | LocalCode, Count, Price
poNewArt | 68 | Новый артикул | LocalCode, Text
Сообщения системы
poLogRecord | 240 | Системная запись | InfoType, PaymentData
poProtType | 240 | Тип порта CashTAN | PortType

Назначение полей для типа записи poWorkBrief

Значение поля InfoType | Поле итога | Описание
0 | Sum | Сумма продаж
1 | Sum | Скидка
2 | Sum | Выторг
3 | Sum | Возвраты
4 | Sum | Наличными
5 | Sum | Чеком
6 | Sum | Картой
7 | Sum | В кредит
8 | Sum | Прочие оплаты
9 | Sum | Служебный внос
10 | Sum | Служебный вынос
11 | Sum | В сейфе
12 | PaymentData | Чеков продаж
13 | PaymentData | Возвратных чеков
14 | PaymentData | Чеков отменённых
15 | DateTime | Начало работы
16 | DateTime | Конец работы


PosFolder, перечисление

Перечисление PosFolder

Перечисление описывает типы папок POS-сервера, предназначенные для обмена данным:
Константа | Значение | Описание | front-office (POS-приложения) | back-office
poCommonFolder | 1 | Общая папка. Папка предназначена для передачи и хранения справочника дисконтных карт, обновлений программного обеспечения и прочих, общих для всех POS-приложений, файлов. | чтение | чтение+запись
poPersonalFolder | 2 | Персональная папка POS-приложения. Зарезервирована для обмена дополнительными файлами между POS-приложением и учетной системой back-office. | чтение+запись | чтение+запись
poSectionFolder | 3 | Папка секций. Папка предназначена для передачи и хранения справочника товаров, наличных остатков и другой информации, общей для POS-приложений одной секции. | чтение | чтение+запись
poProtocolsFolder | 4 | Папка протоколов. Папка предназначена для передачи и хранения протоколов и другой информации из POS-приложения в учетную систему back-office. | чтение+запись | чтение
poPersonalFolders | 5 | Корневая папка всех приложений. Обеспечивает доступ к персональным папкам POS-приложений на файловом уровне. | чтение+запись | чтение+запись
poProtocolsFolders | 6 | Корневая папка всех протоколов. Обеспечивает доступ к папкам протоколов POS-приложений на файловом уровне. | чтение+запись | чтение+запись


PosOverwriteMode, перечисление

Перечисление PosOverwriteMode

Перечисление описывает возможные режимы перезаписи файлов:
Константа | Значение | Описание
poAlwaysOverwrite | 0 | Всегда переписывать. Файл замещает другой файл с таким же именем, если тот уже существует по адресу назначения в операциях перемещения/передачи файлов.
poCanOverwrite | 1 | Можно переписывать. В результате операций перемещения/передачи файлов из двух одноименных файлов останется файл с более новой датой изменения файла.
poDontOverwrite | 2 | Не переписывать. Файл не замещает другой файл с таким же именем, если тот уже существует по адресу назначения в операциях перемещения/передачи файлов.


PosProtocolState, перечисление

Перечисление PosProtocolState

Перечисление описывает возможные состояния протокола POS-приложения (в частном случае протокола продаж):
Константа | Значение | Описание
poCurentProtocol | 1 | Текущий протокол. В этот протокол сохраняются операции (продажи, возвраты и пр.) в POS-приложениях в настоящий момент.
poOpenedProtocol | 2 | Протокол открыт. Протокол создан одним из POS-приложений и ожидает обработки в учетных системах back-office. Данные протокола (+артикул и -артикул) используются для расчета утилитами POS-сервера текущих остатков относительно последних остатков back-office.
poClosedProtocol | 4 | Протокол закрыт. Протокол обработан и учтен в учетных системах back-office и не используется при расчете остатков утилитами POS-сервера.


PosDataObjectType, перечисление

Перечисление PosDataObjectType

Перечисление описывает возможные типы данных, открытые в наборе записей типа Recordset:
Константа | Значение | Описание
poGoodsList | 170 | Справочник товаров
poProtocol | 171 | Протокол продаж
poDiscountCards | 172 | Справочник дисконтных карт
poRecordset | 146 | Произвольный набор записей


PosTaskType, перечисление

Перечисление PosTaskType

Перечисление описывает типы асинхронных задач:
Константа | Значение | Описание
poConnect | 1 | Соединение
poInstallHook | 2 | Установка прерывания
poDownloadFile | 3 | Приём файла
poUploadFile | 4 | Передача файла
poDownloadFolder | 5 | Приём каталога
poDownloadSections | 6 | Приём списка секций
poDownloadClients | 7 | Приём списка клиентов
poDownloadProtocols | 8 | Приём списка протоколов
poDownloadGoods | 9 | Приём справочника товара
poUploadGoods | 10 | Передача справочника товара
poDownloadCounts | 11 | Приём остатков товаров
poDownloadCards | 12 | Приём справочника карт
poUploadCards | 13 | Передача справочника карт
poDownloadProtocol | 14 | Приём протокола
poUploadProtocol | 15 | Передача протокола
poChangeProtocolState | 16 | Изменение состояния протокола
poSetFileAttributes | 17 | Установка аттрибутов файла
poSetFileTime | 18 | Установка времени файла
poDeleteFile | 19 | Удаление файла
poMoveFile | 20 | Перемещение файла
poCreateDirectory | 21 | Создание каталога
poRemoveDirecory | 22 | Удаление каталога


Рекомендации по программированию OLE сервера CashTAN

Особенности программирования POS Client

1. В коллекции CashTANs есть только один объект с именем "MICROPOS".

2. У объекта CashTAN поддерживаются свойства Application, Collection, Name, Sections. Свойства ConnectionId и LastSucceededConnectionId возвращают количество вызовов метода StartConnection, ConnectionState возвращает ctIdle.

3. Управление текущими протоколами производится в устройствах MicroPOS, использование метода UseNewCurrentProtocols вызовет ошибку.

4. Существенно отличается принцип группировки протоколов по папкам. Если в CashTAN протоколы всех секций одного месяца были расположены в папке с уникальным значением года и месяца (свойства Year и Month), то теперь в одной папке располагаются ВСЕ протоколы одного устройства MicroPOS. Свойства Year и Month возвращают текущий год и месяц соответственно и не имеют практического смысла, а вот в строке, возвращаемой свойством Caption, имеется название секции и устройства, разделённые обратной косой, например "Section1\Micropos22".

5. Свойство Type объекта Protocol всегда возвращает значение ctptMini500.


Загрузка справочника товаров

Загрузка справочника товаров с сервера POS-приложений с помощью компонента POSClient выполняется по следующей схеме:

  1. С помощью объекта Connection инициируется соединение с сервером POS-приложений.
  2. Устанавливается задача загрузки справочника товаров с сервера и ожидается ее окончание.
  3. На основании полученного файла товаров создается объект типа набора записей Recordset.
  4. Циклически перебираются все записи (строки) набора записей и считываются значения полей записи (ячеек одной строки). Значения переносятся в базу данных или другой ресурс клиентского приложения.
  5. Разрывается соединение с сервером POS-приложений.

Ниже приведен пример на Visual Basic for Application для загрузки справочника товаров с сервера POS-приложений в таблицу Excel:

' Загрузка с сервера
Private Sub DownloadGoods()
Dim i As Long
' Объявление объектов типа Connection и Recordset
Dim Connection As PosClient.Connection
Dim rs As PosClient.Recordset
On Error GoTo er
' Инициализация счетчика строк в таблице Excel
i = 0
' Создание объекта типа Connection
Set Connection = New PosClient.Connection
' Асинхронная установка соединения к произвольному серверу локальной сети по порту 11111 с паролем password к секции с именем SECTION
Connection.Connect "SECTION", "password", "255.255.255.255", 11111
' Асинхронная загрузка списка товаров с сервера
Connection.DownloadGoodsList
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset для справочника товаров
Set rs = Connection.TaskRecordset
' Обработка набора записей, если он не пуст
If Not (rs.EOF And rs.BOF) Then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец набора записей
Do Until rs.EOF
i = i + 1
' Считывание значений полей записи о товаре в ячейки таблицы Excel
Cells(i, 1) = rs!Department ' Отдел
Cells(i, 1) = rs!Tax ' Налоговая группа
Cells(i, 2) = rs!Dividable ' Признак весового товара
Cells(i, 3) = rs!LocalCode ' Код товара
Cells(i, 4) = rs!BarCode ' Штрих-код
Cells(i, 5) = rs!Name ' Название товара
Cells(i, 6) = rs!Count ' Кол-во
Cells(i, 7) = rs!Price ' Цена
Cells(i, 8) = rs!Count0 ' Первый предел кол-ва
Cells(i, 9) = rs!Price0 ' Цена при превышении первого предела кол-ва
Cells(i, 10) = rs!Count1 ' Второй предел кол-ва
Cells(i, 11) = rs!Price1 ' Цена при превышении второго предела кол-ва
' Переход к следующей записи
rs.MoveNext: Loop
End If
' Завершение соединения
Connection.Disconnect
Exit Sub
er:
ss = "Ошибка в строке " + CStr(i) + "(" + Err.Source + "): " + Err.Description
If Not Connection Is Nothing Then Connection.Disconnect
MsgBox ss
End Sub

Получение текущих остатков

Для получения текущих остатков в поле Count набора записей в предыдущую процедуру перед строкой Connection.DownloadGoodsList необходимо добавить вызов двух дополнительных функций:

' Асинхронная загрузка количеств с сервера
Connection.DownloadCounts
' Синхронное ожидание окончания задачи
Connection.FinishTask


Получение и обработка протоколов

Получение протоколов работы POS-приложений с сервера с помощью компонента POSClient выполняется по следующей схеме:

  1. С помощью объекта Connection инициируется соединение с сервером POS-приложений.
  2. Если имя протокола неизвестно:
    • Методом GetProtocolsList устанавливается задача загрузки списка протоколов POS-приложений одной секции.
    • На основании полученного списка протоколов создается объект типа набора записей Recordset.
    • В наборе записей производится поиск или сортировка с целью узнать имя необходимого протокола (по дате, имени приложения и т.д.). Перечень полей списка протоколов представлен в описании метода GetProtocolsList.
  3. Методом DownloadProtocol устанавливается задача загрузки протокола определенного POS-приложения с сервера и ожидается ее окончание.
  4. На основании полученного файла протоколов создается объект типа набора записей Recordset.
  5. Циклически перебираются все записи (строки) набора записей и считываются значения полей записи (ячеек одной строки). Значения переносятся в базу данных или другой ресурс клиентского приложения. Список полей протокола представлен в описании метода LoadProtocol.
  6. Разрывается соединение с сервером POS-приложений.

Ниже приведен пример на Visual Basic for Application для загрузки самого старого открытого (необработанного) протокола с сервера POS-приложений в таблицу Excel:

' Загрузка с сервера
Private Sub DownloadProtocol()
Dim i As Long, sProt As String, sPOS As String, sComment As String
' Объявление объектов типа Connection и Recordset
Dim Connection As PosClient.Connection
Dim rs As PosClient.Recordset
On Error GoTo er
' Инициализация счетчика строк в таблице Excel
i = 0
' Создание объекта типа Connection
Set Connection = New PosClient.Connection
' Асинхронная установка соединения к произвольному серверу локальной сети по порту 11111 с паролем password к секции с именем SECTION
Connection.Connect "SECTION", "password", "255.255.255.255", 11111
' Асинхронная загрузка списка открытых протоколов для всех POS-приложений секции SECTION
Connection.GetProtocolsList poOpenedProtocol, "*"
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset по данным последней задачи - набора записей открытых протоколов
Set rs = Connection.TaskRecordset
' Сортировка набора записей в порядке увеличения даты последнего изменения
rs.ApplyFilter "ORDER BY Changed"
' Если набор записей пуст - выход из процедуры
if (rs.EOF AND rs.BOF) then MsgBox "Нет открытых протоколов": Exit Sub
' Переход к первой записи после сортировки
rs.MoveFirst
' Считывание в переменные названия файла протокола и имени клиента
sProt = rs.Fileds("Name"): sPOS = rs.Fileds("PosName")
' Асинхронная загрузка самого старого открытого протокола
Connection.DownloadProtocol sProt, sPOS
' Синхронное ожидание окончания задачи
Connection.FinishTask
' Создание объекта типа Recordset для протокола
Set rs = Connection.TaskRecordset
' Обработка набора записей, если он не пуст
If Not (rs.EOF And rs.BOF) Then
' Переход к первой записи
rs.MoveFirst
' Цикл до выхода за конец набора записей
Do Until rs.EOF
i = i + 1
' Считывание данных для просмотра протокола
' Перенос значений полей записи протокола в ячейки таблицы Excel
Cells(i, 1) = rs!CheckNumber ' Номер чека (уникален для POS-приложения)
Cells(i, 2) = rs!DateTime ' Дата и время операции
Cells(i, 3) = OperText(rs!RecordType, sComment) ' Тип операции
Cells(i, 4) = sComment ' Текст, поясняющий тип операции
Cells(i, 5) = rs!LocalCode ' Код товара
Cells(i, 6) = rs!Count ' Кол-во
Cells(i, 7) = rs!Price ' Цена
Cells(i, 8) = rs!Sum ' Сумма
Cells(i, 9) = rs!DiscountSum ' Сумма скидки
Cells(i, 10) = rs!Percent ' Процент скидки
Cells(i, 11) = rs!PaymentData ' Отдел
Cells(i, 12) = rs!CardId ' Код дисконтной карты
Cells(i, 13) = rs!CardGroup ' Категория дисконтной карты
Cells(i, 14) = rs!Refund ' Признак возвратного чека
' Обработка протокола в зависимости от кода операции
Select Case rs!RecordType
' Обработка документов прихода, расхода и инвентаризации
Case poDocBegin: ' начало документа
... необходимо считать параметры документа и создать новый документ в учетной системе
Case poArtMove: ' движение товарной позиции в теле документа
... необходимо добавить товарную позицию в документ
Case poDocEnd: ' конец документа
... необходимо сохранить и закрыть документ
' Обработка продаж
Case poCheckBegin: ' начало чека
...
Case poArtPlus: ' продажа товарной позиции
... необходимо отразить продажу товара на остатках учетной системы
Case poCash, poCheck, poCard, poCredit, poOther: ' оплата чека (наличные, чек, карта, кредит, другие)
...
End select
' Переход к следующей записи
rs.MoveNext: Loop
End If
' Завершение соединения
Connection.Disconnect
Exit Sub
er:
ss = "Ошибка в строке " + CStr(i) + "(" + Err.Source + "): " + Err.Description
If Not Connection Is Nothing Then Connection.Disconnect
MsgBox ss
End Sub

Закрытие открытого протокола

После того, как данные из протокола перенесены в учетную систему, там обработаны и отражены в остатках, следует изменить состояние протокола на закрытый. Это, во-первых, позволяет индентифицировать обработанный протокол среди необработанных, во-вторых, сообщает серверу о необходимости исключения этого протокола из расчета текущих остатков для POS-приложений.

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

' Закрытие протокола
Connection.ChangeProtocolState poClosedProtocol, sProt, sPOS, True

Процедура преобразования значения перечисления PosOperationType в текстовое представление

' Процедура, возвращающая строковое описание и пояснение типа операции протокола
Function OperText(enumValue As PosOperationType, ByRef sComment As String) As String
Select Case enumValue
Case poArtPlus: OperText = "poArtPlus": sComment = "+Артикул"
Case poArtMinus: OperText = "poArtMinus": sComment = "-Артикул"
Case poDiscountPerc: OperText = "poDiscountPerc": sComment = "Скидка %"
Case poDiscountSum: OperText = "poDiscountSum": sComment = "Скидка суммовая"
Case poMarkupPerc: OperText = "poMarkupPerc": sComment = "Надбавка %"
Case poMarkupSum: OperText = "poMarkupSum": sComment = "Надбавка суммовая"
Case poSubtotal: OperText = "poSubtotal": sComment = "Итого (промежуточный итог)"
Case poRejectLast: OperText = "poRejectLast": sComment = "Отказ от последней операции"
Case poRejectAll: OperText = "poRejectAll": sComment = "Очистка чека"
Case poCash: OperText = "poCash": sComment = "Оплата: Наличные"
Case poCheck: OperText = "poCheck": sComment = "Оплата: Чек"
Case poCard: OperText = "poCard": sComment = "Оплата: Карта"
Case poCredit: OperText = "poCredit": sComment = "Оплата: Кредит"
Case poOther: OperText = "poOther": sComment = "Оплата: Прочее"
Case poDiscountGroup: OperText = "poDiscountGroup": sComment = "Группа скидок"
Case poDiscountCard: OperText = "poDiscountCard": sComment = "Дисконтная карта"
Case poCheckBegin: OperText = "poCheckBegin": sComment = "Начало чека"
Case poCheckEnd: OperText = "poCheckEnd": sComment = "Конец чека"
Case poSaledArt: OperText = "poSaledArt": sComment = "Проданный товар"
Case poCashIn: OperText = "poCashIn": sComment = "Служебный внос"
Case poCashOut: OperText = "poCashOut": sComment = "Служебный вынос"
Case poComment: OperText = "poComment": sComment = "Комментарий"
Case poInfo: OperText = "poInfo": sComment = "Служебная информация"
Case poSetCheckId: OperText = "poSetCheckId": sComment = "Выбор чека"
Case poLogin: OperText = "poLogin": sComment = "Вход кассира"
Case poLogout: OperText = "poLogout": sComment = "Выход кассира"
Case poWorkBegin: OperText = "poWorkBegin": sComment = "Начало работы"
Case poWorkEnd: OperText = "poWorkEnd": sComment = "Конец работы"
Case poDocBegin: OperText = "poDocBegin": sComment = "Начало документа"
Case poDocEnd: OperText = "poDocEnd": sComment = "Конец документа"
Case poArtMove: OperText = "poArtMove": sComment = "Движение артикула"
Case poObject: OperText = "poObject": sComment = "Объект"
Case poNewArt: OperText = "poNewArt": sComment = "Новый артикул"
Case poNewObject: OperText = "poNewObject": sComment = "Новый объект"
Case poEditArt: OperText = "poEditArt": sComment = "Изменение артикула"
Case poEditObject: OperText = "poEditObject": sComment = "Изменение объекта"
Case poProtType: OperText = "poProtType": sComment = "Тип порта CashTAN"
Case Else: OperText = "**Unknown**": sComment = "Тип неизвестен"
End Select
End Function


CloseAppRequest, метод

Метод CloseAppRequest

Метод CloseAppRequest - закрыть запрос к приложению".

Синтаксис

Объект.CloseAppRequest (Параметр0, Параметр1, Параметр2, ..., ПараметрN)

Синтаксис метода CloseAppRequest имеет следующие составляющие:

Объект
Объекты типа Connection.
Параметр0
Параметр...
Параметр1, Параметр2, ..., ПараметрN
Параметр...


AppRequestData, свойство

Свойство AppRequestData

Свойство AppRequestData возвращает...

Синтаксис

Чтение: Результат = Объект.AppRequestData

Синтаксис свойства AppRequestData имеет следующие составляющие:

Результат
Переменная, поддерживающая тип Byte
Объект
Переменная, содержащая ссылку на объект Connection.

AppRequestData возвращает ...