8.х оптимизация выборки

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем mhl, 16 ноя 2007.

  1. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Как можно оптимизировать данный код:
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ОтпускиОстаткиИОбороты.Сотрудник,
    |    ПРЕДСТАВЛЕНИЕ(ОтпускиОстаткиИОбороты.Сотрудник),
    |    ОтпускиОстаткиИОбороты.БалансДниНачальныйОстаток,
    |    ОтпускиОстаткиИОбороты.ЧасовОборот,
    |    ОтпускиОстаткиИОбороты.ДнейОборот,
    |    ОтпускиОстаткиИОбороты.БалансЧасыНачальныйОстаток,
    |    ОтпускиОстаткиИОбороты.НачисленноДниКонечныйОстаток,
    |    ОтпускиОстаткиИОбороты.НачисленноЧасыКонечныйОстаток,
    |    ОтпускиОстаткиИОбороты.НачисленноДниОборот,
    |    ОтпускиОстаткиИОбороты.НачисленноЧасыОборот,
    |    ОтпускиОстаткиИОбороты.БалансДниКонечныйОстаток,
    |    ОтпускиОстаткиИОбороты.БалансЧасыКонечныйОстаток
    |ИЗ
    |    РегистрНакопления.Отпуски.ОстаткиИОбороты(&НачДата, &КонДата, , , ) КАК ОтпускиОстаткиИОбороты";
    Если Сотрудник.Пустая()=Ложь ТОгда
    Запрос.Текст = Запрос.Текст +    
    "
    |ГДЕ
    |    ОтпускиОстаткиИОбороты.Сотрудник = &Сотрудник";
    КонецЕсли;
    Запрос.Текст = Запрос.Текст +    
    "
    |АВТОУПОРЯДОЧИВАНИЕ"; 
    
    Запрос.УстановитьПараметр("КонДата", КонецДня(КонДата));
    Запрос.УстановитьПараметр("НачДата", НачалоДня(НачДата));
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
    
    Результат = Запрос.Выполнить();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    ВыборкаДетали = Результат.Выбрать();
    н=0;
    Пока ВыборкаДетали.Следующий() Цикл
    Н=Н+1;
    Спр = Справочники.ФизическиеЛица.Выбрать();
    Пока Спр.Следующий() Цикл
    ЭлементыФормы.СотрудникСтр.Значение = ВыборкаДетали.Сотрудник;
    Если Спр.Наименование = ЭлементыФормы.СотрудникСтр.Значение Тогда
    ПринятНаРаботу = Формат(Спр.ДатаПоступленияНаРаботу, "ДФ=dd.MM.yyyy");
    ОбластьДетальныхЗаписей.Параметры.Принят = ПринятНаРаботу;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    Если Спр.Наименование <> ЭлементыФормы.СотрудникСтр.Значение Тогда
    Продолжить;
    КонецЕсли;
    
    На данный момент сильно тормозит. Пробовал делать выборку из справочника запросом, в этом случае он ничего не выбирает.
  2. AndreySc
    Offline

    AndreySc

    Регистрация:
    11 окт 2007
    Сообщения:
    40
    Симпатии:
    0
    Баллы:
    1
    А справочник то зачем перебираем на каждый результат запроса?????????
    Что то непонял:
    Код:
    ПринятНаРаботу = Формат(Спр.ДатаПоступленияНаРаботу, "ДФ=dd.MM.yyyy");
    
    
    можно ведь так:
    Код:
    ПринятНаРаботу= Формат(ВыборкаДетали.Сотрудник.ДатаПоступленияНаРаботу,"ДФ=dd.MM.yyyy");
    
    
    а это что?
    Код:
    Если Спр.Наименование = ЭлементыФормы.СотрудникСтр.Значение Тогда
    
    
  3. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Передайте сотрудника не в раздел ГДЕ, А в параметры виртуальной таблицы - РегистрНакопления.Отпуски.ОстаткиИОбороты(&НачДата, &КонДата, , , ) Там можно вписать Сотрудник = &Сотрудник в один из параметров
  4. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Это нужно для сравнения сотрудника из справочника с тем, что выбирает запрос, и если они совпадают, то берем из справочника дату поступления на работу.
  5. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Это некорректно, сделайте Левое соединение. У вас сложность с квадратичной до линейной упадет.
  6. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Спасибо. Сделал левое соединение и все заработало

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