Это все же стат. форма, а не табличная, но очень муторная. Суть в том, что каждый читатель у вас должен порождать одновременно несколько ключей по каждому абонементу, на котором он прошел перерегистрацию. Теперь по пунктам.
Как узнать возраст:
f(val(&uf('30'))-val(v21.4),0,0)
выдаст число в текстовом формате, если хотите в виде числа для сравнения, то лучше так
rsum(&uf('30')';-'v21.4)>10
оптимально сделать справочник, соответствующий горизонтали вашей стат. форме, а потом в формате порождать эти термины, то есть:
==================справочник====================
-14
15-21
22-24
+25
в
с
с/с
н/с
н/в
1
2
3
4
5
6
7
8
9
===========================================
а далее для каждого перерегистрированного абонементам прогоняем проверку по каждому из трех разделов. Где-то так:
для горизонтали
(if p(v52)
if val(v52.8)>=val(&uf('av991^A#1')) and val(v52.8)<=val(&uf('av991^B#1')) then
/*Вывод возраста
if &uf('av21#1')<>'' then
if rsum(&uf('30')';-'v21.4)<15 then
'-14'/
else
if rsum(&uf('30')';-'v21.4)>14 and rsum(&uf('30')';-'v21.4)<22 then
'15-22'/
else
if rsum(&uf('30')';-'v21.4)>21 and rsum(&uf('30')';-'v21.4)<25 then
'22-24'/
else
'+25'/
fi
fi
fi
fi
/*Вывод образования
&uf('av20#1')/
/*вывод группы читателей
&uf('av999#1')/
fi /)
Для вертикали
(if p(v52)
if val(v52.8)>=val(&uf('av991^A#1')) and val(v52.8)<=val(&uf('av991^B#1')) then
/*Вывод возраста
if &uf('av21#1')<>'' then if v52^C<>'' then v52^C else '*' fi/ fi
/*Вывод образования
if &uf('av20#1')<>'' then if v52^C<>'' then v52^C else '*' fi/ fi
/*вывод группы читателей
if &uf('av999#1')<>'' then if v52^C<>'' then v52^C else '*' fi / fi
fi
/)
Что такое группа читателей я не знаю, потом предположил, что это некий код в поле 999, это нужно заменить на правильное значение. Это не готовая стат. форма, а сама идея реализации. Код не проверялся на выполнение, могут быть опечатки. Пробуйте
Редактировано 1 раз. Последний раз 06.11.2014 11:56 пользователем Gena.