|
Преобразование строки согласно шаблону | ☑ | ||
---|---|---|---|---|
0
ildarian
18.11.13
✎
15:57
|
Добрый день!
Такая задача: нужно перебрать всех контрагентов и преобразовать номера телефона согласно шаблону, записать их в отдельную таблицу, потом в этой таблице найти двойников и пометить на удаление контрагентов в справочнике. Шаблон такой: нужно убрать из поля все кроме цифр и , если номер начинается на "8" или "80" , то эти цифры тоже убрать. Например если такой номер: 8-(044)) 34--543,,,-23 , то нужно записать в таблицу 443454323. Далее сравнивать каждый элемент со всеми остальными если находятся одинаковые номера, то помечать их все на удаление. ----------- Подскажите пожалуйста как это описать в коде. |
|||
1
Armando
18.11.13
✎
15:58
|
Что, опять?
|
|||
2
Armando
18.11.13
✎
15:59
|
||||
3
ildarian
18.11.13
✎
16:19
|
Задачка та же, но нужно уже другое сделать, мне в ту тему перейти ?
|
|||
4
Wobland
18.11.13
✎
16:21
|
(0) какие мысли?
|
|||
5
bolobol
18.11.13
✎
16:26
|
цыфири= "0123456789";
ДлинаТелефона= СтрДлина(ТелефонныйНомер); ТелефонИзЦыфирей= ""; Пока й = 1 по ДлинаТелефона Цикл Если Найти(цыфири, ТелефонныйНомер[й]) Тогда ТелефонИзЦыфирей= ТелефонИзЦыфирей + ТелефонныйНомер[й]; |
|||
6
bolobol
18.11.13
✎
16:27
|
Если Лев(ТелефонИзЦыфирей, 2) = "80" Тогда
ТелефонИзЦыфирей= Сред(ТелефонИзЦыфирей, 3); ИначеЕсли Лев(ТелефонИзЦыфирей, 1) = "8" Тогда ТелефонИзЦыфирей= Сред(ТелефонИзЦыфирей, 2); |
|||
7
bolobol
18.11.13
✎
16:29
|
Сортировать по ТелефонИзЦыфирей;
каждый повторяющийся с предыдущим - удалить; |
|||
8
ildarian
18.11.13
✎
17:51
|
вышел такой код, скажите, сейчас он обойдет всех контрагентов и запишет их телефоны в форме цифр в массив ?
спр = справочники.ОбщиеКонтрагенты.Выбрать(); цыфры = "0123456789"; ДлинаТелефона = СтрДлина(спр.Телефон); а = 1; Пока спр.Следующий() Цикл Пока а <= ДлинаТелефона И а <= 10 Цикл Если Найти(цыфры, спр.Телефон[а]) Тогда ТелефонИзЦыфр = ""; ТелефонИзЦыфр = ТелефонИзЦыфр + спр.Телефон[а]; КонецЕсли; КонецЦикла; Если Лев(ТелефонИзЦыфр, 2) = "80" Тогда ТелефонИзЦыфр = Сред(ТелефонИзЦыфр, 3); ИначеЕсли Лев(ТелефонИзЦыфр, 1) = "8" Тогда ТелефонИзЦыфр = Сред(ТелефонИзЦыфр, 2); КонецЕсли; КонецЦикла; |
|||
9
Wobland
18.11.13
✎
17:52
|
отлаживаю по фотографии. дорого
|
|||
10
zakidonoff
18.11.13
✎
17:54
|
(8) Главное, цЫфер через Ы писать.
Иначе работать не будет. |
|||
11
Лефмихалыч
18.11.13
✎
17:56
|
(0) а если два номера через запятую захерачили? Или еще хитрее - два номера, а после первого еще добавочный записали?
|
|||
12
User_Agronom
18.11.13
✎
17:58
|
(11) ТС получит перегрев мозгового цента и выпадет в осадок.
|
|||
13
ildarian
18.11.13
✎
18:02
|
можно просматривать первые 10 символов например, из них выбирать только цифры. Удалять контрагентов пользователь все равно будет вручную. Но список будет не из 20000 контрагентов а чуть поменьше. Обработка будет только ставить пометку на удаление.
|
|||
14
Wobland
18.11.13
✎
18:04
|
никто не заметил, что выхода из цикла нет?
|
|||
15
Wobland
18.11.13
✎
18:04
|
первые 10, говоришь.. "звонить сюды, спросить ПётрИваныча: +71234567890"
ну=ну |
|||
16
zakidonoff
18.11.13
✎
18:05
|
(11)
МассНомеров = Новый Массив; СтрокиЦыферНомера = СтрЗаменить(ЦыферыНомера, ",", Символы.ПС); Для Каждого СтрокаЦыферНомера ИЗ СтрокиЦыферНомера Цикл Если СтрДлина(УдалитьВсеСимволыКромеЦыферИВсёТакое(СтрокаЦыферНомера)) > 3 Тогда МассНомеров.Добавить(УдалитьВсеСимволыКромеЦыферИВсёТакое(СтрокаЦыферНомера)); КонецЕсли; КонецЦикла; И сравнивать массивы, полученные для каждой из строк. |
|||
17
ildarian
18.11.13
✎
18:21
|
пока что спасибо, уже голова не варит, отдохну, переварю все что Вы написали, может сделаю наконец :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |