Имя: Пароль:
1C
1С v8
помогите с запросом!
0 mzelensky
 
22.03.12
09:47
Доброго времени суток!

Уже очень долго бьюсь над одним запросом (ниже приведу его часть):

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

Запрос выполняется ОЧЕНЬ ДОЛГО!!! При этом если убрать из него "Документ.ЗаказПокупателя КАК Док_ЗаказПокупателя" (первые редакции запроса были без него), то отрабатывает все довольно шустренько, но сейчас стоит задача вытащить "Ответственного по заказу". Вытаскивать ответственного просто из "ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка.Ответственный" не позволяет Скул - превышение количества таблиц. В результате пришлось переписать на ЭТО...но что-то ума дать не могу...
1 golden-pack
 
22.03.12
09:49
ВЫРАЗИТЬ ()
2 mzelensky
 
22.03.12
09:51
(1) выразить кого?
3 golden-pack
 
22.03.12
09:56
"ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка.Ответственный" не позволяет Скул - превышение количества таблиц
4 hhhh
 
22.03.12
09:58
(2) ну вместо

ГДЕ

  ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом ССЫЛКА Документ.РеализацияТоваровУслуг
  И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка ССЫЛКА Документ.ЗаказПокупателя

написать

НЕ (ВЫРАЗИТЬ(ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК Документ.РеализацияТоваровУслуг
).Сделка КАК Документ.ЗаказПокупателя) ЕСТЬ NULL)
5 Rovan
 
гуру
22.03.12
09:58
вместо
ПО РеализацияТоваровУслуг.Сделка.Ссылка = Док_ЗаказПокупателя.Ссылка

нельзя ли
ПО РеализацияТоваровУслуг.Ссылка = Док_ЗаказПокупателя.Ссылка
6 mzelensky
 
22.03.12
10:00
(5) И ЧТО ЭТО БУДЕТ??? Как реализация может быть равна заказу?
7 golden-pack
 
22.03.12
10:00
(6) ну ты и лол

ПО РеализацияТоваровУслуг.Сделка = Док_ЗаказПокупателя.Ссылка
8 Rovan
 
гуру
22.03.12
10:01
(+5) тфу!!

вместо
ПО РеализацияТоваровУслуг.Сделка.Ссылка = Док_ЗаказПокупателя.Ссылка

нельзя ли
ПО РеализацияТоваровУслуг.Сделка = Док_ЗаказПокупателя.Ссылка
9 mzelensky
 
22.03.12
10:01
(4) интересная связка, ща попробую
10 mzelensky
 
22.03.12
10:03
(8) это не принципиально - согласен, что не очень красиво, но на производительность сильно (так сильно) влиять не должно.
11 golden-pack
 
22.03.12
10:04
(10) принципиально
12 Maxus43
 
22.03.12
10:07
(10) составные типы следует приводить к определённому значению. это аксиома. Если не требуется работа со всеми типами из составных
13 mzelensky
 
22.03.12
10:07
(4) чуток быстрее стало, но все-равно медленнее, чем было без "Документ.ЗаказПокупателя"
14 mzelensky
 
22.03.12
10:08
(12) приводить через "ВЫРАЗИТЬ", как в (4) ?
15 Maxus43
 
22.03.12
10:09
(14) без Выразить тянет столько таблиц, сколько типов. с выразить - конкретную таблицу. отсюда и ошибка была что слишком много таблиц
16 mzelensky
 
22.03.12
10:12
(15) ща попробую переделать первоначальный вариант на  "ВЫРАЗИТЬ"
17 ptrtss
 
22.03.12
10:15
ВЫБРАТЬ
   Док_ЗаказПокупателя.Ответственный КАК МенеджерКС,
   ОстаткиРасчетов.Контрагент КАК Контрагент,
   ОстаткиРасчетов.ДоговорКонтрагента КАК ДоговорКонтрагента,
   РеализацияТоваровУслуг.СуммаДокумента
ИЗ
   РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(
           &ДатаНач,
           ДокументРасчетовСКонтрагентом ССЫЛКА Документ.РеализацияТоваровУслуг
               И ДоговорКонтрагента.ВидДоговора = &ВидДоговора) КАК ОстаткиРасчетов
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
       ПО ОстаткиРасчетов.ДокументРасчетовСКонтрагентом = РеализацияТоваровУслуг.Ссылка
           И (РеализацияТоваровУслуг.Проведен)
           И (РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаКонца)
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК Док_ЗаказПокупателя
       ПО (РеализацияТоваровУслуг.Сделка = Док_ЗаказПокупателя.Ссылка)
           И (Док_ЗаказПокупателя.Проведен)
           И (Док_ЗаказПокупателя.Ответственный.ФизЛицо В (&ССотр))
           И (Док_ЗаказПокупателя.Дата МЕЖДУ &ДатаНачала И &ДатаКонца)
ГДЕ
   ОстаткиРасчетов.СуммаВзаиморасчетовОстаток > 0
18 ptrtss
 
22.03.12
10:15
(17) В таком духе
19 mzelensky
 
22.03.12
10:30
Переделал все на "Выразить" и полностью убрал "Документ.ЗаказПокупателя" и "Документ.РеализацияТоваровУслуг" - теперь отрабатывает все супер :)

Спасибо всем!