Глава 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
 
 
               |