Здравствуйте, очень нужна помощь! При разработке статформ столкнулся с пока не решаемой проблемой. Ситуация следующая: нам нужно получить распределение книговыдач по категориям читателей. По умолчанию такая статформа в ИРБИСЕ, конечно, имеется, однако, в нашем случае есть один нюанс: поля категорий (v50 и v67) множественные, то есть могут содержать повторения, в случае же статформы по умолчанию там берется &uf('Av50#1'), то есть только первое повторение поля, к тому же по умолчанию оно не является множественным. Итак, сама проблема. Если нам встречается человек, которому за день выдали, к примеру за 23е ноября, 3 книги (количество книговыдач) и этот человек принадлежит двум категориям одновременно, к примеру, включается в группы инвалидов и пенсионеров, то возникает следующий результат расформатирования:
(if p(v40) then if p(v40^a) and (v40^d>=&uf('Av1000^a#1')) and (v40^d<=&uf('Av1000^b#1')) and (v40^v=&uf('Av1000^c#1')) then v40^d*6.2 fi fi/)
по вертикали
23
23
23
(if p(v40) and p(v67) then v67 fi/)
и по горизонтали
Пенсионеры
Инвалиды
В данном случае механизм размножения записей не сработает (опыты показывают, что он работает только в случаях, когда либо по вертикали, либо по горизонтали имеется ТОЛЬКО ОДИН результат расформатирования, тогда он размножается до количества в большем результате расформатирования).
Таким образом вместо 3х книговыдач за этот день для пенсионера и для инвалида мы получаем по одной. Чтобы результат выдался именно тот, который нам необходим, после расформатирования горизонтали и вертикали нужно получить следующее:
По вертикали:
23
23
23
23
23
23
По горизонтали:
Пенсионеры
Инвалиды
Пенсионеры
Инвалиды
Пенсионеры
Инвалиды
то есть размножить нужно и первую, и вторую строку одновременно. Во сколько раз ее нужно размножать, подсчитать несложно, однако как сделать грамотное размножение, мне не ясно. Очень не хватает цикла (любого типа), чтобы повторить команду расформатирования (или вывода) определенное количество раз. Есть даже мысль воспользоваться &uf('+8...'), чтобы в сторонней функции размножить так, как нужно, и передать обратно готовую строку, однако с ней я не совсем разобрался, может быть существует какой-то более подробный мануал по подключению сторонних функций с примерами (на форуме информации не так много)? Очень прошу помощи в решении данного вопроса, хочется увидеть какое-нибудь рациональное решение проблемы (поля 67 и 50 мы не можем сделать немножественными), уже сломал голову об эту проблему..
В Ирбисе работаю не так давно, поэтому, возможно, что-то пропустил. Подобная проблема затрагивается здесь: [
irbis.gpntb.ru], однако счел нужным выделить вопрос в отдельную тему. Заранее спасибо!
Редактировано 1 раз. Последний раз 02.12.2010 14:08 пользователем littlewindows.