обработка запроса в цикле
Модераторы: m0p3e, edward_K, Модераторы
обработка запроса в цикле
Подскажите пожалуйста где ошибка в отчёте
Есть следующий отчет:
.create view Tar
var group: integer
as SELECT
tarstav.datizm,
klsisopl.nasisopl,
tarstav.codtar,
tarstav.naitar,
tarstav.razr,
tarstav.tarif
FROM tarstav, klsisopl
WHERE
((klsisopl.sisopl == tarstav.sisopl)) AND
Tar.group= tarstav.codtar;
...
.begin j:=0 end.
.{while j<3
.begin
j:=j+1
Tar.group:=j
i:=Tar.GetFirst
end.
.{?INTERNAL; i=0
.{table 'Tar'
вывод данных из представления Tar, например
Tar.group и Tar.tarstav.codtar
.}
.}
.}
То есть в цикле меняется условие фильтрации для представления Tar
Результат работы этого отчёта
Tar.group Tar.tarstav.codtar
1 1
2 1
3 1
 
Как видно условие фильтрации не применяется и всегда выводятся одни и те же данные (в примере Tar.tarstav.codtar всегда 1, хотя Tar.group изменяется)
Не могу понять что неправильно, кто знает подскажите
			
			
									
						
										
						Есть следующий отчет:
.create view Tar
var group: integer
as SELECT
tarstav.datizm,
klsisopl.nasisopl,
tarstav.codtar,
tarstav.naitar,
tarstav.razr,
tarstav.tarif
FROM tarstav, klsisopl
WHERE
((klsisopl.sisopl == tarstav.sisopl)) AND
Tar.group= tarstav.codtar;
...
.begin j:=0 end.
.{while j<3
.begin
j:=j+1
Tar.group:=j
i:=Tar.GetFirst
end.
.{?INTERNAL; i=0
.{table 'Tar'
вывод данных из представления Tar, например
Tar.group и Tar.tarstav.codtar
.}
.}
.}
То есть в цикле меняется условие фильтрации для представления Tar
Результат работы этого отчёта
Tar.group Tar.tarstav.codtar
1 1
2 1
3 1
Как видно условие фильтрации не применяется и всегда выводятся одни и те же данные (в примере Tar.tarstav.codtar всегда 1, хотя Tar.group изменяется)
Не могу понять что неправильно, кто знает подскажите
- 
				Max_Fin
 - На пенсии
 - Сообщения: 797
 - Зарегистрирован: 29 мар 2005, 17:49
 - Откуда: г. Тюмень
 - Контактная информация:
 
Re: обработка запроса в цикле
Логическая таблица не верна
либо она должна выглядеть так, судя по вашему коду
либо 
но в этом случае где цикл по класификатору?
			
			
									
						
							либо она должна выглядеть так, судя по вашему коду
Код: Выделить всё
.create view Tar
var group: integer
as SELECT
 tarstav.datizm,
 klsisopl.nasisopl,
 tarstav.codtar,
 tarstav.naitar,
 tarstav.razr,
 tarstav.tarif
FROM tarstav, klsisopl
WHERE
((
  group == tarstav.codtar (noindex) and
  tarstav.sisopl == klsisopl.sisopl
));Код: Выделить всё
.create view Tar
var group: integer
as SELECT
 tarstav.datizm,
 klsisopl.nasisopl,
 tarstav.codtar,
 tarstav.naitar,
 tarstav.razr,
 tarstav.tarif
FROM tarstav, klsisopl
WHERE
((
  klsisopl.sisopl ==tarstav.sisopl and
  group == tarstav.codtar
));Жду выхода Вселенная 2.12!
			
						для приведённого примера рабочий запрос выглядит следующим образом
 
вместо  ...  надо написать что-то типа Tar.group==GroupTar, но так писать нельзя
вопрос: как это правитьно записать?
раньше было group=tarstav.codtar, а теперь надо чтобы group было равно tarstav.codtar, но без последних двух цифр (это записано как integer(substr(string(tarstav.codtar),1,length(string(tarstav.codtar))-2)) (FIELDNAME=GroupTar) )
но если написать
то компилятор обругает нехорошими словами
			
			
									
						
										
						Код: Выделить всё
.create view Tar
var group: integer
as SELECT
 tarstav.datizm,
 klsisopl.nasisopl,
 tarstav.codtar,
 integer(substr(string(tarstav.codtar),1,length(string(tarstav.codtar))-2)) (FIELDNAME=GroupTar),
 tarstav.naitar,
 tarstav.razr,
 tarstav.tarif
FROM tarstav, klsisopl
WHERE        ((klsisopl.sisopl == tarstav.sisopl AND  ...));вопрос: как это правитьно записать?
раньше было group=tarstav.codtar, а теперь надо чтобы group было равно tarstav.codtar, но без последних двух цифр (это записано как integer(substr(string(tarstav.codtar),1,length(string(tarstav.codtar))-2)) (FIELDNAME=GroupTar) )
но если написать
Код: Выделить всё
((klsisopl.sisopl == tarstav.sisopl and
  (integer(substr(string(tarstav.codtar),1,length(string(tarstav.codtar))-2))==group)
));- 
				Max_Fin
 - На пенсии
 - Сообщения: 797
 - Зарегистрирован: 29 мар 2005, 17:49
 - Откуда: г. Тюмень
 - Контактная информация:
 
убрать подцепку на группу
и выполнять проверку непосредственно в цикле через интернал
что-то вроде этого
			
			
									
						
							и выполнять проверку непосредственно в цикле через интернал
что-то вроде этого
Код: Выделить всё
.{table 'Tar' 
.{?INTERNAL; (integer(substr(string(tarstav.codtar),1,length(string(tarstav.codtar))-2))=group)
вывод данных из представления Tar, например 
Tar.group и Tar.tarstav.codtar 
.}
.}
Жду выхода Вселенная 2.12!
			
						- 
				Max_Fin
 - На пенсии
 - Сообщения: 797
 - Зарегистрирован: 29 мар 2005, 17:49
 - Откуда: г. Тюмень
 - Контактная информация:
 
убрать подцепку на группу
и выполнять проверку непосредственно в цикле через интернал
что-то вроде этого
			
			
									
						
							и выполнять проверку непосредственно в цикле через интернал
что-то вроде этого
Код: Выделить всё
.{table 'Tar' 
.{?INTERNAL; (integer(substr(string(tarstav.codtar),1,length(string(tarstav.codtar))-2))=group)
вывод данных из представления Tar, например 
Tar.group и Tar.tarstav.codtar 
.}
.}
Жду выхода Вселенная 2.12!