|
Игнорировать Е и Ё в запросе. | ☑ | ||
---|---|---|---|---|
0
Balabass
13.05.15
✎
09:12
|
Дано:
Гилев Антон - строка. Нужно найти Антона в справочнике сотрудников, в котором указано ,что ГилЕв на самом деле ГилЁв. Или искать сразу оба варианта. |
|||
1
Бубка Гоп
13.05.15
✎
09:16
|
(0) В запросе условие "В СПИСКЕ",
перед выполнением запроса: ИменаДляПоиска = Новый СписокЗначений; ИменаДляПоиска.Добавить(Имя); ИменаДляПоиска.Добавить(СтрЗаменить(Имя, "е", "ё")); ИменаДляПоиска.Добавить(СтрЗаменить(Имя, "ё", "е")); Запрос.УстановитьПараметр("Имена", ИменаДляПоиска); |
|||
2
Balabass
13.05.15
✎
09:18
|
(1) А если 2 е/ё?
Или одна е а вторая ё? Какой нибудь Бюль Бюль Ёгеев? )) |
|||
3
Бубка Гоп
13.05.15
✎
09:18
|
(1) точнее даже лучше так:
ИменаДляПоиска.Добавить(СтрЗаменить(Имя, "ев", "ёв")); ИменаДляПоиска.Добавить(СтрЗаменить(Имя, "ёв", "ев")); |
|||
4
ДенисЧ
13.05.15
✎
09:18
|
где Наименование подобно "Гил[её]в Антон]
|
|||
5
Balabass
13.05.15
✎
09:21
|
(4) Гилев для примера.
ФИО динамическая - как быть? Герцен Алена. А найти нужно Герцен Алёну. Тут как быть? |
|||
6
ДенисЧ
13.05.15
✎
09:22
|
(5) СТрЗаменить()
|
|||
7
Лодырь
13.05.15
✎
09:22
|
(5) И кстати Гёрцен Алена, Герцён Алёна, Герцён Алена и Герцен Алена это разные люди?
|
|||
8
Balabass
13.05.15
✎
09:23
|
(7) Один человек.
(6) Искать все возможные варианты? |
|||
9
Fish
13.05.15
✎
09:24
|
(5) Нужно просто правильно писать имена и не выдумывать велосипедов. А фамилии через "е" - и через "ё" - это разные фамилии.
|
|||
10
Balabass
13.05.15
✎
09:25
|
(9) Правильно ты говоришь. Но работать приходится с тем, что есть.
|
|||
11
Лодырь
13.05.15
✎
09:26
|
(10) А если вычислить для всех приведенную к одному написанию фамилию? И использовать потом ее?
|
|||
12
Бубка Гоп
13.05.15
✎
09:29
|
(11)Хороший вариант. Со всеми "е" и совсем без "ё", например.
|
|||
13
Balabass
13.05.15
✎
09:29
|
(11) Звучит угрожающе.
Это как? |
|||
14
Balabass
13.05.15
✎
09:30
|
(11) (12) Кстати вариант.
|
|||
15
alex74
13.05.15
✎
09:30
|
А если как в (4), т.е. подробно так:
НаименованиеПараметр = СтрЗаменить(Наименование, "е", "ё"); НаименованиеПараметр = СтрЗаменить(Наименование, "ё", "[её]"); Запрос.УстановитьПараметр("НаименованиеПараметр", НаименованиеПараметр); ... а потом в запросе Наименование Подобно НаименованиеПараметр; |
|||
16
alex74
13.05.15
✎
09:31
|
т.е. вторая строка
НаименованиеПараметр = СтрЗаменить(НаименованиеПараметр , "ё", "[её]"); |
|||
17
Balabass
13.05.15
✎
09:32
|
(16) А почему в []?
|
|||
18
Balabass
13.05.15
✎
09:32
|
(16) А, понял.
|
|||
19
FIXXXL
13.05.15
✎
09:33
|
(13) сделать напоминалку бухгалтеру "проверьте фамилию!!!"
отбор - по нахождению е и ё в строке проверенные - помечать и более не трогать |
|||
20
Fish
13.05.15
✎
09:34
|
(11)(12) Не всегда это возможно. Иногда оба написания имеют место быть, но при этом это разные фамилии.
|
|||
21
Balabass
13.05.15
✎
09:37
|
(20) Иногда бухгалтера это охранники, которым лишбы турникет работал)
|
|||
22
Fish
13.05.15
✎
09:39
|
(21) А для турникета пофигу, как фамилия написана. Есть номер карты :)
|
|||
23
Balabass
13.05.15
✎
09:40
|
(22) Вово...Поэтому Богодач кагбы намекгает.
|
|||
24
НеБорис Нуралиев
13.05.15
✎
09:40
|
Посмотри как в БП 3.0 сделано. Там есть поле "Служебное наименование" в справочнике "ФизЛица". В нем записано ФИО с заменой "е" и "ё" на "её"
В запросах ищется по этому полю. |
|||
25
kosts
13.05.15
✎
09:41
|
Если надо обойтись только запросом, так примерно так можно, это очень не универсально и ограничение только с одной ё. Что поделать запросы в 1С сильно кастрированы
|
|||
26
alex74
13.05.15
✎
09:41
|
(22) если случайный посетитель то карты у него может не быть, зато у охранника заявка на пропуск оформлена, по телефону. "Левочкин Иван Иванович". И тут приходит Иван Иванович, но по паспорту он "Лёвочкин". Пропускать?
|
|||
27
1Сергей
13.05.15
✎
09:41
|
не могу придумать ситуацию, когда приходилось бы искать кого-то по наименованию.
Загрузка данных? |
|||
28
kosts
13.05.15
✎
09:42
|
(25) И то наверное не правильно
|
|||
29
Balabass
13.05.15
✎
09:43
|
(27) Да.
|
|||
30
1Сергей
13.05.15
✎
09:43
|
(29) идентификатором не должно быть ФИО
|
|||
31
Balabass
13.05.15
✎
09:44
|
(30) Не умничай.
Есть таблица - ФИО, номер карты. Есть 1с где есть ФИО и еще много чего. Варианты? Тото. |
|||
32
ХардHard
13.05.15
✎
09:44
|
(24) Хороший вариант.
Можно то же самое сделать предварительно выгрузив всех физлиц и заменить у них все Ё на Е получим соответствие нормализованных ФИО и ссылок на физлиц. |
|||
33
Balabass
13.05.15
✎
09:45
|
Отличный вариант в (16) - сработало.
|
|||
34
1Сергей
13.05.15
✎
09:46
|
(31) забить номера карт в 1С РУКАМИ и не любить моск уважаемым людям
|
|||
35
Ненавижу 1С
гуру
13.05.15
✎
09:46
|
хранить в допреквизите (который заполняется автоматически) "ФИОбезЁ"
|
|||
36
Balabass
13.05.15
✎
09:46
|
Безусловно, где будут вопросы - руками будут бить, но основную массу можно шурануть.
|
|||
37
1Сергей
13.05.15
✎
10:00
|
и ещё не понимаю, чем (4) не подходит
|
|||
38
Fish
13.05.15
✎
10:04
|
(26) Ты по телефону не услышишь, что ЛЕвочкин - это не ЛЁвочкин?
|
|||
39
alex74
13.05.15
✎
10:07
|
(38)
1. посетитель звонит и называет свою фамилию "Лёвочкин". 2. оператор забивает в базу временных пропусков "Левочкин" потому что никто букву ё никогда не пишет. 3. клиент приходит на проходную, называет фамилию, охранник вбивает в строку поиска "Лёвочкин" потому что очень умный. 4. запрос выдает 0 позиций, все, на клиента пропуск не оформлен. |
|||
40
Кай066
13.05.15
✎
10:11
|
(39)
1. посетитель звонит и называет свою фамилию "Петров". 2. оператор забивает в базу временных пропусков "Иванов" потому что никто букву ё никогда не пишет. 3. клиент приходит на проходную, называет фамилию, охранник вбивает в строку поиска "Петров" потому что очень умный. 4. запрос выдает 0 позиций, все, на клиента пропуск не оформлен. |
|||
41
alex74
13.05.15
✎
10:12
|
(40) если оператор - бывший программист 1с, такое тоже возможно.
|
|||
42
zak555
13.05.15
✎
10:14
|
> Гилев Антон
он может быть гИлевым или гилЁвым |
|||
43
zak555
13.05.15
✎
10:14
|
отрубать руки, кто не использует букву Ё
|
|||
44
1Сергей
13.05.15
✎
10:15
|
(41) не каждый программист столько выкурит, сколько Кай
|
|||
45
ИУБиПовиц
13.05.15
✎
10:28
|
ФИО = "Герцен Алёна" ;
RegExp = Новый COMОбъект("VBScript.RegExp"); RegExp.IgnoreCase = Истина; RegExp.Global = Истина; RegExp.MultiLine = Ложь; СтрокаПоиска = ФИО; СтрокаВыраж = ""; пока 2*2 = 4 цикл Позе = Найти(СтрокаПоиска ,"е"); позё = Найти(СтрокаПоиска ,"ё"); Если НЕ Позе = 0 Или НЕ Позё = 0 тогда Если Позе = 0 тогда поз = Позё; иначеЕсли Позё = 0 тогда поз = позе; иначе поз = Мин(Позе,Позё); КонецЕсли; // поз = Мин(Позе,Позё); СтрокаВыраж = СтрокаВыраж + "[" + Лев(СтрокаПоиска,Поз - 1) + "]+" + "[еёЕЁ]."; СтрокаПоиска = Сред(СтрокаПоиска, поз+1); иначе СтрокаВыраж = СтрокаВыраж + "[" + СтрокаПоиска +"]"; Прервать; КонецЕсли; КонецЦикла; RegExp.Pattern = СтрокаВыраж ; Matches=RegExp.Execute(ФИО); ЧислоВхождений=Matches.Count(); Если ЧислоВхождений > 0 тогда Предупреждение("НАйдено") КонецЕсли; |
|||
46
Balabass
13.05.15
✎
10:30
|
(45) Жирно.
|
|||
47
Fish
13.05.15
✎
10:30
|
(39) "никто букву ё никогда не пишет" - а вот тут ты сильно неправ.
|
|||
48
ИУБиПовиц
13.05.15
✎
10:31
|
Только долго будет выполняться:) эта фигня. Надо ж весь справочник этой фигне скормить будет:)
|
|||
49
Balabass
13.05.15
✎
10:33
|
(48) Так это только важности добавит )))
|
|||
50
ЧеловекДуши
13.05.15
✎
10:40
|
(45) А по УФ тоже искать на клиенте? Сервер же х64 может быть :)
|
|||
51
ЧеловекДуши
13.05.15
✎
10:44
|
Предлагаю в набираемых именах находить сперва буквы, символы, фразы, которые будут дублироваться, заменять их служебными символами.
Затем скармливать все это в запросе, через подобно. |
|||
52
kortun
13.05.15
✎
10:58
|
Самый верный вариант - это при записи сотрудника убирать все ё и заменять на е
|
|||
53
Лефмихалыч
13.05.15
✎
11:02
|
(0) если задача найти все дубли, образованные буквами е и ё, то - только тупим перебором. ЗАменить все ё на е и потом
ИМЕЮЩИЕ КОЛИЧЕСТВО(ФИО)>1 |
|||
54
Timon1405
13.05.15
✎
11:09
|
(51) зачем служебными? можно что-то типа
Перем RegExp; Процедура КнопкаВыполнитьНажатие(Кнопка) ШаблонМаски =СформироватьШаблон_е_ё(ВходСтрока); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | &ТестФио |ГДЕ | &ТестФио ПОДОБНО &ШаблонМаски"; Запрос.УстановитьПараметр("ШаблонМаски", ШаблонМаски); Запрос.УстановитьПараметр("ТестФио", СтрокаВБазе); Результат = Запрос.Выполнить(); Нашлось = НЕ Результат.Пустой(); Сообщить(Нашлось); КонецПроцедуры Функция СформироватьШаблон_е_ё(СтрВход) RegExp.Pattern = "[её]"; Возврат "%"+RegExp.Replace(СтрВход,"[её]")+"%"; КонецФункции RegExp = Новый COMОбъект("VBScript.RegExp"); RegExp.IgnoreCase = Истина; RegExp.Global = Истина; RegExp.MultiLine = Ложь; |
|||
55
karabas11
13.05.15
✎
11:12
|
Можно еще полнотекстовый индекс заюзать. Он нечеткий поиск умеет. :)
|
|||
56
1Сергей
13.05.15
✎
11:15
|
(52) не знаю как в РФ, а у нас Номера карт жестко привязаны к паспортным ФИО. Если в паспорте есть Ё, то и свифт-файл надо отправлять с ФИО с Ё.
Напомню, речь идёт про карточки |
|||
57
Torquader
13.05.15
✎
11:15
|
Для обработки справочника один раз никто не запрещает создать таблицу строк соответствия, в которой заменить Ё на Е, а также не забыть, что бывают и латинские буквы.
Например, фамилию Серов очень часто набирают с латинской С, так как неправильную раскладку заметят только на буквы е (если не на в). А имя "Сара" можно написать как кирилицей, так и латиницей "Capa" и никто не догадается - на экране-то выглядит прекрасно. Поэтому, рекомендуется проверять, чтобы ФИО были написаны или целиком кирилицей или целиком латиницей. |
|||
58
Balabass
13.05.15
✎
11:18
|
(56) У всех так.
|
|||
59
Balabass
13.05.15
✎
11:19
|
(57) За сару п*здюлей надо давать сразу.
|
|||
60
kortun
13.05.15
✎
11:21
|
(56) ну так можно использовать наименование и наименование полное
|
|||
61
1Сергей
13.05.15
✎
11:57
|
(59) Чем тебе Капа не угодила
|
|||
62
Torquader
13.05.15
✎
12:30
|
(59) У меня была копия какой-то базы, где часть ФИО вводили используя Ctrl вместо Shift и там были спецсимволы вместо букв.
Видимо, когда у оператора руки из ж..пы он последней на экран и смотрит. |
|||
63
Garykom
гуру
13.05.15
✎
13:37
|
Эта в запросах 1С like нету? типа like 'Гил%в Антон'?
|
|||
64
ДенисЧ
13.05.15
✎
13:37
|
(63) Всю тему не читал, но осуждаю?
|
|||
65
ЧеловекДуши
13.05.15
✎
13:43
|
(57) Такие погрешности надо воспринимать, как ошибка Оператора.
Искать их не надо. Просто заставлять переименовывать. И в итоге все будет по Русски :) |
|||
66
Garykom
гуру
13.05.15
✎
13:44
|
(64) точно ))
|
|||
67
Кай066
13.05.15
✎
13:45
|
(65) "по Русски" по-русски пишется "по-русски"
|
|||
68
alex74
13.05.15
✎
13:47
|
(63) по условиям задачи Гилев и Гилёв одна фамилия, а Гилов - другая.
Правильное решение было найдено несколько часов назад, и не один раз. |
|||
69
Torquader
13.05.15
✎
13:47
|
(65) Оператору ещё очень полезно объяснить, что он не прав и в чём он не прав, чтобы он не сидел с кислой миной и не пытался понять, почему Василий записался, а Сергей - нет.
|
|||
70
Бубка Гоп
13.05.15
✎
13:57
|
(69) +1. к сожалению, часто приходится допиливать, чтобы когда человек делает что то неправильно - получалось в итоге все равно правильно. тыжпрограммист. Почему то это проще чем дать по шапке бестолковому сотруднику
|
|||
71
dauster
13.05.15
✎
14:00
|
Имхо. В (4) Правильный подход.
Делаем:
|
|||
72
Бубка Гоп
13.05.15
✎
14:02
|
(71) хоспади. СтрЗаменить вам в помощь. см (15)
|
|||
73
dauster
13.05.15
✎
14:10
|
(72) да, согласен. СтрЗаменить - оптимальнее. Хотя код в (15) не учитывает регистр и не отработает на прописных Е и Ё в Наименовании. Нужно туда НРег, например, добавлять.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |