Сайт Информационных Технологий

Приложение6

Фрагмент программы поиска данных

;Функция осуществляет поиск в поддереве и записывает список релевантных
;При этом учитываются значения 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
.S str=$P(qqpar2,$C(31),jjj),op=$P(str," "),qqwz=$P(str," ",2,$L(str," "))
.S lev=$P($$F("sd10",qqc),",") S levqqw=$$F("sd02","qqw",qqw,1),qqcz=$S(lev=levqqw:qqc,1:$$F("sd20",levqqw))
.I op="E" D q ;равно
..i $G(qqwz)=""!($E(qqw)="M")!($E(qqw)="@")!($E(qqw)="C") S Z=$$F("sd03",qqw) d q
...S fl=0 f jj=1:1:$L(qqwz," ") i Z=$P(qqwz," ",jj) S fl=1 q
..S fl=0 f jj=1:1:$L(qqwz," ") S Z1=$P(qqwz," ",jj) i $D(^QW(1,qqw,0,Z1,qqf,qqcz)) S fl=1 q
.I op="S" D q ;содержит
..S Z=$$F("sd03",qqw),fl=0 f jj=1:1:$L(qqwz," ") S Z1=$P(qqwz," ",jj) I Z[Z1 S fl=1 q
.i op="Z" d q ;M-выражение
..S Z=$$F("sd03",qqw),fl=0 i qqwz="" S fl=1 q
..i @qqwz s fl=1 q
.i op="B" S Z=$$F("sd03",qqw),fl=0 D q
..f jj=1:1:$L(qqwz," ") S Z1=$P(qqwz," ",jj) I Z1'="",$E(Z,1,$L(Z1))=Z1 S fl=1 q
.i op="D" S Z=$$F("sd03",qqw) D q
..S fl=0 f jj=1:1:$L(qqwz," ") S Z1=$P($P(qqwz," ",jj),">>"),Z2=$P($P(qqwz," ",jj),">>",2) D Q:fl
...i Z1="" S fl=$S(Z2="":1,Z]]Z2:0,1:1) q
...i Z2="" S fl=$S(Z1="":1,Z1]]Z:0,1:1) q
...S fl=$S(Z]]Z1&(Z2]]Z)!(Z=Z1)!(Z=Z2):1,1:0) q
.s fl=1 q
q FL

Site of Information Technologies
Designed by  inftech@webservis.ru.