7.7 Поиск по реквизиту

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем SS_mid, 9 окт 2016.

  1. TopicStarter Overlay
    SS_mid
    Offline

    SS_mid

    Регистрация:
    14 сен 2015
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Всем привет.

    Платформа: 1c 7.7 ТИС, SQL 2008.
    Такая проблема. Есть файл Excel с 2 колонками и ~65000 строками.
    Колонки: Эл.почта, Телефон.
    Мне нужно найти объект Справочник.Контрагент по номеру телефона. Так вот если перебирать каждый
    то обработка затянется на 16 часов.
    Как можно найти сразу все объекты по всем номерам телефонов из ТЗ, через sql с помощью функции LIKE.

    Заранее благодарен.
  2. 1с-ник
    Offline

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    303
    Симпатии:
    49
    Баллы:
    54
    Сомневаюсь, что это можно сделать в 7.7. В 8 можно передать ТЗ в запрос, проиндексировать поля поиска, воспользоваться оператором "Подобно" (LIKE).
    А чем плох стандартный метод НайтиЗначение()? Думаю он всяко лучше, чем обычный перебор.
    Хотя... а почему прямо в excel'е не искать? И вообще прямо в нём можно к СУБД подключаться и делать запросы к твоему листу и диапазону ячеек. Думаю, что решать эту задачу с помощью 1с, мягко говоря, не фонтан)
  3. MaxxaM
    Offline

    MaxxaM Опытный в 1С

    Регистрация:
    16 окт 2007
    Сообщения:
    288
    Симпатии:
    2
    Баллы:
    29
    рекомендую записать макрос по поиску в экселе, подредактировать его, дабы он вызывался с параметрами и вызывать через 1с
  4. TopicStarter Overlay
    SS_mid
    Offline

    SS_mid

    Регистрация:
    14 сен 2015
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Решил проблему так итог 25 мин выполнения а то и меньше:

    Код:
     
    Ответ = "";
        Запрос = СоздатьЗапросSQL();
        ЗапросВставки = СоздатьЗапросSQL();
       
        Попытка       
          ТекстВставки = "DROP TABLE #TempPhone";
          ЗапросВставки.ВыполнитьИнструкцию(ТекстВставки);
        Исключение
        КонецПопытки;
        ТекстВставки  = "CREATE TABLE #TempPhone (phone char(10),email char(255))";
        Если ЗапросВставки.ВыполнитьИнструкцию(ТекстВставки) = 0 Тогда
            Сообщить("Временная таблица не была создана");
            Возврат Ответ;
        КонецЕсли;
       
        ПервичныйКлюч.ВыбратьСтроки();
        Пока ПервичныйКлюч.ПолучитьСтроку() = 1 Цикл
            ТекстВставки = "INSERT INTO #TempPhone(phone,email) VALUES('"+ ПервичныйКлюч.Телефон +"','" + ПервичныйКлюч.ЭлПочта +"')";
            ЗапросВставки.ВыполнитьИнструкцию(ТекстВставки);
        КонецЦикла;
       
        ТекстЗапроса = "
        |SELECT 
        |    Контакты.ID [Ссылка $Справочник.Контакты],
        |    '7' + Телефоны.phone [Телефон $Строка],
        |    Телефоны.email [ЭлПочта $Строка]
        |FROM $Справочник.Контакты Контакты 
        |   INNER JOIN #TempPhone Телефоны ON (($Контакты.ТелефонМоб LIKE '%' + Телефоны.phone) OR
        |   ($Контакты.ТелефонГор LIKE '%' + Телефоны.phone) OR ($Контакты.ТелефонГорРаб LIKE '%' + Телефоны.phone)
        |   OR ($Контакты.ТелефонГорДом LIKE '%' + Телефоны.phone) ) AND ($Контакты.ЭлПочта <> Телефоны.email)
        |";
       
       
        ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
       
        ТекстВставки = "DROP TABLE #TempPhone";
        ЗапросВставки.ВыполнитьИнструкцию(ТекстВставки);
    
    
        Ответ = ТЗ;      
        Возврат Ответ;
    

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