Как вариант можно вот так:
Формат вертикали
if &uf('av50#1')<>'' then
(if p(v40) then
if v40^d>=&uf('Av1000^A#1') and v40^d<=&uf('Av1000^B#1') and (&uf('Av1000^c#1')='' or v40^v=&uf('Av1000^c#1')) then
&uf('D',v40^g,|,!I=|v40^a|!,if p(v60) then v60 else '*' fi,/|)
fi
fi/)
fi,
if &uf('av50#2')<>'' then
(if p(v40) then
if v40^d>=&uf('Av1000^A#1') and v40^d<=&uf('Av1000^B#1') and (&uf('Av1000^c#1')='' or v40^v=&uf('Av1000^c#1')) then
&uf('D',v40^g,|,!I=|v40^a|!,if p(v60) then v60 else '*' fi,/|)
fi
fi/)
fi,
if &uf('av50#3')<>'' then
(if p(v40) then
if v40^d>=&uf('Av1000^A#1') and v40^d<=&uf('Av1000^B#1') and (&uf('Av1000^c#1')='' or v40^v=&uf('Av1000^c#1')) then
&uf('D',v40^g,|,!I=|v40^a|!,if p(v60) then v60 else '*' fi,/|)
fi
fi/)
fi
Формат горизонтали
if &uf('av50#1')<>'' then
(if p(v40) then
if v40^d>=&uf('Av1000^A#1') and v40^d<=&uf('Av1000^B#1') and (&uf('Av1000^c#1')='' or v40^v=&uf('Av1000^c#1')) then
&uf('av50#1')
fi
fi/)
fi,
if &uf('av50#2')<>'' then
(if p(v40) then
if v40^d>=&uf('Av1000^A#1') and v40^d<=&uf('Av1000^B#1') and (&uf('Av1000^c#1')='' or v40^v=&uf('Av1000^c#1')) then
&uf('av50#2')
fi
fi/)
fi,
if &uf('av50#3')<>'' then
(if p(v40) then
if v40^d>=&uf('Av1000^A#1') and v40^d<=&uf('Av1000^B#1') and (&uf('Av1000^c#1')='' or v40^v=&uf('Av1000^c#1')) then
&uf('av50#3')
fi
fi/)
fi
Это выглядит немного грубо, но в Ирбисе впринципе есть проблема со вложенными циклами. Этот вариант будет работать со случаями одной, двух и трех категорий у читателя. Если у вас может быть категорий больше трех, то просто по аналогии добавьте нужное количество раз кусок кода для вертикали и горизонтали. Я специально привел код не в однострочной форме, а в развернутой, что бы было понятно как оно работает. Для стат. формы код нужно привести к однострочной форме.