Замечание. Не приводится описание таблиц и полей системы поддержки 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 |