Имя: Пароль:
1C
1С v8
Запрос выполняется 4 часа. Как оптимизировать?
0 imtade2
 
15.07.13
19:07
ВЫБРАТЬ
   ВложенныйЗапрос.Контрагент КАК Контрагент,
   ВложенныйЗапрос.ДатаСменыМанагера,
   КонтрагентыПериодическиеРеквизиты.Значение КАК Значение,
   ВложенныйЗапрос.Счет КАК Счет,
   ВложенныйЗапрос.ДатаСчета,
   ПокупателиОстаткиИОбороты.НеОплаченоРасход КАК НеОплаченоРасход,
   ПокупателиОстаткиИОбороты.НеОплаченоНачальныйОстаток КАК НеОплаченоНачальныйОстаток,
   ПокупателиОстаткиИОбороты.СЗ.СуммаВсего КАК СЗСуммаВсего,
   СчетЗаказТовары.НомерСтроки КАК НомерСтроки,
   СчетЗаказТовары.Товар,
   СчетЗаказТовары.Количество,
   СчетЗаказТовары.ЕдИзм,
   СчетЗаказТовары.Коэффициент,
   СчетЗаказТовары.Цена,
   СчетЗаказТовары.Сумма,
   СчетЗаказТовары.СтавкаНДС,
   СчетЗаказТовары.СуммаНДС,
   СчетЗаказТовары.Всего,
   0 КАК УжеОплачено,
   0 КАК Оплачено,
   0 КАК ВсегоВЦенах,
   0 КАК Маржа,
   СчетЗаказТовары.Спецификация,
   "                      " КАК ЕстьЦены
ИЗ
   РегистрНакопления.Покупатели.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ) КАК ПокупателиОстаткиИОбороты
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           КонтрагентыПериодическиеРеквизиты.Ссылка КАК Контрагент,
           МАКСИМУМ(КонтрагентыПериодическиеРеквизиты.Дата) КАК ДатаСменыМанагера,
           СчетЗаказ.Ссылка КАК Счет,
           СчетЗаказ.Дата КАК ДатаСчета
       ИЗ
           Справочник.Контрагенты.ПериодическиеРеквизиты КАК КонтрагентыПериодическиеРеквизиты
               ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетЗаказ КАК СчетЗаказ
               ПО КонтрагентыПериодическиеРеквизиты.Дата <= СчетЗаказ.Дата
       ГДЕ
           (КонтрагентыПериодическиеРеквизиты.Ссылка В (&Контрагенты)
                   ИЛИ &ВсеКонтрагенты)
           И КонтрагентыПериодическиеРеквизиты.Имя = "Менеджер"
           И (КонтрагентыПериодическиеРеквизиты.Значение В (&Менеджеры)
                   ИЛИ &ВсеМенеджеры)
       
       СГРУППИРОВАТЬ ПО
           СчетЗаказ.Ссылка,
           КонтрагентыПериодическиеРеквизиты.Ссылка,
           СчетЗаказ.Дата) КАК ВложенныйЗапрос
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты.ПериодическиеРеквизиты КАК КонтрагентыПериодическиеРеквизиты
           ПО (КонтрагентыПериодическиеРеквизиты.Ссылка = ВложенныйЗапрос.Контрагент)
               И (КонтрагентыПериодическиеРеквизиты.Дата = ВложенныйЗапрос.ДатаСменыМанагера)
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетЗаказ.Товары КАК СчетЗаказТовары
           ПО ВложенныйЗапрос.Счет = СчетЗаказТовары.Ссылка
       ПО ПокупателиОстаткиИОбороты.СЗ = ВложенныйЗапрос.Счет
ГДЕ
   КонтрагентыПериодическиеРеквизиты.Имя = "Менеджер"
   И ПокупателиОстаткиИОбороты.НеОплаченоРасход > 0

УПОРЯДОЧИТЬ ПО
   Значение,
   Контрагент,
   Счет,
   НомерСтроки
ИТОГИ
   МАКСИМУМ(НеОплаченоРасход),
   МАКСИМУМ(НеОплаченоНачальныйОстаток),
   МАКСИМУМ(СЗСуммаВсего)
ПО
   Значение,
   Контрагент,
   Счет
1 H A D G E H O G s
 
15.07.13
19:08
Взять и переписать
2 Armando
 
15.07.13
19:12
соединение со вложенным запросом детектед

Для начала переписать с использованием временной таблицы.
3 H A D G E H O G s
 
15.07.13
19:12
(0) СрезПоследних реализуй через ВТ-шечку.
4 H A D G E H O G s
 
15.07.13
19:13
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетЗаказ КАК СчетЗаказ
               ПО КонтрагентыПериодическиеРеквизиты.Дата <= СчетЗаказ.Дата

Тоже херня.
5 Armando
 
15.07.13
19:13
И не забывать эффективно использовать индексы
6 ILM
 
гуру
15.07.13
19:14
Сделай пакет:
1. Контрагент и периодические реквизиты в темп1
2. Счета и контрагенты в темп2
3. Обороты продаж с условиями в темп3
4. А вот тут выбирай все что нужно во временную таблицу темп 4 из 1-2-3.
5. Итоги и т.д. по темп4

Вангую будет 5 минут, или 2 секунды, если ограничишь число записей.
7 H A D G E H O G s
 
15.07.13
19:14
ПО ПокупателиОстаткиИОбороты.СЗ = ВложенныйЗапрос.Счет

Воткнуть в параметры Виртуальной, из временной, предварительно созданной.
8 H A D G E H O G s
 
15.07.13
19:15
(5) Бугага.
Спасибо, рассмешил.
9 Fragster
 
гуру
15.07.13
19:15
переделать на построитель такие вещи:

           (КонтрагентыПериодическиеРеквизиты.Ссылка В (&Контрагенты)
                   ИЛИ &ВсеКонтрагенты)
           И КонтрагентыПериодическиеРеквизиты.Имя = "Менеджер"
           И (КонтрагентыПериодическиеРеквизиты.Значение В (&Менеджеры)
                   ИЛИ &ВсеМенеджеры)
10 Fragster
 
гуру
15.07.13
19:15
вообще (1) прав
11 ILM
 
гуру
15.07.13
19:17
Весь запрос напомнил мне Клиппер/ДБейс из 80-х, с их вечной INDEX ON и т.д.
12 wertyu
 
15.07.13
19:23
манагера надо вообще в документ
13 H A D G E H O G s
 
15.07.13
19:24
(9) Это как раз нормально
14 Armando
 
15.07.13
19:52
(8) поясни
15 Лефмихалыч
 
15.07.13
20:08
(0) соединения с вложенными запросами зело не рекомендуются до тех пор, пока экспериментально не доказано, что так быстрее
16 ilya_i
 
15.07.13
20:13
Справочник.Контрагенты.ПериодическиеРеквизиты КАК КонтрагентыПериодическиеРеквизиты
               ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетЗаказ КАК СчетЗаказ
               ПО КонтрагентыПериодическиеРеквизиты.Дата <= СчетЗаказ.Дата
17 ilya_i
 
15.07.13
20:13
явно не хватает соединения по контрагенту
18 Inform
 
15.07.13
20:45
Попробуй (отладить не на чем, проверить тоже, на свой страх и риск):

ВЫБРАТЬ
   КонтрагентыПериодическиеРеквизиты.Ссылка КАК Контрагент,
   КонтрагентыПериодическиеРеквизиты.Дата КАК Дата,
   КонтрагентыПериодическиеРеквизиты.Значение
ПОМЕСТИТЬ ВТ_ДополнительныеРеквизитыКонтрагентов
ИЗ
   Справочник.Контрагенты.ПериодическиеРеквизиты КАК КонтрагентыПериодическиеРеквизиты
ГДЕ
   (КонтрагентыПериодическиеРеквизиты.Ссылка В (&Контрагенты)
           ИЛИ &ВсеКонтрагенты)
   И КонтрагентыПериодическиеРеквизиты.Имя = "Менеджер"
   И (КонтрагентыПериодическиеРеквизиты.Значение В (&Менеджеры)
           ИЛИ &ВсеМенеджеры)

ИНДЕКСИРОВАТЬ ПО
   Контрагент,
   Дата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   СчетЗаказ.Ссылка КАК Счет,
   СчетЗаказ.Дата КАК ДатаСчета,
   ВТ_ДополнительныеРеквизитыКонтрагентов.Контрагент КАК Контрагент,
   МАКСИМУМ(ВТ_ДополнительныеРеквизитыКонтрагентов.Дата) КАК ДатаСменыМенеджера,
   МАКСИМУМ(СчетЗаказ.СуммаВсего) КАК СуммаВсего
ПОМЕСТИТЬ ВТ_ДатыСменыМенеджеров
ИЗ
   Документ.СчетЗаказ КАК СчетЗаказ
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ДополнительныеРеквизитыКонтрагентов КАК ВТ_ДополнительныеРеквизитыКонтрагентов
       ПО СчетЗаказ.Контрагент = ВТ_ДополнительныеРеквизитыКонтрагентов.Контрагент
           И СчетЗаказ.Дата >= ВТ_ДополнительныеРеквизитыКонтрагентов.Дата

СГРУППИРОВАТЬ ПО
   СчетЗаказ.Ссылка,
   СчетЗаказ.Дата,
   ВТ_ДополнительныеРеквизитыКонтрагентов.Контрагент

ИНДЕКСИРОВАТЬ ПО
   Контрагент,
   ДатаСменыМенеджера
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВТ_ДатыСменыМенеджеров.Счет КАК Счет,
   ВТ_ДатыСменыМенеджеров.ДатаСчета,
   ВТ_ДатыСменыМенеджеров.Контрагент КАК Контрагент,
   ВТ_ДатыСменыМенеджеров.ДатаСменыМенеджера,
   ВТ_ДополнительныеРеквизитыКонтрагентов.Значение КАК ТекущийМенеджер,
   ВТ_ДатыСменыМенеджеров.СуммаВсего
ПОМЕСТИТЬ ВТ_ТекущиеМенеджерыПоКонтрагентам
ИЗ
   ВТ_ДатыСменыМенеджеров КАК ВТ_ДатыСменыМенеджеров
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ДополнительныеРеквизитыКонтрагентов КАК ВТ_ДополнительныеРеквизитыКонтрагентов
       ПО ВТ_ДатыСменыМенеджеров.Контрагент = ВТ_ДополнительныеРеквизитыКонтрагентов.Контрагент
           И ВТ_ДатыСменыМенеджеров.ДатаСменыМенеджера = ВТ_ДополнительныеРеквизитыКонтрагентов.Дата

ИНДЕКСИРОВАТЬ ПО
   Счет,
   Контрагент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ПокупателиОстаткиИОбороты.Контрагент,
   ПокупателиОстаткиИОбороты.СЗ,
   СУММА(ПокупателиОстаткиИОбороты.НеОплаченоРасход) КАК НеОплаченоРасход,
   СУММА(ПокупателиОстаткиИОбороты.НеОплаченоНачальныйОстаток) КАК НеОплаченоНачальныйОстаток
ПОМЕСТИТЬ ВТ_ПокупателиОстаткиИОбороты
ИЗ
   РегистрНакопления.Покупатели.ОстаткиИОбороты(
           &ДатаНач,
           &ДатаКон,
           ,
           ,
           (Контрагент, СЗ) В
               (ВЫБРАТЬ РАЗЛИЧНЫЕ
                   ВТ_ТекущиеМенеджерыПоКонтрагентам.Контрагент,
                   ВТ_ТекущиеМенеджерыПоКонтрагентам.Счет
               ИЗ
                   ВТ_ТекущиеМенеджерыПоКонтрагентам)) КАК ПокупателиОстаткиИОбороты
ГДЕ
   ПокупателиОстаткиИОбороты.НеОплаченоРасход > 0

СГРУППИРОВАТЬ ПО
   ПокупателиОстаткиИОбороты.СЗ,
   ПокупателиОстаткиИОбороты.Контрагент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   СчетЗаказТовары.Ссылка,
   СчетЗаказТовары.НомерСтроки,
   СчетЗаказТовары.Товар,
   СчетЗаказТовары.Количество,
   СчетЗаказТовары.ЕдИзм,
   СчетЗаказТовары.Коэффициент,
   СчетЗаказТовары.Цена,
   СчетЗаказТовары.Сумма,
   СчетЗаказТовары.СтавкаНДС,
   СчетЗаказТовары.СуммаНДС,
   СчетЗаказТовары.Всего,
   СчетЗаказТовары.Спецификация
ПОМЕСТИТЬ ВТ_ТоварыСчетовЗаказов
ИЗ
   Документ.СчетЗаказ.Товары КАК СчетЗаказТовары
ГДЕ
   СчетЗаказТовары.Ссылка В
           (ВЫБРАТЬ РАЗЛИЧНЫЕ
               ВТ_ТекущиеМенеджерыПоКонтрагентам.Счет
           ИЗ
               ВТ_ТекущиеМенеджерыПоКонтрагентам)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВТ_ПокупателиОстаткиИОбороты.Контрагент,
   ВТ_ПокупателиОстаткиИОбороты.СЗ,
   ВТ_ПокупателиОстаткиИОбороты.НеОплаченоРасход,
   ВТ_ПокупателиОстаткиИОбороты.НеОплаченоНачальныйОстаток,
   ВТ_ТекущиеМенеджерыПоКонтрагентам.ДатаСчета,
   ВТ_ТекущиеМенеджерыПоКонтрагентам.ДатаСменыМенеджера,
   ВТ_ТекущиеМенеджерыПоКонтрагентам.ТекущийМенеджер,
   ВТ_ТекущиеМенеджерыПоКонтрагентам.СуммаВсего,
   ВТ_ТоварыСчетовЗаказов.Ссылка,
   ВТ_ТоварыСчетовЗаказов.НомерСтроки,
   ВТ_ТоварыСчетовЗаказов.Товар,
   ВТ_ТоварыСчетовЗаказов.Количество,
   ВТ_ТоварыСчетовЗаказов.ЕдИзм,
   ВТ_ТоварыСчетовЗаказов.Коэффициент,
   ВТ_ТоварыСчетовЗаказов.Цена,
   ВТ_ТоварыСчетовЗаказов.Сумма,
   ВТ_ТоварыСчетовЗаказов.СтавкаНДС,
   ВТ_ТоварыСчетовЗаказов.СуммаНДС,
   ВТ_ТоварыСчетовЗаказов.Всего,
   ВТ_ТоварыСчетовЗаказов.Спецификация
ИЗ
   ВТ_ПокупателиОстаткиИОбороты КАК ВТ_ПокупателиОстаткиИОбороты
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТекущиеМенеджерыПоКонтрагентам КАК ВТ_ТекущиеМенеджерыПоКонтрагентам
       ПО ВТ_ПокупателиОстаткиИОбороты.СЗ = ВТ_ТекущиеМенеджерыПоКонтрагентам.Счет
           И ВТ_ПокупателиОстаткиИОбороты.Контрагент = ВТ_ТекущиеМенеджерыПоКонтрагентам.Контрагент
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТоварыСчетовЗаказов КАК ВТ_ТоварыСчетовЗаказов
       ПО ВТ_ПокупателиОстаткиИОбороты.СЗ = ВТ_ТоварыСчетовЗаказов.Ссылка
19 Inform
 
15.07.13
20:46
+(18) добавь Индекс по полю Ссылка в пакет "ВТ_ТоварыСчетовЗаказов"
AdBlock убивает бесплатный контент. 1Сергей