Глава 8. ТИПЫ ДОКУМЕНТОВ
Системная таблица DOC_JOURNAL
Все документы регистрируются в общем журнале - системной таблице DOC
_ JOURNAL.
Системная таблица DOC_JOURNAL
Название поля |
Тип данных |
Назначение |
ID |
INTEGER |
Внутренний ID документа |
DOC_DIR_ID |
INTEGER |
Внутренний ID папки |
DOC_NAME |
VARCHAR(128) |
Отформатированное наименование документа |
DOC_TYPE_ID |
INTEGER |
Внутренний ID типа документов |
DOC_NO |
VARCHAR(80) |
Номер документа |
DOC_DATE |
TIMESTAMP |
Дата документа |
DOC_AMOUNT |
DECIMAL(18, 5) |
Сумма документа |
После создания нового типа документов, его главная таблица снабжается
тремя триггерами. Например, текст триггера AFTER INSERT для
документа с названием главной таблицы SALE выглядит так:
CREATE TRIGGER SALE_SN_INSERT FOR SALE
ACTIVE AFTER INSERT POSITION 200
AS
BEGIN
/*Текст этого триггера создан системой Allegro.*/
EXECUTE PROCEDURE SALE_SET_NAMES(NEW.ID);
END
После вставки, изменения или удаления документа соответствующий триггер вызывает
процедуру <имя_главной_таблицы>__SET_
NAMES, передавая в нее ID документа в качестве параметра
. Текст процедуры <имя_главной_таблицы>__
SET_NAMES создается системой Allegro автоматически, и зависит
от настроек в «Дополнительных свойствах» документа. Например
, эта процедура может выглядеть так:
CREATE PROCEDURE SALE_SET_NAMES(DOC_ID INTEGER)
AS
BEGIN
/*Текст данной процедуры создан системой Allegro автоматически.*/
/*Не меняйте этот текст. Ваши изменения могут быть утеряны*/
IF (DOC_ID IS NULL) THEN
DELETE FROM DOC_JOURNAL WHERE DOC_TYPE_ID = 112;
ELSE
DELETE FROM DOC_JOURNAL WHERE ID = :DOC_ID;
IF (DOC_ID IS NULL) THEN
INSERT INTO DOC_JOURNAL(ID, DOC_DIR_ID, DOC_NAME, DOC_TYPE_ID, DOC_NO, DOC_DATE, DOC_AMOUNT)
SELECT
D.ID, D.DIR_ID, G.DOC_NAME, 112,
NULL, D.ADATE, D.AMOUNT
FROM
SALE_GET_NAMES(:DOC_ID,NULL) G, SALE D
WHERE
D.ID = G.DOC_ID;
ELSE
INSERT INTO DOC_JOURNAL(ID, DOC_DIR_ID, DOC_NAME, DOC_TYPE_ID, DOC_NO, DOC_DATE, DOC_AMOUNT)
SELECT
D.ID, D.DIR_ID, G.DOC_NAME, 112,
NULL, D.ADATE, D.AMOUNT
FROM
SALE_GET_NAMES(:DOC_ID,NULL) G, SALE D
WHERE
D.ID = :DOC_ID;
END
|