Имя: Пароль:
1C
1С v8
Определить мобильный телефон или нет в запросе
0 TolikoSprosit
 
06.02.20
12:50
Есть данные вида: 912ххххххх Россия; 24xxxxxxx Белоруссия; и тд
Другими словами, есть номер телефона без кода страны и страна.

Задача: в запросе понять мобильный он или нет.

Мы можем создать любую вспомогательную структуру данных где будем хранить 912 Россия - мобильный, 24 Белоруссия - мобильный например, или что-то другое, все что угодно лишь бы в запросе быстро(!) определить мобильный он или нет.

Давай, Миста, предложи элегантное решение, интересно как бы вы сделали. У меня совсем хороших идей нет.
1 d4rkmesa
 
06.02.20
12:53
(0) Использовать "ПОДОБНО" не предлагать?
2 Надо работать
 
06.02.20
12:53
Выбор когда Тел Подобно "912%" Тогда Истина Конец
3 vicof
 
06.02.20
12:54
Это не элегантно)
4 Жан Пердежон
 
06.02.20
12:57
Процедура ПередЗаписью()

ЭтотОбъект.ЭтоМобильный = ЭтоМобильныйТел();

КонецПроцедуры

*****************************

Запрос = Новый Запрос("ВЫБРАТЬ ЭтоМобильный ИЗ ...
5 Ненавижу 1С
 
гуру
06.02.20
12:58
мобильный может и на 495 начинаться
6 TolikoSprosit
 
06.02.20
12:58
Подобно в больших соединения будет медленно, тем более только в России кодов типа "912" много около 100
7 catena
 
06.02.20
12:59
А страна у телефона есть? А то у меня вот домашний номер на 24 начинается.
8 TolikoSprosit
 
06.02.20
13:00
(5) Там "4959" первые 4 цифры, и да эти случаи тоже надо обрабатывать
9 catena
 
06.02.20
13:00
(6)Без подобно только создавать к телефону отдельный реквизит с одним только кодом.
10 TolikoSprosit
 
06.02.20
13:00
(7) Да, страны есть
11 vicof
 
06.02.20
13:00
(6) Заведи классификатор мобильных номеров
12 TolikoSprosit
 
06.02.20
13:01
(9) Нет, реквизит "ОдинТолькоКодДляОпределенияМобильного" хуже чем просто флаг "Мобильный" уж тогда, но и флаг мобильный не нужен
13 TolikoSprosit
 
06.02.20
13:02
(11) Какого вида и как соединять?
14 TolikoSprosit
 
06.02.20
13:03
(4) Реквизит "Это мобильный" не нужен, слишком большой набор телефонов
15 pechkin
 
06.02.20
13:03
если стоит вопрос быстродействия, то флаг нужен
16 vicof
 
06.02.20
13:04
(13) Хрен знает, что ты там с чем соединяешь и какой вид тебе нужен.
"Задача: в запросе понять мобильный он или нет." Булево поле в классификаторе.
17 pechkin
 
06.02.20
13:04
это называется денормализация для увеличения быстродействия
18 TolikoSprosit
 
06.02.20
13:06
(15) ну не совсем-скорость скорость, просто приемлемое время. Реквизит вводить пока не будем, большая база.
19 TolikoSprosit
 
06.02.20
13:07
(16) В каком классификаторе?
20 d4rkmesa
 
06.02.20
13:08
Тупо вычислить подстроку и соединить с таблицей мобильных префиксов из параметров запроса не?
21 TolikoSprosit
 
06.02.20
13:09
(20) ну я туда и думаю, но коды же все разной длинны...
22 d4rkmesa
 
06.02.20
13:11
(21) Ну, не сильной уж разной, думаю, от 2 до 5.
23 vicof
 
06.02.20
13:11
(19) Который ты сделаешь
24 d4rkmesa
 
06.02.20
13:12
У мобильных в РФ можно считать что 3 символа. Или нет? Или номера как попало, с пробелами, дефисами, скобками и т.д.?
25 TolikoSprosit
 
06.02.20
13:15
(24) Номера в "очищенном" виде, только цифры без пробелов и кодов стран.
Нет, не 3 символа, есть еще "4959" и "8129"
26 TolikoSprosit
 
06.02.20
13:19
Мне не очень нравится:
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ТелефонныеКоды КАК ТелефонныеКоды
   ПО (ПОДСТРОКА(Телефон.Номер, 0, 2) = ТелефонныеКоды.Код
   ИЛИ ПОДСТРОКА(Телефон.Номер, 0, 3) = ТелефонныеКоды.Код
   ИЛИ ПОДСТРОКА(Телефон.Номер, 0, 4) = ТелефонныеКоды.Код)
   И Телефон.Страна = ТелефонныеКоды.Страна
27 Жан Пердежон
 
06.02.20
13:21
(26) элегантней и быстрее чем в (4) ничего не придумаешь
28 TolikoSprosit
 
06.02.20
13:23
(27) ДА, это моя первая идея. Но нужно что-то другое.
29 vicof
 
06.02.20
13:34
(28) Почему?
30 TolikoSprosit
 
06.02.20
13:40
(29) Справочник телефонов очень большой. Его сложно будет быстро администрировать.
31 vicof
 
06.02.20
13:43
(30) Это не твоя проблема
32 TolikoSprosit
 
06.02.20
13:48
(31) Друг, иди отсюда)
33 vicof
 
06.02.20
13:50
Ты мне не друг) так что куда хочу, туда и хожу.
34 palsergeich
 
06.02.20
13:50
(0) если автоматизировать бардак - получится автоматизированный бардак.
Надо наводить порядок в НСИ, а не постфактум на каждое исключение писать патч.
По моему неполохо это сделано в контактной информации в БСП.
Отдельно код страны, отдельно код города, отдельно номер в читаемом виде и отдельно номер слитно.
Все остальное приведет к постоянной борьбе с тем что введено не так
35 TolikoSprosit
 
06.02.20
14:14
(34) Это все хорошо и прекрасно и порядок и красота, пока на практике:
Длинна кода города, разная для разных стран и регионов;
А 495xxxxxxx - почти всегда не мобильный, а 4959xxxxxx - мобильный;

Если у вас порядок в базе и вы безошибочно по любому своему телефону можете сказать мобильный он или нет, то расскажите пожалуйста как у вас все устроено, я бы с радостью почитал.
36 Жан Пердежон
 
06.02.20
14:29
(30) причем тут администрирование вообще?
37 palsergeich
 
06.02.20
14:44
(35) коды мобильных операторов в открытом доступе.
При наличии прямого номера - в лоб задача не решается.
Но у том же интернете есть пулы номеров, принадлежащие мобильным провайдерам
38 palsergeich
 
06.02.20
14:46
39 TolikoSprosit
 
06.02.20
14:49
(37) Давайте лучше про ваш порядок в НСИ)
40 palsergeich
 
06.02.20
14:50
(39) что интересно?
41 TolikoSprosit
 
06.02.20
14:52
(40) Все то же, как у вас организованы/могли бы быть организованы данные для решения задачи из первого поста)
42 Кодер
 
06.02.20
15:47
Если это номера, с которых тебе звонили, то с "прямыми мобильными", то есть вида +7495[7 цифр], чуть проще. Когда я звоню с такого номера, то определяется  +7985[7 цифр]. То есть код оператора однозначно другой (и на него тоже можно звонить).

В остальном всё просто. Первые 4 цифры российского телефонного номера определяют оператора, и что-то типа региона. 7901 - билайн мобильные, 7902, 7910, 7916, 7985 - МТС мобильные, 7495 - МГТС (Москва) стационарные etc. Таблицы эти безусловно есть и легко гуглятся.