Поиск клиента по номеру телефона

1. Lo1jke 15.12.14 14:44 Сейчас в теме
Добрый день, коллеги!

Имеем конфигурацию Розница 1.0 с довольно существенной базой клиентов (порядка 200к), при обмене из другой ИС следует проверять наличие клиента в базе по номеру телефона. Телефоны в базу Розницы вбиты как бог на душу положил, где-то с дефисом, где-то со скобками, где-то с "+" перед номером. Единого стандарта ввода номера нет. Соответственно при выгрузке из другой ИС один номер телефона может проверяться несколько минут (выгружаю запросом все существующие номера, в цикле через стрЗаменить() убираю все лишние символы кроме цифр и беру правые 10 значащих цифр, в данной ТЗ произвожу поиск).

Следовательно вопрос, можно ли как-то прямо в запросе оптимизировать строки с телефонами (убрать "(",")","+","-"), может кто-то сталкивался с подобной задачей?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
12. ildarovich 7863 19.12.14 15:59 Сейчас в теме
(1) Lo1jke, в похожей задаче (очистка артикулов от мусора) мы использовали подход, описанный в Агрегатное суммирование строк в запросе – сложно, но не невозможно. Для этого номер телефона разбивается на отдельные символы, цифры отфильтровываются и группируются в "чистые строки".

У вас задача еще проще - нужно отделить только цифры, тогда их можно не конкатенировать, а объединять в числа, в качестве веса используя число цифр справа. Что-то типа Выразить строку как число и строку как дату в запросе.

В общем, не очень сложно, если захотеть чисто запросом сделать.
2. AnryMc 849 15.12.14 15:05 Сейчас в теме
Вроде как "подписался на тему" - интересно тоже...

ЗЫ: Может один раз в базе источнике навести порядок обработкой?
3. reeds 1 15.12.14 15:18 Сейчас в теме
Вобщем делал отдельное поле, перезаполнял его только цифрами один раз обработкой, если длина поля меньше 10 цифр(пользователи могли вбить городской номер), добавлял код города, в запросе индексировал.
4. reeds 1 15.12.14 15:20 Сейчас в теме
потом при проверке, искал по этому полю, соответственно строку поиска приводил к такому же формату (убирал всё, кроме цифр)
5. AnryMc 849 15.12.14 15:23 Сейчас в теме
Наверно, что то типа:

ВЫБОР КОГДА ПОДСТРОКА(Поле, 1, 1) ПОДОБНО ““%[0-9]%“” ТОГДА
  ПОДСТРОКА(Поле, 1, 1)
ИНАЧЕ """"
КОНЕЦ
+
ВЫБОР КОГДА ПОДСТРОКА(Поле, 2, 1) ПОДОБНО ““%[0-9]%“” ТОГДА
  ПОДСТРОКА(Поле, 2, 1)
ИНАЧЕ """"
КОНЕЦ
+
...
+ 
ВЫБОР КОГДА ПОДСТРОКА(Поле, 100, 1) ПОДОБНО ““%[0-9]%“” ТОГДА
  ПОДСТРОКА(Поле, 100, 1)
ИНАЧЕ """"
КОНЕЦ
Показать


ЗЫ: В СКД есть возможность вызова функции из общих модулей
7. Lo1jke 15.12.14 18:20 Сейчас в теме
К сожалению база на аутсорсе и что-то изменять не представляется возможным. Грубо говоря справочник "ридонли". (5) Попробую что-то подобное реализовать, только однозначно неизвестно сколько символов в строке телефонного номера.
8. AnryMc 849 16.12.14 06:56 Сейчас в теме
(7) Lo1jke,
только однозначно неизвестно сколько символов в строке телефонного номера


ВЫРАЗИТЬ как строку максимальной длины - потом обрабатывать...
6. JustLucky 15.12.14 15:58 Сейчас в теме
А если решить проблему путем приведения номеров в самой базе к единому стандарту? Да, займет время, но можно сделать это поэтапно, запуская обработку на выходные, например.

И обязательно добавить проверку на последующий "правильный" ввод номера для сотрудников.
9. Chameleon1980 16.12.14 07:06 Сейчас в теме
указку сразу надо было брать и инструкцию по вводу и шаблон
а так. да. постепенно обработкой привести в порядок.
хотя и алгоритмы и запросы, конечно же, можно придумать
10. Lo1jke 19.12.14 15:37 Сейчас в теме
Коллеги, вопрос немного в сторону, решил оптимизировать загрузку цен единожды, но для этого мне необходимо передавать какие-то данные по контрагентам всей выгрузки в ПослеЗагрузкиДанных. Как логичнее это сделать? Один раз я видел реализацию через запись в константу (тип: ХранилищеЗначений) ТаблицыЗначений и соответствующий перебор данных уже после выгрузки. Подумываю реализовать регистр сведений.
11. ipoloskov 162 19.12.14 15:47 Сейчас в теме
Если ридонли только справочник, но в целом в конфигурацию вносить изменения можно, то:
1) сделать регистр сведений, измерения: контрагент; ресурс: телефон (приведенный номер, одни цифры), индексировать=да.
2) сделать подписку "При записи" справочника контрагентов. Записывать регистр сведений.
3) сделать первоначальное заполнение регистра обработкой.
Искать телефон по этому регистру.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот