Пример создания перехватчика события

Рассмотрим рабочий пример создания перехватчика события. Нам необходимо повесить на все классы (т.е. на все потомки класса 'Doc') свойства для проведения документа по коммерческому и бухгалтерскому учету. Для этого создадим новый обработчик события getp для Doc с модой editMAT. Данный обработчик сработает при событии getp для всех потомков 'Doc' и добавить в их таблицу свойств новые свойства.

Пример процедуры-перехватчика приведен ниже в двух вариантах (в макросах и без).

 

CREATE PROCEDURE editMAT_getp_Doc_

@p1 integer, @p2 integer, @p3 integer

AS

BeginProperties

declare @r int,@c int,@cl int

-- Проверка наличия класса документа для обслуживании Учетном Автоматом

exec @r=InAccRobot @p1

if @r=1

begin

-- Если данный документ может обрабатываться в учете, то добавляем к нему новые свойства

EditProperty 'editMAT', 'Разноска'

EditProperty 'editMAT2', 'Бухгалтерская разноска'

OperProperty 'RepassDocument','Провести'

OperProperty 'UnpassDocument','Отпровести'

OperProperty 'RepassDocument2','Провести документ по бухгалтерии'

OperProperty 'UnpassDocument2','Отпровести по бухгалтерии'

ViewProperty 'viewMAT', 'Просмотр проводок'

ViewProperty 'viewMAT2', 'Просмотр бухгалтерских проводок'

end

GO

 

CREATE PROCEDURE editMAT_getp_Doc_

@p1 integer, @p2 integer, @p3 integer

AS

declare @cnt int

select @cnt=isnull(max(No),0) from Properties where u=@@spid

declare @r int,@c int,@cl int

exec @r=InAccRobot @p1

if @r=1

begin

select @cnt=@cnt+1

insert into Properties (u,No,Flag,ProcName,Name) select @@spid,@cnt,2, 'editMAT', 'Бухгалтерская разноска'

select @cnt=@cnt+1

insert into Properties (u,No,Flag,ProcName,Name) select @@spid,@cnt,0, 'RepassDocument','Провести документ по бухгалтерии'

select @cnt=@cnt+1

insert into Properties (u,No,Flag,ProcName,Name) select @@spid,@cnt,0, 'UnpassDocument','Отпровести по бухгалтерии'

end

select @cnt=@cnt+1

insert into Properties (u,No,Flag,ProcName,Name) select @@spid,@cnt,1, 'viewMAT', 'Просмотр бухгалтерских проводок'

end

GO