Для чего создается временная таблица при выборке остатков и оборотов из регистра накопления?

1. AlexGoldT 10.12.23 19:22 Сейчас в теме
Не могу понять для чего разработчик использует временную таблицу. Может так нужно, а мне не хватает мозгов понять для чего?
ВЫБРАТЬ
	УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.Организация,
	УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.Услуга,
	УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.ЛицевойСчет,
	УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.РазделУчета,
	УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.МесяцОтражения,
	УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.ЭтоКорректировка,
	УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.ВидКорректировки,
	УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.ПериодКорректировки,
	УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.СуммаНачальныйОстаток,
	УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.СуммаПриход,
	УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.СуммаРасход,
	УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты.СуммаКонечныйОстаток
ПОМЕСТИТЬ ВрТаблицаОстатковИОборотов
ИЗ
	РегистрНакопления.УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчете.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , ) КАК УПЖКХ_ДанныеДляОтраженияНачисленийВРеглУчетеОстаткиИОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТаблицаОстатковИОборотов.Организация,
	ТаблицаОстатковИОборотов.Услуга,
	ТаблицаОстатковИОборотов.ЛицевойСчет,
	ТаблицаОстатковИОборотов.МесяцОтражения,
	ТаблицаОстатковИОборотов.ЭтоКорректировка,
	ТаблицаОстатковИОборотов.ВидКорректировки,
	ТаблицаОстатковИОборотов.ПериодКорректировки,
	ВЫБОР
		КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.Льготы)
			ТОГДА ТаблицаОстатковИОборотов.СуммаПриход
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаПриходЛьготы,
	ВЫБОР
		КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.Льготы)
			ТОГДА ТаблицаОстатковИОборотов.СуммаРасход
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаРасходЛьготы,
	ВЫБОР
		КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.Пени)
			ТОГДА ТаблицаОстатковИОборотов.СуммаПриход
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаПриходПени,
	ВЫБОР
		КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.Пени)
			ТОГДА ТаблицаОстатковИОборотов.СуммаРасход
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаРасходПени,
	ВЫБОР
		КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.НачислениеУслуг)
			ТОГДА ТаблицаОстатковИОборотов.СуммаПриход
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаПриходНачислениеУслуг,
	ВЫБОР
		КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.НачислениеУслуг)
			ТОГДА ТаблицаОстатковИОборотов.СуммаРасход
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаРасходНачислениеУслуг,
	ТаблицаОстатковИОборотов.СуммаПриход,
	ТаблицаОстатковИОборотов.СуммаРасход,
	ТаблицаОстатковИОборотов.СуммаНачальныйОстаток,
	ТаблицаОстатковИОборотов.СуммаКонечныйОстаток
ИЗ
	ВрТаблицаОстатковИОборотов КАК ТаблицаОстатковИОборотов
Показать

Почему ВЫБОР не используется сразу при выборке?
starik-2005; +1 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
11. Sashares 33 11.12.23 10:11 Сейчас в теме
(1)Если это весь запрос, то смысла во временной таблице нет.
2. Swetlana 27 10.12.23 21:03 Сейчас в теме
Так принято, это основы программирования
3. user1880116 10.12.23 21:06 Сейчас в теме
(2)
Так принято
А объяснить-то сможете?
7. Swetlana 27 11.12.23 09:08 Сейчас в теме
(3) вы сами можете делать как хотите
16. user1880116 11.12.23 13:18 Сейчас в теме
(7)
можете делать как хотите
Какое характерное "ой, всё" у вас получилось.
4. ImHunter 333 11.12.23 07:58 Сейчас в теме
(1) Предположу, что это из-за того, что используется виртуальная таблица ОстаткиИОбороты. Т.е., это не просто плоский select. И разработчик не стал нагружать этот select доп логикой выборов.
AlexGoldT; +1 Ответить
5. user620512 11.12.23 08:07 Сейчас в теме
Возможно к выборке обращаются больше одного раза поэтому ВТ ?
AlexGoldT; +1 Ответить
6. starjevschik 11.12.23 08:23 Сейчас в теме
каноны 1с говорят, что это с точки зрения быстродействия правильно. В мануале написано. Они и делают. Хотя бы что-то они могут делать по своим же мануалам?
AlexGoldT; +1 Ответить
8. laperuz 47 11.12.23 09:52 Сейчас в теме
Вообще да, так принято делать, но тут одно НО. Делается это для индексации полей, по которым потом будет соединение таблицы. Т.е. данные виртуальной таблицы помещаются во временную, индексируются. Тут, вероятно, сделали по привычке, т.к. индексации нет. С другой стороны, если понадобится добавить индексы, не придется переписывать сильно запрос.
AlexGoldT; +1 Ответить
9. booksfill 11.12.23 10:01 Сейчас в теме
(1)Правильный ответ - посмотрите в профайлере во что превращается запрос.

Неправильный, но..., возможно, верный :)
Если вы не лукавите и этими двумя запросами и строго в таком виде все ограничивается.

Обычное следование догме - запросы к виртуальным запросам, особенно к таким тяжелым как таблица остатков и оборотов, следует предварительно помещать во временные таблицы, дабы не путать оптимизатор.

На практике выражение типа ВЫБОР
КОГДА ТаблицаОстатковИОборотов.РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.НачислениеУслуг)
ТОГДА ТаблицаОстатковИОборотов.СуммаПриход
ИНАЧЕ 0
КОНЕЦ КАК СуммаПриходНачислениеУслуг

Превращается в обычный CASE и он никак не скажется на производительности, если даже предварительно результат НЕ помещать во временную таблицу.

Более того, затраты на создание и уничтожение временной таблицы будут явно лишними.
А еще бродят смутные слухи, что не все СУБД любят временные таблицы.
user1880116; AlexGoldT; +2 Ответить
10. ImHunter 333 11.12.23 10:04 Сейчас в теме
(9) Смутно подозреваю, что этот обычный CASE потом пойдет в поля группировки.
AlexGoldT; +1 Ответить
12. booksfill 11.12.23 10:19 Сейчас в теме
(10)Не думаю, группировка идет по измерениям, а тут будет обычное SUM с вложенным условием.
Обычная скалярная операция при агрегировании.
AlexGoldT; +1 Ответить
13. starik-2005 3167 11.12.23 11:50 Сейчас в теме
(1) Временная таблица нужна для того, чтобы получить в нее минимальные данные и использовать в качестве фильтра. Это прямо прописано в стандартах разработки 1С. И там же прописано, что не стоит злоупотреблять временными таблицами. Но было время, когда всех хомячков учили, что нужно все выбрать во временные таблицы, а потом все это собрать в итоговой выборке. Такие запросы сильно нагружают базу данных, поэтому вредны В Вашем случае временная таблица - это дань такой вот своеобразной "моде".
user1880116; AlexGoldT; +2 Ответить
17. Vinzor 112 11.12.23 14:04 Сейчас в теме
(13) Если посмотреть "размоченный" запрос из "представлений" ЗУПовского отчета типа "Статистика персонала",
то там да, есть таблицы-фильтры (немного) и оставшиеся 90-95% таблицы - временные таблицы. Которые пачками внутри запроса и уничтожаются "по ходу пьесы".
Штук 5-6 временных получают, соединяют "на фильтр" и уничтожают. Потом следующие. Разумно.
AlexGoldT; +1 Ответить
14. AlexGoldT 11.12.23 12:27 Сейчас в теме
А есть где-то стандарты разработки в доступе?
Спасибо всем за науку...
15. Nigmatul 11.12.23 12:35 Сейчас в теме
(14)ИТС стандарты разработки
AlexGoldT; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот