Hi всем собратьям
Всеми программерами бьемся над проблемой такого плана:
существует вьюшка
.Create view schet2
SELECT SCHFACT.NUM, SCHFACT.DFACT
FROM BASEDOC, SCHFACT, stepdoc, katsopr
WHERE ((BASEDOC.NREC==stepdoc.cbasedoc and stepdoc.nrec==katsopr.cstepdoc
and katsopr.cschfact==schfact.nrec )) and katsopr.dsopr<>date(0,0,0) and katsopr.nsopr<>'' and katsopr.vidsopr <> word(0) and num2=basedoc.nodoc and d2=basedoc.ddoc
order by NUM;
после чего делаем цикл по этой вьюшке внутри цикла BASEDOCLOOP
.{CheckEnter BASEDOCLOOP
.{table 'SCHET2'
@@@@@@@@@@@@ @@@@@@@@@@
.}
по первому проходу идеально выводит данные
по второму повторяет данные из первой выборке
и тогдалее, когда нужно открывать цикл с новой выборкой,
а получается, что цикл проходит по старой выборке.
Правда в запросе не все гладко, выдает - "С ограничением RELATION ... реализуется на внешней выгрузке", все индексы проверили
Заранее сПАСИБО ВСЕМ!
[/b]
Не делает выборку второй раз
Модераторы: m0p3e, edward_K, Модераторы
-
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
Не описаны поля какие выводяться, к сожалению
Но предложить могу следующее
1) выбросить из логической таблицы все фильтры
2) цикл делать не по всей логической таблице, а разбить по каждой в отдельности
3) внутри циклов наложить фильтры на выборку с помощью internal, часть тех которые у тебя используются не потребуются (katsopr.vidsopr <> word(0))
Но предложить могу следующее
1) выбросить из логической таблицы все фильтры
2) цикл делать не по всей логической таблице, а разбить по каждой в отдельности
3) внутри циклов наложить фильтры на выборку с помощью internal, часть тех которые у тебя используются не потребуются (katsopr.vidsopr <> word(0))
Код: Выделить всё
.{table 'SCHET2.BASEDOC'
.{table 'SCHET2.STEPDOC'
.{table 'SCHET2.KATSOPR'
.{table 'SCHET2.SCHFACT'
.begin
bUsl := (num2=Schet2.basedoc.nodoc) and (d2=Schet2.basedoc.ddoc) and ...;
end.
.{?INTERNAL;bUsl;
@@@@@@@@@@@@ @@@@@@@@@@
.}
.}
.}
.}
.}
Решили проблему
использовать нужно condition, вынести условия were которые за скобками
condition byBaseDoc as (basedoc.nodoc = num2 and basedoc.ddoc=d2)
и соответственно
.{CheckEnter BASEDOCLOOP
.begin
PushCondition(tcByBaseDoc);
end.
.{table 'SCHET2'
@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@
.}
.begin
popCondition(tcByBaseDoc);
end.
это говорит о том, что при вторичном формирование не видет все, что за скобками(не знаю почему?)
использовать нужно condition, вынести условия were которые за скобками
condition byBaseDoc as (basedoc.nodoc = num2 and basedoc.ddoc=d2)
и соответственно
.{CheckEnter BASEDOCLOOP
.begin
PushCondition(tcByBaseDoc);
end.
.{table 'SCHET2'
@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@
.}
.begin
popCondition(tcByBaseDoc);
end.
это говорит о том, что при вторичном формирование не видет все, что за скобками(не знаю почему?)