| 
    
            
         
         | 
    
    
  | 
Поиск телефона в произвольном формате запросом к КИ | ☑ | ||
|---|---|---|---|---|
| 
    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) Предлагаешь программистам, которые допустили ввод телефона не по маске отбить что-нибудь?     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |