вызов поискового отчета

- Захват-85.gif (6.56 КБ) 43859 просмотров
вызов отчета для формы

- Захват-86.gif (5.61 КБ) 43860 просмотров
как видно - вызывается одна и та-же функция включающая в себя все параметры для работы в этих двух направлениях + флаг указывающий какое действие нужно произвести - найти объекты или выбрать дочерние
код функции
Код: Выделить всё
ALTER function [LSDBO].[Ric_Get_attrClients]
/*25022010*/
/*
Отчет Форма Прочитать атрибуты объектов клиент
*/
(
@Sel int=0, --0 Child 1 Find
@ObjID numeric(18,0)=0, --Child/Find ID объекта
@Mnemo varchar(4000)='', --Child/Find Мнемо
@Mask varchar(255)='%%', --Find Маска поиска like первый и последний символ
@Descr varchar(255)='', --Find Строка поиска объекта по описанию
@IDAttr numeric(18,0)=0, --Find ID строкового атрибута
@sAttr varchar(255)='' --Find Строка поиска объекта по атрибуту
)
Returns table
as
return
(
SELECT rw.id as isobject_id,
rw.cd as cDate,
vv3.value+coalesce(' ('+ vv13.value+')','') as cIst,
vv.value as cStatus,
vv15.value as cForm,
rw.description as cName,
vv0.value as cAbr,
vv1.value as cManager,
vv14.value as cIndex,
vv4.value as cStrana,
vv5.value as cOkrug,
vv6.value as cSity,
vv7.value as cStreet,
vv8.value as cKod,
vv9.value as cFax,
vv10.value as cTel,
vv11.value as cEmail,
abs(vv12.value) as cBy,
vv2.value as cWarning
FROM lsdbo.Ric_Get_Select(@Sel,@ObjID,@Mnemo,@Mask,@Descr,@IDAttr,@sAttr) rw left join
lsdbo.attrib_value av on rw.id=av.object_id and av.attrib_id=100000016000000 left join
lsdbo.value_string vv on av.value_id=vv.id and av.attrib_id=100000016000000 left join
lsdbo.attrib_value av0 on rw.id=av0.object_id and av0.attrib_id=100005427200000 left join
lsdbo.value_string vv0 on av0.value_id=vv0.id and av0.attrib_id=100005427200000 left join
...
lsdbo.attrib_value av2 on rw.id=av2.object_id and av2.attrib_id=100004087100000 left join
lsdbo.value_numeric vv2 on av2.value_id=vv2.id and av2.attrib_id=100004087100000 left join
lsdbo.attrib_value av13 on rw.id=av13.object_id and av13.attrib_id=100004086100000 left join
lsdbo.value_string vv13 on av13.value_id=vv13.id and av13.attrib_id=100004086100000
)
функция принимает все параметры и просто добавляет нужные аргументы к вызываемой функции
Код: Выделить всё
lsdbo.Ric_Get_Select(@Sel,@ObjID,@Mnemo,@Mask,@Descr,@IDAttr,@sAttr) rw
которая содержит id объекта, описание, дату создания ... в общем служебную информацию без атрибутов
посмотрим на эту функцию
lsdbo.Ric_Get_Select
Код: Выделить всё
ALTER function [LSDBO].[Ric_Get_Select]
/*25022010*/
/*Переключатель - дочерние объекты или поиск объектов*/
(
@Sel int=0, --0 Child 1 Find
@ObjID numeric(18,0)=0, --Child/Find ID объекта
@Mnemo varchar(4000)='', --Child/Find Мнемо
@Mask varchar(255)='%%', --Find Маска поиска like первый и последний символ
@Descr varchar(255)='', --Find Строка поиска объекта по описанию
@IDAttr numeric(18,0)=0, --Find ID строкового атрибута
@sAttr varchar(255)='' --Find Строка поиска объекта по атрибуту
)
Returns @Ret table --вернуть таблицу формата
(id numeric(18,0), --ID объекта запрос (имя для запуска из отчета)
Description varchar(255), --Описание объекта
Cd datetime, --Время создания объекта
Author_id int --ID автора объекта (пользователя БД)
)
as
Begin
Insert @Ret
Select rw.id,
rw.description,
rw.cd,
rw.author_id
From lsdbo.object_reference rw
Where (@Sel =0 AND rw.id in (select id from LSDBO.Ric_Get_objChild(@ObjID,@Mnemo)))
OR
(@Sel =1 AND rw.id in (select id from LSDBO.Ric_Get_objFind(@Mnemo,@Mask,@Descr,@IDAttr,@sAttr)))
Return
End
как видно она просто в свою очередь вызывает либо функцию поиска либо функцию отбора дочерних объектов - передавая в них уже только нужные параметры из общей кучи
посмотрим на эти функции