Имя: Пароль:
1C
1С v8
ЗАПРОС (параметры вирт.таблицы или соединение)?
,
0 prtx
 
12.01.17
11:38
Граждане, прекратите мои душевные муки пожалуйста!

Объясните как правильнее и как бустрее выполнять запрос

вариант 1 (через параметры витруальной таблицы):
                   |ВЫБРАТЬ
                   |    ТоварыНаСкладахОстатки.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
                   |    СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК Количество
                   |ПОМЕСТИТЬ ОстаткиПолучателя
                   |ИЗ
                   |    РегистрНакопления.ТоварыНаСкладах.Остатки(
                   |            ,
                   |            АналитикаУчетаНоменклатуры.Номенклатура В
                   |                    (ВЫБРАТЬ РАЗЛИЧНЫЕ
                   |                        ТребованиеПолучателяПоНоменклатуре.Номенклатура КАК Номенклатура
                   |                    ИЗ
                   |                        ТребованиеПолучателяПоНоменклатуре КАК ТребованиеПолучателяПоНоменклатуре)
                   |                И Склад = &СкладПолучатель) КАК ТоварыНаСкладахОстатки
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ТоварыНаСкладахОстатки.АналитикаУчетаНоменклатуры.Номенклатура
                   |
                   |ИНДЕКСИРОВАТЬ ПО
                   |    Номенклатура
                   |;

вариант 2 (через соединение):
                   |ВЫБРАТЬ
                   |    ВложенныйЗапрос.Номенклатура КАК Номенклатура,
                   |    СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК Количество
                   |ПОМЕСТИТЬ ОстаткиПолучателя
                   |ИЗ
                   |    (ВЫБРАТЬ РАЗЛИЧНЫЕ
                   |        ТребованиеПолучателяПоНоменклатуре.Номенклатура КАК Номенклатура
                   |    ИЗ
                   |        ТребованиеПолучателяПоНоменклатуре КАК ТребованиеПолучателяПоНоменклатуре) КАК ВложенныйЗапрос
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &СкладПолучатель) КАК ТоварыНаСкладахОстатки
                   |        ПО ВложенныйЗапрос.Номенклатура = ТоварыНаСкладахОстатки.АналитикаУчетаНоменклатуры.Номенклатура
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ВложенныйЗапрос.Номенклатура
                   |
                   |ИНДЕКСИРОВАТЬ ПО
                   |    Номенклатура
                   |;
1 Ёпрст
 
12.01.17
11:40
Открой консоль запросов, выполни и посмотри на время замера.
2 shamannk
 
12.01.17
11:40
Статья есть на эту тему.
3 Ёпрст
 
12.01.17
11:40
а вот это
АналитикаУчетаНоменклатуры.Номенклатура
всегда медленно
4 prtx
 
12.01.17
11:43
(2) если не жалко киньте ссылку или где искать, после поверхностного гугления чет не нашел.
5 Ёпрст
 
12.01.17
11:45
и это
ПО ВложенныйЗапрос.Номенклатура = ТоварыНаСкладахОстатки.АналитикаУчетаНоменклатуры.Номенклатура

тоже не подарок
6 prtx
 
12.01.17
11:45
(1) (3) а есть какая-то "теория запросов", как их правильно строить что логичнее использовать?
7 Ёпрст
 
12.01.17
11:45
тут всё медленно, что первый, что второй запрос
8 prtx
 
12.01.17
11:46
(5) ну а как правильно, переделать базу?
9 agarych
 
12.01.17
11:47
(0) нужна еще одна временная таблица для ТребованиеПолучателяПоНоменклатуре и дальше ее уже использовать.
10 agarych
 
12.01.17
11:49
Я бы сделал так:

1. Вр. таблица ТребованиеПолучателяПоНоменклатуре
2. Вр. таблица для остатков
3. Их соединение
11 prtx
 
12.01.17
11:50
(9) ну за временные таблицы и вложенные запросы, это я знаю, т.е. во второй запросо сделать через временную таблицу. но больно не подуше мне это полный запрос большой, и там если сделать через временные, то их получится штук 10-12 минимум...
12 agarych
 
12.01.17
11:51
ну есть запросы и с 20 временными таблицами.
13 prtx
 
12.01.17
11:52
(10) а во временную таблицу остатков, что тупо все остатки на складе вытягивать? а потом объеденять? была у меня мысль такая, но я чет думал это не логично.
14 Бубр
 
12.01.17
14:36
(6) получая составной тип данных   через  точку система строит левое соединение  ко  всем таблицам, которые указаны как типы данных.
15 mkalimulin
 
12.01.17
14:58
(11) Используй новый конструктор запросов. Там и 100 временных таблиц не напрягут.
http://catalog.mista.ru/public/569569/
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс