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

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 242 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 332 21.06.17 17:34 Сейчас в теме
Права полные, RLS не используется?
9. Ann.prog1C 21.06.17 17:44 Сейчас в теме
(2) RLS используется. Но фразы "разрешенные" в запросе нет.
17. roman77 332 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 242 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 242 21.06.17 17:40 Сейчас в теме
Вместо

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

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

ЕСТЬNULL(ХозрасчетныйОстатки.Валюта, Неопределено)
8. WalterMort 242 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 242 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 242 21.06.17 18:04 Сейчас в теме
(13) если добавить Автоупорядочивание (флажок в конструкторе), порядок будет по наименованиям, а не по гуидам. Сильно на быстродействии имхо не скажется.
Ann.prog1C; +1 Ответить
15. WalterMort 242 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 158 21.06.17 22:50 Сейчас в теме
(24)всеж таки Субконто1 или Субконто2 да и вообще аналитику лучше указывать в начале условия потому как значений там наберется наверняка больше чем в Организация и прочем
29. Ann.prog1C 24.06.17 11:07 Сейчас в теме
(27) думаете, что порядок влияет на скорость выполнения запроса?
30. Fox-trot 158 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 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот