Имя: Пароль:
1C
1С v8
Преобразование строки согласно шаблону
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
пока что спасибо, уже голова не варит, отдохну, переварю все что Вы написали, может сделаю наконец :)