Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Web Ирбис и Z-Ирбис :  ИРБИС Irbis
 
Поиск по дисциплине и специальности с использованием расширенного поиска
Пользователь: skiph (IP-адрес скрыт)
Дата: 17, January, 2019 08:45

Здравствуйте. Имеем систему 2011.1. Следующая ситуация: есть некоторый учебник, который используется на дисциплине "Введение в специальность" у специальности А и на дисциплине "Финансы", специальность Б. если мы задаем запрос вида:
<.>DISC=ВВЕДЕНИЕ В СПЕЦИАЛЬНОСТЬ<.>*<.>SPEC=Б<.>
То система все равно выдает нам это учебник, несмотря на то, что такая дисциплина читается на другой специальности. Можно ли это как-то исправить?

Заранее благодарен



Редактировано 1 раз. Последний раз 18.01.2019 23:34 пользователем Кирилл Соколинский (СЗТУ).

Re: Расширенный поиск
Пользователь: skiph (IP-адрес скрыт)
Дата: 18, January, 2019 07:12

Решил попробовать через S21SCAN.
В ini файл, в раздел PARAMETERS добавляю строки:

PARNAME61=DISC
PARTNAME61=5700

PARNAME62=SPEC
PARTNAME62=5800

создаю файл disc.pft
с содержимым (if (v691^D=v5700)and(v691^C=v5800) then '1' else '0' fi /)
Результат - 0.

Где я наделал ошибок? И еще: нужно ли после этого "выносить" параметры SPEC и DISC за пределы запроса (S21ALL)?

Пример запроса:
LNG=&C21COM=S&I21DBN=K2018&P21DBN=K2018&S21FMT=fullwebr&DISC=ИСТОРИЯ&SPEC=Б&S21SCAN=disc&S21ALL=<.>SPEC=Б<.>

как я понял, можно обойтись без параметров, а ссылаться на всю поисковую строку:
(if (v2226:v691^D)and(v2226:v691^C) then '1' else '0' fi /)
но так тоже не работает



Редактировано 2 раз. Последний раз 18.01.2019 08:37 пользователем skiph.

Re: Поиск по дисциплине и специальности с использованием расширенного поиска
Пользователь: Кирилл Соколинский (СЗТУ) (IP-адрес скрыт)
Дата: 19, January, 2019 00:15

Для реализации поиска с оператором "И", с учётом повторения, в ИРБИС предусмотрен оператор "(F)". В WEB ИРБИС, в форме расширенного поиска, применение данного оператора к конкретным полям невозможно. По крайней мере с использованием типовых средств. Но как раз такой режим используется в J-ИРБИС 2.0 (Пример: [lib.sut.ru])

Выбранный Вами подход является вполне работоспособным. Но необходимо внести в скрипт поиска некоторые коррективы:
1. Если поля Дисциплина и Специальность одновременно не заполнены, скрипт должен возвращать 1
2. В Вашем случае сравнение с 2226 происходит только для первого повторения 691. Нужно использовать конструкцию:

(if p(v691) then if (&uf('Av2226#1'):v691^D) and (&uf('Av2226#1'):v691^C) then '1' else '0' fi fi/)



Редактировано 2 раз. Последний раз 20.01.2019 22:43 пользователем Кирилл Соколинский (СЗТУ).

Re: Поиск по дисциплине и специальности с использованием расширенного поиска
Пользователь: skiph (IP-адрес скрыт)
Дата: 21, January, 2019 05:31

Спасибо за ответ, но с этой конструкцией тоже возникли проблемы, скорее всего из-за того, что какие-то повторения выдавали 0, а какие-то 1, поэтому доработал ее следующим образом:

&unifor('S0'),(if p(v691) then if (&uf('Av2226#1'):v691^D) and (&uf('Av2226#1'):v691^C) then &unifor('S1') else '' fi fi/), if val(&unifor('SA'))>0 then '1' else '0' fi

т.е. через счетчик. Вроде работает. Больше спасибо за помощь!



Редактировано 1 раз. Последний раз 21.01.2019 05:34 пользователем skiph.

Re: Поиск по дисциплине и специальности с использованием расширенного поиска
Пользователь: Кирилл Соколинский (СЗТУ) (IP-адрес скрыт)
Дата: 21, January, 2019 11:34

skiph написал(а):
-------------------------------------------------------
> Спасибо за ответ, но с этой конструкцией тоже
> возникли проблемы, скорее всего из-за того, что
> какие-то повторения выдавали 0, а какие-то 1,


Да, я лишь скорректировал исходный вариант. Если у Вас включено усечение для дисциплин и специальностей, лучше было бы использовать примерно следующий подход:

if s((if p(v691) then if (&uf('Av2226#1'):s('='v691^D'$') and (&uf('Av2226#1'):s('='v691^С'$')) then 'true' break  fi fi))<>'' then '1' else '0' fi

Счетчики сейчас использовать не рекомендуется.

Можно было бы пойти дальше и с помощью регулярных выражений заменять один из операторов "*" в запросе на "(F)" в CGIFLK.PFT. Можно было бы ввести в форму новые поименованные параметры для полей Специальность и ДИсциплина, а затем формировать фрагмент запроса, связанный с дисциплинами и специальностями, уже на уровне CGIFLK.PFT по нужному алгоритму.



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