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

FCOM

Добавлено: 20 дек 2006, 12:45
Alexander
Опишу вопрос в общем виде: Пусть vip передает поток данных в форму:
.Fields
SomeField1
SomeField2
.EndFields


Пример Потока, отсортированного по SomeField1:
a 1
b 2
c 2
....

Необходимо, сделать группировку по SomeField1, те:
Поток:
a 1
b 2
b 3
b 1
c 2

Требуемый Результат:
a 1
b 2
b 3
b 1
Итог по b: 6
c 2

Итог должен писатьтся только тогда, когда есть повторяющиеся записи SomeField1.
Или такой:
a 1
b 6
c 2

Добавлено: 20 дек 2006, 15:36
aleks1232321
Что-нибудь типа (общая идея):
.var
mm : string
sum : integer
.endvar

.begin
mm := ''
sum := 0
end.
.
.
.
.


.begin
mm := SomeField1
sum := sum + SomeField2
end.


.{?internal; (SomeField1<> mm and mm <> '');
.Fields
mm //SomeField1
sum //SomeField2
.EndFields
^ ^
.begin
mm := SomeField1
sum := SomeField2
end.
.}

и где-то в конце, когда поток кончается - вывести остаток

.Fields
mm //SomeField1
sum //SomeField2
.EndFields
^ ^

Добавлено: 21 дек 2006, 09:15
Alexander

Код: Выделить всё

.Form 'TEST_FRM'
.NameInList 'test_form'
.var
prev:string;
s:double;
.endvar
.fields
s
.endfields
.begin
s:=1;
end.
  s=^
.EndForm
Компилятор ругается: попытка описать поле с именем, уже использованным для описания переменной!
В чем ошибка???

Добавлено: 21 дек 2006, 11:21
edward_K
.ard
добавте
а заодно уж и
.table blank

Добавлено: 21 дек 2006, 11:23
aleks1232321
Точного ответа дать не могу, но если после .endvar вставить пустую view, то все компиляется.
Например
.Form 'TEST_FRM'
.NameInList 'test_form'
.var
prev:string;
s:double;
.endvar

.create view a1;

.begin
s:=1;
end.
.fields
s
.endfields
s = ^
.EndForm

Добавлено: 21 дек 2006, 11:32
edward_K
доку почитайте ( vipprog.chm) и поймите разницу между автономными формами и прототипом. В прототипе нельзя переменную из var использовать в fields - это доступно только в присоединенке на него.

Добавлено: 21 дек 2006, 11:46
Alexander
edward_K

понятно! Спасибо!