Язык сайта :

Главная
Новости
Продукты
Партнеры
Статьи
Контакты
Фоторепортажи
Download
Вакансии
О компании
 Версия для печати
Объектная модель SMarket 4.0. Объекты оперативного и бухучета
Объект Database

Объект Database представляет информационную базу, с которой работает приложение.
Выбор рабочей информационной базы осуществляется пользователем при загрузке приложения SMarket  из списка баз данных.
Объект Database создается в единственном экземпляре при загрузке программы. Доступ к объекту  можно получить вызовом свойства Database объекта Application.
Объект Database  может находиться в одном из двух режимов:
1. Режим доступа к данным.
2. Режим редактирования базы данных

Режим доступа к данным – устанавливается по умолчанию после загрузки программы. В этом режиме - объект Database предоставляет методы для открытия объектов доступа к данным  таким как:  справочники, документы, планы счетов и др. А также используется для работы с транзакциями.
Транзакции следует использовать при необходимости внесения в базу данных серии связанных изменений.
Обычно транзакции используются для поддержания целостности данных - если необходимо обновить элементы в нескольких объектах и удостовериться,  что все изменения были внесены, либо отменены. Например, при сохранении  документа изменения могут вносятся, как в сам документ, так  и в проводки, движения и справочники с ним связанные. Если изменения выполнятся не полностью, может нарушиться целостность базы данных. Поэтому перед началом обновления следует вызвать метод BeginTrans, который откроет транзакцию. А после внесения всех изменений следует вызвать метод CommitTrans. Метод RollBackTrans - применяется в случае неудачного выполнения обновлений или при обнаружении ошибки для отмены всех изменений.
После применения метода CommitTrans -  нельзя отменить внесенные в базу данных изменения, если транзакция не является вложенной. Перед завершением внешней транзакции необходимо завершить все вложенные транзакции.

Замечания
1. Применение транзакций существенно сокращает время обработки данных за счет сокращения количества дисковых операций. Т.к. во время  транзакции все изменения выполняются в буфере, который обычно хранится в оперативной памяти компьютера.
2. Количество вложенных транзакций не должно превышать семи, в противном случае возникает обрабатываемая ошибка времени выполнения.

Режим  редактирования структуры информационной базы. Переход в этот режим происходит при вызове метода BeginEdit. В этом режиме можно добавлять в базу новые объекты и редактировать и удалять существующие.  Завершение редактирования производится вызовом методов RollbackEdit или CommitEdit. RollbackEdit – завершить редактирование без сохранения изменений. CommitEdit – завершить редактирование с сохранения изменений, этот метод выполняется только в том случае, когда база данных открыта только одним приложением (т.е. монопольно).
Все объекты, доступ к которым организован при помощи методов объекта Database, можно разделить на две группы:
I. Динамические объекты доступа к данным, такие как Directory, DocumentList, AccountSet, Moving и другие. Они позволяют получать и изменять данные информационной базы, и доступны только в режиме доступа к данным. При переходе в режим редактирования все они сбрасываются.
II. Объекты описания, такие как DirectoryType, DocumentListType, MovingType. Эти объекты описывают структуру соответствующих им динамических объектов и объединяются в коллекции. В режиме доступа к данным они открыты только для чтения, а в режиме редактирования они позволяют изменять структуру базы данных.

Замечание. Некоторые объекты, такие как Variable и Enumeration в режиме доступа к данным - выступают как динамические объекты, а в режиме редактирования - как свои же описания.

Объект Directory

Directory (справочник) - динамический объект доступа к данным, предназначенный для работы со списками однородных записей. При помощи объектов Directory организуется ввод стандартной информации в другие объекты программы SMarket. Примерами использования объектов Directory могут служить списки товаров, организаций, сотрудников.
Структура объекта Directory определяется при помощи одноименного объекта DirectoryType, а набор всех объектов DirectoryType базы данных - задается при помощи коллекции DirectoryTypes.
Directory - могут иметь древовидную структуру, и состоять из групп и элементов групп. Такие объекты называются - многоуровневыми. Группы содержат в себе наборы элементов, объединенных по каким либо общим параметрам.
Например:
В Directory "Объекты",  всех поставщиков можно занести в группу "Поставщики", склады - в группу "Склады", секции - в группу "Секции" и т. д.
С точки зрения организации доступа к данным - объект Directory можно представить себе как таблицу, строки которой - являются элементами (записями) объекта, а столбцы представлены полями (объектами Field), объединенными в коллекцию Fields.

Объект Field

Объект Field  представляет поле объекта.
Свойство Value (значение) поля, содержит значение поля для текущей записи родительского объекта.
Свойство AsString
На ряду со свойство Value можно использовать свойство AsString.
Оно возвращает значение типа String, содержащее текстовое представление объекта информационной базы, который идентифицируется значением свойства Value. Для Directory – Name, AccontSet – Code, Document – Number.

Типы полей

Константа                            Описание
SmdbAccountSet                   Счет.
SmdbAccountSetType           План счетов.
SmdbAnalyticType                Тип аналитики.
SmdbBinary                           Binary (SQL 92).
SmdbBoolean                        Boolean (SQL 92).
SmdbByte                             Byte (SQL 92).
SmdbCurrency                      Currency (SQL 92).
SmdbDate                             Date (SQL 92).
SmdbDirectory                      Справочник.
SmdbDocument                    Значение документа.
SmdbDocumentType            Документ.
SmdbDouble                         Double (SQL 92).8 байт. Число с пл.точкой.  
SmdbEnumValue                   Значение перечисления.
SmdbGUID                            GUID (SQL 92).
SmdbInteger                        Integer (SQL 92). Для хранения целых чисел.
SmdbLong                             Long (SQL 92).
SmdbLongBinary                   LongBinary (SQL 92).
SmdbMemo                           Memo (SQL 92).
SmdbSingle                           Single (SQL 92).
SmdbText                             Text (SQL 92).
SmdbTime                             Time
SmdbUnknown                      Значение неопределенного типа.

У объектов Directory и AccountSet поля могут быть периодическими. В таком случае хранится история значений для каждой даты присвоения значения свойству Value. На одну дату может существовать только одно значение периодического поля.
У объекта Moving помимо обычных полей бывают поля группировки движений и поля значений движений. По первым во время группировки можно объединять записи с одинаковыми значениями и по вторым вычисляются суммы значений для сгруппированных записей.
Каждый элемент или группа Directory представляет собой запись, состоящую из двух основных полей Name и Code, предназначенных  для идентификации элемента справочника, и полей, определяемых пользователями. Записи многоуровневых объектов Directory имеют дополнительные поля IsGroup и  Group - для определения является ли запись группой, и к какой группе она относится.
Набор полей, определяемых пользователями, зависит от типа объекта Directory, и содержат в себе всю необходимую дополнительную информацию о конкретном элементе объекта.
Объект-описание DirectoryType позволяет производить настройку объекта Directory в режиме редактирования структуры информационной базы, а так же может использоваться для получения информации о структуре объекта Directory в режиме доступа к данным.
Создаются  и удаляются объекты DirectoryType при помощи методов коллекции DirectoryTypes - Add и Remove соответственно.
Для открытия объекта Directory применяется метод Database.OpenDirectory, который, в зависимости от аргументов, позволяет получить объект Directory в виде таблицы или динамического набора записей.

Таблицы и динамические наборы записей

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

Синтаксис SMSQL

Синтаксис запроса имеет следующие составляющие:
1.Необязательный список полей-ссылок. Поля-ссылки создаются на основании полей типа справочник, документ или счет для получения  информации о значения различных полей соответствующих  объектов.
Например. Если в справочнике поставки имеется поле «Товар», а в справочнике «Товар» - поле «Единицы измерения», то для того, чтобы получить информацию об единицах измерения товара проходящего по поставке, необходимо при открытии справочника «Поставки» объявить поле ссылку –  Товар.Ед.Измерения, которое в последствии можно использовать для отбора и сортировок на ряду с другими полями этого объекта.
2. Предложение WHERE
Посредством предложения WHERE при выполнении запросаSMSQL SMarket осуществляет выборку записей объекта, удовлетворяющих некому критерию. Если предложение WHERE опущено, возвращаются все записи набора.
Критерий представляет собой правильное логическое выражение, состоящее из названий полей объекта (включая псевдонимы полей-ссылок), операторовSMSQL и функцийSMSQL*. Это выражение вычисляется для каждой записи объекта с подстановкой вместо имен полей их значений (свойство Field.Value), и отбираются только те записи, для которых значение выражения равняется True.
Для полей,  которые ссылаются на объекты Directory, AccountSet, Document, AnalyticType, AccountSetType, EnumValue* - существует возможность использовать в  критерии не только свойство Value, но и свойство AsString. Для этого достаточно после имени поля поставить знак $.
В SMSQL можно использовать следующие операторы:
Арифметические операторы:
^        Оператор возведения в степень.
*         Оператор умножения.
/          Оператор деления.
          Оператор целочисленного деления.
Mod     Оператор остатка от деления.
+         Оператор сложения.
-          Оператор вычитания.
Операторы сравнения
=, <>, >, <, >=, <=
Is, Like, Between ...And
Операторы конкатенации:
& и + используются для сложения строк.
Логические операторы
And, Or, Xor, Not.
3. Предложение ORDER BY.
Задает последовательность полей и выражений, по которым будет проводиться сортировка.
При указании нескольких синонимов записи сначала сортируются по первому синониму, затем записи, имеющие одинаковые значения в столбце сортируются по второму перечисленному столбцу и так далее.  

Объект AccountSet

AccountSet (план счетов) - динамический объект доступа к данным,  предназначенный для работы с бухгалтерскими счетами и состоит из:
· двух основных полей Name и Code, предназначенных  для идентификации счета,  
· полей IsGroup и  Group для определения является ли запись группой и к какой группе она относится,
· поля Level для определения уровня вложенности счета в AccountSet,
· полей IsCurrency, IsCount, IsSingle для задания валютных, количественных и забалансовых счетов,
· полей ActivityType для задания типа активности счета,
· полей типа аналитики AnalyticType1, AnalyticType2, AnalyticType3, AnalyticType4 для задания типов аналитик счета, в эти поля присваиваются значения объектов из коллекции AnalyticTypes,
· набора полей, определяемых пользователями. Зависит от типа объекта AccountSet  и содержат в себе всю необходимую дополнительную информацию о конкретном счете объекта.
Объект работает в соответствии с настройками, заданными для одноименного объекта AccountSetType.
Для открытия объекта AccountSet применяется метод Database.OpenAccountSet, который позволяет получить объект AccountSet  в виде таблицы или динамического набора записей.

Объект AnalyticType

Этот объект используется  для ведения аналитического учета, и представляет собой ссылку на один из объектов AccountSet, AccountSetType, Directory, Document, EnumValue.
Причем эта ссылка может быть как на конкректный объект (например: Directory с именем "Goods"), так и на любой объект указанного типа.
Создаются  и удаляются объекты AnalyticType при помощи методов коллекции AnalyticType - Add и Remove соответственно.

Объект DocumentList

Объект DocumentList (Список документов) - динамический объект доступа к данным, представляет собой список всех созданных документов и предоставляет методы для работы с ними. Объект работает в соответствии с настройками, заданными для объекта DocumentListType.
Каждая запись объекта DocumentList содержит информацию о созданном документе, а его поля являются полями общими  для всех объектов Document и подразделяются на системные поля (заранее созданные и неудаляемые)  и добавленные пользователем:
· Поле Type - определяет тип документа ("Приходная накладная", "Внутреннее перемещение" и др.), и содержит значения типа DocumentType.
· Поля Date, Time - содержат дату и время создания документа.
· Поле Number - содержит номер документа в виде строки.
· Поле HasEntries - содержит информацию о том, проводился ли документ.
· Поле HasMovings- содержит информацию о том, создавались ли для документа движения.
· Поле Folder – указывает в какой папке находится документ.
Для открытия объекта DocumentList применяется метод Database.OpenDocumentList, который позволяет получить объект DocumentList в виде таблицы или динамического набора записей.
Для создания нового документа используется метод NewDocument объекта DocumentList, для открытия существующего необходимо сделать текущей запись DocumentList об этом документе, и применить один из методов OpenDocument или EditDocument:  
· Метод OpenDocument - в основном используется  для быстрого открытия документа для чтения. Редактирования документа открытого этим методом необходимо производить под транзакцией.
· Метод EditDocument - используется для редактирования документов из формы. При применении этого метода (как и метода NewDocument) все данные о документе копируются в промежуточный буфер и все последующие изменения производятся в этом буфере, не влияя на содержимое базы данных. По завершении редактирования, чтобы занести все изменения документа в базу необходимо применить метод Save.
Каждый документ в DocumentList имеет уникальное значение, которое можно получить из свойства DocumentList.Value, и использовать для записи значений в поля типа smdbDocument, и для поиска записи документа в списке DocumentList  методом FindValue.

Объект Document

Объект Document  - динамический объект доступа к данным, предоставляет средства для работы с документами. Каждый документ состоит из заголовка документа и записей документа, представляемой объектом Recordset.  Структура объекта Document описывается объектами DocumentType и DocumentListType. При помощи объекта Document можно создавать проводки и работать с движениями.
Заголовок документа состоит из одной записи с коллекцией полей Fields, доступ к которой можно получить при помощи свойства Fields. Поля заголовка документа - это поля, которые обычно печатаются в заголовочной или заключительной части документа. Коллекция этих полей создается при открытии документа, и включает в себя:
· Поля, общие для всех типов документов, эти поля описываются при помощи объекта DocumentListType.
· Поля, специфические для данного типа документа, эти поля описываются соответствующим объектом DocumentType в коллекции Fields, получаемой при помощи свойства Fields. Все эти поля определяются пользователем.
· Поля-ссылки, указанные в аргументе запросSMSQL при открытии объекта одним из методов NewDocument, EditDocument, OpenDocument объекта DocumentList, если таковые имеются.

Записи документа обычно содержат информацию о товарах и услугах проходящих по этому документу и представлены объектом Recordset, доступ к которому можно получить при помощи метода OpenRecordSet объекта Document. Единственное обязательное поле этого объекта – поле Number.
Т.к. ряд документов не нуждается в наличие записей, в SMarket существует возможность создания типов документов без объекта Recordset. Такие документы в SMarket называются Операциями.
Проводки документа представлены объектом EntrySet, доступ к нему можно получить при помощи метода OpenEntrySet. Для удаления всех проводок документа применяется метод RemoveEntries.

Замечания.
Для документов, открытых методами NewDocument, EditDocument, применение метода Save приводит к автоматическому удалению проводок.
Движения документа создаются при помощи объектов Moving, открытых при помощи метода Database.OpenMoving. Для удаления всех движений, относящихся к документу, применяют метод RemoveMovings.

Замечание.
При проведении и создании движений документов, во избежания одновременного доступа нескольких пользователей к одним и тем же данным, рекомендуется использовать методы блокировки LockDatabase, UnlockDatabase.

Объект EntryList

Объект EntryList (список проводок) - динамический объект доступа к данным, предоставляет средства для работы со всеми проводками базы данных. Объект EntryList работает в соответствии с настройками, заданными для объекта EntryListType.
Для открытия объекта EntryList применяется метод Database.OpenEntryList, который позволяет получить объект EntryList в виде таблицы или динамического набора записей.
Поля, описанные объектом EntryListType:
- Поле Document - в котором хранится значение документа, к которому относится проводка. Тип поля smdbDocument.
- Поля Date, Time - в которых хранится дата и время создания документа, к которому относится проводка.
- Поле Number - порядковый номер проводки.
- Поля AccountDebit и AccountCredit - счета дебета и кредита. Поле Sum - сумма проводки.  
- Поле CurrencyType - значение валюты для валютных проводок. Если задано свойство Database.CurrencyDirectory - должно содержать значения из соответствующего справочника валют.  
- Поле CurrencySum - валютная сумма проводки.
- Поле Count - содержит количество для количественных проводок.
- Поле AccountSet - план счетов.
- Поля DebitAnalyticType1, ... , DebitAnalyticTypeN - содержат типы аналитик, связанных со счетом дебета (поле AccountDebit). Значение типа smdbAnalyticType. Количество полей зависит от значения свойства Database.MaxAnalyticTypes.
- Поля DebitAnalyticValue1, ... , DebitAnalyticValueN - содержат значения аналитик, связанных со счетом дебета (поле AccountDebit).
- Поля CreditAnalyticType1, ... , CreditAnalyticTypeN - содержат типы аналитик, связанных со счетом кредита.
- Поля CreditAnalyticValue1, ... , CreditAnalyticValueN - содержат значения аналитик, связанных со счетом кредита (поле AccountCredit).
Поля, определенные пользователем для объекта EntryListType.
Поля-ссылки, указанные в аргументе запросSMSQL при открытии объекта методом OpenEntryList.

Объект Moving

Объект Moving (движение) - динамический объект доступа к данным; предоставляет средства для работы с движениями документов (объектов типа Document). Структура объекта Moving описывается объектом MovingType.
Объект Moving предназначен для хранения информации о движениях материальных и финансовых средств в товарных и бухгалтерских операциях. Информация, содержащаяся в объекте Moving, обычно связана с объектами Document. На этапе проведения документа в объект Moving заносится запись о движении, которая впоследствии может быть отредактирована, изменена и считана. На основании набора подобных записей может быть получена информация об остатках товарно-финансовых средств на конкретный момент времени либо об оборотах средств за какой-либо период. Данную информацию можно получить, используя методы CreateBalance, CreateTurnover объекта Moving.
Для открытия объекта Moving применяется метод Database.OpenMoving, который позволяет получить объект Moving в виде таблицы или динамического набора записей.
Коллекция полей создается при открытии объекта и включает в себя:
Поля, описанные объектом MovingType:
- Поле Document - в котором хранится значение документа, к которому относится движение. Тип поля smdbDocument. Значение доступно только для чтения, заполняется автоматически при создании новой записи методом AddNew.
Поля, определенные пользователем для объекта MovingType:
- Поля группировки движений. Данное поле либо совокупность подобных полей однозначно определяет индивидуальность записи движения. Принцип получения остатков и оборотов объекта Moving основан на суммировании полей значений движений для тех записей, у которых значения поля (полей)  группировки движений совпадают. Также поля группировки движений могут использоваться для поиска и отбора записей в объекте Moving.
- Поля значений движений. Поле данного типа определяет количественные показатели движения. Поля значений движений используются для расчета (суммирования) остатков и оборотов средств.
- Обычные поля. Поля данного типа используются для хранения дополнительной информации о движении и не участвуют в отборе записей либо расчете остатков и оборотов средств.
Поля-ссылки, указанные в аргументе запросSMSQL при открытии объекта методом OpenMoving

Объект Numerator

Объект Numerator (нумератор) - предназначен для генерации последовательности целых положительных значений и используется в основном для автоматической нумерации документов.
Нумератор можно использовать для нумерации одного либо нескольких документов подстановкой в формулу NumeratorFormula для соответствующих объектов DocumentType.

Объект Variable

Объект Variable служит для хранения значений глобальных для базы данных, т.е. переменных, доступных для всех приложений, работающих с базой данных.
Сохраняемая переменная может быть периодической, в таком случае сохраняется значение и дата присвоения значения, а ранее присвоенные значения можно узнать, используя свойство Value с параметром Date. На одну дату может храниться только одно значение. Историю значений сохраняемой переменной можно получить при помощи свойства AsRecordSet.

Объект Enumeration

Объект Enumeration представляет перечисление и предназначен для работы с фиксированными списками значений. Примерами перечислений могут служить перечисления "Пол",  "Семейное положение", "Типы объектов хозяйственной деятельности", значения для которых можно задать в режиме редактирования базы данных.

Объект TmpRecordSet

Объект TmpRecordSet (временный набор записей) - динамический объект доступа к данным, предназначенный для временного хранения табличной информации. Создаются объекты TmpRecordSet во временной базе данных приложения и удаляются при закрытии приложения.
Основные отличия объекта TmpRecordSet от других динамических объектов доступа к данным заключаются в следующем:
- Сразу после своего создания методом TmpRecordSet выступает как объект-описание и позволяет редактировать содержимое своей коллекции Fields (добавлять и удалять поля).
- Редактирование структуры объекта TmpRecordSet производится в режиме доступа к данным.
- Завершается процесс редактирования  структуры объекта TmpRecordSet применением метода Open. При этом объект  сохраняет свою структуру и открывает доступ к содержимому своих записей, выступая уже в качестве объекта доступа к данным.
- При закрытии объекта TmpRecordSet все данные, хранящиеся в нем, удаляются.
- Объект TmpRecordSet доступен только для того приложения, в котором он создан. При закрытии приложения все объекты TmpRecordSet удаляются.

Объект  Calculation

Объект Calculation предоставляет средства для расчета балансовых остатков и оборотов по проводкам.
Для создания объекта Calculation в режиме доступа к данным применяется метод Database.CreateCalculation.
Чтобы воспользоваться объектом  Calculation для расчета балансовых остатков и оборотов по проводкам, нужно:
1. Задать ограничения на выбираемые проводки по плану счетов, счетам и аналитикам, валютам.
2. Применить метод CreateTurnover с указанием периода расчетов и порядка группировки значений. Результат расчета метод возвратит в виде объекта Recordset, структура которого описана в описании метода.
Для ускорения расчета баланса по тем проводкам, которые уже не планируется изменять, можно применять метод CalculateBalance, который рассчитывает и сохраняет баланс на указанную дату. При этом если были какие либо изменения по документам или проводкам, дата которых меньше рассчитанной,  то сохраненные балансовые остатки с более поздней датой автоматически удаляется.
Чтобы узнать дату последнего рассчитанного баланса, можно применить метод LastBalance. Для удаления балансовых остатков после определенной даты можно применить метод DeleteBalance.

Объект Folder
Объект Folder представляет папку для хранения документов и предназначен для организации системы прав доступа к документам. Права доступа к документам в папке задаются для группы пользователей.
Автор : Дмитрий Настенко, Валентин Вещунов, Евгений Енченко
Опубликовано : 09-01-2002, 14:07
Copyright (c) 1998-2022 ТФПК Лтд.