COM-интерфейсы

Концепции

Замечания по типам данных

В представлении интерфейсов повсеместно применяются VARIANT-совместимые типы данных. Учитывая, что большая часть разработчиков, для которых предназначены эти интерфейсы, пользуются языком Visual Basic, при разработке интерфейсов приняты меры для того, чтобы они корректно работали с этим языком. Из-за того, что в Visual Basic нет беззнакового целого числа, в интерфейсах такие типы не применяются.

Далее мы перечислим типы, используемые в описании структур и интерфейсов.

#1
#2. [C++] #3.
#4

int

Int

int

4-x байтовое знаковое целое

long

Long

long

4-x байтовое знаковое целое

string

String

BSTR

Указатель на UNICODE-строку. За разрушение указателя отвечает клиент (в случае VisualBasic - система исполнения этого языка)

date

Date

DATE

Число с плавающей точкой двойной точности. Формат представления в нем даты и времени описан в MSDN. Нулевое значение интерпретируется как неопределенное.

time

Date

DATE

То же, что и date

datetime

Date

DATE

То же, что и date

Спецификации

Структура { #1

}


. #3

Интерфейс { #1

}

{ Метод

#1

#2

. #3 }



SDateRange

Представление периода между двумя датами. Все функции, использующие структуру периода, считают, что нижняя и верхняя границы включены в период. Если нижняя граница не определена (Low = 0), то, как правило, рассматриваются данные с начала ведения учета в базе данных. Если верхняя граница не определена (Upp = 0), как правило, рассматриваются данные до самой последней записи (в хронологическом порядке), введенной в базу данных. Оговоренное правило - наиболее общее. В зависимости от контекста, оно может изменяться. В некоторых случаях указанный извне период может быть наложен на период, определенный правами доступа.

Low

date

Нижняя граница периода

Upp

date

Верхняя граница периода

SIterCounter

Счетчик итераций. Используется в объектах КАД для подсчета итераций с целью информирования пользователя о прогрессе хода процесса перечисления.

Count

long

Текущая (завершенная) итерация

Total

long

Общее количество итераций

STaggedString

Структура используемая для организации списков строковых ассоциаций. Нулевым элементом STaggedString считается такой, у которого: Id = 0, ParentId = 0, Text = "".

Id

long

Идентификатор элемента

ParentId

long

Идентификатор родительского элемента. Если 0, то верхний уровень

Text

string

Текст

SPpyDatabaseInfo

Представление информации об одной базе данных системы

ID

long

Ид базы данных. Этот идентификатор является неявным и нефиксированным. Физически, он представляет номер позиции точки входа в базу данных, описанной в файле pp.ini

Flags

long

Зарезервировано (0)

Type

long

Зарезервировано (0)

Symb

string

Символ базы данных

Name

string

Дружественное пользователю наименование базы данных

Path

string

Путь к каталогу базы данных

SysPath

string

Путь к каталого словаря данных

SPpySessionInfo

Представление информации о текущем состоянии класса, реализующего интерфейс IPapyrusSession.

SessID

long

Ид сессии

Flags

long

MainOrgID

long

Ид главной организации

DbDivID

long

Ид раздела базы данных

UserID

long

Ид пользователя

DbName

string

Наименование базы данных

DbSymb

string

Символ базы данных

SysPath

string

Путь к словарю данных

DbPath

string

Путь к базе данных

StrAssoc

Интерфейс обеспечивающий управление списком строк, ассоциированных с целочисленными идентификаторами. attention: В текущих версиях поле STaggedString::ParentId не поддерживается //

Методы

long

GetCount()

Descr: Возвращает количество элементов в списке.

int

Get(long pos, out STaggedString * pItem)

Descr: Возвращает элемент по индексу pos. Если pos < GetCount(), то pItem обнуляется (Id = 0, ParentId = 0, Text = "").

pos IN

@#{0..GetCount()-1

позиция в списке, по которой следует вернуть элемент. }

pItem OUT

@#{vptr0

Указатель на структуру STaggedString, по которому присваивается найденный элемент. Если pItem == 0, то функция просто ничего не присваивает, но возвращает значение то же, как будто pItem != 0. }


>0 - элемент успешно извлечен из списка и присвоен по адресу pItem
0 - индекс pos выходит за диапазон [0..GetCount()-1]. По адресу pItem присвоен нулевой элемент.

int

SearchById(long id, out STaggedString * pItem)

Descr: Ищет в списке элемент с идентификатором STaggedString::Id == id. Поиск осуществляется в линейном порядке (не взирая на сортировку, если она есть). По этому, если в списке присутствует более одного элемента с таким идентификатором, то функция обнаружит и вернет тот, у которого меньшее значение индекса позиции.

id IN

Идентификатор элемента, который должен быть найден.

pItem OUT

@#{vptr0

Указатель на структуру STaggedString, по которому присваивается найденный элемент. Если pItem == 0, то функция просто ничего не присваивает, но возвращает значение то же, как будто pItem != 0. }


>0 - элемент со значением STaggedString::Id == id найден и присвоен по адресу pItem.
0 - элемент со значением STaggedString::Id == id не найден. По адресу pItem присвоен нулевой элемент.

int

SearchByText(string text, out STaggedString * pItem)

Descr: Ищет в списке элемент со строкой, равной text. Равенство строк определяется по последовательному соответствию всех символов с точностью до регистра букв. Поиск осуществляется в линейном порядке (не взирая на сортировку, если она есть). По этому, если в списке присутствует более одного элемента с похжодящим полем Text, то функция обнаружит и вернет тот, у которого меньшее значение индекса позиции.

text IN

Строка, соответствующая полю STaggedString::Text элемента, который должен быть найден.

pItem OUT

@#{vptr0

Указатель на структуру STaggedString, по которому присваивается // найденный элемент. Если pItem == 0, то функция просто ничего не присваивает, но возвращает значение то же, как будто pItem != 0. }


>0 - элемент со значением STaggedString::Id == id найден и присвоен по адресу pItem.
0 - элемент со значением STaggedString::Id == id не найден. По адресу pItem присвоен нулевой элемент.

string

GetTextById(long id)

Descr: Ищет в списке элемент с идентификатором STaggedString::Id == id и, в случае успеха, возвращает строку, соответствующую этому элементу. Поиск осуществляется в линейном порядке (не взирая на сортировку, если она есть). По этому, если в списке присутствует более одного элемента с таким идентификатором, то функция обнаружит и вернет тот, у которого меньшее значение индекса позиции.

id IN

Идентификатор элемента, который должен быть найден.

Поле STaggedString::Text найденного элемента. Если элемент с заданным идентификатором не найден, то возвращается пустая строка.

void

InitIteration()

Descr: Инициализирует внутренний счетчик для последующих вызовов функци NextIteration.

int

NextIteration(out STaggedString * pItem)

Descr: Возвращает элемент, соответствующий внутреннему счетчику объекта и увеличивает на единицу значение этого счетчика. Если внутренний счетчик выход за пределы [0..GetCount()-1], то возвращает 0.

pItem OUT

@#{vptr0

Указатель на структуру STaggedString, по которому присваивается // очередной элемент. Если pItem == 0, то функция просто ничего не присваивает, но возвращает значение то же, как будто pItem != 0. }


>0 - очередной элемент получен и присвоен по укзателю pItem. Внутренний счетчик увеличен на единицу.
0 - больше нет ни одного элемента для перечисления // По адресу pItem присвоен нулевой элемент.

void

Clear()

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

void

Add(long itemId, long parentId, string text)

Добавляет в список новый элемент с полями: STaggedString::Id = itemId, STaggedString::ParentId = parentId, STaggedString::Text = text; Если в списке уже присутсвует элемент с идентификатором itemId, то новый не добавляется, но у существующего заменяются атрибуты ParentId и Text на те, что указаны в аргументах. Не следет делать предположения относительно индекса позиции, в которую был добавлен новый элемент.

void

Sort(int byText)

Descr: Сортирует элементы списка.

byText IN

Если этот параметр равен 1, то сортировка осуществляется по полю STaggedString::Text, в противном случае - по полю STaggedString::Id.

void

Clone(out IStrAssocList ** ppClone)

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

int

CloneByParent(long parentId, out IStrAssocList ** ppClone)

Создает экземпляр списка, содержащий выборку элементов из оригинального списка, у которых поле STaggedString::ParentId = parentId.


>0 - создана копия, содержащая по крайней мере один элемент
<0 - создана копия, не содержащая ни одного элемента из оригинального списка. Это означает, что в оригинальном списке нет ни одного элемента с STaggedString::ParentId = parentId
0 - ошибка

attention: В текущих версиях функция не поддерживается

IPapyrusSession

Обеспечивает интерфейс рабочей сессии в базе данных. Предоставляет сервисы для авторизации в базе данных, доступа к объектам данных, контроллерам анализа данных (КАД) и др.

Методы

IStrAssocList * GetDatabaseList(int nameKind)

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

nameKind IN

Значение, определяющее, какую строку передавать в списке вместе с идентификатором. Возможные значения:
0 - символ базы данных
1 - дружественное наименование базы данных
2 - путь к каталогу базы данных
Любое другое значение интерпретируется как 0.

Указатель на интерфейс сформированного списка. В случае ошибки - 0.

int

GetDatabaseInfo(long id, SPpyDatabaseInfo * pInfo)

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

id IN

@#[1..] Идентификатор базы данных. Этот идентификатор является неявным и нефиксированным. Физически, он представляет номер позиции точки входа в базу данных, описанной в файле pp.ini. Самым естественным способом получения этого идентификатора видится извлечение его из списка, полученного вызовом IPapyrusSession::GetDatabaseList().

pInfo OUT

@#{vptr0} Указатель на структуру SPpyDatabaseInfo, по которому будет записана информация о базе данных.


>0 - информация о базе данных успешно извлечена и присвоена по указателю pInfo
0 - ошибка

int

Login(string dbName, string userName, string password)

Descr: Реализует авторизацию в базе данных. Конфигурация и ограничения прав доступа для сеанса, авторизованного через этот метод, действуют так же, как и для интерактивного сеанса системы. После завершения работы с сеансом необходимо выполнить функцию Logout(). Несколько последовательных Login() без соответствующего вызова Logout() могут привести к тому, что следующее обращение к Login() завершится с ошибкой.

dbName IN

символ базы данных, в которой необходимо авторизоваться

userName IN

имя пользователя

password IN

пароль, соответствующий имени userName


>0 - авторизация успешно выполнена
0 - ошибка

int

Logout()

Descr: Завершает авторизованный сеанс работы в базе данных.

string

GetObjectTitle(PpyObjectIdent objType)

Descr: Возвращает наименование типа объекта данных objType. Например, вызов GetObjectTitle(ppoAccSheet) вернет строку "Таблица аналитического учета".

Наименование типа объекта данных. Если objType задан неверно, то вернет пустую строку.

IPapyrusObject * CreateObject(PpyObjectIdent objType)

Descr: Создает экземпляр объекта данных типа objType. После завершения работы с этим экземпляром объекта, он должен быть разрушен обычным образом.

Указатель на интерфейс созданного экземпляра объекта данных. В случае ошибки - 0.

IPapyrusView * CreateView(PpyViewIdent viewID)

Descr: Создает экземпляр контроллера анализа данных (КАД) типа viewID. После завершения работы с этим экземпляром КАД, он должен быть разрушен обычным образом.

Указатель на интерфейс созданного экземпляра КАД. В случае ошибки - 0.

int

GetStatusInfo(out SPpySessionInfo * pInfo)

Descr: Инициализирует структуру с информацией о текущем состоянии сеанса.

pInfo OUT

{vptr0

Указатель на структура SPpySessionInfo в которой содержатся поля информации о текущем состоянии сеанса. }


>0 - информация извлечена успешно и присвоена по указателю pInfo.
0 - ошибка

Перечисление PpyViewIdent Descr: Перечисление типов контроллеров анализа данных PPView.
= 1

= 2

Перечисление PpyObjectIdent Descr: Перечисление типов объектов PPObject. Каждый элемент перечисления должен иметь соответствие PPOBJ_XXX в файле ppdefs.h (значения идентификаторов ppoXXX и PPOBJ_XXX обязательно должны совпадать)
= 13
=PPOBJ_ACCSHEET Таблицы аналитического учета
= 17
=PPOBJ_CASHNODE Расчетные кассовые узлы
= 1006
=PPOBJ_ARTICLE Статьи аналитического учета

IPapyrusObject

Descr: Основной интерфейс доступа к функциям объектов данных. Экземпляры объектов данных должны создаваться методом IPapyrusSession::CreateObject()

Методы

int

Search(long id, out PPYOBJREC rec)

Descr: Ищет запись объекта по идентификатору id. Поиск осуществляется непосредственно в базе данных (механизм кэширования Papyrus не используется).

id IN

Идентификатор записи объекта, которую необходимо найти.

rec OUT

@#{vptr0

Указатель на буфер, по которому будет записано содержание записи в случае, если она будет найдена. Структура буфера определяется конкретным типом объекта. В этом файле намиенования таких структур начинаются с префикса "SPpyO_" и продолжаются наименованием типа объекта данных. Например: SPpyO_Article - структура записи статьи аналитического учета. Не следует делать предположений о формате хранения записи объекта данных, непосредственно в базе данных, на основании структуры, используемой в методах IPapyrusObject. }


>0 - запись по идентификатору id найдена и присвоена по указателю rec
<0 - запись по идентификатору id не найдена. Содержимое по указателю rec не изменилось.
0 - ошибка. Не следует далеть предположений о содержимом указателя rec

int

SearchByName(string text, int kind, long extraParam, out PPYOBJREC rec)

Descr: Ищет запись объекта по наименованию. При этом, смысл наименования трактуется в зависимости от параметра kind.

text IN

Строка, по которой ищется запись.

kind IN

Вид поиска.
0 - собственно, по наименованию
1 - по коду (каждым типом объекта трактуется особо)

extraParam IN

Дополнительный параметр, необходимый для правильной интерпретации кода некоторыми типами объектов.

rec OUT

Указатель, по которому будет присвоена запись объекта в случае успешного поиска.


>0 - объект найден
<0 - объект не найден
0 - ошибка

string

GetName(long id)

Descr: Возвращает наименование объекта с идентификатором id. Если такой объект не найден, то возвращает строку вида "ID=xxx", где xxx - значение id. Реализация интерфейса в праве использовать внутреннее кэширование для поиска требуемого наименования. Как следствие, вызов этого метода может быть значительно быстрее, чем использование метода Search, но актуальность результата гарантирована быть не может (однако, вероятность ошибки ничтожна).

Если запись по идентификатору id найдена, то возвращает строку, содержащую наименование объекта. В противном случае, либо в случае ошибки, возвращает пустую строку.

IStrAssocList * GetSelector(long extraParam)

Descr: Возвращает список строк, ассоциированных с идентификаторами и соответствующих наименованиям выбоки записей объекта данных, полученных на основе ограниченной фильтрации по аргументу extraParam. Каждый тип объектов данных имеет собственную спицифику использования extraParam для ограниченной фильтрации записей. Соответствующие пояснения приведены в описании этих объектов.

Указатель на интерфейс IStrAssocList списка наименований объекта данных. 0 - оишбка

int

Create(PPYOBJREC pRec, long flags, out long * pID)

Descr: Создает новую запись объекта в соответствии со структурой pRec. Особенности создания записей объектов конкретных типов описаны в комментариях к соответствующим компонентам.

pRec IN

Указатель на структуру записи объекта. Реализация функции проверяет корректность тега структуры pRec→ RecTag.

flags IN

Флаги создания записи. Сейчас используется только флаг 0x0001 означающий что функция НЕ ДОЛЖНА использовать внутреннюю транзакцию.

pID OUT

Указатель на идентификатор созданной записи. При неудачном завершении функции значение по этому указателю не определено.


>0 - объект успешно создан
0 - ошибка

int

Update(long id, long flags, in PPYOBJREC rec)

Descr: Изменяет запись объекта по идентификатору id в соответствии со структурой pRec. Особенности изменения записей объектов конкретных типов описаны в комментариях к соответствующим компонентам.

id IN

Идентификатор изменяемого объекта.

flags IN

Флаги создания записи. Сейчас используется только флаг 0x0001 означающий что функция НЕ ДОЛЖНА использовать внутреннюю транзакцию.

pRec IN

Указатель на структуру записи объекта. Реализация функции проверяет корректность тега структуры pRec→ RecTag.

>0 - объект успешно изменен 0 - ошибка

IPapyrusView

Descr: Основной интерфейс контроллера анализа данных (КАД). Реализация этого интерфейса обычно представлена следующими компонентами (в скобках указаны префиксы наименований соответствующих компонентов):
- структурой элемента выборки (SPpyVI_XXX)
- опциональной структурой итогов выборки (SPpyVT_XXX)
- интерфейсом фильтра (IPpyFilt_XXX)
- классом реализации интерфейса фильтра (PPFiltXXX)
- классом реализации собственно интерфейса IPapyrusView (PPViewXXX)
Экземпляры КАД должны создаваться вызовом метода IPapyrusSession::CreateView().

Методы

IUnknown * CreateFilt(long param)

Descr: создает экземпляр фильтра выборки и возвращает его интерфейс. В зависимости от особенностей класса, параметр param может определять предварительную инициализацию фильтра.

int

Init(IUnknown * pFilt)

Descr: инициализирует объект в соответствии со свойствами фильтра pFilt. После успешной инициализации объект готов к обработке других методов интерфейса. Действительный интерфейс фильтра должен быть создан функцией CreateFilt() того же класса, заполнен, и передан в функцию Init().


>0 - инициализация объекта в соответствии с фильтром pFilt прошла успешно
0 - ошибка

Performance: Время выполнения функции сильно зависит от условий, заданных фильтром, и конкретного типа КАД. При необходимости, реализация этого метода можжет строить временные таблицы.

int

InitIteration(int order)

Descr: Инициализирует итератор объекта. После вызова этой функции, последовательными вызовами NextIteration можно перебрать все записи выборки, полученной в соответствии с фильтром, установленным функцией Init().

order IN

определяет порядок сортировки построенной выборки данных. Возможные значения этого аргумента зависят от конкретной реализации КАД. Значение 0 принимается всегда и не может быть отвергнуто как ошибочное.


>0 - итератор объекта инициализирован успешно
0 - ошибка

Performance: Как правило, время выполнения этой функции невелико.

int

NextIteration(out PPYVIEWITEM item)

Descr: Извлекает следующую запись выборки, построенной на основе фильтра, заданного в функции Init() и инициализированной вызовом InitIteration().

item OUT

Указатель на структуру, в которую записывается запись выборки данных. Действительная структура записи определяется конкретным типом КАД.


>0 - очередная запись успешно извлечена и присвоена по указателю item.
<0 - больше нет записей для извлечения. Запись по указателю item не изменяется.
0 - ошибка. Не следует далеть предположений относительно содержимого по указателю item.

SIterCounter GetIterCounter()

Descr: Возвращает счетчик итераций, изменяемый вызовами NextIteration(). Возвращаемый счетчик несет чисто информационную (декоративную) нагрузку. Он никак не используется при фактической работе методов InitIteration() и NextIteration(), но лишь изменяется ими. Кроме того, не все (но все же, подавляющее большинство) КАД корректно реализуют этот метод.

int

GetTotal(out PPYVIEWTOTAL total)

Descr: Возвращает итоговые значения выборки, инициализированной методом Init().

total OUT

Указатель на структуру, в которую записываются занчения итоговых показателей выборки. Действительная структура total определяется конкретным типом КАД.


>0 - функция выполнена успешно - итоговые данные занесены по указателю total.
<0 - функция не поддерживается
0 - ошибка

Перечисление PpyVSubstGrpGoods Descr: Значения параметра подстановки товара. Используется в контроллерах анализа данных.
_sggNone = 0
Без подстановки.
_sggGeneric
Обобщение. Если товар является членом обощения, то подставляется это обобщение. В противном
случае - остается тот же товар.
_sggGroup
Родительская группа (непосредственная родительская группа).
_sggManuf
Производитель.
_sggDimX
Размерность X классифицированного товара. Если товар не классифицирова, либо размерность X для него не определена, то остается тот же товар.
_sggDimY
Размерность Y классифицированного товара. Если товар не классифицирова, либо размерность Y для него не определена, то остается тот же товар.
_sggDimZ
Размерность Z классифицированного товара. Если товар не классифицирова, либо размерность Z для него не определена, то остается тот же товар.
_sggClsKind
Вид классифицированного товара. Если товар не классифицирова, либо вид для него не определен, то остается тот же товар.
_sggClsGrade
Сортность классифицированного товара. Если товар не классифицирова, либо сортность для него не определена, то остается тот же товар.
_sggClsAddObj
Дополнительный объект классифицированного товара. Если товар не классифицирова, либо дополнительный классификатор для него не определен, то остается тот же товар.
_sggClsKind_Grade
Вид, сортность классифицированного товара. Если товар не классифицирован, то остается тот же товар.
_sggSuppl
Поставщик. Такая подстановка возможна только в тех случаях, когда расчет ведется в контексте товарных операций (то есть, существует привязка операции к лоту, из которого и можно получить поставщика).
_sggBrand
Торговая марка.
_sggClsKind_Grade_AddObj
Вид, сортность, доп объект классифицированного товара. Если товар не классифицирован, то остается тот же товар.
_sggClsKind_AddObj_Grade
Вид, доп объект, сортность классифицированного товара. Если товар не классифицирован, то остается тот же товар.
_sggSupplAgent
Агент поставщика. Агент поставщика извлекается как агент по документу прихода, которым был сформирован лот. Такая подстановка возможна только в тех случаях, когда расчет ведется в контексте товарных операций (то есть, существует привязка операции к лоту, из которого и можно получить требуемую информацию).
_sggLocation
Склад по операции. Такая подстановка возможна только в тех случаях, когда расчет ведется в контексте товарных операций (при этом в качестве склада, берется тот, к которому привязана операция). Класс StrAssocList
Реализует интерфейс IStrAssocList
Класс PPUtil
Реализует интерфейс IPapyrusUtil
Класс PPSession
Реализует интерфейс IPapyrusSession
Класс PPObjAccSheet
Реализует интерфейс IPapyrusObject
Комментарии по методам интерфейса IPapyrusObject

Класс PPObjArticle
Реализует интерфейс IPapyrusObject
Комментарии по методам интерфейса IPapyrusObject Класс PPObjCashNode
Реализует интерфейс IPapyrusObject
Комментарии по методам интерфейса IPapyrusObject

Класс PPViewTrfrAnlz
Реализует интерфейс IPapyrusView
Интерфейс IPpyFilt_TrfrAnlz Методы

void

SetPeriod(date low, date upp)

Descr: Устанавливает период документов, которые должны попасть в обработку

void

SetLotsPeriod(date low, date upp)

Descr: Устанавливает период поступления лотов, по которым должен проводится анализ. Если устанавливается не пустой период, то в анализ попадут только те товарные операции, которые привязаны к лотам, дата которых попадает в указанный период. Обращаем внимание на то, что имеется в виду именно дата лота, а не дата оригинального лота.

Свойства out SDateRange Period Период обрабатываемых операций. Для установки - SetPeriod out SDateRange LotsPeriod Период поступления лотов, которыми ограничиваются обрабатываемые операции. Для установки - SetLotsPeriod long OpID Вид операции (возможно обобщенной) long LocID Склад long SupplID Поставщик long ArID Если !0, то перебираются только те документы, у которых ObjectID == ArID long DlvrAddrID Адрес доставки. Если ArID == 0, то не используется // long AgentID Если !0, то перебираются только те документы, в которых установлен этот агент. long PsnCatID Категория персоналии long CityID Город контрагентов, по которым перебираются операции long GoodsGrpID Товарная группа, по которой ведется перебор операций. Если GoodsID != 0, то этот параметр игнорируется (используется только как ограничение выбора товара в диалоге) long GoodsID Товар, по которому ведется перебор операций (может быть обобщенным) PpyVTrfrAnlzFlags Flags Флаги фильтрации. Возможные значения определены перечислением PpyVTrfrAnlzFlags: tavfLabelOnly = 0x0001 Только помеченные операции: отбираются только те операции, которые привязаны к документам, помеченным признаком WL. tavfGByDate = 0x0002 Группировка по дате (только если выбран товар - GoodsID). Если флаг установлен, то все операции по товару группируются по датам. При этом расходы и приходы учитываются раздельно. tavfGetRest = 0x0004 Рассчитывать товарные остатки. tavfSubstPersonRAddr = 0x0008 При подстановке персоналии использовать фактический адрес. Если этот флаг не установлен, то используется юридический адрес. tavfSubstDlvrAddr = 0x0010 При подстановке персоналии использовать адрес доставки. tavfDiffByDlvrAddr = 0x0020 При группировке по контрагенту заменять контрагента на конкатенацию (контрагент+адрес доставки). tavfDontInitSubstNames = 0x0040 Не инициализировать имена подставляемых объектов. Эта опция экономит время подготовки данных если нет необходимости сортировать записи или выводить отчет на экран. tavfInitLocCount = 0x0080 Рассчитывать количество адресов доставки для каждого элемента группировки. Внутренний флаг (инициализируется программно) tavfCalcRest = 0x0100 Для группировки gGoods, gGoodsBill, gGoodsDate рассчитывать остатки tavfShowAllArticles = 0x0200 Показывать отсутствующие позиции контрагентов tavfShowAllAgents = 0x0400 Показывать отсутствующие позиции агентов tavfShowAllGoods = 0x0800 Показывать отсутствующие позиции товаров int InitOrd Порядок сортировки сформированной выборки. Возможны следующие значения: 0 - по умолчанию (на усмотрение внутренней реализации) 1 - по дате 2 - по наименованию товара 3 - по наименованию контрагента При использовании подстановки элементы выборки сортируются по результирующему значению. long CtKind Вид кросстабулированного отчета. Возможны следующие значения: 0 - без кросстабуляции 1 - кросстабуляция по дате (с учетом подстановки, если таковая определена) long CtVal Показатель, вычисляемый в кросстабулированном-отчете. Этот параметр значим только в том случае, если CtKind не равен 0. Допустимы следующие значения: 1 - сумма в ценах поступления 2 - сумма в чистых ценах реализации (с учетом скидки) 3 - сумма доходности по операции (разница между суммой в чистых ценах реализации и суммой в ценах поступления) 4 - процентная доходность (отношение суммы в чистых ценах реализации к сумме в ценах поступления умноженное на 100) 5 - количество адресов доставки, по строке PpyVTrfrAnlzGrouping Grp Параметр группировки. Возможные значения определены перечислением PpyVTrfrAnlzGrouping: tavgNone = 0 Без группировки tavgGoods = 1 По товару tavgCntragent = 2 По контрагенту tavgCntragentDate = 3 По контрагенту, дате tavgGoodsCntragent = 4 По товару, контрагенту tavgGoodsCntragentDate = 5 По товару, контрагенту, дате tavgGoodsBill = 6 По товару, документу tavgDateCntragentAgentGoods = 7 По дате, контрагенту, агенту, товару tavgGoodsDate = 8 По товару, дате tavgBillCntragent = 9 По документу, контрагенту PpyVSubstGrpGoods Sgg Подстановка товара. Варианты значений определены в описании перечисления PpyVSubstGrpGoods. PpyVSubstGrpPerson Sgp Подстановка персоналии. Варианты значений определены в описании перечисления PpyVSubstGrpPerson. PpyVSubstGrpDate Sgd Подстановка даты. Варианты значений определены в описании перечисления PpyVSubstGrpDate. Класс PPFiltTrfrAnlz Реализует интерфейс IPpyFilt_TrfrAnlz. Создавать экземпляр этого класса следует только посредством метода PPViewCCheck::CreateFilt(). Класс PPViewCCheck Реализует интерфейс IpapyrusView. Создавать экземпляр этого класса следует только посредством вызова метода PPSession::CreateView(ppvCCheck). Интерфейс IPpyFilt_CCheck Методы

void

SetPeriod(date low, date upp);

Descr: Устанавливает период перебора чеков.

Свойства long CashNodeID → PPOBJ_CASHNODE ИД кассового узла long CashNumber Номер кассового аппарата (не путать с кассовым узлом) long GoodsGrpID → PPOBJ_GOODSGROUP ИД группы товаров (допустимы: обыкновенные группы, группы верхнего уровня, альтернативные группы). Если это значение не нулевое, то чеки перебираются по строкам. long GoodsID → PPOBJ_GOODS ИД товара. Если это значение не нулевое, то чеки перебираются по строкам. long SCardSerID → PPOBJ_SCARDSERIES ИД серии дисконтных карт. Если SCardID не нулевое, то этот критерий игнорируется. long SCardID → PPOBJ_SCARD ИД дисконтной карты. Если значение не нулевое, то перебираются только те чеки, которые привязаны к выбранной карте. long CashierID → PPOBJ_PERSON ИД кассира. long AgentID → PPOBJ_ARTICLE ИД агента (официанта) long TableCode Номер стола long MinCode Минимальный номер чека (0 - не определено) long MaxCode Максимальный номер чека (0 - не определено) double MinAmount Минимальная сумма чека (0 - не определено) double MaxAmount Максимальная сумма чека (0 - не определено) double MinQtty Минимальное количество товара по строке (0 - не определено) double MaxQtty Максимальное количество товара по строке (0 - не определено) double AmountQuant Квант суммы чека или количества по строке для группировке по соответствующему критерию. Используется только при группировке по критериям: ccgAmount, ccgQtty PpyVCCheckFlags Flags Флаги фильтрации. Возможные значения определены перечислением PpyVCCheckFlags: ccfZeroSess = 0x0001 Только чеки по неопределенным кассовым сессиям ccfActiveSess = 0x0002 Только чеки активной синхронной кассовой сессии ccfCheckLines = 0x0004 Просматривать строки чеков (для группировки по товарам) ccfImmOpenPanel = 0x0008 Не влияет на состав выборки ccfShowSuspended = 0x0010 Показывать отложенные ccfSuspendedOnly = 0x0020 Только отложенные ccfRetOnly = 0x0040 Показывать только возвраты ccfShowJunk = 0x0080 Отложенные чеки, которые были загружены в панель чеков. Если панель аварийно завершила работу, то этот чек зависнет. ccfFillCashNodeID = 0x0100 Заполнять поле CashNodeID ccfNotPrintedOnly = 0x0200 Показывать только ненапечатанные чеки ccfCashOnly = 0x0400 Только чеки, проведенные за наличные ccfBankingOnly = 0x0800 Только чека, проведенные по безналичной оплате PpyVCCheckGrouping Grp Варианты группировки. Возможные значения определены перечислением PpyVCCheckGrouping: ccgNone = 0 Не группировать ccgTime = 1 По времени чека ccgDate = 2 По дате чека ccgCash = 3 По номеру кассового аппарата ccgCard = 4 По дисконтным картам ccgAmount = 5 По сумме чека (градация определяется свойством фильтра AmountQuant) ccgQtty = 6 По количеству в строке чека (градация определяется свойством фильтра AmountQuant) ccgGoods = 7 По товарам ccgCashiers = 8 По кассирам out SDateRange Period Период, в который должны попадать чеки из выборки. Устанавливать это свойство следует вызовом метода SetPeriod(). Замечание: дата чека может не совпадать с датой кассовой сессии, к которой это чек относится. time MinTime Нижнее время отсечки выборки time MaxTime Верхнее время отсечки выборки long WeekDays Битовая маска дней недели, которым следует ограничить выборку. Если WeekDays = 0, то маска считается неопределенной (все дни недели). Бит 0 соответствует воскресенью, бит 1 - понедельнику, бит 2 - вторнику и т.д. long HourBefore

Класс PPFiltCCheck Реализует интерфейс IPpyFilt_Ccheck. Создавать экземпляр этого класса следует только посредством метода PPViewCCheck::CreateFilt().