Новые проводки (постановка)
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) (Новая страница: « <syntaxhighlight lang="sql"> CREATE TABLE a2_entry ( id dintkey, companykey dintkey, entrydate dtimestamp_notnull, dt dforeig…») |
SYSDBA (обсуждение | вклад) |
||
| (не показаны 8 промежуточных версий 1 участника) | |||
| Строка 2: | Строка 2: | ||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
CREATE TABLE a2_entry ( | CREATE TABLE a2_entry ( | ||
| − | id | + | id dintkey, |
| − | + | ||
| − | + | /* | |
| − | + | Для сложных проводок мы имеем обязательно одну главную запись | |
| − | + | и несколько дополнительных дебетов или кредитов. | |
| − | + | */ | |
| − | + | masterentrykey dforeignkey, | |
| − | + | ||
| − | + | companykey dintkey, | |
| − | + | ||
| − | + | dtkey dintkey, | |
| − | + | ctkey dintkey, | |
| − | + | ||
| − | doctypekey | + | /* |
| − | + | Фиксируем не только дату, но и время проводки. | |
| − | bpseq | + | Там, где не принципиально или время не известно будем |
| − | + | использовать 00:00. | |
| − | + | */ | |
| − | + | entrydate dtimestamp_notnull, | |
| − | + | ||
| − | + | /* тип документа */ | |
| − | + | doctypekey dintkey, | |
| − | + | ||
| − | + | /* ИД записи в таблице документа */ | |
| − | + | docid dintkey, | |
| + | |||
| + | /* ИД шага из бизнес-процесса */ | ||
| + | bpseq dintkey, | ||
| + | |||
| + | /* | ||
| + | Предыдущая операция (проводка), если | ||
| + | имеем дело с последовательностью операций. | ||
| + | */ | ||
| + | prevkey dforeignkey, | ||
| + | |||
| + | |||
| + | FOREIGN KEY a2_fk_entry_masterentrykey (masterentrykey) | ||
| + | REFERENCES a2_entry (id) | ||
| + | ON DELETE CASCADE | ||
| + | ON UPDATE CASCADE, | ||
| + | FOREIGN KEY a2_fk_entry_companykey (companykey) | ||
| + | REFERENCES gd_ourcompany (companykey) | ||
| + | ON DELETE NO ACTION | ||
| + | ON UPDATE CASCADE, | ||
| + | FOREIGN KEY a2_fk_entry_dtkey (dtkey) | ||
| + | REFERENCES ac_account (id) | ||
| + | ON DELETE NO ACTION | ||
| + | ON UPDATE CASCADE, | ||
| + | FOREIGN KEY a2_fk_entry_ctkey (ctkey) | ||
| + | REFERENCES ac_account (id) | ||
| + | ON DELETE NO ACTION | ||
| + | ON UPDATE CASCADE, | ||
| + | FOREIGN KEY a2_fk_entry_prevkey (prevkey) | ||
| + | REFERENCES a2_entry (id) | ||
| + | ON DELETE NO ACTION | ||
| + | ON UPDATE CASCADE | ||
); | ); | ||
CREATE TABLE a2_some_doc ( | CREATE TABLE a2_some_doc ( | ||
id dintkey, | id dintkey, | ||
| − | docnumber ddocnumber, | + | |
| + | /* | ||
| + | Мы больше не ограничиваем структуру двумя уровнями вложенности | ||
| + | шапка-позиция. Документ может быть сложным с неограниченным количеством | ||
| + | уровней вложенности. upkey -- ссылка на таблицу верхнего уровня. | ||
| + | */ | ||
| + | masterkey dforeignkey, | ||
| + | |||
| + | /* | ||
| + | Следующие поля необязательны. Разработчик сам решает будут они | ||
| + | присутствовать в конкретном документе или нет. | ||
| + | */ | ||
| + | [docnumber ddocnumber,] | ||
| + | [docorder dinteger,] | ||
| + | |||
| + | [creationdate dcreationdate,] | ||
| + | [creatorkey dcreatorkey,] | ||
| + | [editiondate deditiondate,] | ||
| + | [editorkey deditorkey,] | ||
| + | [aview dsecurity,] | ||
| + | [achag dsecurity,] | ||
| + | [afull dsecurity,] | ||
| + | |||
| + | /* | ||
| + | Поля документа, содержащие объект, признаки, значения. | ||
| + | */ | ||
[attr1] | [attr1] | ||
... | ... | ||
[attrn] | [attrn] | ||
); | ); | ||
| + | </syntaxhighlight> | ||
| + | ==Пример использования== | ||
| − | CREATE TABLE | + | <syntaxhighlight lang="sql"> |
| − | + | CREATE TABLE | |
| − | + | ||
| − | + | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | |||
[[Category:Постановка]] | [[Category:Постановка]] | ||
Текущая версия на 14:20, 23 ноября 2016
CREATE TABLE a2_entry ( id dintkey, /* Для сложных проводок мы имеем обязательно одну главную запись и несколько дополнительных дебетов или кредитов. */ masterentrykey dforeignkey, companykey dintkey, dtkey dintkey, ctkey dintkey, /* Фиксируем не только дату, но и время проводки. Там, где не принципиально или время не известно будем использовать 00:00. */ entrydate dtimestamp_notnull, /* тип документа */ doctypekey dintkey, /* ИД записи в таблице документа */ docid dintkey, /* ИД шага из бизнес-процесса */ bpseq dintkey, /* Предыдущая операция (проводка), если имеем дело с последовательностью операций. */ prevkey dforeignkey, FOREIGN KEY a2_fk_entry_masterentrykey (masterentrykey) REFERENCES a2_entry (id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY a2_fk_entry_companykey (companykey) REFERENCES gd_ourcompany (companykey) ON DELETE NO ACTION ON UPDATE CASCADE, FOREIGN KEY a2_fk_entry_dtkey (dtkey) REFERENCES ac_account (id) ON DELETE NO ACTION ON UPDATE CASCADE, FOREIGN KEY a2_fk_entry_ctkey (ctkey) REFERENCES ac_account (id) ON DELETE NO ACTION ON UPDATE CASCADE, FOREIGN KEY a2_fk_entry_prevkey (prevkey) REFERENCES a2_entry (id) ON DELETE NO ACTION ON UPDATE CASCADE ); CREATE TABLE a2_some_doc ( id dintkey, /* Мы больше не ограничиваем структуру двумя уровнями вложенности шапка-позиция. Документ может быть сложным с неограниченным количеством уровней вложенности. upkey -- ссылка на таблицу верхнего уровня. */ masterkey dforeignkey, /* Следующие поля необязательны. Разработчик сам решает будут они присутствовать в конкретном документе или нет. */ [docnumber ddocnumber,] [docorder dinteger,] [creationdate dcreationdate,] [creatorkey dcreatorkey,] [editiondate deditiondate,] [editorkey deditorkey,] [aview dsecurity,] [achag dsecurity,] [afull dsecurity,] /* Поля документа, содержащие объект, признаки, значения. */ [attr1] ... [attrn] );
[править] Пример использования
CREATE TABLE