Имя: Пароль:
1C
1С v8
Игнорировать Е и Ё в запросе.
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) Правильный подход.

Делаем:

ФИО = "Ёлкин-Метёлкин";
ШаблонПоиска = "";
Для ч = 1 по СтрДлина(ФИО) Цикл
   Символ = Нрег(Сред(ФИО, ч, 1));
   Если Символ = "е" или Символ = "ё" Тогда
        ШаблонПоиска = ШаблонПоиска + "[её]";
   Иначе
        ШаблонПоиска = ШаблонПоиска + Символ;
   КонецЕсли;
КонецЦикла;

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ШаблонПоиска", ШаблонПоиска);
Запрос.Текст = "ВЫБРАТЬ * ИЗ Справочник.ФИО ГДЕ Наименование ПОДОБНО &ШаблонПоиска";
...
72 Бубка Гоп
 
13.05.15
14:02
(71) хоспади. СтрЗаменить вам в помощь. см (15)
73 dauster
 
13.05.15
14:10
(72) да, согласен. СтрЗаменить - оптимальнее. Хотя код в (15) не учитывает регистр и не отработает на прописных Е и Ё в Наименовании. Нужно туда НРег, например, добавлять.