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

Глава 10. БУХГАЛТЕРСКИЕ ПРОВОДКИ

Шаблоны операций, системные таблицы TEMPLATE, TEMPLATE_DEF

Allegro позволяет осуществлять как ручные бухгалтерские проводки, так и автоматические. Автоматические проводки формируются на основе документов и шаблонов операций. Каждый тип документа может иметь несколько шаблонов операций . Шаблоны операций можно легко настраивать. Изменив шаблон операции , мы всегда можем изменить способ проведения всех документов определенного типа. Это создает большую гибкость как при разработке конфигурации , так и при ее дальнейшем использовании. Каждый шаблон имеет название операции и название хранимой процедуры, которая создает набор проводок в формате журнала операций. Если мы перенастроим шаблон, программа автоматически изменит текст этой хранимой процедуры. Каждый шаблон содержит, кроме того, условие срабатывания, что позволяет по-разному проводить одни и те же типы документов, в зависимости от каких-то признаков в самих документах. Кроме того, в шаблоне может быть указан диапазон дат, для которых он действует. Это означает возможность провести документы до какой-то даты с помощью одного шаблона, а после этой даты – с помощью другого шаблона.

Каждый шаблон содержит имя атрибута (поля) документа, откуда берется дата операции.

Каждый шаблон содержит набор «записей по счетам», в каждой из которых указывается:

  • вид записи (в дебет или в кредит)
  • бухгалтерский счет (счет указывается явно или в виде ссылки на поле документа, из которого следует получить внутренний номер ACC_ID счета)
  • объект аналитического учета (указывается ссылка на поле документа, из которого следует брать внутренний номер ID объекта)
  • сумма (указывается ссылка на поле документа, из которого берется сумма этой записи)
  • слой (указывается явно или в виде ссылки на поле документа, из которого берется внутренний номер LAYER_ID слоя)
  • количество (указывается ссылка на поле документа, из которого берется количество этой записи)

На самом деле даже ручные проводки осуществляются программой при помощи шаблонов. Ручные проводки хранятся в типе документов «Ручная операция» (шапки - в таблице GAAP, записи по счетам – в таблице GAAP_POS). Хранимая процедура шаблона ручных операций называется GAAP_TEMPLATE.

Ниже показаны структуры таблиц, в которых хранятся сведения о шаблонах операций, на основе которых программа формирует тексты соответствующих хранимых процедур.

Системная таблица TEMPLATE


Название поля Тип данных Назначение
TEMPLATE_ID INTEGER Внутренний номер ID шаблона
NAME VARCHAR(50) Название бухгалтерской операции
STOREDPROC_NAME VARCHAR(31) Название хранимой процедуры, возвращающей проводки в формате журнала операций
SWITCH_SOURCE_FIELD VARCHAR(31) Имя поля документа, в котором содержится условие проведения. Если значение этого поля в документе равно значению поля SWITCH _VALUE шаблона, то операция будет проведена.
SWITCH_VALUE INTEGER Значение условия проведения
OPER_DATE_SOURCE_FIELD VARCHAR(31) Имя поля документа, из которого берется дата операции
DOC_TYPE_ID INTEGER Внутренний ID типа документа
START_DATE DATE Стартовая дата диапазона срабатывания шаблона. Если NULL, то начало диапазона дат совпадает с глобальной датой начала периода.
END_DATE DATE Крайняя дата диапазона срабатывания шаблона. Если NULL, то ограничений по сроку работы шаблона нет
IS_CHANGED SMALLINT Признак того, что шаблон был изменен. Используется для перепроведения всех документов этого типа с использованием данного шаблона. 0 – шаблон не изменялся 1 – шаблон был изменен пользователем

Системная таблица TEMPLATE_DEF


Название поля Тип данных Назначение
TEMPLATE_ID INTEGER Внутренний номер ID шаблона
OPER_POS INTEGER Порядковый номер строки генерируемого набора
IS_CREDIT INTEGER Тип записи (явно) 0 – в дебет 1 – в кредит
IS_CREDIT_SOURCE_FIELD VARCHAR(31) Имя поля документа, в котором содержится тип записи. Если тип записи указан явно, то NULL
ACC_ID INTEGER Внутренний ACC_ID счета (явно)
ACC_ID_SOURCE_FIELD VARCHAR(31) Имя поля документа, из которого берется ACC_ID счета. Если счет указан явно, то NULL
OBJECT_ID_SOURCE_FIELD VARCHAR(31) Имя поля документа, из которого берется ID объекта аналитического учета.
AMOUNT_MINUS SMALLINT Признак того, что знак суммы следует изменить на противоположный 0 – знак не изменять 1 – изменить знак суммы
AMOUNT_SOURCE_FIELD VARCHAR(31) Имя поля документа, из которого берется сумма
AMOUNT_FORMULA VARCHAR(255) Формула для расчета суммы. Могут использоваться символы вида Sn , где n-номер строки набора, а S -сумма в этой строке. Например, 1. 2*S3 будет означать сумму третьей строки набора, умноженную на 1,2
LAYER_ID INTEGER Внутренний LAYER_ID слоя (явно)
LAYER_ID_SOURCE_FIELD VARCHAR(31) Имя поля документа, из которого берется LAYER_ID . Если слой указан явно, то NULL
QUANTITY_MINUS SMALLINT Признак того, что знак количества следует изменить на противоположный 0 – знак не изменять 1 – изменить знак количества
QUANTITY_SOURCE_FIELD VARCHAR(31) Имя поля документа, из которого берется количество
QUANTITY_FORMULA VARCHAR(255) Формула для расчета количества. Могут использоваться символы вида Qn , где n-номер строки набора, а Q -количество в этой строке. Например, Q1 будет означать количество первой строки набора

Для примера приведем текст хранимой процедуры, автоматически сформированный шаблоном ручных операций:

CREATE PROCEDURE GAAP_TEMPLATE(OP_DATE1 DATE, OP_DATE2 DATE, FOR_DOC_ID INTEGER)
RETURNS(
  OPER_DATE DATE,
  ACC_ID INTEGER,
  LAYER_ID INTEGER,
  OBJECT_ID INTEGER,
  TEMPLATE_ID INTEGER,
  DOC_ID INTEGER,
  IS_CREDIT INTEGER,
  DEBIT DECIMAL(18, 2),
  CREDIT DECIMAL(18, 2),
  QDEBIT DECIMAL(18, 3),
  QCREDIT DECIMAL(18, 3),
  DOC_N INTEGER,
  OPER_POS INTEGER
)
AS
DECLARE VARIABLE AMOUNT   DECIMAL(18,2);
DECLARE VARIABLE QUANTITY DECIMAL(18,3);
DECLARE VARIABLE V1 INTEGER;
DECLARE VARIABLE V2 INTEGER;
DECLARE VARIABLE V3 INTEGER;
DECLARE VARIABLE V4 DECIMAL(18,2);
DECLARE VARIABLE V5 INTEGER;
DECLARE VARIABLE V6 DECIMAL(18,3);
DECLARE VARIABLE S1 DECIMAL(18,2);
DECLARE VARIABLE Q1 DECIMAL(18,3);
BEGIN
  TEMPLATE_ID = 1;
  FOR SELECT
    GAAP.ID,
    GAAP.OPER_DATE,
    GAAP_POS.IS_CREDIT,
    GAAP_POS.ACC,
    GAAP_POS.OBJ,
    GAAP_POS.AMOUNT,
    GAAP_POS.LAYER,
    GAAP_POS.QUANTITY,
    GAAP_POS.N
  FROM
    GAAP, GAAP_POS
  WHERE
    ((:OP_DATE1 IS NULL) OR (GAAP.OPER_DATE >= :OP_DATE1)) AND
    ((:OP_DATE2 IS NULL) OR (GAAP.OPER_DATE <= :OP_DATE2)) AND
    ((:FOR_DOC_ID IS NULL) OR (GAAP.ID = :FOR_DOC_ID)) AND
    GAAP.ID = GAAP_POS.ID
  INTO :DOC_ID, :OPER_DATE, :V1, :V2, :V3, :V4, :V5, :V6, :DOC_N
  DO
  BEGIN
    IS_CREDIT = V1;
    ACC_ID = V2;
    OBJECT_ID = V3;
    OPER_POS = 1;
    AMOUNT = V4;
    S1 = AMOUNT;
    QUANTITY = V6;
    Q1 = QUANTITY;
    LAYER_ID = V5;
    IF (IS_CREDIT = 0) THEN
    BEGIN
      DEBIT = AMOUNT; QDEBIT = QUANTITY; CREDIT = 0; QCREDIT = 0;
    END
    ELSE
    BEGIN
      DEBIT = 0; QDEBIT = 0; CREDIT = AMOUNT; QCREDIT = QUANTITY;
    END
    SUSPEND; /*waiting for fetch operation*/
  END
END

С помощью простого запроса к этой процедуре мы можем, например, получить все ручные проводки, датированные с 01 .01.2003 по 01.03.2003 :

select * from gaap_template(’01.01.2003’,’01.03.2003’,NULL)

Если же нас интересует одна отдельно взятая «Ручная операция », скажем с ID=11043, то мы можем получить ее с помощью запроса:

select * from gaap_template(NULL, NULL, 11043)


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