Страница 1 из 1

Поле в прототипе совпадает с полем в таблице

Добавлено: 26 мар 2008, 11:09
Nikos
Добрый день!
Нужно поправить выходную форму книги покупок. Делаю нужные изменения и есть такая строка:
Result.Fil_7 := Round(SummA, 2),
При компиляции выдается ошибка:
Поле SUMMA есть как минимум у двух таблиц : SCHFACT и BOOKPRZK.
Но мне-то нужно взять значение из потока. Т.е. вопрос заключается с том, как быть, если поле в прототипе совпадает с полем корневой таблицы view?

Добавлено: 26 мар 2008, 11:52
edward_K
1. В create view не забудьте указать имя.
.create view vSch, ну и ко всем обращениям к вьюхе сие добавить.
2. никогда не используйте в списке полей * - не ленитесь прописывать поля (а можно и вообще одно оставить - остальные будут добалены по мере необходимости). Если имя поля в прототипе сопадет с полем таблы а его нужно использовать в филтре, то это нужно делать через доп.переменую.
3. а возможно и не эта строка влияет на предупреждение.

Добавлено: 26 мар 2008, 13:08
Nikos
Вот вьюха:
.Create view vSpSchf
var g_cParty: comp;
from
BookPrZk,
SchFact ,
SpSchf ,
SpSopr ,
KatParty,
KatSopr
where
((
nBookPrZk == BookPrZk.nRec and
((BookPrZk.SubTip = 4) or
(BookPrZk.SubTip = 5) or
(BookPrZk.SubTip = 32)) and
BookPrZk.cSchFact == SchFact.nRec and
SchFact.nRec == SpSchf.cSchFact and
BookPrZk.cSopr == KatSopr.nRec and
KatSopr.nRec == SpSopr.cSopr and
g_cParty == KatParty.nRec
));
- уже присутствует в форме, имя есть, вообще убрал все обращения к любым полям таблиц (оставил только поля потока) - тот же результат - так как таблица есть во view, то ругается
2. Пробовал перечислять поля явно - не помогает. Имя поля в прототипе нужно использовать не в фильтре, а просто залить поток во временную таблицу, чтоб потом сгруппировать так как надо
3. Ошибка именно в этой строке, меняю ее на Result.Fil_7 := 0, - все нормально компилируется.
Что можно еще попробовать?

Добавлено: 26 мар 2008, 13:14
edward_K
.Create view vSpSchf
var g_cParty: comp;
as select Schfact.summa (fieldname=Schfact_summa)
from


"vSpSchf." добавить ко всем обращением к данным вьюхи, в том числе и к getfirst и тому подобное.
уберите все из формы оставет только вьюху и вашу строку - что будет?

Добавлено: 26 мар 2008, 13:20
Nikos
Оставил только:
.LinkForm 'BOOKZK' Prototype is 'BKPRZKF'
.Group 'Закупки (сводная)'
.NameInList 'Книга покупок сводная (МНЦС)'
.Create view vSpSchf
var g_cParty: comp;
from
BookPrZk,
SchFact ,
SpSchf ,
SpSopr ,
KatParty,
KatSopr
where
((
nBookPrZk == BookPrZk.nRec and
((BookPrZk.SubTip = 4) or
(BookPrZk.SubTip = 5) or
(BookPrZk.SubTip = 32)) and
BookPrZk.cSchFact == SchFact.nRec and
SchFact.nRec == SpSchf.cSchFact and
BookPrZk.cSopr == KatSopr.nRec and
KatSopr.nRec == SpSopr.cSopr and
g_cParty == KatParty.nRec
));
.fields
.endfields
.{
.{CheckEnter BKPRZKVAL
.{CheckEnter BKPRZKMAIN
.{CheckEnter BOOKZK
.}
.begin
insert into Result set
Result.Fil_7 := Round(SummA, 2);
end.
.}
.}
.{CheckEnter BKPRZKALLVAL
.}
.}
Отчет сформирован.
.endform

Резутьтат тот же.

Добавлено: 26 мар 2008, 14:05
edward_K
var wsumma :double ;
wsumma:=Round(SummA, 2);
vSpSchf.nsert into Result set
Result.Fil_7 := Round(wSummA, 2);

Добавлено: 26 мар 2008, 14:12
Nikos
edward_K, большое спасибо - так все работает.
Правда не понимаю почему ...

Добавлено: 26 мар 2008, 14:25
edward_K
на будующее приводите весь оператор а не строку из него.