powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / 1C8.1 оптимизация запроса
11 сообщений из 11, страница 1 из 1
1C8.1 оптимизация запроса
    #36479657
1chainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подскажите, как пооптимальней расписать запрос вида:

Код: 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
1C8.1 оптимизация запроса
    #36479682
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала перенести условия из "ГДЕ" в параметры вирт. таблицы "ДвиженияССубконто". Остальное даже смотреть не стал.
...
Рейтинг: 0 / 0
1C8.1 оптимизация запроса
    #36479702
1chainik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitriyZДля начала перенести условия из "ГДЕ" в параметры вирт. таблицы "ДвиженияССубконто". Остальное даже смотреть не стал.извините, моя плохо говорийть по адынэсфранчайзевски.

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

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

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

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

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


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

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

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

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

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

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


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