Re: Стат.форма и язык форматирования.
Пользователь:
Pavel (IP-адрес скрыт)
Дата: 18, April, 2014 09:52
lev написал(а):
-------------------------------------------------------
> Вы по горизонтали хотите вдать раздел знаний и
> возраст, а какой справочник укажете? Вообще-то
> статистика двумерная, а вы хотите задействовать
> три поля при 2-х справочниках - справочник дат и
> возраст или справочник дат и раздел щнаний. Как вы
> хотите объединить справочники по возрасту и
> разделу знаний. Это должно быть две статформы.
Мне уже здесь на форуме объясняли, но я так до конца не разобрался с проблемой. А справочник я создавал новый, где объединял значения из двух справочников в один. В других стат.формах всё отлично работает. Видно тут проблема где-то глубже. А говорили вот что:
"Форматы Вертикали и горизонтали создают набор терминов, другими словами строк, в которых есть коды, соответствующие справочникам вертикали и горизонтали. Коды эти являются фактически координатами, на пересечении которых значение увеличивается на единицу. Если у вас вертикаль и горизонталь формирует разное количество кодов, то во первых происходит их взаимное смещение в том месте, где какой-то из кодов выпал, а во вторых их выводится столько, сколько сформировало значений меньшая из координат.
А теперь внимательно по вашему формату:
У вас в горизонтали и вертикали дата проверяется по разному. В вертикали она проверяется по равенству года и месяца, а в горизонтали по дате выдачи больше дате в опросном листе... Это как понимать?
вертикаль:
(v40^d.6=&uf('Av1000^a#1'))
горизонталь:
(v40^d>=&uf('Av1000^a#1'))
Нужно обеспечить единство условий для формирования вертикали и горизонтали.
Далее, смотрите что получается по вашим форматам. Вы ввели в горизонталь формирование данных по полю 21. Примем условно, что оно работает правильно. В итоге у вас на записях, у которых есть заполненное поле 21 в горизонтале сформируется терминов в два раза больше, чем в вертикали. Правда, это будет если все же исправить формат на
(if p(v40) then if (v40^d>=&uf('Av1000^a#1')) and (v40^d<=&uf('Av1000^b#1')) then &uf('av21#1')/&uf('D',v40^g,|,!I=|v40^a|!,if p(v60) then v60 fi,/|), fi fi),
В такой ситуации вам нужно обеспечить работу и вертикали и горизонтали так, что бы они у вас формировали одинаковое количество терминов. Например вот так:
вертикаль:
(if p(v40) then if (v40^a<>'') and (v40^d.6='201309') and (&uf('Av1000^b#1')='' or (v40^v=&uf('Av1000^b#1'))) then if &uf('av21#1')<>'' then v40^d*6.2/ fi, v40^d*6.2/ fi fi),
горизонталь:
(if p(v40) then if (v40^a<>'') and (v40^d.6='201309') and (&uf('Av1000^b#1')='' or (v40^v=&uf('Av1000^b#1'))) then &uf('av21#1')/&uf('D',v40^g,|,!I=|v40^a|!,if p(v60) then v60 fi,/|), fi fi),
Однако, я бы и этот вариант не назвал на 100% рабочим, так как человеческий фактор никто не отменял и всегда могут быть ситуации, когда могут отсутствовать коды в поле 21 и 60, или они могут отличаться от тех, что внесены в справочник Kn_out_stat_gor2.MNU. В идиале нужно во-первых внести в справочник и для кодов возраста вариант "прочие" и для кодов Разделы знаний вариант "Прочие", отразить их в самой стат. форме, а в форматах сделать проверку на то, что генерируют форматы, и если сгенерированного кода нет в справочнике, то выводить код "прочие"."