Для чего создается временная таблица при выборке остатков и оборотов из регистра накопления?
Не могу понять для чего разработчик использует временную таблицу. Может так нужно, а мне не хватает мозгов понять для чего?
Почему ВЫБОР не используется сразу при выборке?
ВЫБРАТЬ
УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.Организация,
УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.Услуга,
УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.ЛицевойСчет,
УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.РазделУчета,
УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.МесяцОтражения,
УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.ЭтоКорректировка,
УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.ВидКорректировки,
УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.ПериодКорректировки,
УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.СуммаНачальныйОстаток,
УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.СуммаПриход,
УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.СуммаРасход,
УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.СуммаКонечныйОстаток
ПОМЕСТИТЬ ВрТаблицаОстатковИОборотов
ИЗ
РегистрНакопления.УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчете.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , ) КАК УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТаблицаОстатковИОборотов.Организация,
ТаблицаОстатковИОборотов.Услуга,
ТаблицаОстатковИОборотов.ЛицевойСчет,
ТаблицаОстатковИОборотов.МесяцОтражения,
ТаблицаОстатковИОборотов.ЭтоКорректировка,
ТаблицаОстатковИОборотов.ВидКорректировки,
ТаблицаОстатковИОборотов.ПериодКорректировки,
ВЫБОР
КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.Льготы)
ТОГДА ТаблицаОстатковИОборотов.СуммаПриход
ИНАЧЕ 0
КОНЕЦ КАК СуммаПриходЛьготы,
ВЫБОР
КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.Льготы)
ТОГДА ТаблицаОстатковИОборотов.СуммаРасход
ИНАЧЕ 0
КОНЕЦ КАК СуммаРасходЛьготы,
ВЫБОР
КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.Пени)
ТОГДА ТаблицаОстатковИОборотов.СуммаПриход
ИНАЧЕ 0
КОНЕЦ КАК СуммаПриходПени,
ВЫБОР
КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.Пени)
ТОГДА ТаблицаОстатковИОборотов.СуммаРасход
ИНАЧЕ 0
КОНЕЦ КАК СуммаРасходПени,
ВЫБОР
КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.НачислениеУслуг)
ТОГДА ТаблицаОстатковИОборотов.СуммаПриход
ИНАЧЕ 0
КОНЕЦ КАК СуммаПриходНачислениеУслуг,
ВЫБОР
КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.НачислениеУслуг)
ТОГДА ТаблицаОстатковИОборотов.СуммаРасход
ИНАЧЕ 0
КОНЕЦ КАК СуммаРасходНачислениеУслуг,
ТаблицаОстатковИОборотов.СуммаПриход,
ТаблицаОстатковИОборотов.СуммаРасход,
ТаблицаОстатковИОборотов.СуммаНачальныйОстаток,
ТаблицаОстатковИОборотов.СуммаКонечныйОстаток
ИЗ
ВрТаблицаОстатковИОборотов КАК ТаблицаОстатковИОборотов
ПоказатьПочему ВЫБОР не используется сразу при выборке?
По теме из базы знаний
- Запросы. Временные Таблицы. Сравнение методов создания ВТ
- Работа со схемой запроса
- Регистры бухгалтерии. Настройки, субконто и движения с субконто
- Как сдать экзамен 1С:Специалист по платформе?
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вообще да, так принято делать, но тут одно НО. Делается это для индексации полей, по которым потом будет соединение таблицы. Т.е. данные виртуальной таблицы помещаются во временную, индексируются. Тут, вероятно, сделали по привычке, т.к. индексации нет. С другой стороны, если понадобится добавить индексы, не придется переписывать сильно запрос.
(1)Правильный ответ - посмотрите в профайлере во что превращается запрос.
Неправильный, но..., возможно, верный :)
Если вы не лукавите и этими двумя запросами и строго в таком виде все ограничивается.
Обычное следование догме - запросы к виртуальным запросам, особенно к таким тяжелым как таблица остатков и оборотов, следует предварительно помещать во временные таблицы, дабы не путать оптимизатор.
На практике выражение типа ВЫБОР
КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.НачислениеУслуг)
ТОГДА ТаблицаОстатковИОборотов.СуммаПриход
ИНАЧЕ 0
КОНЕЦ КАК СуммаПриходНачислениеУслуг
Превращается в обычный CASE и он никак не скажется на производительности, если даже предварительно результат НЕ помещать во временную таблицу.
Более того, затраты на создание и уничтожение временной таблицы будут явно лишними.
А еще бродят смутные слухи, что не все СУБД любят временные таблицы.
Неправильный, но..., возможно, верный :)
Если вы не лукавите и этими двумя запросами и строго в таком виде все ограничивается.
Обычное следование догме - запросы к виртуальным запросам, особенно к таким тяжелым как таблица остатков и оборотов, следует предварительно помещать во временные таблицы, дабы не путать оптимизатор.
На практике выражение типа ВЫБОР
КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.НачислениеУслуг)
ТОГДА ТаблицаОстатковИОборотов.СуммаПриход
ИНАЧЕ 0
КОНЕЦ КАК СуммаПриходНачислениеУслуг
Превращается в обычный CASE и он никак не скажется на производительности, если даже предварительно результат НЕ помещать во временную таблицу.
Более того, затраты на создание и уничтожение временной таблицы будут явно лишними.
А еще бродят смутные слухи, что не все СУБД любят временные таблицы.
(1) Временная таблица нужна для того, чтобы получить в нее минимальные данные и использовать в качестве фильтра. Это прямо прописано в стандартах разработки 1С. И там же прописано, что не стоит злоупотреблять временными таблицами. Но было время, когда всех хомячков учили, что нужно все выбрать во временные таблицы, а потом все это собрать в итоговой выборке. Такие запросы сильно нагружают базу данных, поэтому вредны В Вашем случае временная таблица - это дань такой вот своеобразной "моде".
(13) Если посмотреть "размоченный" запрос из "представлений" ЗУПовского отчета типа "Статистика персонала",
то там да, есть таблицы-фильтры (немного) и оставшиеся 90-95% таблицы - временные таблицы. Которые пачками внутри запроса и уничтожаются "по ходу пьесы".
Штук 5-6 временных получают, соединяют "на фильтр" и уничтожают. Потом следующие. Разумно.
то там да, есть таблицы-фильтры (немного) и оставшиеся 90-95% таблицы - временные таблицы. Которые пачками внутри запроса и уничтожаются "по ходу пьесы".
Штук 5-6 временных получают, соединяют "на фильтр" и уничтожают. Потом следующие. Разумно.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот