Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
09 окт 2024, 04:19

Оччень медленно работает запрос

Автор ekaterinasslv, 26 дек 2018, 09:33

0 Пользователей и 1 гость просматривают эту тему.

ekaterinasslv

Добрый день, подскажите как-то может имеет смысл оптимизировать запрос или что-то неправильно делаю? запрос работает ооочень долго...:dfbsdfbsdf:

ВЫБРАТЬ
ПоказанияПриборовУчетаСрезПоследнихТ1.Абонент.Ссылка КАК Абонент,
ПоказанияПриборовУчетаСрезПоследнихТ1.Период КАК ДатаСнятия,
ПоказанияПриборовУчетаСрезПоследнихТ1.ПриборУчета.ИдентификаторПУ КАК КодПУвГИСЖКХ,
ПоказанияПриборовУчетаСрезПоследнихТ1.Показание КАК ПоказаниеТ1,
ПоказанияПриборовУчетаСрезПоследнихТ2.Показание КАК ПоказаниеТ2,
ПоказанияПриборовУчетаСрезПоследнихТ1.Абонент.АдресПредставление КАК Адрес
ИЗ
РегистрСведений.ПоказанияПриборовУчета.СрезПоследних(
&КонДата,
Абонент.Ссылка В ИЕРАРХИИ (&аб)
И НомерСтроки = 1) КАК ПоказанияПриборовУчетаСрезПоследнихТ1
ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияПриборовУчета.СрезПоследних(
&КонДата,
Абонент.Ссылка В ИЕРАРХИИ (&аб)
И НомерСтроки = 2) КАК ПоказанияПриборовУчетаСрезПоследнихТ2
ПО ПоказанияПриборовУчетаСрезПоследнихТ1.Регистратор.Ссылка = ПоказанияПриборовУчетаСрезПоследнихТ2.Регистратор.Ссылка
ГДЕ
ПоказанияПриборовУчетаСрезПоследнихТ1.Период >= &НачДата
И ПоказанияПриборовУчетаСрезПоследнихТ1.Период <= &КонДата


LexaK

попробуйте такой запрос


ВЫБРАТЬ
    Рег.Абонент КАК Абонент,
    Рег.Период КАК ДатаСнятия,
    Рег.ПриборУчета.ИдентификаторПУ КАК КодПУвГИСЖКХ,
    Рег.Абонент.АдресПредставление КАК Адрес,
    Рег.НомерСтроки,
    Рег.Показание
поместить Таб
ИЗ
    РегистрСведений.ПоказанияПриборовУчета.СрезПоследних(
            &КонДата,
            Абонент В ИЕРАРХИИ (&аб)
            И НомерСтроки в(1,2)) КАК Рег
ГДЕ
    Рег.Период >= &НачДата
;
Выбрать
    Рег.Абонент,
    Рег.ДатаСнятия,
    Рег.КодПУвГИСЖКХ,
    Рег.Адрес,
    Рег.Показание как Показание1, //считаем что показание1 есть всегда
    ЕстьNull(Рег2.Показание,0) как Показание2 //показания2 может не быть тогда 0
из
Таб Рег
левое соединение Таб Рег2
по Рег.Регистратор = Рег2.Регистратор
и Рег.НомерСтроки < Рег2.НомерСтроки //1 < 2 сначала показание1 потом показане2
где
    Рег.НомерСтроки = 1
если помогло нажмите: Спасибо!

ekaterinasslv

Я выполняю запрос в консоли, и у меня вопрос по второму запросу, не понятно и ругается консоль "Поле не найдено Рег.Регистратор"..просто не работала никогда в Временными таблица..вообще ничего не понимаю((можете разъяснить что там надо написать?

LexaK

а да, ошибка закралась, попробуйте этот

ВЫБРАТЬ
    Рег.Регистратор,
    Рег.Абонент КАК Абонент,
    Рег.Период КАК ДатаСнятия,
    Рег.ПриборУчета.ИдентификаторПУ КАК КодПУвГИСЖКХ,
    Рег.Абонент.АдресПредставление КАК Адрес,
    Рег.НомерСтроки,
    Рег.Показание
поместить Таб
ИЗ
    РегистрСведений.ПоказанияПриборовУчета.СрезПоследних(
            &КонДата,
            Абонент В ИЕРАРХИИ (&аб)
            И НомерСтроки в(1,2)) КАК Рег
ГДЕ
    Рег.Период >= &НачДата
;
Выбрать
    Рег.Абонент,
    Рег.ДатаСнятия,
    Рег.КодПУвГИСЖКХ,
    Рег.Адрес,
    Рег.Показание как Показание1, //считаем что показание1 есть всегда
    ЕстьNull(Рег2.Показание,0) как Показание2 //показания2 может не быть тогда 0
из
    Таб Рег
левое соединение Таб Рег2
    по Рег.Регистратор = Рег2.Регистратор
    и Рег.НомерСтроки < Рег2.НомерСтроки //1 < 2 сначала показание1 потом показане2
где
    Рег.НомерСтроки = 1
если помогло нажмите: Спасибо!

ekaterinasslv

:zebzdr::zebzdr:спасибоо Вам огромноетеперь в разы быстрее)только бы еще понять что за магию вы сделали ))и как это применить в следующий раз)))

AIFrame

Цитата: ekaterinasslv от 26 дек 2018, 13:51
:zebzdr::zebzdr:спасибоо Вам огромноетеперь в разы быстрее)только бы еще понять что за магию вы сделали ))и как это применить в следующий раз)))
Ты отбирал дважды по одному и тому же регистру и в полном соединении (привет, задвоения).
Условие типа ИЛИ в запросе можно нужно и попроще сделать. Лехак решил через И НомерСтроки в(1,2)
Еще можно  И (НомерСтроки = 1 ИЛИ НомерСтроки = 2)

LexaK

вообще с этим НомерСтроки не все понятно, а если по документу 5 начислений? то должны взять два последних?
а если в документе всего две строки, например текущее показание и предыдущее, то вообще не надо по НомерСтроки отбирать (их и так 2)
вот не достаток исходных данных, данные регистра бы сначала в консоли погонять, тогда бы запрос можно было бы еще оптимальнее написать.
если помогло нажмите: Спасибо!

ekaterinasslv

Так как нам нужны из регистра показания прибра учета, то нам нужно отбирать показания за определенный указанный период &НачДата &КонДата.  Значений показаний может быть либо 2(если счетчик двухтарифный)либо одно значение. А верными как я понимаю показания будут последние,переданные за указанный период.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск