![]() |
|
v8: Оптимизация запроса | ☑ | ||
---|---|---|---|---|
0
Начинающий_13
08.08.12
✎
15:54
|
Здраствуйте
Есть функция Контроль отрицательных остатков. Запрос создан сейчас на основе ОБЪЕДИНЕНИЯ. Содержаение каждого запроса одинаково . Разница только а Названии табличных частей документа Как можно подменять название ТЧ документа Функция КонтрольОтрицательныхОстатов() // ИмяТЧ = "Товары"; // Пробы Для каждого ТЧ Из Метаданные().ТабличныеЧасти Цикл // Сообщить(ТЧ.Имя); ИмяТЧ = ТЧ.Имя; КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | МИНИМУМ(ДокТЧ.НомерСтроки) КАК НомерСтроки, | ДокТЧ.ТМЦ, | ДокТЧ.Партия, | ДокТЧ.Характеристика, | СУММА(ДокТЧ.Количество) КАК Количество, | МАКСИМУМ(ЕСТЬNULL(Остатки.КоличествоОстаток, 0)) КАК КоличествоОстаток, | МАКСИМУМ(ЕСТЬNULL(Остатки.СуммаОстаток, 0)) КАК СуммаОстаток, | ДанныеЗакупки.Контрагент, | ДанныеЗакупки.Цена1го, | ДанныеЗакупки.Цена, | ДанныеЗакупки.СтавкаНДС, | ДанныеЗакупки.СтавкаНП, | ДанныеЗакупки.СтатусТМЦ |ИЗ // | Документ.ТМЦ_ПоступлениеВозврат.Товары КАК ДокТЧ | Документ.ТМЦ_ПоступлениеВозврат."+ ИмяТЧ +" КАК ДокТЧ // ????????? | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РН_Остатки.Остатки(&МоментВремени, МХ = &МХ) КАК Остатки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РС_ЗакупочниеДанные.СрезПоследних КАК ДанныеЗакупки | ПО Остатки.ТМЦ = ДанныеЗакупки.ТМЦ | И Остатки.Партия = ДанныеЗакупки.Партия | И Остатки.Характеристика = ДанныеЗакупки.Характеристика | ПО ДокТЧ.ТМЦ = Остатки.ТМЦ | И ДокТЧ.Партия = Остатки.Партия | И ДокТЧ.Характеристика = Остатки.Характеристика |ГДЕ | ДокТЧ.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ДокТЧ.ТМЦ, | ДокТЧ.Партия, | ДокТЧ.Характеристика, | ДанныеЗакупки.Цена1го, | ДанныеЗакупки.Цена, | ДанныеЗакупки.Контрагент, | ДанныеЗакупки.СтавкаНДС, | ДанныеЗакупки.СтавкаНП, | ДанныеЗакупки.СтатусТМЦ"; // ЗапросТекст = СтрЗаменить(ЗапросТекст,"Товары",ИмяТЧ); // ?????? Запрос.УстановитьПараметр("МХ", МХоткуда); Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); Возврат Результат; КонецФункции |
|||
1
aleks-id
08.08.12
✎
15:55
|
продолжайте наблюдение. нам это очень интересно
|
|||
2
Maxus43
08.08.12
✎
15:56
|
не работает чтоли?
|
|||
3
Начинающий_13
08.08.12
✎
15:57
|
ОБъединение все работает
Хочется сделать лучше |
|||
4
Начинающий_13
08.08.12
✎
15:57
|
А подменить не могу пока
|
|||
5
H A D G E H O G s
08.08.12
✎
15:57
|
Нетленка штоле?
Нуеена. Юзайте Временные таблицы и параметры ВТ |
|||
6
DrShad
08.08.12
✎
15:58
|
для оптимизации предложу выкинуть все и написать заново
|
|||
7
Начинающий_13
08.08.12
✎
15:58
|
(5) Да Переделываю постеменно все в более хорошее состояние
|
|||
8
Нуф-Нуф
08.08.12
✎
15:59
|
ужаснах
|
|||
9
Начинающий_13
08.08.12
✎
15:59
|
Хорошо с ВТ попробую
|
|||
10
DrShad
08.08.12
✎
16:00
|
(9) ждем-с новый перл
|
|||
11
Начинающий_13
08.08.12
✎
16:01
|
Не так быстро
|
|||
12
DrShad
08.08.12
✎
16:03
|
да я подожду, ты не спеши
|
|||
13
Начинающий_13
08.08.12
✎
16:04
|
А что только больше нет других способов
|
|||
14
Fragster
гуру
08.08.12
✎
16:04
|
Лучше вместо
| Документ.ТМЦ_ПоступлениеВозврат."+ ИмяТЧ +" КАК ДокТЧ Написать | &_ИмяТЧ КАК ДокТЧ И перед выполнением сделать Запрос.Текст = СтрЗаменить(Запрос.Текст, "&_ИмяТЧ", "Документ.ТМЦ_ПоступлениеВозврат."+ ИмяТЧ); |
|||
15
DrShad
08.08.12
✎
16:05
|
(13) в (6) я предложил иной способ
|
|||
16
Fragster
гуру
08.08.12
✎
16:05
|
это к вопросу о рваных текстах запроса
|
|||
17
France
08.08.12
✎
16:05
|
как всегда, интересно, для чего сия функция нужна?? автор, может расскажешь =- а там и оптимизаторы подтянутся
|
|||
18
Fragster
гуру
08.08.12
✎
16:06
|
а вообще - сначала сделать соединение, а потом отбор, который 99,999% данных отбросит - это сильно
|
|||
19
DrShad
08.08.12
✎
16:06
|
(17) называется КонтрольОстатков, но по сути никуя не контролирует
|
|||
20
Нуф-Нуф
08.08.12
✎
16:06
|
(14) +1
а то потом эти рваные запросы заипешься переписывать |
|||
21
Fragster
гуру
08.08.12
✎
16:06
|
в данном конкретнос случае - надо выгрузить ТЧ в ТЗ, запихать ее в запрос безо всяких определений и замен имен таблиц
|
|||
22
Fragster
гуру
08.08.12
✎
16:07
|
в смысл запроса - не смотрел
|
|||
23
Начинающий_13
08.08.12
✎
16:08
|
(21) Спасибо еще за совет попробую
(18) А что с соединением не так |
|||
24
DrShad
08.08.12
✎
16:10
|
(23) так может все таки объяснишь что за контроль, который ничего не контролирует
|
|||
25
Fragster
гуру
08.08.12
✎
16:11
|
(23) там ВСЕ не так...
|
|||
26
Fragster
гуру
08.08.12
✎
16:12
|
если оно сейчас работает - я даже не представляю, насколько медленно. не говоря уже о (24)
|
|||
27
Начинающий_13
08.08.12
✎
16:12
|
Я давно когда писал все делал по урокам и книгам
|
|||
28
Начинающий_13
08.08.12
✎
16:13
|
сейчас напного больше понимаю потому и пытаюсь переделать
|
|||
29
olegves
08.08.12
✎
16:13
|
(0) а может лучше сделать регистр накопления и перепровести все документы?
там контроль остатков как 2 байта записать |
|||
30
DrShad
08.08.12
✎
16:13
|
(28) спорное утверждение
|
|||
31
Fragster
гуру
08.08.12
✎
16:15
|
просто можно принять простые правила:
- никогда не делай соединение с виртуальными таблицами (если это возможно, например в произвольных запросах ДС - невозможно :() - как можно раньше ограничивай данные - ИСПОЛЬЗУЙ ПАРАМЕТРЫ ВИРТУАЛЬНЫХ ТАБЛИЦ (!!!) |
|||
32
Fragster
гуру
08.08.12
✎
16:15
|
вообще, конечно, правил намного больше, да и главное в них - понимать, почему так, и как на самом деле это все работает, но вот эти три можешь просто запомнить
|
|||
33
Начинающий_13
08.08.12
✎
16:17
|
Потому и задаю вопросы потому что иногда надо направить на пусть истинный и знания тогда быстрее приходят
|
|||
34
Начинающий_13
08.08.12
✎
16:17
|
Спасибо за советы.
|
|||
35
zzhiraf
08.08.12
✎
16:25
|
(18) Почему ты думаешь, что скл-сервер сначала сделает соединение, а потом отбор?
|
|||
36
Fragster
гуру
08.08.12
✎
16:28
|
(35) в данном случае я не уверен, что он настолько умный, тем более, что там 2 вложенных соединения, каждое из которых является сложным вложенным запросом с объединениями и соединениями
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |