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

Глава 11. МНОГОМЕРНЫЕ РЕГИСТРЫ

Шаблоны операций с регистрами, системные таблицы REG_TEMPLATE, REG_TEMPLATE_FIELDS

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

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

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

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

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


Название поля Тип данных Назначение
REG_TEMPLATE_ID INTEGER Внутренний ID шаблона
REG_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 – шаблон был изменен пользователем

При создании нового шаблона значение поля REG_TEMPLATE_ ID формируется при помощи генератора REG_TEMPLATE_ID _GEN.

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


Название поля Тип данных Назначение
REG_TEMPLATE_ID INTEGER Внутренний номер ID шаблона
OPER_POS INTEGER Порядковый номер строки генерируемого набора
FIELD_NAME VARCHAR(31) Имя поля в таблице регистра
FIELD_SOURCE VARCHAR(31) Имя поля-источника в таблице документа
INVERT_FLAG SMALLINT Признак того, что знак числа следует изменить на противоположный («минус») 0 – знак не изменять 1 – изменить знак суммы
INTEGER_VALUE INTEGER Явное целое значение
VARCHAR_VALUE VARCHAR(50) Явное строковое значение

В качестве примера приведем текст хранимой процедуры, автоматически сформированный шаблоном проведения «документом межскладского перемещения» для складского регистра :

CREATE PROCEDURE DISPLACEMENT_REG_TEMPLATE

(OP_DATE1 DATE, OP_DATE2 DATE, FOR_DOC_ID INTEGER, FOR _DOC_N INTEGER)

RETURNS(

DOC_ID INTEGER, DOC_N INTEGER , REG_TEMPLATE_ID INTEGER, OP_ DATE DATE,

ACC INTEGER, GOODS INTEGER, INCOME INTEGER, INCOME_AMOUNT DECIMAL(18, 2),

OUTCOME INTEGER, OUTCOME_AMOUNT DECIMAL(18 , 2))

AS

DECLARE VARIABLE V1 INTEGER;

DECLARE VARIABLE V2 INTEGER;

DECLARE VARIABLE V3 DECIMAL(18,2);

DECLARE VARIABLE V4 INTEGER;

DECLARE VARIABLE V5 INTEGER;

BEGIN

/*Текст данной процедуры создан системой Allegro автоматически.*/

/*Не меняйте этот текст. Ваши изменения могут быть утеряны*/

REG_TEMPLATE_ID = 101;

DOC_N = 0;

FOR SELECT

DISPLACEMENT.ID,

DISPLACEMENT.ADATE,

DISPLACEMENT.STORE1,

DISPLACEMENT.STORE2,

DISPLACEMENT_ITEM.N,

DISPLACEMENT_ITEM.AVG_ITEM_COST ,

DISPLACEMENT_ITEM.GOODS,

DISPLACEMENT_ITEM.QUANTITY

FROM

DISPLACEMENT, DISPLACEMENT_ITEM

WHERE

DISPLACEMENT.ID = DISPLACEMENT_ITEM.ID AND

((:FOR_DOC_N IS NULL) OR (DISPLACEMENT_ITEM.N = :FOR _DOC_N)) AND

((:FOR_DOC_ID IS NULL) OR (DISPLACEMENT.ID = :FOR_DOC _ID)) AND

((:OP_DATE1 IS NULL) OR ( DISPLACEMENT.ADATE >= :OP_DATE1)) AND

((:OP_DATE2 IS NULL) OR ( DISPLACEMENT.ADATE - 1 < :OP_DATE2 ))

INTO :DOC_ID, :OP_ DATE, :V1, :V2, :DOC _N, :V3, :V4, : V5

DO

BEGIN

ACC = V1;

GOODS = V4;

OUTCOME = V5;

OUTCOME_AMOUNT = V3;

INCOME = 0;

INCOME_AMOUNT = 0;

SUSPEND; /*waiting for fetch operation*/

ACC = V2;

GOODS = V4;

INCOME = V5;

INCOME_AMOUNT = V3;

OUTCOME = 0;

OUTCOME_AMOUNT = 0;

SUSPEND; /*waiting for fetch operation*/

END

END

С помощью простого запроса к этой процедуре мы можем, например, получить все записи, которые необходимо вставить в регистр для всех документов «межскладского перемещения»:

select * from DISPLACEMENT_REG_TEMPLATE (NULL,NULL,NULL,NULL)

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

select * from DISPLACEMENT_REG_TEMPLATE (NULL, NULL, 11043, NULL)

Мы можем также получить записи для одной отдельно взятой позиции документа, например с N = 33900:

select * from DISPLACEMENT_REG_TEMPLATE (NULL, NULL, 11043, 33900)

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

Входные параметры хранимой процедурой шаблона операции с регистром:


Название параметра Тип данных Назначение
OP_DATE1 DATE Начало диапазона дат (NULL – диапазон не ограничен снизу )
OP_DATE1 DATE Конец диапазона дат (NULL – диапазон не ограничен сверху )
FOR_DOC_ID INTEGER Внутренний ID документа (NULL – все документы этого типа )
FOR_DOC_N INTEGER Внутренний номер позиции документа (NULL – все позиции)



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