Имя: Пароль:
1C
1С v8
оптимизация запроса скд
0 mataranga
 
25.09.15
11:02
Доброе время суток, база вертится на SQL сервере, тонкий клиент. платформа 8.3.5.1383.

собственно вопрос, на скд делается отчет. левое соединение с регистром сведений на более 250 тыщ. записей, в одном пакете.

Через ограничение даты параметром Дата между Дата1 и Дата2, и через отбор посредством СКД, быстродействие было одинакового долгое.

Объясните если я не прав, если делается отбор, то этот отбор накладывается после ВСЕЙ выборки из регистра, а если параметр, то он делает выборку с заданным параметром. По идее, с параметром должно быть в разы быстрее, но результаты показывают обратное.
1 rabbidX
 
25.09.15
11:06
Если это параметр виртуальной (!) таблицы, то должно быть в разы быстрее. Вообще смотри схему отчета (или как там она называется) в консоли отчетов.
2 Лефмихалыч
 
25.09.15
11:07
в СКД включена галка Автозаполнение, в результате отбор накладывается на параметры тоже. По этому ты и не видишь разницы
3 mataranga
 
25.09.15
11:12
(2) я пробовал только параметр, и только отбор (т.е. без условий отбирал все, и делал пользовательский отбор)
4 mataranga
 
25.09.15
11:12
ВЫБРАТЬ
    ФизическиеЛицаКонтактнаяИнформация.Ссылка,
    ФизическиеЛицаКонтактнаяИнформация.Представление
ПОМЕСТИТЬ ТелефоныФизЛиц
ИЗ
    Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
ГДЕ
    ФизическиеЛицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
    И ФизическиеЛицаКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойинформации.МобильныйТелефонФизическогоЛица)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СтатусыУслуг.Пациент,
    СтатусыУслуг.Номенклатура,
    СменныеЗадания.МедицинскоеРабочееМесто,
    СтатусыУслуг.УникальныйИдентификаторУслуги,
    СтатусыУслуг.ЗапланированноеВремя,
    СменныеЗадания.ОсновнойИсполнитель.Должность КАК Должность,
    СменныеЗадания.ОсновнойИсполнитель КАК Исполнитель,
    СтатусыУслуг.Заказ.СуммаДокумента КАК СуммаЗаказа,
    ЗаказПациентаМедицинскиеУслуги.Цена КАК ЦенаУслугиВЗаказе,
    СтатусыУслуг.СтатусУслуги,
    СтатусыУслуг.ДатаВыполнения,
    СтатусыУслуг.МедицинскаяКарта,
    СтатусыУслуг.Соглашение,
    СтатусыУслуг.ИсточникФинансирования,
    ЗаказПациентаМедицинскиеУслуги.Ссылка.Дата КАК ДатаЗаказа,
    СтатусыУслуг.МедицинскийДокумент,
    ЗаказПациентаМедицинскиеУслуги.Ссылка КАК Заказ,
    НАЧАЛОПЕРИОДА(СтатусыУслуг.ЗапланированноеВремя, ДЕНЬ) КАК ДеньОказанияУслуги,
    СтатусыУслуг.ЗапланированноеВремя КАК ВремяПриема,
    ДанныеПациентовСрезПоследних.ДатаРождения,
    _НомераКабинетовСрезПоследних.НомерКабинета,
    1 КАК Количество,
    ВЫБОР
        КОГДА НЕ СтатусыУслуг.НаОплату
            ТОГДА ЗаказПациентаМедицинскиеУслуги.Цена
        ИНАЧЕ 0
    КОНЕЦ КАК Выручка,
    ВЫБОР
        КОГДА СтатусыУслуг.НаОплату
            ТОГДА -ЗаказПациентаМедицинскиеУслуги.Цена
        ИНАЧЕ 0
    КОНЕЦ КАК Задолженность,
    ТелефоныФизЛиц.Представление КАК КонтактМедРаботника
ИЗ
    РегистрСведений.СтатусыУслуг КАК СтатусыУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СменныеЗадания КАК СменныеЗадания
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений._НомераКабинетов.СрезПоследних(&АктуальнаяДата, ) КАК _НомераКабинетовСрезПоследних
            ПО СменныеЗадания.МедицинскоеРабочееМесто = _НомераКабинетовСрезПоследних.МедицинскоеРабочееМесто
            ЛЕВОЕ СОЕДИНЕНИЕ ТелефоныФизЛиц КАК ТелефоныФизЛиц
            ПО СменныеЗадания.ОсновнойИсполнитель.ФизЛицо = ТелефоныФизЛиц.Ссылка
        ПО СтатусыУслуг.УникальныйИдентификаторУслуги = СменныеЗадания.УникальныйИдентификаторУслуги
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПациента.МедицинскиеУслуги КАК ЗаказПациентаМедицинскиеУслуги
        ПО СтатусыУслуг.УникальныйИдентификаторУслуги = ЗаказПациентаМедицинскиеУслуги.УникальныйИдентификаторУслуги
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПациентов.СрезПоследних(&АктуальнаяДата, ) КАК ДанныеПациентовСрезПоследних
        ПО СтатусыУслуг.Пациент = ДанныеПациентовСрезПоследних.Пациент
ГДЕ
    СтатусыУслуг.СтатусУслуги <> ЗНАЧЕНИЕ(Перечисление.СтатусыУслуг.Отменена)
    И СтатусыУслуг.СтатусУслуги <> ЗНАЧЕНИЕ(Перечисление.СтатусыУслуг.Заказана)
5 Лефмихалыч
 
25.09.15
11:15
(3) с автозаполнением СКД пофигу, что ты там пробовал - она в поля отбора добавляет все, что можно и нельзя.

(4) и на что ты там отборы накладываешь?
6 mataranga
 
25.09.15
11:16
отбор на ДеньОказанияУслуги (5)
7 Лефмихалыч
 
25.09.15
11:27
(6) регистр периодический? день оказания - это измерение или ресурс?
8 mataranga
 
25.09.15
11:38
регистр не периодический не зависимый, день оказания это реквизит, измерение УИД
9 rabbidX
 
25.09.15
11:51
Попробуйте статусы услуг во временную таблицу выбрать сначала. Должны на соединении время сэкономить.
10 Fragster
 
гуру
25.09.15
11:57
вынести все срезы последних во временные таблицы
11 rabbidX
 
25.09.15
12:03
(10) а это на фига? При соединении с виртуальной таблицей у нас же только отобранные записи будут.
12 Timon1405
 
25.09.15
12:10
(4) 1. возьмите консоль СКД с ИТС, посмотрите на итоговый запрос
2. попробуйте дописать в запросе в конце
{ГДЕ
  СтатусыУслуг.ДеньОказанияУслуги}
ну и про автозаполнение уже было