Имя: Пароль:
1C
1С v8
Неоптимальный запрос. Посоветуйте как оптимизировать.
,
0 DIvanmgn
 
04.10.11
12:35
Запрос.Текст ="ВЫБРАТЬ
                 |    ЗначенияСвойствОбъектов.Объект,
                 |    ЗначенияСвойствОбъектов.Значение
                 |ПОМЕСТИТЬ ВТ_ПНТЗ
                 |ИЗ
                 |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                 |ГДЕ
                 |    ЗначенияСвойствОбъектов.Свойство = &Свойство
                 |    
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ
                 |    атлМестаХраненияСрезПоследних.Номенклатура,
                 |    атлМестаХраненияСрезПоследних.МестоХранения
                 |ПОМЕСТИТЬ ВТ_МестоХранения
                 |ИЗ
                 |    РегистрСведений.атлМестаХранения.СрезПоследних(
                 |            &ДатаДокумента,
                 |            
                 |                ) КАК атлМестаХраненияСрезПоследних
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ
                 |    ИнвентаризацияТоваровНаСкладе.Номер,
                 |    ИнвентаризацияТоваровНаСкладе.Дата,
                 |    ИнвентаризацияТоваровНаСкладе.Организация,
                 |    ИнвентаризацияТоваровНаСкладе.Склад.Представление КАК ПредставлениеСклада,
                 |    ИнвентаризацияТоваровНаСкладе.Организация КАК Организация1,
                 |    ИнвентаризацияТоваровНаСкладе.Склад,
                 |    ИнвентаризацияТоваровНаСкладе.Товары.(
                 |        НомерСтроки,
                 |        Номенклатура,
                 |        ЕстьNull(ВТ_ПНТЗ.Значение,Номенклатура.Код) КАК КодАртикул,
                 |        Номенклатура.НаименованиеПолное КАК Товар,
                 |        Количество КАК Количество,
                 |        КоличествоУчет КАК КоличествоПоУчету,
                 |        Номенклатура.БазоваяЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения,
                 |        Цена,
                 |        Сумма,
                 |        СуммаУчет КАК СуммаПоУчету,
                 |        ВТ_МестоХранения.МестоХранения
                 |    )
                 |ИЗ
                 |    Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе
                 |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_МестоХранения КАК ВТ_МестоХранения
                 |        ПО ИнвентаризацияТоваровНаСкладе.Товары.Номенклатура = ВТ_МестоХранения.Номенклатура
                 |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПНТЗ КАК ВТ_ПНТЗ
                 |        ПО ИнвентаризацияТоваровНаСкладе.Товары.Номенклатура = ВТ_ПНТЗ.Объект
                 |ГДЕ
                 |    ИнвентаризацияТоваровНаСкладе.Ссылка = &ТекущийДокумент
                 |
                 |УПОРЯДОЧИТЬ ПО
                 |    ИнвентаризацияТоваровНаСкладе.Товары.НомерСтроки";

Используется для вывода печатной формы инвентаризации.
На 900 позициях форма формируется больше часа.

Где можно оптимизировать?

Пробовал параметром передавать в виртуальные таблицы отбор по позициям - в результате "Не хватает памяти". Где то слышал, что отбор работает дольше чем соединение.
1 chelentano
 
04.10.11
12:37
(0) имхо, проблема в том, как ты выбираешь табличную часть
2 DIvanmgn
 
04.10.11
12:39
(1) да, меня тоже это смущает. Но вообще взял этот кусок из типовой. Неужели сами разработчики пишут неоптимальные запросы?
3 Asmody
 
04.10.11
12:39
отбор по позициям как делал?
4 Jstunner
 
04.10.11
12:39
(0) "форма формируется больше часа"

а запрос сколько?
5 DIvanmgn
 
04.10.11
12:41
(3) список из элементов справочника "номенклатура"
передавал в качестве параметра
6 DIvanmgn
 
04.10.11
12:41
(4) не засекал, чуть позже будет информация
7 Asmody
 
04.10.11
12:41
(5) сложи номенклатуру из ТЧ во временную таблицу, а потом отбирай по ней
8 chelentano
 
04.10.11
12:43
(2) я не знаю как они там пишут, сам недавно переделывал, сделал шапку одним запросом, ТЧ другим
9 unregistered
 
04.10.11
12:46
(2) Соединяют временные таблицы (ВТ)_ПНТЗ и ВТ_МестоХранения) с вложенными таблицами (Товары) тоже разработчики? Или это твое соединение?
10 zak555
 
04.10.11
12:48
зачем в запросе шапка текДока ?
11 Kuein
 
04.10.11
12:48
Жутковато выглядит.
1. Вначале номенклатуру из инвентаризации во временную таблицу, и уже к ней цепляй свойства объектов и места хранения.

2.  |    ИнвентаризацияТоваровНаСкладе.Номер,
   |    ИнвентаризацияТоваровНаСкладе.Дата,
   |    ИнвентаризацияТоваровНаСкладе.Организация,
   |    ИнвентаризацияТоваровНаСкладе.Склад.Представление КАК ПредставлениеСклада,
   |    ИнвентаризацияТоваровНаСкладе.Организация КАК Организация1,
   |    ИнвентаризацияТоваровНаСкладе.Склад,

Зачем вот это все?

3. Запросы к табличным частям документа ТАК лучше не писать. Долго, неудобно и обычно бессмысленно.
12 acsent
 
04.10.11
12:50
Зачем свойства в ВТ запихал? Напрочь убил идею использования индекса
13 Kuein
 
04.10.11
12:52
(12) А можно по-подробнее?
Я тоже не очень понимаю что ТС хотел сказать первой временной таблицей, но вот про индексы даже не подумал.
14 Эстет хренов
 
04.10.11
12:57
не используй временные таблицы, тут они не нужны.
15 DIvanmgn
 
04.10.11
12:57
(4) не получилось замерить потому что идея (7) помогла
в итоге форма появляется за минуту с небольшим.
16 mikeA
 
04.10.11
12:57
а накуа там вообще временные таблицы? я их конечно тоже люблю, но не до такой же степени.

> Пробовал параметром передавать в виртуальные таблицы отбор по позициям - в результате "Не хватает памяти".

параметры компьютера озвучь. файловый/SQL и т.п. может просто памяти добавить и проц пошустрее?
17 DIvanmgn
 
04.10.11
13:01
(12) пошел учить МЧ про индексы
(14) понимаю что понимать когда надо когда нет получится с опытом, но может подскажете где об этом толково написано?
(16) база файловая, сервер приемлемо справляется с типовыми задачами.. вот только на моем коде споткнулся :)
18 dimaldinho
 
04.10.11
13:26
(0)
1. Максимально сократить число записей в соединяемых таблицах: в первые две временные таблицы добавить отбор по номенклатуре.
2. ИнвентаризацияТоваровНаСкладе поместить во временную таблицу, наложив отбор Ссылка = &ТекущийДокумент, и только потом делать левые соединения.
3. Если прогнозируешь, что 3 таблицы будут большими, добавть во временные таблицы индексирование по полям соединения.

off:
4. А если в ТЧ инвентарицазии будут дубли строк?
19 Axel2009
 
04.10.11
13:34
а сколько выполняется запрос
ВЫБРАТЬ * ИЗ Документ.ИнвентаризацияТоваров.Товары ГДЕ Ссылка = &ТекущийДокумент
?
20 unregistered
 
04.10.11
13:44
Что-то тип атого должно быть:

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