Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
АРМ Каталогизатор :  ИРБИС Irbis
 
Страницы: 12>>
Страница: 1 из 2
Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 15, February, 2013 09:21

Здравствуйте, господа!

Возникла необходимость создать БД в которой сотрудники будут

регистрировать посетителей массовых мероприятий. Создали такую БД, в

раб.листе всего 5 полей (Ф,И,О,Категория,СоздалЗапись). Все бы хорошо, вот

только проверки на дублетность не проиходит и в области словаря все пусто.

Как можно это поправить?

Спасибо!!!

Re: Проверка на дублетность
Пользователь: woodyfon (IP-адрес скрыт)
Дата: 16, February, 2013 14:22

Ввести ФЛК и создать свои словари.

Re: Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 18, February, 2013 07:41

а могли бы вы подробнее описать как это можно сделать?
Спасибо!!!

Re: Проверка на дублетность
Пользователь: beliangpntb (IP-адрес скрыт)
Дата: 18, February, 2013 11:08

Для формирования словарей вам надо сначала создать таблицу выбора полей для инвертированного словаря (файл с именем базы данных и расширением fst). Там по определенному формату в словарь отбираются термины из записи, терминам присваиваются префиксы. Потом можно задать поисковые словари, основываясь на этих префиксах, назвав их, например ФИО, мероприятие и т.д.). Это делается на вкладке search ini-файла данной базы данных. Раз база нетипичная - у нее должен быть в ее директории свой ini-файл.
А для проверки на дублетность нужен файл флк. Его имя указывается в столбце ФЛК в рабочем листе для для ввода в БД в виде: @имя_флк. Имя обычно начинается со знака "!". Можно посмотреть в ИБИСе для примера - как это делается. Это тоже формат, в котором пишется, что если какое-то условие выполняется, то либо вообще не надо сохранять запись, либо дать предупреждение.
Кратко это не описать - надо читать Общее описание.

Re: Проверка на дублетность
Пользователь: woodyfon (IP-адрес скрыт)
Дата: 18, February, 2013 11:16

ФЛК - формально-логический контроль. Можно вести как для отдельного поля, так и для БД в целом (dbnflc.pft).
Например, конструкция проверяет дублетность штрих-кодов:
if p(v910^h)then 
if l(|IN=|v910^h)<=0 or val(ref(l(|IN=|v910^h),mfn))=val(mfn)then/'0' else/'2Дублетный Штрих-код: 'v910^h,ref(l(|IN=|v910^h),' (см.N ',mfn,')') fi
где v910^h - подполе для штрих-кода;
IN - словарь инвентарных номеров/штрих-кодов.
Допустим, необходимо сделать проверку на дублетность фамилий
Для этого
1) введем новый префикс инверсии (возьмем неповторяющиеся поле, к примеру v20)
1020 0 mhl, if p(v20) then 'F='v20 fi
Строку прописать в файле ИмяБд.fst
2) актуализировем словарь
3) в файле dbnflc.pft (если такого файла нет, необходимо создать вручную) введем код:
if p(v20)then 
if l('F='v20)<=0 or val(ref(l('F='v20),mfn))=val(mfn)then/'0' else/'2Дублетная фамилия: 'v20,ref(l('F='v20),' (см.N ',mfn,')') fi
Теперь при дублетности фамилии система видаст оповещение. Будет известно фамилия и MFN. Дублетность для всей БД проверяется при сохранении записи.



Редактировано 2 раз. Последний раз 18.02.2013 11:18 пользователем woodyfon.

Re: Проверка на дублетность
Пользователь: beliangpntb (IP-адрес скрыт)
Дата: 18, February, 2013 13:41

Да, все верно. Но у них всего пять полей. Проверка на дублетность вообще, наверно, только по фамилии возможна.smiling smiley. Что такое категория - неясно.

Re: Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 22, February, 2013 09:08

Все сделал как вы посоветовали, к сожалению, проверка на дублетность не происходитconfused smiley...

Вложения: STAT_555.fst (41 bytes)   DBNFLC.PFT (147 bytes)  
Re: Проверка на дублетность
Пользователь: beliangpntb (IP-адрес скрыт)
Дата: 22, February, 2013 09:32

woodyfon написал(а):
-------------------------------------------------------
> ФЛК - формально-логический контроль. Можно вести
> как для отдельного поля, так и для БД в целом

> 1) введем новый префикс инверсии (возьмем неповторяющееся поле, к примеру v20)

tuomo - А в вашей этой базе Фамилия - это именно 20-е поле? v20 - оно же было "к примеру"!



Редактировано 2 раз. Последний раз 22.02.2013 09:33 пользователем beliangpntb.

Re: Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 22, February, 2013 10:04

А что это значит,
введем новый префикс инверсии?

Re: Проверка на дублетность
Пользователь: woodyfon (IP-адрес скрыт)
Дата: 22, February, 2013 18:06

Зачастую, под префиксом инверсии (еще называют префикс словаря) подразумевается конкретный вид поиска (например, Фамилия).

Re: Проверка на дублетность
Пользователь: beliangpntb (IP-адрес скрыт)
Дата: 23, February, 2013 13:48

tuomo написал(а):
-------------------------------------------------------
> А что это значит,
> введем новый префикс инверсии?

Для того, чтобы искать по словарю, туда надо отобрать термины, присвоив им какой-то префикс. Как в примере woodyfon, например, F=. Тогда в словарь будет попадать:
F=Иванов
F=Петров
...
и т.п.

А в ини базы указываете название вида поиска "Фамилия" и префикс F=.

Но метку поля в fst надо указать реальную, а не "к примеру"!. Если в базе stat фамилия "сидит" в 20-м поле, так v20, а если в 45-м, то v45 и т.д. И в ФЛК, соответственно, тоже. Кстати, fst для инвертированного словаря должно по имени совпадать с именем базы. Никаких тебе приписок 555 и черточек!
А в этой базе никакого stat.fst не было? Вы ее не на основе каталога делали?



Редактировано 1 раз. Последний раз 25.02.2013 08:51 пользователем beliangpntb.

Re: Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 25, February, 2013 09:24

БД STAT_555 создавал из каталога. STAT_555.fst создал вручную.

Изменил v20 на v10.

Проверки на дублетность так и нет!!!

Вложения: STAT_555.fst (41 bytes)   DBNFLC.PFT (146 bytes)   STAT_555.INI (532 bytes)  
Re: Проверка на дублетность
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 25, February, 2013 09:44

...val(ref(l('F='10),mfn))...
Должно быть v10

Re: Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 25, February, 2013 10:09

не помогло...

Re: Проверка на дублетность
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 25, February, 2013 11:32

Еще второе FI потеряли.
Редактируете в Генераторе форматов (Администратор-Инструменты-Генератор форматов) ?
В нем легче находить ошибки



Редактировано 1 раз. Последний раз 25.02.2013 11:36 пользователем Дунаевская.

Re: Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 26, February, 2013 07:23

вы имеете в виду dbnflc.pft?
второе fi стоит на месте...

Re: Проверка на дублетность
Пользователь: beliangpntb (IP-адрес скрыт)
Дата: 26, February, 2013 07:56

А вы создавали словарь заново в Администраторе после того, как создали fst? Поисковый словарь ФИО в базе нормально формируется?
И еще вопрос - а это ведь не весть ini? Только search? Здесь раздел "Термин в" какой-то странный. У вас в fst поиска по КС нет, зато термины для поиска по ним где-то должны находиться. (?) Тогда должен быть сформирован словарь из всех слов всех полей, которые у вас указаны (это префикс /К=/ - в стандартных базах - для образца). А в "Термин в" - надо указать, искать только по фамилии или по адресу или месту работы и т.п. И указываются здесь не поля, а идентификаторы - те цифры, что стоят в самой левой колонке в fst.

4 8 MHL,'/K=/'(v9,|%|d9/)
2 8 MHL,'/K=/'(v15,|%|d15/)
3 8 MHL,'/K=/'(v22,|%|d22/)
4 0 MHL,(|K=|v9/)
У нас в такой самодельной базе так. А в файле - кусочек из ini,



Редактировано 3 раз. Последний раз 26.02.2013 08:27 пользователем beliangpntb.

Вложения: рис.bmp (319.6KB)  
Re: Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 26, February, 2013 08:27

- словарь создавал заново.
- Это весь ini.
- "Термин в" это где?

Спасибо!

Re: Проверка на дублетность
Пользователь: beliangpntb (IP-адрес скрыт)
Дата: 26, February, 2013 08:31

Не успела отредактировать ответ. Смотрите чуть выше. А в ini должны быть либо блоки main, private и т.п, если они чем-то отличаются от стандартных (при необходимости). А насчет словаря - не написали. Словарь-то появился?



Редактировано 2 раз. Последний раз 26.02.2013 08:50 пользователем beliangpntb.

Re: Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 26, February, 2013 09:04

вроде появился...

Вложения: 1.JPG (127.3KB)  
Re: Проверка на дублетность
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 26, February, 2013 09:16

tuomo написал(а):
-------------------------------------------------------
> вы имеете в виду dbnflc.pft?
> второе fi стоит на месте...

Тогда где же "первое" ?
if p(v10)then
if l('F='v10)<=0 or val(ref(l('F='10),mfn))=val(mfn)then/'0' else/'2Дублетная фамилия: 'v10,ref(l('F='v10),' (см.N ',mfn,')') fi FI

Re: Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 26, February, 2013 09:37

smiling smiley все получилось!!!
Большое спасибо

Проверка происходит, система выдает сообщение, но сохраняет дублетную запись. А как сделать, чтобы запись не сохранялась?

Re: Проверка на дублетность
Пользователь: beliangpntb (IP-адрес скрыт)
Дата: 26, February, 2013 10:17

Попробуйте вместо "2Дублетная фамилия" "1Дублетная фамилия". Затем Из базы выйти и снова войти. И попробовать.
Когда все получится, наверно, стоит подумать, как проверять не только фамилию, но и имя-отчество. А то бывают ведь и однофамильцы!



Редактировано 1 раз. Последний раз 26.02.2013 10:21 пользователем beliangpntb.

Re: Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 26, February, 2013 10:23

да получилось...
спасибо всем.
а скажите получиться ли настроить, чтобы проверка была по фамилии и по имени?

Re: Проверка на дублетность
Пользователь: beliangpntb (IP-адрес скрыт)
Дата: 26, February, 2013 10:28

Можно изменить fst так, чтобы префикс F= формировался не только из поля 10, но и из имени и отчества. И в флк тоже надо написать не l('F='v10), а так же, как в fst. Тогда будет.
Посмотрите в других базах примеры dbnflc.pft

Re: Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 28, February, 2013 10:06

не могу никак с этим разобраться... HELP!!!

Re: Проверка на дублетность
Пользователь: beliangpntb (IP-адрес скрыт)
Дата: 28, February, 2013 18:03

Ну попробуйте так:
в fst

1020 0 mhl, if p(v10) then 'F='v10,| |v11,| |v12 fi

Это:
фамилия, через пробел - имя (если оно есть), через пробел - отчество (если оно есть) (поэтому || вместо кавычек)

Поменяете - словарь заново полностью.

И таким же образом поменять в флк ( заменить просто v10 на эту же комбинацию полей).

Re: Проверка на дублетность
Пользователь: tuomo (IP-адрес скрыт)
Дата: 01, March, 2013 07:41

попробовал, не получилось...

Вложения: DBNFLC.PFT (215 bytes)   STAT_555.fst (57 bytes)  
Проверка на дублетность
Пользователь: rogova (IP-адрес скрыт)
Дата: 29, April, 2013 07:32

Здравствуйте!
У нас Ирбис 2007.2
Есть две БД книг: 1БД - 90000 записей, 2БД - 20000 записей.Нам надо объединить эти БД. Как настроить проверку на дублетность, чтобы идентичные записи вышли как дублетные.

Re: Проверка на дублетность
Пользователь: Сорокина Лариса (IP-адрес скрыт)
Дата: 29, April, 2013 13:15

rogova написал(а):
-------------------------------------------------------
> Здравствуйте!
> У нас Ирбис 2007.2
> Есть две БД книг: 1БД - 90000 записей, 2БД - 20000
> записей.Нам надо объединить эти БД. Как настроить
> проверку на дублетность, чтобы идентичные записи
> вышли как дублетные.


Дублетные записи выявит стандартный ФЛК при импорте документов одной БД в другую. При импорте через Администратор не отключайте ФЛК.

Страницы: 12>>
Страница: 1 из 2


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