На главную   На главную   Форумы Новости Документация Скачать Купить  
Регистрация  
Система Allegro
Oб Allegro Характеристики Пример конфигурации Документация База ошибок Развитие
Версия для печати К списку книг Вернуться к оглавлению Предыдущий параграф Следующий параграф
Поиск по книге

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


Система Allegro. Руководство разработчика Наверх