Имя: Пароль:
1C
 
Поиск телефона в произвольном формате запросом к КИ
0 valerivp
 
08.11.22
21:54
Как реализовать?

пример
телефон +79845612300 может быть записан:
9845612300
89845612300
8(984)5612300
+7-984-5612-300
...

отлично работает поиск ПОДОБНО "%9%8%4%5%6%1%2%3%0%0%"
но только пока в строке не указано два телефона,
например
898456123-5-5, +79-0-0-1234567

Как искать телефон?
1 Asmody
 
08.11.22
22:25
В таком виде никак.
Приводить ПередЗаписью номер в канонический вид и искать по нему
2 Гений 1С
 
гуру
08.11.22
22:40
(1) в разного вида звонилках встречал поиск по разным форматам номеров типа.
3 Гений 1С
 
гуру
08.11.22
22:40
подобно +7%9%3% и т.п.
4 PR
 
08.11.22
22:43
(0) Отталкивайся от того, что между цифрами может быть только один из вариантов:
Ничего
(
)
-
Пробел
5 PR
 
08.11.22
22:45
Геня решил блеснуть эрудицией, но... не получилось
6 valerivp
 
08.11.22
22:56
(4) Проблема в том, что между цифр может не быть разделителя
7 PR
 
08.11.22
23:03
(6) О чем тебе говорит Ничего?
8 Мимохожий Однако
 
08.11.22
23:10
Убери все знаки кроме цифр из строки и ищи. Если хоть что-то нашёл, то и выводи эту строку на выходе
9 Asmody
 
08.11.22
23:19
(0) ты же не думаешь, что поле для показа и поле для поиска - это одно и то же поле?
10 vicof
 
09.11.22
00:04
Реглуярки наше всё
11 NorthWind
 
09.11.22
10:15
(2) возможно, звонилки кодом ищут, а не запросом
12 NorthWind
 
09.11.22
10:21
Думаю что выкидывать телефоны из БД в более быструю память (строка, ТЗ) и дальше регулярки или еще чет такое. Запросом такое говно не перелопатить имхо.
13 Kassern
 
09.11.22
10:24
(0) Унифицировать ввод номера телефона, ввести маску. Если номеров несколько, то лучше сделать дополнительную строчку, чем вводить через запятую. Тут как раз в новой платформе можно будет красиво это вывести плашками)
14 Fedor-1971
 
09.11.22
10:45
(0) ищи сам телефон 5612300, потом из найденного кодом отловишь Код и Префикс страны

+ унификация через маску ввода как в (13) +Страна(УУУ)ХХХ-ХХ-ХХ ДДДД с учётом, что в телефоне могут записать добавочный номер (+79845612300 1111)
или делаешь универсальную форму ввода номера в максимально возможном виде (отдельно: страна, код, номер, добавочный), а записываешь в унифицированном, например так: +7;984;5612300.1111,
если используешь автонабор номера то преобразование крайне простое: +79845612300Р1111 и возможен поиск по коду региона и страны
15 valerivp
 
09.11.22
16:36
сделал так:

НомерТелефона = Прав(Данные.НомерТелефона, 10);
МассивСимволов = Новый Массив;
Для н = 1 по СтрДлина(НомерТелефона) Цикл
    МассивСимволов.Добавить(Сред(НомерТелефона, н, 1));
КонецЦикла;

Запрос.УстановитьПараметр("НомерТелефона", "%" + СтрСоединить(МассивСимволов, "%") + "%");

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    НомерТелефона2 = Выборка.НомерТелефона;

    НомерТелефона2 = СтрЗаменить(НомерТелефона2, " ", "");
    НомерТелефона2 = СтрЗаменить(НомерТелефона2, "-", "");
    НомерТелефона2 = СтрЗаменить(НомерТелефона2, "(", "");
    НомерТелефона2 = СтрЗаменить(НомерТелефона2, ")", "");
    
    Если СтрНайти(НомерТелефона2, НомерТелефона) Тогда
        Пользователь = Выборка.Пользователь;
        ИмяПользователя = Выборка.ИмяПользователя;
        Прервать;
    КонецЕсли;
КонецЦикла
16 Said_We
 
10.11.22
17:42
(1) "В таком виде никак." - да ладно никак.
Даже на 1С SQL через одно место, но можно.
17 Said_We
 
10.11.22
18:21
(1) Сначала разбиваешь строки с номером по разделителям.
Потом разбиваешь по одному символу все номера.
Потом выкидываешь все символы, которые не нужны.
Собираешь обратно. Примерно так собрать можно: https://infostart.ru/1c/articles/407913/
18 Fragster
 
гуру
10.11.22
18:50
(0) надо взять линейку и заставить людей вбить номера телефонов нормально, тогда в колонке НомерТелефона ТЧ КонтактнаяИнформация будет каноническое значение
19 Said_We
 
10.11.22
20:27
(18) Или написать программку, которая максимально сама поправит.
20 Said_We
 
11.11.22
10:40
(18) Иначе зачем программисты нужны. То что вбили телефоны как попало пользователи и без программиста знают.

1. Почему программа дала вбить номера телефонов как попало - это вопрос к программистам.
2. Раз первый вопрос к программистам, то и править программисты должны. Если уж работаем через виноватых, а не по обязанностям и возможностям :-)
3. Что бы новые телефоны, введенные как попало, не появлялись, то сначала форму ввода поправить, что бы вводить давать только по формату, а потом уже править в базе существующие.
21 Kassern
 
11.11.22
10:48
(20) (19) Даешь леща, тем кто допустил разврат в номерах телефонов, делаешь нормальную маску унифицированного ввода, а потом уже обработкой правишь кривые номера один раз.
22 Said_We
 
11.11.22
12:10
(21) Так я тоже самое для (18) и написал в (20). А то там совсем другое предложение для (0). :-)
23 Said_We
 
11.11.22
18:36
(12) "Запросом такое говно не перелопатить имхо." - перелопатить. И даже запросом от 1С перелопатить.
24 Fragster
 
гуру
12.11.22
01:19
(23) а воспитательный эффект где?
25 Said_We
 
12.11.22
11:32
(24) Предлагаешь программистам, которые допустили ввод телефона не по маске отбить что-нибудь?
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.