8.х Как в эти строки добавить поиск номера не меньше 11 цифр чтоб искал

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем ipkarpov, 3 апр 2013.

  1. TopicStarter Overlay
    ipkarpov
    Offline

    ipkarpov Опытный в 1С

    Регистрация:
    1 ноя 2011
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Код:
    // Получаем список телефонов
    СЗ = Новый СписокЗначений;
    Номер = "";
    Для Индекс = 1 По СтрДлина(Телефоны) Цикл
    Если Найти("+- 0123456789", Сред(Телефоны, Индекс, 1)) > 0 Тогда
    Номер = Номер + Сред(Телефоны, Индекс, 1);
    Иначе
    Если ПустаяСтрока(Номер) = 0 Тогда
    СЗ.Добавить(СокрЛП(Номер));
    Номер = "";
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    Если ПустаяСтрока(Номер) = 0 Тогда
    СЗ.Добавить(СокрЛП(Номер));
    КонецЕсли;
    
  2. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
  3. TopicStarter Overlay
    ipkarpov
    Offline

    ipkarpov Опытный в 1С

    Регистрация:
    1 ноя 2011
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    то есть чтоб только мобильные искал
  4. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Хочу пример значения переменной "Телефоны"
  5. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    +1

    Maxim1905: День добрый! У меня вопрос можно Легенду подключить в ноутбуку через блютус и писать инет через нее через GPRS? Кто нибудь пробовать, есть такая возможность?
    ska_romash: Пока читать сообщение твоё, моя обрезать орган мозг и топтать и топтать его, пока читать ваша сообщение ещё раз.
  6. TopicStarter Overlay
    ipkarpov
    Offline

    ipkarpov Опытный в 1С

    Регистрация:
    1 ноя 2011
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    весь код

    Код:
    Процедура Заполнить(Кнопка)
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | КонтактнаяИнформация.Объект КАК Объект,
    | ПОДСТРОКА(КонтактнаяИнформация.Представление, 1, 1000) КАК Телефон,
    | ТИПЗНАЧЕНИЯ(КонтактнаяИнформация.Объект) КАК ТипЗначенияОбъекта
    |ИЗ
    | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    | КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
    |
    |УПОРЯДОЧИТЬ ПО
    | Объект,
    | Телефон
    |АВТОУПОРЯДОЧИВАНИЕ"
    );
    
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    
    Объект = Выборка.Объект;
    Телефоны = СокрЛП(Выборка.Телефон);
    
    Если НЕ ПустаяСтрока(Телефоны) Тогда
    
    // Получаем список телефонов
    СЗ = Новый СписокЗначений;
    Номер = "";
    Для Индекс = 1 По СтрДлина(Телефоны) Цикл
    Если Найти("+- 0123456789", Сред(Телефоны, Индекс, 1)) > 0 Тогда
    Номер = Номер + Сред(Телефоны, Индекс, 1);
    Иначе
    Если ПустаяСтрока(Номер) = 0 Тогда
    СЗ.Добавить(СокрЛП(Номер));
    Номер = "";
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    Если ПустаяСтрока(Номер) = 0 Тогда
    СЗ.Добавить(СокрЛП(Номер));
    КонецЕсли;
    
    Для Индекс = 0 По СЗ.Количество() - 1 Цикл
    НоваяСтрока = ТЗ.Добавить();
    НоваяСтрока.Флаг  = Истина;
    НоваяСтрока.ТипЗначенияОбъекта = Выборка.ТипЗначенияОбъекта;
    НоваяСтрока.Объект  = Объект;
    НоваяСтрока.Телефон  = СЗ.Получить(Индекс);
    НоваяСтрока.Статус  = "Не отправлено";  
    КонецЦикла;
    КонецЕсли;
    
    КонецЦикла;
    КонецПроцедуры
  7. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    А ничего что длина любого телефонного номера в РФ, с полной нумерацией будет равна 11 символам?
    +7 (921) 123-45-67 (Сотовый)
    +7 (495) 123-45-67 (Городской Москва)
    +7 (84442) 1-23-45 (Городской Урюпинск)

    Ну да ладно. Это на вашей совести.
    Хотите получить только телефоны длинной более 11 символов?
    Я заметил вы умеете пользоваться функцией СтрДлина(). Что мешает написать условие:
    Код:
    Для Индекс = 0 По СЗ.Количество() - 1 Цикл
    Если СтрДлина(СЗ.Получить(Индекс)) < 11 Тогда
    Продолжить;
    КонецЕсли;
    НоваяСтрока = ТЗ.Добавить();
    НоваяСтрока.Флаг  = Истина;
    НоваяСтрока.ТипЗначенияОбъекта = Выборка.ТипЗначенияОбъекта;
    НоваяСтрока.Объект  = Объект;
    НоваяСтрока.Телефон  = СЗ.Получить(Индекс);
    НоваяСтрока.Статус  = "Не отправлено";
    КонецЦикла;
    КонецЕсли;
  8. TopicStarter Overlay
    ipkarpov
    Offline

    ipkarpov Опытный в 1С

    Регистрация:
    1 ноя 2011
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    у нас городские пишут номера в виде 7 цифр без кодов города и страны. и мобильные так же пишут 11 цифр сразу без кодов
  9. TopicStarter Overlay
    ipkarpov
    Offline

    ipkarpov Опытный в 1С

    Регистрация:
    1 ноя 2011
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    спасибо за помощь
  10. TopicStarter Overlay
    ipkarpov
    Offline

    ipkarpov Опытный в 1С

    Регистрация:
    1 ноя 2011
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    последний вопрос, все работает, а чтоб искало только вида 8-9 или +79, короче те номера где 9 третий символ
  11. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Первые 3 символа:
    Код:
    Лев(СЗ.Получить(Индекс), 3) = "+79"
    
    Третий символ 9:
    Код:
    Сред(СЗ.Получить(Индекс), 3, 1) = "9"
  12. TopicStarter Overlay
    ipkarpov
    Offline

    ipkarpov Опытный в 1С

    Регистрация:
    1 ноя 2011
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Спасибо огромное
  13. TopicStarter Overlay
    ipkarpov
    Offline

    ipkarpov Опытный в 1С

    Регистрация:
    1 ноя 2011
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Извиняюсь, а куда именно вставить этот кусок?
  14. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Код:
    Для Индекс = 0 По СЗ.Количество() - 1 Цикл
    
    //Только строки длинной 11 символов и более
    Если СтрДлина(СЗ.Получить(Индекс)) < 11 Тогда
    Продолжить;
    КонецЕсли;
    
    //Только строки где третий символ 9 
    Если Сред(СЗ.Получить(Индекс), 3, 1) <> "9" Тогда
    Продолжить;
    Продолжить;
    
    НоваяСтрока = ТЗ.Добавить();
    НоваяСтрока.Флаг  = Истина;
    НоваяСтрока.ТипЗначенияОбъекта = Выборка.ТипЗначенияОбъекта;
    НоваяСтрока.Объект  = Объект;
    НоваяСтрока.Телефон  = СЗ.Получить(Индекс);
    НоваяСтрока.Статус  = "Не отправлено";
    
    КонецЦикла;
  15. TopicStarter Overlay
    ipkarpov
    Offline

    ipkarpov Опытный в 1С

    Регистрация:
    1 ноя 2011
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Код:
       Для Индекс = 0 По СЗ.Количество() - 1 Цикл
    
    //Только строки длинной 11 символов и более
    Если СтрДлина(СЗ.Получить(Индекс)) < 11 Тогда
    Продолжить;
    КонецЕсли;
    
    //Только строки где третий символ 9
    Если Сред(СЗ.Получить(Индекс), 3, 1) <> "9" Тогда
    Продолжить;
    Продолжить;
    
    НоваяСтрока = ТЗ.Добавить();
    НоваяСтрока.Флаг  = Истина;
    НоваяСтрока.ТипЗначенияОбъекта = Выборка.ТипЗначенияОбъекта;
    НоваяСтрока.Объект  = Объект;
    НоваяСтрока.Телефон  = СЗ.Получить(Индекс);
    НоваяСтрока.Статус  = "Не отправлено";
    
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
    
    Не происходит ничего что то
  16. TopicStarter Overlay
    ipkarpov
    Offline

    ipkarpov Опытный в 1С

    Регистрация:
    1 ноя 2011
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    все, разобрался

Поделиться этой страницей