Имя: Пароль:
1C
1С v8
Оптимизация запроса
0 seraf
 
29.11.12
16:15
Привет, как правильно во временную таблицу выбрать только субконто одного типа? Там и так по условию только один возможный. Думаю в этом причина сообщения "Недостаточно памяти" при соединении временной таблицы с другими регистрами

ВЫБРАТЬ
   ХозрасчетныйОстаткиИОбороты.Субконто1
   ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт,
   ХозрасчетныйОстаткиИОбороты.СуммаНУКонечныйОстатокДт,

ПОМЕСТИТЬ ВремТаб
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты КАК ХозрасчетныйОстаткиИОбороты
1 Нуф-Нуф
 
29.11.12
16:15
покажи весь запрос
2 Нуф-Нуф
 
29.11.12
16:15
поржем
3 DrShad
 
29.11.12
16:16
(2) +1
4 Maxus43
 
29.11.12
16:18
РегистрБухгалтерии.Хозрасчетный.Обороты(, , , , &ВидСубконто, , , )
5 Лефмихалыч
 
29.11.12
16:24
+(4) даже если один вид, то так
ОстаткиИОбороты(, , , , , ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура), )
6 seraf
 
29.11.12
16:24
(4) пасиб

(2) это пройдет
7 seraf
 
29.11.12
16:24
(5) ага спасибо
8 Maxus43
 
29.11.12
16:26
(6) тока как это спасёт от ошибки я хз, запрос действительно адский наверно
9 seraf
 
29.11.12
16:30
(8) ну щас проверю, ничего адского просто рег бух и пяток рс
думаю что из-за обилия типов субконто1 вылетает
10 Maxus43
 
29.11.12
16:31
(9) Юзай ВЫРАЗИТЬ, ибо (4)(5) не спасёт от "обилия типов", благо тип один
11 seraf
 
29.11.12
16:31
у меня с 3 гигами оперативы и 16 подкачки по крайней мере 1,7 отъедает и падает
12 seraf
 
29.11.12
16:31
(10) а, попробую
13 Maxus43
 
29.11.12
16:32
(12) 90% что Выразить будет достаточно. хотя не видя весь запрос - трудно судить
14 seraf
 
29.11.12
16:34
а так для справки, хоть и кривой запрос, 1с-ка только оперативу использует, размер подкачки не влияет?

(13) пока не добавил пару соединений еще работал кое-как)
15 seraf
 
29.11.12
16:45
хм, ну запрос конечно с Выразить должен был стать легче, но слетает всё равно
ладно буду копать, может причина техническая
16 Buster007
 
29.11.12
16:48
копай-копай ) может и до соединений докопаешь )
а ваще 1ске пофиг сколько у тебя оперативки)
17 sapphire
 
29.11.12
16:49
(13) Ну-ну. CAST будет применен ко всем записям... т.е. будет seek по таблице
18 sapphire
 
29.11.12
16:51
(0) Для полей составного типа используется
конструкция ССЫЛКА {Имя таблицы ссылочного типа}.
Например, для поля с именем

Субконто1 и номенклатуры выгляделобы так

ГДЕ Субконто1 ССЫЛКА Справочник.Номенклатура
19 Maxus43
 
29.11.12
17:02
(17) давно ли? вчера смотрел я на запросы с ССЫЛКА - скуль делает куеву тучу CASTов в WHERE
20 Maxus43
 
29.11.12
17:02
Запрос в студию полностью, иначе вобще ниочем всё
21 Нуф-Нуф
 
29.11.12
17:03
хоть поржем
22 Maxus43
 
29.11.12
17:07
(21) это пройдёт)
23 seraf
 
29.11.12
17:55
а как тут код в спойлер положить?
24 seraf
 
29.11.12
18:03
ладно так положу
(2, 21) заодно порадую)

ВЫБРАТЬ
   ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.ОсновныеСредства) КАК ОС,
   ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК Сумма1,
   ХозрасчетныйОстаткиИОбороты.СуммаНУКонечныйОстатокДт КАК Сумма2,
   Амортизация.СуммаКонечныйОстатокКт КАК Сумма3,
   Амортизация.СуммаНУКонечныйОстатокКт КАК Сумма4,
   Амортизация.СуммаОборотКт КАК Сумма7,
   Амортизация.СуммаНУОборотКт КАК Сумма6
ПОМЕСТИТЬ ОСТаб
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , , , Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОсновныеСредства)), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ОсновныеСредства), ) КАК ХозрасчетныйОстаткиИОбороты
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , , , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ИзносОсновныхСредств), , ) КАК Амортизация
       ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = Амортизация.Субконто1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.НематериальныеАктивы) КАК НМА,
   ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК Сумма1,
   ХозрасчетныйОстаткиИОбороты.СуммаНУКонечныйОстатокДт КАК Сумма2,
   Амортизация.СуммаКонечныйОстатокКт КАК Сумма3,
   Амортизация.СуммаНУКонечныйОстатокКт КАК Сумма4,
   Амортизация.СуммаОборотКт КАК Сумма5,
   Амортизация.СуммаНУОборотКт КАК Сумма6
ПОМЕСТИТЬ НМАТаб
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , , , Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.НематериальныеАктивы)), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.НематериальныеАктивы), ) КАК ХозрасчетныйОстаткиИОбороты
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , , , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.НакопленнаяАмортизацияНематериальныхАктивов), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.НематериальныеАктивы), ) КАК Амортизация
       ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = Амортизация.Субконто1
;

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   НМАТаб.НМА.Код,
   НМАТаб.НМА.Наименование,
   НМАТаб.НМА
ИЗ
   НМАТаб КАК НМАТаб
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияНМАОрганизаций КАК СостоянияНМАОрганизаций
       ПО НМАТаб.НМА = СостоянияНМАОрганизаций.НематериальныйАктив
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПервоначальныеСведенияНМАБухгалтерскийУчет.СрезПоследних КАК ПервоначальныеСведенияНМАБухгалтерскийУчетСрезПоследних
       ПО НМАТаб.НМА = ПервоначальныеСведенияНМАБухгалтерскийУчетСрезПоследних.НематериальныйАктив,
   РегистрСведений.ПервоначальныеСведенияНМАНалоговыйУчет.СрезПоследних КАК ПервоначальныеСведенияНМАНалоговыйУчетСрезПоследних
25 seraf
 
29.11.12
18:04
вот такое чудо вылетает
26 hhhh
 
29.11.12
18:06
(25) а чего периода нет в виртуальных таблицах? За все года что ли данные перебираешь?
27 Fragster
 
гуру
29.11.12
18:09
кстати только у меня виртуальная таблица ДвиженияССубконто юзает некластерный индекс (без периода) внутрях?
28 Fragster
 
гуру
29.11.12
18:10
8.2.16
29 seraf
 
29.11.12
18:11
(26) период в параметрах скд не явно указывается

я беру остатки и обороты за год
30 seraf
 
29.11.12
18:13
мне пока не очень понятно что в запросе убивает систему.. базу протестировал
31 Fragster
 
гуру
29.11.12
18:15
Счет В ИЕРАРХИИ замени на получение всех счетов во временную таблицу, а ее заюзай параметром в виртуальной.

проиндексируй ОСТаб.ОС и НМАТаб.НМА
32 Нуф-Нуф
 
29.11.12
18:18
В иерархии, соединение с виртуальными таблицами.. ужаснах
33 seraf
 
29.11.12
18:20
сейчас попробую убрать в иерархии, не знал что это так страшно
34 Нуф-Нуф
 
29.11.12
18:23
Посмотришь во что твой запрос превращается на скуле - ваще спать не будешь
35 seraf
 
29.11.12
18:28
ну по соединениям почитал что-то.. выходит нужно вообще убрать соединения с виртуальными таблицами и всё во временные выносить, а уж потом соединяться?

а чем в иерархии плохое условие не понял
36 seraf
 
29.11.12
18:30
ну суть своих ошибок вроде уловил)
37 seraf
 
29.11.12
18:47
(31) а небольшой пример не подскажешь как временную таблицу использовать параметром виртуальной
чет я завяз
38 Fragster
 
гуру
29.11.12
18:57
(37) (,,,,,,счет в (выбрать счета.Счет из счета),,,,,,,)
39 Fragster
 
гуру
29.11.12
18:58
(34) посмотри в скуле (27). меня глючит, или в 8.1 было по другому (соединение по кластерному индексу)?
40 seraf
 
29.11.12
19:12
(38) в скд у меня такая конструкция не работает
41 Fragster
 
гуру
29.11.12
20:18
(40) да, не повезло
Основная теорема систематики: Новые системы плодят новые проблемы.