Имя: Пароль:
1C
1С v8
Поиск по неточным данным
0 Teffi
 
19.10.12
06:13
Подтолкните пожалуйста в нужном направлении! Пишу обработку загружающую дбф в 1ску. И столкнулась с такой проблемой. Физ лица в 1ске и дбф могу немного отличаться, регистрами, опечатками. Надо чтобы поиск в справочнике Физ лиц находил всех лиц, которые похожи, и предлагал пользователю выбрать нужного. А если физлица в справочнике и в дбф совпадают полностью, соответственно все автоматически заполнялось. Вот думаю, можно ли в восьмерке это грамотно организовать?
1 Godofsin
 
19.10.12
06:15
Можно.
2 Godofsin
 
19.10.12
06:16
Юзай запросы + ПОДОБНО
3 Teffi
 
19.10.12
06:22
а разве ПОДОБНО ищет не точно такие же записи?
4 Godofsin
 
19.10.12
06:23
Ну я так понимаю, ты же по наименованию ищешь. Как раз для этого
5 Godofsin
 
19.10.12
06:23
нет, не точно такие же )))
6 Teffi
 
19.10.12
06:30
"Выбрать
| ФизическиеЛица.Наименование
| Из
| Справочник.ФизическиеЛица КАК ФизическиеЛица
| ГДЕ
| ФизическиеЛица.Наименование ПОДОБНО &Наименование"
Запрос.УстановитьПараметр ("Наименование",

Так я понимаю? А какое условие задать в таком случае? Что б учитывался и регистр, и несоответствие некоторых букв?
7 Godofsin
 
19.10.12
06:31
(6) как насчет почитать справочку?
8 Teffi
 
19.10.12
06:32
Ясно
9 Godofsin
 
19.10.12
06:33
Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.

Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:

% (процент): последовательность, содержащая любое количество произвольных символов
_ (подчеркивание): один произвольный символ
[…] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок
В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.
[^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания
Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки.

Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.

Например, шаблон “%АБВ[0-9][абвг]\_абв%” СПЕЦСИМВОЛ “\” означает подстроку, состоящую из последовательности символов:
буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в.

Причем перед этой последовательностью может располагаться произвольный набор символов.
10 Живой Ископаемый
 
19.10.12
07:52
2(6) ПОДОБНО для 1С регистронезависимо - как раз то что тебе нужно. Но вот как Понять некоторость символов - не понятно...
В полнотекстовом поиске еще можно задать "близость слова", тоже в справке почитай.
11 France
 
19.10.12
07:54
да загрузи как есть, потом грохни дубли по схожему набору..
делов то..
12 Teffi
 
19.10.12
08:11
Этой обработкой будут пользоваться каждый день. Данные о платежах из разных систем загружаются в одну дбфку. Обработка должна быть безупречной....
13 Godofsin
 
19.10.12
08:12
(12) Нереально, имхо
14 Живой Ископаемый
 
19.10.12
08:13
2(12) Так не будет.
Расскажи как обработка догадается что например
Петренко А.В.
и
Петренков А.В. это два разных человека, а не в одном просто добавили/недописали одну букву?

В фамилиях-то нет контрольных разрядов.
15 aleks-id
 
19.10.12
08:25
16 Живой Ископаемый
 
19.10.12
08:28
2(15) вот все что там описано, в в8 по крайней мере для русского языка реализовано только в полнотекстовом поиске. И ПОДОБНО для реализации такого не сгодится.
17 dk
 
19.10.12
08:32
придумать функцию подобия несложно, можно и какую-нить научную взять
---
имхо довольно простая ф-ция
1. убрать все не буквы
2. применить хэш типа: убрать дубли букв и выстроить по алфавиту. Например "Иванов А. С." -> "авинос"
3. найти одинаковые по хэшу записи
---
Тут главное определиться показать как можно больше похожих записей, тогда хэш попроще. Либо показать похожие, но с вероятностью пропуска, тогда хэш построже - например можно считать количество букв повторяющихся "Иванов А. С." -> "а2в2и1н1о1с1"
18 Живой Ископаемый
 
19.10.12
08:34
2(17) да. наверное, только опять же - в запросе с Подобно этого уже не сделать. Значит кодом. А зачем это все изобретать, если реализовано в полнотекстовом поиске.
19 dk
 
19.10.12
08:35
просто не работал с полнотекстовым поиском в 8-ке, та программное обращение есть?
20 Живой Ископаемый
 
19.10.12
08:38
ну сдрасьте... конечно. Просто нужный ей ДБФ все равно придется сначала загрузить в какую-то буферную структуру1С типа спраовника или регистра сведений, запустить индексирование (тоже можно программно) и потом уже использовать методы ПТ.
21 Asmody
 
19.10.12
08:47
(12) вот мне нравятся такие заявки. скажи, что работа системы может быть безупречной только в случае, если работа операторов будет безупречна
22 ASU_Diamond
 
19.10.12
08:51
а давно у нас физлиц ищут по наименованию? Сколько у нас в стране Ивановых И.И.?
PS. У нас есть полные тезки родившиеся в один день
23 olegves
 
19.10.12
08:52
(0) я как-то синхронизировал Физлиц ЗУП и самописной управленки по ФИО, а кто не стыковался, того по полу, фамилии и инициалам. Пришлось писать обработку для сопоставления. Если есть дата рождения, то можно по фамилии (или 5 первым буквам фамилии), полу и дате рождения сопоставить
24 Dimel
 
19.10.12
08:55
(20) А можно воспользоватся внешней компонентой StrMatch.dll для этого придуманой ещё 9 лет назад ;)
25 dk
 
19.10.12
08:55
(18) подготовка данных конечно потребуется, но расчеты можно провести в ТЗ и потом ее загрузить во временные таблицы и в запросе использовать уже. Хотя проще в самой ТЗ и искать.
26 Dimel
 
19.10.12
09:03
Вот кстати решение похожей задачи http://danila.org.ua/nechetkiy-poisk-speshit-na-pomoshh-rabot/
27 Живой Ископаемый
 
19.10.12
09:10
2(24) Блин, зачем? Чтобы она работала только в толстом клиенте на винде, и не работала в случае Линуксового сервера например? При живом-то ПТ поиске еще со времен 8.0?
28 Живой Ископаемый
 
19.10.12
09:11
Так и есть, работает только в 32-битной винде.
29 Dimel
 
19.10.12
09:18
(27) Полнотекстовый поиск появился только на 8.1 ;), но мне было легче переделать обработки с 7-ки с внешней компонентой чем разбиратся с ним - это только один из вариантов ...
30 Dimel
 
19.10.12
09:21
+(27) У меня кстати на 64 битной винде работает что я делаю не так?
31 Живой Ископаемый
 
19.10.12
09:24
2(30) Исключительно потому что или толстый клиент или сервер 1С 32-битный.. да?
32 marty0701
 
19.10.12
09:28
(0)Как вариант сопоставления:
Если в дбф, есть данные по физику, уникальные, типа ИНН или дата рождения проверяй по ним также.
ФИО на предмет очепяток и прочего можно разрубаь на Ф + И + О,
Вырезать из них левые символы, т.е. приводить к виду "Иванов" + "Иван" + "Иванович", искать на совпадение по каждому из них + ИНН + Дата, также о полному ФИО + ИНН + ДАТА, т.е. нечто вроде, ИвановИванИванович77430960271719850701.
Ну и соответственно выводить пользователю форму с предложением проверить сопоставления, исправить некорректные и продолжить загрузку.
33 Dimel
 
19.10.12
09:32
(31) Может вы и правы потому что стоят 2 сервера 32 и 64 битные, сейчас попробую на 64 битном.
34 crueltytanya
 
19.10.12
09:34
(32) Если есть ИНН, остальное можно использовать только для проверки правильности введеного ИНН. ИНН у всех уникален.
35 marty0701
 
19.10.12
09:37
(34)Ну да, индивидуальный налоговый номер, он на то и индивидуальный, что уникальный, ваши предложения в случае если в 1С Инн 774309602717 Указан у Петрова Петра Петровича, а в Дбф у Иванова Ивана Ивановича?
36 crueltytanya
 
19.10.12
09:38
(35) да, только для проверки правильности введенного ИНН. мало где кто что мог ввести.
37 marty0701
 
19.10.12
09:40
(36)Это какой то ответ на какой-то вопрос?
38 MSII
 
19.10.12
09:41
(34) ИНН есть не у всех.
39 crueltytanya
 
19.10.12
09:42
(37) я конкретизировала ваше предложение в (32) при загрузке по ИНН по вашему алгоритму использовать ФИО и дату рождения.
40 crueltytanya
 
19.10.12
09:44
(38) тогда (17) или (18)
41 marty0701
 
19.10.12
09:45
(39)А ну да, если есть ИНН, то доп проверкой фигачить, если нет, просто сопоставлять по ФИО + дата рождения, хоть это тоже даст 100% результатов, на то и есть форма сопоставления для проверки, а вообще алгоритмов тьма, для неточного поиска, надо просто подумать, извращения тут приветствуются.
42 Teffi
 
19.10.12
10:16
Я ещё по коду лицевого ищу. Но в дбф даны всего 6 последних цифр из 17, поэтому при при поиске только по коду, он мог вывести 5 кодов. Поэтому решила использовать второй идентификатор, а удобней всегоэ то делать по ФИО физлиц. А ФИО в в реестрах может быть с опечатками, потому что криворукая операторша от руки его при оплате заполняет.
43 Teffi
 
19.10.12
10:18
(32) Решила сначала искать по коду, потом если по такому коду есть точно такое физлицо, тогда все окей, если нет, выводить окно с выбором физлиц с таким кодом, пусть ручками выбирает какое надо.
44 Vladal
 
19.10.12
11:01
(2) Подобно в семерке есть?
45 Живой Ископаемый
 
19.10.12
11:02
2(44) В Семерке винде? даже в линуксе работает
46 Vladal
 
19.10.12
11:03
(45) а.а.а.а... я прочитал (0) как "реализовать в семерке"
47 Живой Ископаемый
 
19.10.12
11:05
лицорука.пнг
48 GANR
 
19.10.12
11:23
Можно за совпадение того или иного признака давать n-ное кол-во баллов. Если Наименование подобно, или ИНН равны - тогда - даем 4 балла. За Должность, ГодРождения, МестоРОждения и т. д. даем по 1 баллу. Если сумма баллов более или равна 4 (для строгости, можно взять 5 и выше) - считаем, что это "то" физ. лицо. Запрос - ниже...

ВЫБРАТЬ
   ФизическиеЛица.Ссылка
ИЗ
   Справочник.ФизическиеЛица КАК ФизическиеЛица
ГДЕ
   ВЫБОР
           КОГДА ФизическиеЛица.Наименование ПОДОБНО &Наименование + "%"
               ТОГДА 4
           ИНАЧЕ 0
       КОНЕЦ + ВЫБОР
           КОГДА ФизическиеЛица.ИНН = &ИНН
               ТОГДА 4
           ИНАЧЕ 0
       КОНЕЦ + ВЫБОР
           КОГДА ФизическиеЛица.КодИМНС = &КодИМНС
               ТОГДА 1
           ИНАЧЕ 0
       КОНЕЦ + ВЫБОР
           КОГДА ФизическиеЛица.МестоРождения = &МестоРождения
               ТОГДА 1
           ИНАЧЕ 0
       КОНЕЦ + ВЫБОР
           КОГДА ФизическиеЛица.Пол = &Пол
               ТОГДА 1
           ИНАЧЕ 0
       КОНЕЦ + ВЫБОР
           КОГДА НАЧАЛОПЕРИОДА(ФизическиеЛица.ДатаРождения, ГОД) = &ГодРождения
               ТОГДА 1
           ИНАЧЕ 0
       КОНЕЦ >= 4
49 GANR
 
19.10.12
11:23
(0) см. (48)
50 Teffi
 
19.10.12
12:49
С баллами прикольно)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан