;Функция осуществляет поиск в поддереве и
записывает список релевантных
;При этом учитываются значения qqfls и qqrn
;Параметры :
;qqpar1 - код ЭФ,формирующий поддерево (если не
указан поиск по всей БД)
;qqpar2 - функция управления передвижением (см. ydrs)
;qqpar3 - список понятий, на которые наложены
фильтры (смотри функцию sd28)
;qqpar4 - фильтр (смотри функцию sd28)
sd26() ;
S
qqpar1=$G(qqpar1),qqpar2=$G(qqpar2),qqpar3=$G(qqpar3),qqpar4=$G(qqpar4),qqpar5=$G(qqpar5)
i qqpar1="" S
qqpar1=$S($G(W("Zil"))<2:"",1:$$F("sd20",W("Zil")-1))
N lev S lev=$S(qqpar1="":1,1:$P($$F("sd10",qqpar1),","))
S:'qqfls qqrn='qqrn i qqfls d D("grel",0,1) S qqfls=1
I $P(qqpar2," ")="" D S qqfls=''qqr,qqrn='qqrn D:qqr>0
D("s151") Q ""
.n qqc S qqc="" F S qqc=$$F("sds8",lev,qqc,qqpar1,1,1)
q:qqc="" S fl=$$F("sd28",qqpar3,qqpar4) D:fl
D("grel","+",1)
I $P(qqpar2," ")'="" D s qqfls=$S(qqr>0:1,1:0),qqrn='qqrn
D:qqr>0 D("s151") q ""
.n qqcfix,qqw,qqz1,qqz2,qqzo,conqc,conqz,qqc,qqz S qqw=$P(qqpar2,"
"),qqz1=$P(qqpar2," ",3),qqz2=$P(qqpar2,"
",4),qqzo=$P(qqpar2," ",5),conqz=$P(qqpar2,"
",6),conqc=$P(qqpar2," ",7)
.S qqcfix="" S:qqzo'="" qqz1=qqzo I +lev'=0 S
qqcfix=$P(qqpar1,".",1,lev)
.S qqz="" F S qqz=$$SD26(qqz) Q:qqz="" S qqc=qqcfix f s
qqc=$O(^QW(1,qqw,0,qqz,qqf,qqc))
q:qqc=""!(qqcfix'=""&($E(qqc,1,$L(qqcfix))'=qqcfix)) s FL=0 D I FL
S fl=$$F("sd28",qqpar3,qqpar4) D:fl D("grel","+",1) b
..I conqc'="" I '@conqc q
..I qqfls,'$$F("grel","") q
..S FL=1
q ""
SD26(Z) ;
S FL=0 I Z="" S Z=qqz1 S:conqz="" FL=$S(Z="":0,1:1)
S:conqz'=""&(Z'="") @("FL="_conqz) Q:FL Z
F S Z=$O(^QW(1,qqw,0,Z))
Q:Z=""!(qqz2'=""&(Z]]qqz2))!(qqzo'=""&($E(Z,1,$L(qqzo))'=qqzo))
D Q:FL
.I conqz="" S FL=1 q
.i @conqz S FL=1 q
Q $S(FL:Z,1:"")
;Служебная функция. Проверка выполнения условия
для заданного списка понятий для заданного ;ЭФ
; Параметры:
; qqpar1 - список понятий (разделитель " ")
; qqpar2 - условия для заданного списка понятий,
состоит из списка условий для каждого
; понятия (разделитель $C(31)), каждое условие
состоит из кода оператора и списка значений,
;через " "
; qqpar3 - код записи (по умолчанию qqc)
; => Функция возвращает 0 или 1
; Используются следующие операторы:
; Код Название Значения
;
; E равно Список значений через " "
; S содержит Список значений через " "
; Z выражение М-выражение относительно
переменной Z
; D диапазон Список начальных диапазонов в виде
Начальное значение_>>_Конечное ;значение
; B начало слов Список начал слов
; Пример использования:
; $$F("sd28","Dkt nps Ddd","B 1101 1102"_$C(31)_"S
АО АОЗТ"_$C(31)_"D 19980101>>19980701")
; Проверка выполнения условий для заданного
кода qqc
; Код товара начинается на 1101 или 1102 и Поставщик
содержит АО или АОЗТ и Дата находится
; в интервале 01.01.1998 01.07.1998
sd28() ;
S qqpar1=$G(qqpar1),qqpar2=$G(qqpar2),qqpar3=$G(qqpar3,$G(qqc))
Q:qqpar1=""!(qqpar2="")!(qqpar3="") 1
N Z,Z1,Z2,qqc,qqw,qqwz,op,jj,jjj,fl,str,FL,qqcz,lev,levqqw
S qqc=qqpar3,FL=1 f jjj=1:1:$L(qqpar1," ") S qqw=$P(qqpar1," ",jjj)
D I 'fl S FL=0 q