Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
АРМ Книговыдача :  ИРБИС Irbis
 
Стат.форма и язык форматирования.
Пользователь: Pavel (IP-адрес скрыт)
Дата: 05, March, 2014 12:31

Здравствуйте.
Надо сделать стат.форму книговыдачи по дням и разделам знаний. За основу взял одну из стандартных форм из базы данных читателей (RDR) и переделал её под себя.
St_Kn_out2
(if p(v40) then if (v40^a<>'') and (v40^d.6=&uf('Av1000^a#1')) and (&uf('Av1000^b#1')='' or (v40^v=&uf('Av1000^b#1'))) then v40^d*6.2/ fi fi),
date_STF.mnu
(if p(v40) then if (v40^d>=&uf('Av1000^a#1')) and (v40^d<=&uf('Av1000^b#1')) then &uf('D',v40^g,|,!I=|v40^a|!,if p(v60) then v60 fi,/|), fi fi),
Kn_out_stat_gor2.MNU

Подсчёт ведётся правильно. После попросили добавить ещё доп. данные в эту форму, чтобы данные брались из этой же базы (база данных читателей RDR) из поля 21 (Поле не повторяющееся).
Меняю формат горизонтали:
(if p(v40) then if (v40^d>=&uf('Av1000^a#1')) and (v40^d<=&uf('Av1000^b#1')) then (v21)&uf('D',v40^g,|,!I=|v40^a|!,if p(v60) then v60 fi,/|), fi fi),
в статистике выдаются одни нули.
Подскажите как в таком случае, правильно написать формат горизонтали.

Re: Стат.форма и язык форматирования.
Пользователь: Pavel (IP-адрес скрыт)
Дата: 05, March, 2014 12:38

Прилагаю архив с файлами стат. формы.

Вложения: Стат.форма.7z (168.3KB)  
Re: Стат.форма и язык форматирования.
Пользователь: lev (IP-адрес скрыт)
Дата: 11, April, 2014 10:28

Вы по горизонтали хотите вдать раздел знаний и возраст, а какой справочник укажете? Вообще-то статистика двумерная, а вы хотите задействовать три поля при 2-х справочниках - справочник дат и возраст или справочник дат и раздел щнаний. Как вы хотите объединить справочники по возрасту и разделу знаний. Это должно быть две статформы.

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. В идиале нужно во-первых внести в справочник и для кодов возраста вариант "прочие" и для кодов Разделы знаний вариант "Прочие", отразить их в самой стат. форме, а в форматах сделать проверку на то, что генерируют форматы, и если сгенерированного кода нет в справочнике, то выводить код "прочие"."



Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.