Помогите оптимизировать запрос к бухгалтерскому регистру!!

1. Ann.prog1C 21.06.17 17:27 Сейчас в теме
Запрос к бухгалтерскому регистру остатков выполняется больше секунды, хотя ничего крамольного в нем не вижу.
ВЫБРАТЬ
	Остатки.Счет,
	Остатки.Субконто1,
	Остатки.Субконто2,
	Остатки.Субконто3,
	ВЫРАЗИТЬ(СУММА(ВЫБОР
				КОГДА Остатки.СуммаОстаток ЕСТЬ NULL 
					ТОГДА 0
				ИНАЧЕ Остатки.СуммаОстаток
			КОНЕЦ) КАК ЧИСЛО) КАК СуммаОстаток,
	ВЫБОР
		КОГДА Остатки.Счет.Валютный = ИСТИНА
			ТОГДА Остатки.Валюта
		ИНАЧЕ НЕОПРЕДЕЛЕНО
	КОНЕЦ КАК Валюта,
	ВЫРАЗИТЬ(СУММА(ВЫБОР
				КОГДА Остатки.ВалютнаяСуммаОстаток ЕСТЬ NULL 
					ТОГДА 0
				ИНАЧЕ Остатки.ВалютнаяСуммаОстаток
			КОНЕЦ) КАК ЧИСЛО) КАК ВалютнаяСуммаОстаток
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Остатки(
			&Период,
			Счет = &Счет,
			,
			Организация = &Организация
				И Субконто1 = &Субконто1
				И Субконто2 = &Субконто2) КАК Остатки

СГРУППИРОВАТЬ ПО
	Остатки.Счет,
	Остатки.Субконто1,
	Остатки.Субконто2,
	Остатки.Субконто3,
	Остатки.Валюта,
	ВЫБОР
		КОГДА Остатки.Счет.Валютный = ИСТИНА
			ТОГДА Остатки.Валюта
		ИНАЧЕ НЕОПРЕДЕЛЕНО
	КОНЕЦ

УПОРЯДОЧИТЬ ПО
	Остатки.Счет,
	Остатки.Субконто1,
	Остатки.Субконто2,
	Остатки.Субконто3,
	Валюта
Показать


При проведении документа "Возврат от покупателя" время выполнения этого запроса составляет 43% от общего. Можно ли что-либо сделать?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
10. WalterMort 241 21.06.17 17:46 Сейчас в теме
Короче где-то так:

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


УПОРЯДОЧИТЬ ПО
    Остатки.Счет,
    Остатки.Субконто1,
    Остатки.Субконто2,
    Остатки.Субконто3,
    Валюта
Показать
Ann.prog1C; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
4. Dream_kz 129 21.06.17 17:36 Сейчас в теме
(1)
ВЫРАЗИТЬ(СУММА(ВЫБОР
КОГДА Остатки.СуммаОстаток ЕСТЬ NULL
ТОГДА 0
ИНАЧЕ Остатки.СуммаОстаток
КОНЕЦ) КАК ЧИСЛО) КАК СуммаОстаток,

Зачем данная конструкция? Null в остатках не будет
Также установите массив видов субконто.

Также сортировка по Счету, Субконто1, Субконто2 тоже лишние, вы их устанавливаете параметром, значит они будут однозначные. Можно их также в запрос не выбирать, если они устанавливаются параметром. Валютный ли счет можно узнать вне запроса, счет то есть. И да. группировки не нужны.
Ann.prog1C; +1 Ответить
2. roman77 297 21.06.17 17:34 Сейчас в теме
Права полные, RLS не используется?
9. Ann.prog1C 21.06.17 17:44 Сейчас в теме
(2) RLS используется. Но фразы "разрешенные" в запросе нет.
17. roman77 297 21.06.17 18:14 Сейчас в теме
(9) я вижу что нет. А у пользователя есть полные права или нет?

Я столкнулся с диким падением производительности в простейших запросах в УТ из-за того, что 1с-ники "оптимизировали" rls под postgre sql.
Теперь с нетерпением жду обещанное исправление. Проявляется если у пользователя нет полных прав.
18. Ann.prog1C 21.06.17 18:19 Сейчас в теме
(17) При замерах запускала под полными правами. А так, по разному. У нас в RLS действительно наворот. Платформа 8.2.18.102. Там по идее 1С ничего не мог "оптимизировать".
3. WalterMort 241 21.06.17 17:36 Сейчас в теме
"Остатки.СуммаОстаток ЕСТЬ NULL" - NULLу тут неоткуда взяться. Это раз.
Ann.prog1C; +1 Ответить
6. boln 1040 21.06.17 17:40 Сейчас в теме
Операция СГРУППИРОВАТЬ выглядит совершенно лишней. Виртуальные таблицы РБ и РН сами агрегируют по выбранным в запросе ключевым полям.

Присоединяюсь к (3) и (4).

И такая сортировка вообще смысла не имеет, поскольку сортирует по числовым значениям ссылок.
user774630; +1 Ответить
5. user633533_encantado 11 21.06.17 17:38 Сейчас в теме
Подозреваю, что нужны остатки по субконто с определенным типом. Используйте выражение Выразить( Остатки.Субконто1 Как Справочник.Номенклатура) или что оно там должно быть.
И да, конструкция типа "СУММА(ВЫБОР
КОГДА Остатки.ВалютнаяСуммаОстаток ЕСТЬ NULL
ТОГДА 0
ИНАЧЕ Остатки.ВалютнаяСуммаОстаток
КОНЕЦ) " - полный бред.
Ann.prog1C; +1 Ответить
7. WalterMort 241 21.06.17 17:40 Сейчас в теме
Вместо

"ВЫБОР
        КОГДА Остатки.Счет.Валютный = ИСТИНА
            ТОГДА Остатки.Валюта
        ИНАЧЕ НЕОПРЕДЕЛЕНО
    КОНЕЦ КАК Валюта"

достаточно написать:

ЕСТЬNULL(ХозрасчетныйОстатки.Валюта, Неопределено)
8. WalterMort 241 21.06.17 17:41 Сейчас в теме
Про ГРУППИРОВАТЬ уже сказали.

Ещё хорошим тоном считается явно передавать виды субконто в параметр виртуальной таблицы.
Ann.prog1C; +1 Ответить
20. boln 1040 21.06.17 18:50 Сейчас в теме
(8)
Ещё хорошим тоном считается явно передавать виды субконто в параметр виртуальной таблицы.
Параметр &Субконто "не про это", поэтому сомневаюсь, чтобы повысило производительность.
21. Dream_kz 129 21.06.17 18:52 Сейчас в теме
(20) Помимо порядка еще типизирует субконто, так что повлияет.
Ann.prog1C; +1 Ответить
23. Ann.prog1C 21.06.17 19:01 Сейчас в теме
(20), (21) да, типизация субконто не помешает точно. Сделаю. Спасибо.
22. boln 1040 21.06.17 18:58 Сейчас в теме
(21) А, если нужно только часть субконто по видам выводить (2 из 40), тогда, конечно, да.
Ann.prog1C; +1 Ответить
10. WalterMort 241 21.06.17 17:46 Сейчас в теме
Короче где-то так:

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


УПОРЯДОЧИТЬ ПО
    Остатки.Счет,
    Остатки.Субконто1,
    Остатки.Субконто2,
    Остатки.Субконто3,
    Валюта
Показать
Ann.prog1C; +1 Ответить
13. Ann.prog1C 21.06.17 17:53 Сейчас в теме
(10) да, спасибо. Наверное где-то так. Ну и упорядочение наверное уберу, как в (6) советовали.
14. WalterMort 241 21.06.17 18:04 Сейчас в теме
(13) если добавить Автоупорядочивание (флажок в конструкторе), порядок будет по наименованиям, а не по гуидам. Сильно на быстродействии имхо не скажется.
Ann.prog1C; +1 Ответить
15. WalterMort 241 21.06.17 18:10 Сейчас в теме
+(14) Хотя для субконто автоупорядочивание может серьезно подвесить.
16. Ann.prog1C 21.06.17 18:12 Сейчас в теме
(14) У нас по счету взаиморасчетов только 2 субконто. В результате запроса получим только одну строку. Думаю, что можно убрать упорядочивание.
19. boln 1040 21.06.17 18:47 Сейчас в теме
(14)
Сильно на быстродействии имхо не скажется.
Может очень сильно сказаться. Это практически то же самое, что делать соединение непосредственно по полям составного типа.
11. v3rter 21.06.17 17:49 Сейчас в теме
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(
&Период,
Счет = &Счет,
,
Организация = &Организация
И Субконто1 = &Субконто1
И Субконто2 = &Субконто2) КАК Остатки

Вижу у запроса параметры... Запрос совершенно случайно не в цикле выполняется для каждой строки документа возврата?
12. Ann.prog1C 21.06.17 17:51 Сейчас в теме
(11) нет, конечно, не в цикле.
Это остатки по взаиморасчетам. Субконто там Контрагент и ДоговорКорагента.
24. Ann.prog1C 21.06.17 19:27 Сейчас в теме
С учетом всех советов получилось:
ВЫБРАТЬ
	Остатки.Счет,
	Остатки.Субконто1,
	Остатки.Субконто2,
	ЕСТЬNULL(Остатки.СуммаОстаток, 0) КАК СуммаОстаток,
	ВЫБОР
		КОГДА Остатки.Счет.Валютный = ИСТИНА
			ТОГДА Остатки.Валюта
		ИНАЧЕ НЕОПРЕДЕЛЕНО
	КОНЕЦ КАК Валюта,
	ЕСТЬNULL(Остатки.ВалютнаяСуммаОстаток, 0) КАК ВалютнаяСуммаОстаток
ИЗ
	РегистрБухгалтерии.Хозрасчетный.Остатки(
			&Период,
			Счет = &Счет,
			&ВидыСубконто,
			Организация = &Организация
				И ПодразделениеОрганизации = &ПодразделениеОрганизации
				И флагБУ = &флагБУ
				И ФлагУУ
				И Субконто1 = &Субконто1
				И Субконто2 = &Субконто2) КАК Остатки
Показать

Время выполнения уменьшилось в 3 раза. Спасибо огромное всем!!!
25. Dream_kz 129 21.06.17 19:54 Сейчас в теме
(24)
ЕСТЬNULL(Остатки.СуммаОстаток, 0) КАК СуммаОстаток,

Уберите проверку на Null
Fox-trot; boln; +2 Ответить
26. Ann.prog1C 21.06.17 21:11 Сейчас в теме
27. Fox-trot 156 21.06.17 22:50 Сейчас в теме
(24)всеж таки Субконто1 или Субконто2 да и вообще аналитику лучше указывать в начале условия потому как значений там наберется наверняка больше чем в Организация и прочем
29. Ann.prog1C 24.06.17 11:07 Сейчас в теме
(27) думаете, что порядок влияет на скорость выполнения запроса?
30. Fox-trot 156 25.06.17 23:06 Сейчас в теме
31. Ann.prog1C 26.06.17 20:45 Сейчас в теме
28. Vovan58 65 21.06.17 22:57 Сейчас в теме
Основная прелесть в ограничении видов субконто : &ВидыСубконто :)
Fox-trot; Ann.prog1C; +2 Ответить
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)