Имя: Пароль:
1C
1С v8
Определить в каком диапазоне лежит номер, как можно быстрее
0 Coldboy
 
03.07.12
11:17
Здравствуйте. Проблема такова, ну не точнее проблема, интересует, кто как бы поступил. Я вот лично собираюсь сделать так создать справочник с направлениями диапазонами номеров, и потом забиваю диапазоны определять местный это номер или нет. Хотя нет, может быть не понятно объяснил.
У меня есть номер 8443551231 мне сначало надо определить местный он или нет, ну судя по коду 8443 это местный нашего города, хорошо, теперь, мне определить в каком он диапазоне, чтобы определить с какой станции был звонок для других действий. Как я определяю программно.
Анализирую первые 4 символа, если они на 8443ХХХ это значит, местный. Дальше я захожу в справочник с направлениями, в группу местные беру все направления и тупо подставляю в каком диапазоне он будет, для определения станции.

Какими бы вы делали еще методами это, или кто нить с похожим стакливался.
Суть темы не задать вопрос, а просто узнать мнение других и их подходы в решении подобных задач. Надеюсь меня поняли, вы уж простите, за этот бред.
1 john_ddd
 
03.07.12
11:28
какие цифры определяют направление 551231?
2 fisher
 
03.07.12
11:39
Тупо запросом.
3 Coldboy
 
03.07.12
12:19
8443 определяют город, а 551231 эт номре закрепленный за станиций, обычно их там диапазаонами 551000 по 551999 и тд.
(2) тупо запросом эт как?
4 Cube
 
03.07.12
12:22
(3) Если я правильно понял, то 551 - номер станции? Ну и анализируй эти три цифры, не?
5 Coldboy
 
03.07.12
12:25
55 - номер станици.
6 Cube
 
03.07.12
12:26
(5) Всё, проблема решена?
7 Coldboy
 
03.07.12
12:27
Нет, я ваши решения к данной проблемы хотел услышать, может быть, у кого то более опытные и оперативные методы будут, чем мои перепорбы границ и диапазонов .
8 Coldboy
 
03.07.12
12:27
Просто я потом по первым 8443 опрееделяю если местная, то в 20 дипазщаонов загоняю все число и справниваю.
9 Coldboy
 
03.07.12
12:28
я думаю эт слишком долго (хотя времени у меня предостаточно), но я считаю, не красиво это все.
10 Cube
 
03.07.12
12:31
(7) Телефонный номер = 10 символов:
4 - код города
2 - номер станции
4 - номер абонента.

КодГорода = Лев(НомерТелефона, 4);
НомерСтанции = Сред(НомерТелефона, 5, 2);
НомерАбонента = Прав(НомерТелефона, 4);

Или я что-то не понял?
11 Coldboy
 
03.07.12
12:33
тогда уж вам надо, смотрите 88443551231 набирать. 8 эт код страны как бы.
12 Coldboy
 
03.07.12
12:34
(10) вы что-то не поняли. но ваша идея мне очень понравлись спасибо.
13 Coldboy
 
03.07.12
12:34
Лев - брать и определять местный или нет.
14 Cube
 
03.07.12
12:38
(12) Ну, если б задача было описана более подробно, то мне бы не пришлось телепатировать её решение... Что ж всё таки надо-то?
15 Coldboy
 
03.07.12
12:39
ну там очень большое дело, корчое суть такая, всю тарификацию, систему скидок и тд, захерачить в 1С по телефонии.
16 Cube
 
03.07.12
12:41
(15) В (0) речь про какие-то диапазоны... Что НомерСтанции из (10) не подходит?
17 Coldboy
 
03.07.12
12:43
Ну да. Диапазоны еще нужны для расчета под взаимодействие между операторами, допустим есть несколько фирм, со станициями, и еще расчеты не тока между фирма- клиент, а фирма-фирма за используемые ресурсы.
18 Cube
 
03.07.12
12:46
(17) Твой поток мыслей очень сложно понимать :)
Твоя задача решена или нет?
19 Coldboy
 
03.07.12
12:47
и кстати внутри области бывают, одна цифра город показывает в моем случае это в 8443 - это цифра 3,а бывает и 2, это допустим 84425, какой нить поселок допустим.
20 Cube
 
03.07.12
12:48
(19) Ну разбей КодГорода на КодРегиона и КодНаселенногоПункта...
21 Coldboy
 
03.07.12
12:48
(18) все равно пасибо за помощь.
22 Coldboy
 
03.07.12
12:49
Лев метод как бы простой, но я упустил его, я хотел пользоваться шаблоном типа
Если НАйти(Строка,"8443") =1 тогда и тд.
23 fisher
 
03.07.12
13:19
(3) Тупо запросом - это значит тупым запросом.
ВЫБРАТЬ
 ДиапазоныНомеров.Ссылка КАК НужныйДиапазон
ИЗ
 ДиапазоныНомеров
ГДЕ
 &Номер МЕЖДУ ДиапазоныНомеров.НачалоДиапазона И ДиапазоныНомеров.КонецДиапазона
24 Coldboy
 
03.07.12
15:07
А потом определить, ну это тоже вариант, просто представьте, будет 1000 стрчоек, и каждый раз лезть запросом, это логично, чем получить оидн раз ТЗ по Диапазонам и там копаться?
25 unregistered
 
03.07.12
15:30
(24) >> каждый раз лезть запросом

Зачем?
Одним запросом всё сделать, а не запросами в циклах.

"ВЫБРАТЬ
|  ТаблицаНомеров.Номер,
|  ЕСТЬNULL(ДиапазоныНомеров.Ссылка, "Фиг знает что за диапазон") КАК ДиапазонНомеров
| ИЗ
|  &ТаблицаНомеров КАК ТаблицаНомеров
|     ЛЕВОЕ СОЕДИНЕНИЕ ДиапазоныНомеров КАК ДиапазоныНомеров
|       ПО (ТаблицаНомеров.Номер МЕЖДУ ДиапазоныНомеров.НачалоДиапазона И ДиапазоныНомеров.КонецДиапазона)"
26 fisher
 
03.07.12
15:35
(25) +1
27 Coldboy
 
03.07.12
15:41
ТелефонА ТелефонВ у меня есть грубо говоря еще время, иисходя какому диапазону принадлежит телефонВ, нужно мне смотреть цену оттуда и считать. вот.
А что я получу вашим запросом?
28 Coldboy
 
03.07.12
15:44
Хотя вашу мысль я понял, буду пробывать.
29 fisher
 
03.07.12
15:45
(27) Запросом ты получишь ответ на сабжевый вопрос. Если тебе еще чего-то надо - нормально описывай задачу. Если цена у тебя прибита к диапазону, то её ты и получишь для каждой строчки. Бери и считай на здоровье.
30 Coldboy
 
03.07.12
15:46
(29) я все понял как вы хотите, просто я думал сначала посмотрев, какой это вызов местный или нет, лезть в те группы и уже тока там работать. Данные телефонА и телефонВ я беру из регистра сведений.
31 zladenuw
 
03.07.12
15:48
если нужно смотреть откуда именно. то берешь примерно как в  (10). загоняешь в массив или куда то и смотришь откуда тебе нужно брать данные. вообщем фильтруешь
32 zladenuw
 
03.07.12
15:49
как структура РС ?
33 МихаилМ
 
03.07.12
15:50
сначала разберите на отдельные поля зона,город/оператор,номер

потом считайте биллинг.
34 unregistered
 
03.07.12
16:28
(27) Формулируй полностью задачу, если хочешь получить полный ответ.

Вопрос в (0) был об ОДНОМ номере, для которого надо найти диапазон.
В (24) вдруг неожиданно выясняется, что номеров может быть 1000.
В (27) приплыли еще к одной сущности - ценам.

А по сути одним запросом можно получить всё что ты хочешь, начиная с определения типа вызова (местный/не местный) и заканчивая ценами и всем, что там у тебя навешано на направления/диапазоны.
35 Никола_
Питерский
 
03.07.12
16:32
Гыыыы биллинг на 1С )))) ну ну, давайте давайте !
36 Mikeware
 
03.07.12
16:43
восхищают дятлы, бросающиеся что-то там писать, не изучив предмет....
37 Coldboy
 
03.07.12
17:40
(34) думал указаЛ, что не 1 стрчока, а 1000.
(35) ну ка порадуй, чем это хуже?
(36) это ты щас про кого ?
38 Coldboy
 
03.07.12
17:43
(32) примерно так и делаю. хотел бы послушатЬ, а какие еще есть подоходы.
(33) так тоже делается. тока я смотрю можно и без разбора делать.
39 Coldboy
 
03.07.12
17:45
(35) по факту что такое билинг? это система для снятие денег со счета человека, грубо говоря большой счетчик для каждого, я же просто детализацию хочу видеть.
40 МихаилМ
 
03.07.12
17:49
(38)
нормализация данных - основа испольхования реляционных бд.
это первое, что читают в основах построенния рбд.
41 Bida
 
03.07.12
18:47
(0) Я бы сделал иначе. Ввел РС.
В нем:
индекс|длина возможного номера|описание твоего объекта (много нужных справочных полей: станция, подстанция, местный/неместный, цена, адрес, прочее)
Пример:
844355|10|тут описания в колонках объекта|подстанция 55|лубянка, 12|55 рублей минута
Потом запросом искал бы по признаку длина номера плюс среди индексов (на выходе всегда одну запись получу). При больших объёмах таблицы (например, маршрутизация всей России) будет быстро. При маленьких объёмах быстрее прямым поиском.
42 Coldboy
 
04.07.12
09:18
(41) немного не понял, мб вы имел виду
844|3|55|551231|0.30|
ну ттута первое это определение области|код города|номер станици|номер телефона|цена за минуту.
43 Coldboy
 
04.07.12
09:18
я тоже думаю ввести РС, или же все данные уже в отдельной SQL бд хранить.
44 eromanov
 
04.07.12
09:35
(0) Через что прикрутили телефонию к 1С?
45 Coldboy
 
04.07.12
09:40
(0) не через че. Просто Imss формирует файлы, с отчетом о вызовах, и решили попробывать и в 1С посчитать, посмотреть какие числа получаются + сделать удобный механизм для добавления направлений, скидок на звонки и тд и тп.
46 Bida
 
04.07.12
17:25
(42) Нет, первое поле именно индекс. По нему осуществляется поиск на первое вхождение. Второй колонкой надо бы дабавить ещё длину кода (5, в данном случае) для отбора.
Зная длину номера (10 символов) и длину кода, по запросу легко получить нужный индекс. А по нему все параметры строки.
47 Coldboy
 
05.07.12
12:05
А можно поступить проще на номера как на уникальные числа смотреть и смотреть в каком диапазоне, а там уже и направление определять.
Но спасибо всем за помощь.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший