Рассмотрим рабочий пример создания перехватчика события. Нам необходимо повесить на все классы (т.е. на все потомки класса '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