Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / 1C8.1 оптимизация запроса / 11 сообщений из 11, страница 1 из 1
19.02.2010, 12:16
    #36479657
1chainik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1C8.1 оптимизация запроса
подскажите, как пооптимальней расписать запрос вида:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
    Текст = "ВЫБРАТЬ
	|	ХозрасчетныйДвиженияССубконто.Период,
	|	ХозрасчетныйДвиженияССубконто.СчетДт,
	|	ПРЕДСТАВЛЕНИЕ(ХозрасчетныйДвиженияССубконто.СчетДт) AS Дт,
	|	CASE WHEN
	|		ХозрасчетныйДвиженияССубконто.ВидСубконтоДт1
	|		IN(&Контрагенты )
	|	THEN
	|		ХозрасчетныйДвиженияССубконто.СубконтоДт1
	|	WHEN
	|		ХозрасчетныйДвиженияССубконто.ВидСубконтоДт2
	|		IN(&Контрагенты)
	|	THEN 
	|		ХозрасчетныйДвиженияССубконто.СубконтоДт2
	|	WHEN 
	|		ХозрасчетныйДвиженияССубконто.ВидСубконтоДт3
	|		IN(&Контрагенты)
	|	THEN 
	|		ХозрасчетныйДвиженияССубконто.СубконтоДт3
	|	ELSE
	|		NULL
	|	END AS СубконтоДт1,
	|ПРЕДСТАВЛЕНИЕ(
	|	CASE WHEN
	|		ХозрасчетныйДвиженияССубконто.ВидСубконтоДт1
	|		IN(&Контрагенты)
	|	THEN
	|		ХозрасчетныйДвиженияССубконто.СубконтоДт1
	|	WHEN
	|		ХозрасчетныйДвиженияССубконто.ВидСубконтоДт2
	|		IN(&Контрагенты)
	|	THEN 
	|		ХозрасчетныйДвиженияССубконто.СубконтоДт2
	|	WHEN 
	|		ХозрасчетныйДвиженияССубконто.ВидСубконтоДт3
	|		IN(&Контрагенты)
	|	THEN 
	|		ХозрасчетныйДвиженияССубконто.СубконтоДт3
	|	ELSE
	|		NULL
	|	END) AS СДт1,
//
	|	ХозрасчетныйДвиженияССубконто.СчетКт,
	|	ПРЕДСТАВЛЕНИЕ(ХозрасчетныйДвиженияССубконто.СчетКт) КАК Кт,
	|	ХозрасчетныйДвиженияССубконто.СубконтоКт1,
	|	CASE WHEN
	|		ХозрасчетныйДвиженияССубконто.ВидСубконтоКт1
	|		IN(&Контрагенты)
	|	THEN
	|		ХозрасчетныйДвиженияССубконто.СубконтоКт1
	|	WHEN
	|		ХозрасчетныйДвиженияССубконто.ВидСубконтоКт2
	|		IN(&Контрагенты)
	|	THEN 
	|		ХозрасчетныйДвиженияССубконто.СубконтоКт2
	|	WHEN 
	|		ХозрасчетныйДвиженияССубконто.ВидСубконтоКт3
	|		IN(&Контрагенты)
	|	THEN 
	|		ХозрасчетныйДвиженияССубконто.СубконтоКт3
	|	ELSE
	|		NULL
	|	END AS СубконтоКт1,
	|ПРЕДСТАВЛЕНИЕ(
	|	CASE WHEN
	|		ХозрасчетныйДвиженияССубконто.ВидСубконтоКт1
	|		IN(&Контрагенты)
	|	THEN
	|		ХозрасчетныйДвиженияССубконто.СубконтоКт1
	|	WHEN
	|		ХозрасчетныйДвиженияССубконто.ВидСубконтоКт2
	|		IN(&Контрагенты)
	|	THEN 
	|		ХозрасчетныйДвиженияССубконто.СубконтоКт2
	|	WHEN 
	|		ХозрасчетныйДвиженияССубконто.ВидСубконтоКт3
	|		IN(&Контрагенты)
	|	THEN 
	|		ХозрасчетныйДвиженияССубконто.СубконтоКт3
	|	ELSE
	|		NULL
	|	END) AS СКт1,
//
	|	ХозрасчетныйДвиженияССубконто.ВалютаДт,	
	|	ХозрасчетныйДвиженияССубконто.ВалютаКт,	
	|	ХозрасчетныйДвиженияССубконто.Сумма,
	|	ХозрасчетныйДвиженияССубконто.ВалютнаяСуммаДт,
	|	ХозрасчетныйДвиженияССубконто.ВалютнаяСуммаКт,
	|	ХозрасчетныйДвиженияССубконто.Содержание,
	|	ХозрасчетныйДвиженияССубконто.НомерСтроки,
	|	ХозрасчетныйДвиженияССубконто.Регистратор,
	|	ПРЕДСТАВЛЕНИЕ(ХозрасчетныйДвиженияССубконто.Регистратор) КАК ПрР
	|ИЗ
	|	РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто
	|ГДЕ
	|	ХозрасчетныйДвиженияССубконто.Счет" + ДКтип + " В (&Счет" + ДКтип + ")
	|	И ХозрасчетныйДвиженияССубконто.Организация В ИЕРАРХИИ (&Организация)
	|	И ХозрасчетныйДвиженияССубконто.Период >= &Период
	|	И 
	|	(CASE WHEN
	|		ХозрасчетныйДвиженияССубконто.ВидСубконто" + ДКтип + "1
	|		IN(&Контрагенты )
	|	THEN
	|		ХозрасчетныйДвиженияССубконто.Субконто" + ДКтип + "1
	|	WHEN
	|		ХозрасчетныйДвиженияССубконто.ВидСубконто" + ДКтип + "2
	|		IN(&Контрагенты)
	|	THEN 
	|		ХозрасчетныйДвиженияССубконто.Субконто" + ДКтип + "2
	|	WHEN 
	|		ХозрасчетныйДвиженияССубконто.ВидСубконто" + ДКтип + "3
	|		IN(&Контрагенты)
	|	THEN 
	|		ХозрасчетныйДвиженияССубконто.Субконто" + ДКтип + "3
	|	END)  IN (&HOLDING )";
вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
	"--....
	|ГДЕ
	|	ХозрасчетныйДвиженияССубконто.Счет" + ДКтип + " В (&Счет" + ДКтип + ")
	|	И ХозрасчетныйДвиженияССубконто.Организация В ИЕРАРХИИ (&Организация)
	|	И ХозрасчетныйДвиженияССубконто.Период >= &Период
	|	И 
	|	(
	|		( ХозрасчетныйДвиженияССубконто.ВидСубконто" + ДКтип + "1
	|		=(&Контрагенты )
	|		AND
	|		ХозрасчетныйДвиженияССубконто.Субконто" + ДКтип + "1 IN (&HOLDING )
	|		)
	|		OR
	|		( ХозрасчетныйДвиженияССубконто.ВидСубконто" + ДКтип + "2
	|		=(&Контрагенты)
	|		AND 
	|		ХозрасчетныйДвиженияССубконто.Субконто" + ДКтип + "2 IN (&HOLDING )
	|		)
	|		OR
	|		( ХозрасчетныйДвиженияССубконто.ВидСубконто" + ДКтип + "3
	|		IN(&Контрагенты)
	|		AND 
	|		ХозрасчетныйДвиженияССубконто.Субконто" + ДКтип + "3 IN (&HOLDING )
	|		)
	|	) ;";

- пока тестово накидываю в массивы
&Счет" + ДКтип + "
- 2-3 счета
&HOLDING
- 4 ссылки на "СправочникКонтрагенты"

считает запрос два раза (для ДКтип = "ДТ" [|"КТ] ) выплёвывает всего 1 запись.
тратит 6-7 минут в обоих вариантах.

в рабочем случае должно быть порядка 20 счетов (без "в иерархии" или чуть меньше - с) в &Счет...
и до 10-20 ссылок в &HOLDING. (при общем кол-ве контрагентов в несколько тыщ)

сервер - PostgreSQL
его активности при выполнении кода почти не видно.
...
Рейтинг: 0 / 0
19.02.2010, 12:24
    #36479682
DmitriyZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1C8.1 оптимизация запроса
Для начала перенести условия из "ГДЕ" в параметры вирт. таблицы "ДвиженияССубконто". Остальное даже смотреть не стал.
...
Рейтинг: 0 / 0
19.02.2010, 12:29
    #36479702
1chainik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1C8.1 оптимизация запроса
DmitriyZДля начала перенести условия из "ГДЕ" в параметры вирт. таблицы "ДвиженияССубконто". Остальное даже смотреть не стал.извините, моя плохо говорийть по адынэсфранчайзевски.

переведите , пожалуста, на язык кода.

(если Вас не затруднит )
...
Рейтинг: 0 / 0
19.02.2010, 12:38
    #36479731
DmitriyZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1C8.1 оптимизация запроса
Shift + F1 там все написано. С примерами.
...
Рейтинг: 0 / 0
19.02.2010, 12:40
    #36479740
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1C8.1 оптимизация запроса
в районе

|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто

есть еще скобки ....КАК ХозрасчетныйДвиженияССубконто() внутрь которых предлагается сгрузить ваши конструкции из ГДЕ
...
Рейтинг: 0 / 0
19.02.2010, 13:03
    #36479806
1chainik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1C8.1 оптимизация запроса
Господин ПЖ,

спасибо, кажется помогает.


Резюмирую (для себя): 1С варит набор т.н. "вирт-таблиц" полностью. и только потом фильтрует. условия where сам транспортировать вовнутрь "вью" неспособен. Забавное поделие.
...
Рейтинг: 0 / 0
19.02.2010, 13:08
    #36479830
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1C8.1 оптимизация запроса
1chainikРезюмирую (для себя): 1С варит набор т.н. "вирт-таблиц" полностью. и только потом фильтрует. условия where сам транспортировать вовнутрь "вью" неспособен.

в документах про это так и написано
...
Рейтинг: 0 / 0
19.02.2010, 13:26
    #36479873
Господин ПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1C8.1 оптимизация запроса
ЗЫ лепить такие длинные кейсы тоже не нужно... вы же задаете &ВидСубконто как ПланыВидовХарактеристик.ВидыСубконто.Контрагенты в параметрах вирт. таблицы РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто? потом можно просто обращаться

ВЫБРАТЬ
| ХозрасчетныйДвиженияССубконто.Период,
| ХозрасчетныйДвиженияССубконто.СчетДт,
| ХозрасчетныйДвиженияССубконто.СубконтоДт1
| ХозрасчетныйДвиженияССубконто.СчетКт,
| ХозрасчетныйДвиженияССубконто.СубконтоКт1

система должна вам сама собрать данные по контрам внезависимости от порядка расположения этой аналитики на счете
...
Рейтинг: 0 / 0
19.02.2010, 13:40
    #36479910
1chainik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1C8.1 оптимизация запроса
Господин ПЖ,

для ВТ "ДвиженияССубконто", в отличь от "оборотов", "остатков" и т.п. отдельный параметр "субконто" не предусмотрен. согласно справке 1С.
Для "остатковиоборотов" видимо так, как вы советуете, было бы удобно.

и хотя "контрагенты" обычно в 8-ке всегда именно 1-е субконто, но общности из за "обычно" терять не хочется.
...
Рейтинг: 0 / 0
19.02.2010, 14:13
    #36480030
DmitriyZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1C8.1 оптимизация запроса
Можно еще попробовать отказаться от таблицы ДвиженияССубконто и использовать таблицу "ОстаткиИОбороты" с периодичностью до записи (если надо детализацию до проводки).
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.02.2011, 09:59
    #37129770
dimetra2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1C8.1 оптимизация запроса
Здесь можно почитать про оптимизацию запросов Оптимизация запросов в 1С
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / 1C8.1 оптимизация запроса / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]