Имя: Пароль:
1C
1С v8
Помогите с оптимизацией. запрос вешается на 30 минут
0 LehhaK
 
17.10.12
07:17
Собственно, вроде все просто, НО он одну запись ищет 30 минут. Записей - 7000. ЧЯДНТ?! О_о
Запрос:
ВЫБРАТЬ ПЕРВЫЕ 1
              |    ИнформационныеКарты.Наименование,
              |    ИнформационныеКарты.ВладелецКарты,
              |    ИнформационныеКарты.КодКарты,
              |    Контрагенты.бон_ДатаРождения КАК ДатаРождения,
              |    Контрагенты.бон_ПочтовыйАдрес КАК ПочтовыйАдрес,
              |    Контрагенты.бон_Телефон КАК Телефон,
              |    НакоплениеБонусовОстаткиИОбороты.СуммаКонечныйОстаток,
              |    МИНИМУМ(НакоплениеБонусов.Период) КАК Период,
              |    МАКСИМУМ(НакоплениеБонусов.Период) КАК Период1
              |ИЗ
              |    Справочник.ИнформационныеКарты КАК ИнформационныеКарты
              |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
              |        ПО ИнформационныеКарты.ВладелецКарты = Контрагенты.Ссылка
              |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НакоплениеБонусов.ОстаткиИОбороты КАК НакоплениеБонусовОстаткиИОбороты
              |        ПО ИнформационныеКарты.Ссылка = НакоплениеБонусовОстаткиИОбороты.БонуснаяКарта.Ссылка
              |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НакоплениеБонусов КАК НакоплениеБонусов
              |        ПО ИнформационныеКарты.Ссылка = НакоплениеБонусов.БонуснаяКарта.Ссылка
              |ГДЕ
              |    ИнформационныеКарты.ПометкаУдаления = ЛОЖЬ
              |    И ИнформационныеКарты.ЭтоГруппа = ЛОЖЬ
              |    И Контрагенты.ЭтоГруппа = ЛОЖЬ
              |    И Контрагенты.ПометкаУдаления = ЛОЖЬ
              |    И ИнформационныеКарты.ТипКарты = &ТипКарты
              |    И ИнформационныеКарты.ВидДисконтнойКарты = &ВидДисконтнойКарты
              |
              |СГРУППИРОВАТЬ ПО
              |    ИнформационныеКарты.Наименование,
              |    ИнформационныеКарты.ВладелецКарты,
              |    ИнформационныеКарты.КодКарты,
              |    Контрагенты.бон_ДатаРождения,
              |    Контрагенты.бон_ПочтовыйАдрес,
              |    Контрагенты.бон_Телефон,
              |    НакоплениеБонусовОстаткиИОбороты.СуммаКонечныйОстаток
1 Галахад
 
гуру
17.10.12
07:22
Красота, а не запрос.
2 LehhaK
 
17.10.12
07:23
(1) как умею :) что не так?
3 Галахад
 
гуру
17.10.12
07:24
Задачу опиши.
4 LehhaK
 
17.10.12
07:25
(3) Ну, собсна, выбрать все данные по владельцу карты и получить первую и последнюю запись в регистре накопления по данному персонажу
5 Armando
 
17.10.12
07:25
НакоплениеБонусов.БонуснаяКарта.Ссылка ???
Пеши НакоплениеБонусов.БонуснаяКарта
6 LehhaK
 
17.10.12
07:28
(5) Сделал:
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НакоплениеБонусов.ОстаткиИОбороты КАК НакоплениеБонусовОстаткиИОбороты
              |        ПО ИнформационныеКарты.Ссылка = НакоплениеБонусовОстаткиИОбороты.БонуснаяКарта
              |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НакоплениеБонусов КАК НакоплениеБонусов
              |        ПО ИнформационныеКарты.Ссылка = НакоплениеБонусов.БонуснаяКарта

Чем ссылка хуже?
7 ZanderZ
 
17.10.12
07:32
зачем ОстаткиИОбороты ? сделай сумма
8 LehhaK
 
17.10.12
07:35
(7) а зачем его вычислять, если оно есть в готовом виде?
9 ZanderZ
 
17.10.12
07:36
(8) затем что от одно соединения избавишься - лишние данные
10 LehhaK
 
17.10.12
07:37
(9) Ок. Запилил вот так:
|    МИНИМУМ(НакоплениеБонусов.Период) КАК Период,
              |    МАКСИМУМ(НакоплениеБонусов.Период) КАК Период1,
              |    СУММА(НакоплениеБонусов.Сумма) КАК Сумма
              |ИЗ
              |    Справочник.ИнформационныеКарты КАК ИнформационныеКарты
              |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
              |        ПО ИнформационныеКарты.ВладелецКарты = Контрагенты.Ссылка
              |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НакоплениеБонусов КАК НакоплениеБонусов
              |        ПО ИнформационныеКарты.Ссылка = НакоплениеБонусов.БонуснаяКарта
11 LehhaK
 
17.10.12
07:38
правильно?
12 playmaker
 
17.10.12
07:40
А зачем контрагентов присоединяешь? Что мешает сделать "ИнформационныеКарты.ВладелецКарты.бон_ДатаРождения КАК ДатаРождения"?
13 ZanderZ
 
17.10.12
07:41
(11) типа того, если нет движения в НакоплениеБонусов нужны данные или нет ?
14 LehhaK
 
17.10.12
07:48
(12) Как вы это далаете?!! О_о
(13) нет, не нужны, но ты уже скажи как делать - пригодится)))
15 playmaker
 
17.10.12
07:52
(14) Что "это"?
Нахрена тебе и информационные карты присоединять? Бери регистр накопления "НакоплениеБонусов" и вытаскивай все оттуда, безо всяких соединений, как в (10).
16 ZanderZ
 
17.10.12
07:55
(14) ну тогда основная таблица должна быть РегистрНакопления.НакоплениеБонусов
17 zak555
 
17.10.12
07:56
> Ну, собсна, выбрать все данные по владельцу карты и получить первую и последнюю запись в регистре накопления по данному персонажу


и что тебе это даст ?
18 LehhaK
 
17.10.12
08:06
(17) счастье даст
(15),(16) я пошел суициднусь - не расходитесь пока. Как мне теперь отбор по Минимум сделать?
|ИМЕЮЩИЕ
              |    МИНИМУМ(НакоплениеБонусов.Период) МЕЖДУ &НачальныйПериод И &КонечныйПериод";
почему то пустую таблицу выдает
19 Галахад
 
гуру
17.10.12
08:08
Наверное таблица виртуальная и не указана периодичность.
20 LehhaK
 
17.10.12
08:09
нет виртуальной таблицы. вот так теперь запрос выглядит: ВЫБРАТЬ
              |    МИНИМУМ(НакоплениеБонусов.Период) КАК Период,
              |    МАКСИМУМ(НакоплениеБонусов.Период) КАК Период1,
              |    СУММА(НакоплениеБонусов.Сумма) КАК Сумма,
              |    НакоплениеБонусов.БонуснаяКарта.Наименование КАК Наименование,
              |    НакоплениеБонусов.БонуснаяКарта.ВладелецКарты КАК ВладелецКарты,
              |    НакоплениеБонусов.БонуснаяКарта.КодКарты КАК КодКарты
              |ИЗ
              |    РегистрНакопления.НакоплениеБонусов КАК НакоплениеБонусов
              |
              |СГРУППИРОВАТЬ ПО
              |    НакоплениеБонусов.БонуснаяКарта.Наименование,
              |    НакоплениеБонусов.БонуснаяКарта.ВладелецКарты,
              |    НакоплениеБонусов.БонуснаяКарта.КодКарты
              |
              |ИМЕЮЩИЕ
              |    МИНИМУМ(НакоплениеБонусов.Период) МЕЖДУ &НачальныйПериод И &КонечныйПериод";
21 LehhaK
 
17.10.12
08:12
Все, починил)) всем спасибо, что прокачали мой запрос!!!