Имя: Пароль:
1C
1С v8
Оптимизация запроса (документы с несколькими доп. реквизитами)
0 Mefistophel
 
25.03.13
12:04
Доброго дня. Есть острое желание получить таблицу, содержащую: ссылку на документ, сумму по строкам документа, и 2 доп. реквизита (которые через планы видов характеристик в стандартном функционале БП, например, реализованы) причем реквизиты имеют разные типы и видеть их хочется в разных колонках, дабы получить итоговые суммы именно по ним.
Что я для этого делаю:

ВЫБРАТЬ
ВложенныйЗапрос.Объект КАК Объект,
ВложенныйЗапрос.ПодразделениеЗатрат КАК ПодразделениеЗатрат,
ВложенныйЗапрос1.Значение КАК Значение
ИЗ
(ВЫБРАТЬ
ЗначенияСвойствОбъектов.Объект КАК Объект,
ЗначенияСвойствОбъектов.Значение КАК ПодразделениеЗатрат
ИЗ
РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
ЗначенияСвойствОбъектов.Свойство = &СвойствоЗдания
И ЗначенияСвойствОбъектов.Объект.Дата МЕЖДУ &НачПериода И &КонПериода) КАК ВложенныйЗапрос
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
 ЗначенияСвойствОбъектов.Объект КАК Объект,
 ЗначенияСвойствОбъектов.Значение КАК Значение
 ИЗ
 РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
 ГДЕ
 ЗначенияСвойствОбъектов.Свойство = &СвойствоСтатья
 И ЗначенияСвойствОбъектов.Объект.Дата МЕЖДУ &НачПериода И &КонПериода) КАК ВложенныйЗапрос1
ПО ВложенныйЗапрос.Объект.Ссылка = ВложенныйЗапрос1.Объект.Ссылка

а потом это все через левое соединение приписывается к движениям по хозрасчетному

приведенная часть отрабатывает очень долго и отжирает немало памяти притом. Я пытался максимально упростить условия, пытался вынести все в отдельну табличку - не помогло. Может кто подскажет как можно это красивее переделать\доделать?
1 Maxus43
 
25.03.13
12:13
а обязательно все объекты тянуть? тяни нужные
2 H A D G E H O G s
 
25.03.13
12:14
Убить ап стену.
3 Maxus43
 
25.03.13
12:15
пакетные запросы наше всё. Соединение с вложенными не есть добро как правило
4 H A D G E H O G s
 
25.03.13
12:15
Объект.Дата

Феерия смеха и звука.

Да еще во вложенном.
5 H A D G E H O G s
 
25.03.13
12:15
(3) Там скорее
Объект.Дата
6 Maxus43
 
25.03.13
12:16
(5) увидел. да, 100% он, но и таки соединение с вложенными тоэ не гуд
7 kosts
 
25.03.13
12:18
(0) ВложенныйЗапрос.Объект.Ссылка - Объект это и так ссылка, не нужно получать ссылку ссылки
8 Mefistophel
 
25.03.13
12:18
эммм.. по поводу даты - это было отчаяние, и без него все печально, забыл подтереть, да.
9 kosts
 
25.03.13
12:20
(0) ПО ВложенныйЗапрос.Объект.Ссылка = ВложенныйЗапрос1.Объект.Ссылка

Это тоже глупо, если не существует одного значения, то второе исчезнет и не получишь ни одного...
10 H A D G E H O G s
 
25.03.13
12:20
А прикиньте, вот таким вот пацанам дали бы update и truncate всякий.
11 H A D G E H O G s
 
25.03.13
12:22
(0) Что за тип документа?
12 kosts
 
25.03.13
12:24
(0) ЗначенияСвойствОбъектов для каждого документа имеет одно значение определенного свойства. По этому нет смысла делать что-то во вложенных или временных запросах. Правильно присоединяй значения свойств к своим документам и усё будет тип-топ.
13 H A D G E H O G s
 
25.03.13
12:27
ВЫБРАТЬ
   РеализацияТоваровУслугТовары.Ссылка,
   СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма
ПОМЕСТИТЬ СуммыДокументов
ИЗ
   Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
   РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца

СГРУППИРОВАТЬ ПО
   РеализацияТоваровУслугТовары.Ссылка
;

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

СГРУППИРОВАТЬ ПО
   ЗначенияСвойствОбъектов.Объект
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Свойства.Объект,
   Свойства.Статья,
   Свойства.Здание,
   СуммыДокументов.Сумма
ИЗ
   СуммыДокументов КАК СуммыДокументов
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Свойства КАК Свойства
       ПО СуммыДокументов.Ссылка = Свойства.Объект
14 H A D G E H O G s
 
25.03.13
12:29
Ну или Левое в последнем запросе, если хочется документы.
15 Maxus43
 
25.03.13
12:31
(14) или просто соеденить без использования ВТ, как в (12).
Надо сравнить ещё скорость бы
16 H A D G E H O G s
 
25.03.13
12:35
(15) Скорость норм.
17 H A D G E H O G s
 
25.03.13
12:35
Автор, ну ты че там?
18 Maxus43
 
25.03.13
12:37
(16) сравнил? без ВТ который
19 H A D G E H O G s
 
25.03.13
12:38
(18) Мне - лениво.
20 H A D G E H O G s
 
25.03.13
12:39
У меня нет базы со свойствами к документам, а там, где тестировал - выполнилось за 3 секунды и вывело 51к документов с суммами из 71к.
21 Mefistophel
 
25.03.13
12:40
(11) несколько
(17) отвлекли, сейчас гляну, спасибо
22 Mefistophel
 
25.03.13
12:43
(9) в этом вся соль. нужно получить суммы по тем, где все (оба доп. реквизита) заполнено, чтобы остальные документы хм... выделялись из общей массы.
23 H A D G E H O G s
 
25.03.13
12:46
(22) Почему это выясняется к 22 посту?
24 Mefistophel
 
25.03.13
12:47
(23) вообще в (0) написано было:
причем реквизиты имеют разные типы и видеть их хочется в разных колонках, дабы получить итоговые суммы именно по ним
25 H A D G E H O G s
 
25.03.13
12:55
(24) Ну так все есть в (13), доп. документы добавь в 1 запрос объедитнением.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший