Объектно-реляционная БД Ultima-S

Описание структур машины проводок

Замечание. Не приводится описание таблиц и полей системы поддержки 20 уровней аналитики и категориальной аналитики.

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

Таблица заголовков проводок

Заголовок проводки крепится к Docs по ключу UDN. В заголовке указан план счетов, счета дебета и кредита, ссылка документ породивший проводку.

CREATE TABLE dbo.Pass (

UDN int NOT NULL , -- UDN код проводки

AccId int NOT NULL , -- План счетов проводки

Processed tinyint NOT NULL , -- Признак проведенности

Acc1 int NOT NULL , -- Счет дебета (UDN-код)

Acc2 int NOT NULL , -- Счет кредита

Typ tinyint NOT NULL , -- Тип проводки (не расшифровывается)

Doc int NOT NULL – Документ-основание проводки

)

 

Таблица комплекта (содержания) проводок

Описание аналитики (u1/u13) и сумм (i,s,v) в проводке содержится в таблице Complect. Она сцеплена с проводкой по ключу UDN.

Следует заметить, что в системе Ultima-S проводки обладают уникальным качеством. Они множественные на уровне архитектуры. Имеется в виду то, что проводка может содержать не как обычно набор-строку аналитик и сумму, а целую таблицу наборов аналитик и сумм. Например, проводка к накладной в Ultima-S проводит одна сразу весь набор товаров, а не серией в 20-100 проводок как системах типа 1С. Надо ли указывать, что данный подход позволяет достигнуть очень высокой скорости формирования и проведения проводок.

CREATE TABLE dbo.Complect (

ComplectKey int IDENTITY (1, 1) NOT NULL , -- Код строки комплекта проводки

UDN int NOT NULL , -- Ссылка на код проводки (Pass.UDN)

u1 int NOT NULL ,

u2 int NOT NULL ,

u3 int NOT NULL ,

u4 int NOT NULL ,

u5 int NOT NULL ,

u6 int NULL ,

u7 int NULL ,

u8 int NULL ,

u9 int NULL ,

u10 int NULL ,

u11 int NULL ,

u12 int NULL ,

u13 int NULL ,

i float NOT NULL , -- количество

s money NOT NULL , -- сумма в учетной валюте

v money NULL -- сумма в валюте документа

doc int

)

Грануляция дат (номера периода для сальдовых отчетов)

Сальдовые отчеты всегда рассматриваются в определенном интервале дат. Конечно можно учет по датам вести в формате datetime или суррогате varchar (что-то типа '19990102', как в ForSale и 1С). Однако, зная что сальдовый учет ведется с неким минимальным периодом (день, неделя, месяц), то более производительный вариант будет использовать в для учета по датам номера периодов, так называеммые "граннуляции периодов". Для их описания служат следующие таблицы.

Таблица-заголовок объекта граннуляции

CREATE TABLE dbo.Gran (

UDN int NOT NULL ,

Closed int NOT NULL , -- Номер закрытого периода

Origin tinyint NOT NULL , -- Вид граннуляции (день, неделя, месяц)

Auto tinyint NOT NULL – Автоматическое наращивание номеров периодов

)

Таблица описания периодов и их номеров

CREATE TABLE dbo.GranDates (

UDN int NOT NULL ,

Cindex int NOT NULL , -- Номер периода

d1 datetime NOT NULL , -- Начальная дата

d2 datetime NOT NULL -- Конечная дата

)

Заголовок счета

Следует отметить, что в Ultima-S счета как и все объекты связываются по кодам объектов (UDN), а не по номерам. Такой подход позволяет достигнуть более высокой скорости и целостности. Номер и название счета хранятся в Docs.No и Docs.Name

Остальная информация описывается в отдельной таблице связанной по ключу UDN

CREATE TABLE dbo.Acc (

UDN int NOT NULL ,

AccId int NOT NULL , -- План счетов

Closed int NOT NULL , -- Номер закрытого периода

Typ int NOT NULL , -- Тип счета (активный, пассивный, активно-пассивный, забалансовый)

Cache smallint NOT NULL

)

Описание видов аналитики на счету

Для этого имеется специальная таблица Storage, в которой в полях u2/u10 находятся UDN папок в дереве Docs, которые являются справочниками привязанными к счету. В u1 находится ссылка на объект-граннуляцию, указывающий в какой периодике ведется учет по счету.

CREATE TABLE dbo.Storage (

UDN int NOT NULL , -- Код счета (Acc.UDN)

u1 int NOT NULL ,

u2 int NOT NULL ,

u3 int NOT NULL ,

u4 int NOT NULL ,

u5 int NOT NULL ,

u6 int NULL ,

u7 int NULL ,

u8 int NULL ,

u9 int NULL ,

u10 int NULL ,

u11 int NULL ,

u12 int NULL ,

u13 int NULL

)

Сальдовая таблица

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

В u1 находится номер периода, в u2/u8 аналитики (напоминаем, что приводится вариант без поддержки 20 уровней). Назначение полей с префиксами i, s, v приводим в табличке ниже.

CREATE TABLE dbo.Saldo (

UDN int NOT NULL , -- Код счета (Acc.UDN)

u1 int NOT NULL , -- Номер периода

u2 int NOT NULL ,

u3 int NOT NULL ,

u4 int NOT NULL ,

u5 int NOT NULL ,

u6 int NULL ,

u7 int NULL ,

u8 int NULL ,

id float NOT NULL ,

ic float NOT NULL ,

idt float NOT NULL ,

ict float NOT NULL ,

sd money NOT NULL ,

sc money NOT NULL ,

sdt money NOT NULL ,

sct money NOT NULL ,

vc money NULL ,

vd money NULL ,

vct money NULL ,

vdt money NULL

)

Количество (дебет, кредит) Сумма в учетной валюте (дебет, кредит) Сумма в валюте проводки (дебет, кредит)
Сальдо на текущий период (u1) ict idt sct sdt vct vdt
Оборот за период (u1) ic id sc sd vc vd