Тормозит запрос (РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто)

1. PerlAmutor 155 10.07.18 09:57 Сейчас в теме
Запрос выполняется от 8 до 30 минут. Как можно оптимизировать?

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


В качестве параметров передается Период - месяц (скажем июнь). Подразделение - понятное дело подразделение организации. СчетКт - массив из 3х счетов 20, 23 и 29 счет.

Запрос не мой, но нужно понять причину. Пробовал менять порядок проверки условий к виртуальной таблице, убирал 1000000. Вот что обнаружил, если убрать любой вывод ВидовСубконто или самих Субконто, то все выполняется за 500 мс:

ВЫБРАТЬ
	ХозрасчетныйДвиженияССубконто.Период,
	ХозрасчетныйДвиженияССубконто.Регистратор,
	ХозрасчетныйДвиженияССубконто.НомерСтроки,
	ХозрасчетныйДвиженияССубконто.Активность,
	ХозрасчетныйДвиженияССубконто.СчетДт,
	ХозрасчетныйДвиженияССубконто.СчетКт,
	ХозрасчетныйДвиженияССубконто.Организация,
	ХозрасчетныйДвиженияССубконто.ВалютаДт,
	ХозрасчетныйДвиженияССубконто.ВалютаКт,
	ХозрасчетныйДвиженияССубконто.ПодразделениеДт,
	ХозрасчетныйДвиженияССубконто.ПодразделениеКт,
	ХозрасчетныйДвиженияССубконто.НаправлениеДеятельностиДт,
	ХозрасчетныйДвиженияССубконто.НаправлениеДеятельностиКт,
	ХозрасчетныйДвиженияССубконто.Сумма,
	ХозрасчетныйДвиженияССубконто.КоличествоДт,
	ХозрасчетныйДвиженияССубконто.КоличествоКт,
	ХозрасчетныйДвиженияССубконто.Содержание

ПОМЕСТИТЬ ПроводкиБУ_Кт20
ИЗ
	РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
			&НачалоПериода,
			&КонецПериода,
			Активность = ИСТИНА
				И ПодразделениеКт = &Подразделение
				И СчетКт В (&СчетКт),
			,
			1000000) КАК ХозрасчетныйДвиженияССубконто
Показать


Если к оригинальному запросу добавить ПЕРВЫЕ 1, то на скорость выполнения запроса это не влияет. А так он возвращает всего 18000 записей.

Такой SQL запрос генерирует 1С:

INS ERT INTO #tt67 WITH(TABLOCK) (_RecorderTRef, _RecorderRRef, _LineNo) SEL ECT
T1.RecorderTRef,
T1.RecorderRRef,
T1.LineNo_
FR OM (SEL ECT DISTINCT TOP 1000000
T2.RecorderTRef AS RecorderTRef,
T2.RecorderRRef AS RecorderRRef,
T2.LineNo_ AS LineNo_
FR OM (SEL ECT
T3.RecorderTRef AS RecorderTRef,
T3.RecorderRRef AS RecorderRRef,
T3.LineNo_ AS LineNo_
FROM (SELECT TOP 1000000
T4._RecorderTRef AS RecorderTRef,
T4._RecorderRRef AS RecorderRRef,
T4._LineNo AS LineNo_
FR OM dbo._AccRg1789 T4
INNER JOIN dbo._AccRgED1827 T5
ON T5._RecorderTRef = T4._RecorderTRef AND T5._RecorderRRef = T4._RecorderRRef AND T5._LineNo = T4._LineNo AND T5._Period = T4._Period AND T5._Correspond = @P1 AND T5._Period >= @P2 AND T5._Period <= @P3
INNER JOIN dbo._AccRgED1827 T6
ON T6._RecorderTRef = T4._RecorderTRef AND T6._RecorderRRef = T4._RecorderRRef AND T6._LineNo = T4._LineNo AND T6._Period = T4._Period AND T6._Correspond = @P4 AND T6._Period >= @P5 AND T6._Period <= @P6
INNER JOIN dbo._AccRgED1827 T7
ON T7._RecorderTRef = T4._RecorderTRef AND T7._RecorderRRef = T4._RecorderRRef AND T7._LineNo = T4._LineNo AND T7._Period = T4._Period AND T7._Correspond = @P7 AND T7._Period >= @P8 AND T7._Period <= @P9
WH ERE (((((T4._Fld1741 = @P10)) AND (T5._Fld1741 = @P11)) AND (T6._Fld1741 = @P12)) AND (T7._Fld1741 = @P13)) AND (((((((T4._AccountCtRRef IN (@P14, @P15, @P16)) AND (T4._Fld1792CtRRef = @P17)) AND (((T5._KindRRef IN (@P18, @P19, @P20)) AND (T6._KindRRef IN (@P21, @P22, @P23))) AND (T7._KindRRef IN (@P24, @P25, @P26)))) AND (T4._Active = 0x01)) AND (T4._Fld1794 <> @P27))) AND T4._Period >= @P28 AND T4._Period <= @P29)) T3
UNI ON SELE CT
T8.RecorderTRef AS RecorderTRef,
T8.RecorderRRef AS RecorderRRef,
T8.LineNo_ AS LineNo_
FR OM (SEL ECT TOP 1000000
T9._RecorderTRef AS RecorderTRef,
T9._RecorderRRef AS RecorderRRef,
T9._LineNo AS LineNo_
FR OM dbo._AccRg1789 T9
INNER JOIN dbo._AccRgED1827 T10
ON T10._RecorderTRef = T9._RecorderTRef AND T10._RecorderRRef = T9._RecorderRRef AND T10._LineNo = T9._LineNo AND T10._Period = T9._Period AND T10._Correspond = @P30 AND T10._Period >= @P31 AND T10._Period <= @P32
INNER JOIN dbo._AccRgED1827 T11
ON T11._RecorderTRef = T9._RecorderTRef AND T11._RecorderRRef = T9._RecorderRRef AND T11._LineNo = T9._LineNo AND T11._Period = T9._Period AND T11._Correspond = @P33 AND T11._Period >= @P34 AND T11._Period <= @P35
INNER JOIN dbo._AccRgED1827 T12
ON T12._RecorderTRef = T9._RecorderTRef AND T12._RecorderRRef = T9._RecorderRRef AND T12._LineNo = T9._LineNo AND T12._Period = T9._Period AND T12._Correspond = @P36 AND T12._Period >= @P37 AND T12._Period <= @P38
WH ERE (((((T9._Fld1741 = @P39)) AND (T10._Fld1741 = @P40)) AND (T11._Fld1741 = @P41)) AND (T12._Fld1741 = @P42)) AND (((((((T9._AccountCtRRef IN (@P43, @P44, @P45)) AND (T9._Fld1792CtRRef = @P46)) AND (((T10._KindRRef IN (@P47, @P48, @P49)) AND (T11._KindRRef IN (@P50, @P51, @P52))) AND (T12._KindRRef IN (@P53, @P54, @P55)))) AND (T9._Active = 0x01)) AND (T9._Fld1794 <> @P56))) AND T9._Period >= @P57 AND T9._Period <= @P58)) T8) T2) T1
Показать


План запроса прилагаю (картинку в полный размер можно просмотреть, если нажать ПКМ и выбрать просмотр в отдельной вкладке)
---
Добавил новый план запроса, сегодня он изменился, но время выполнения не уменьшилось
Прикрепленные файлы:
Plan09072018.zip
sql09072018.txt
Plan10072018.zip
Найденные решения
18. PerlAmutor 155 13.10.18 15:17 Сейчас в теме
Наконец-то дошли руки. В общем изменил запрос таким образом и все стало летать:

ВЫБРАТЬ
	ХозрасчетныйОборотыДтКт.Период,
	ХозрасчетныйОборотыДтКт.Регистратор,
	ХозрасчетныйОборотыДтКт.СчетДт,
	ХозрасчетныйОборотыДтКт.СчетКт,
	ХозрасчетныйОборотыДтКт.СубконтоДт1,
	ЕСТЬNULL(ХозрасчетныйВидыСубконтоДт1.ВидСубконто, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка)) КАК ВидСубконто1Дт,
	ХозрасчетныйОборотыДтКт.СубконтоДт2,
	ЕСТЬNULL(ХозрасчетныйВидыСубконтоДт2.ВидСубконто, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка)) КАК ВидСубконто2Дт,
	ХозрасчетныйОборотыДтКт.СубконтоДт3,
	ЕСТЬNULL(ХозрасчетныйВидыСубконтоДт3.ВидСубконто, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка)) КАК ВидСубконто3Дт,
	ХозрасчетныйОборотыДтКт.СубконтоКт1,
	ЕСТЬNULL(ХозрасчетныйВидыСубконтоКт1.ВидСубконто, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка)) КАК ВидСубконто1Кт,
	ХозрасчетныйОборотыДтКт.СубконтоКт2,
	ЕСТЬNULL(ХозрасчетныйВидыСубконтоКт2.ВидСубконто, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка)) КАК ВидСубконто2Кт,
	ХозрасчетныйОборотыДтКт.СубконтоКт3,
	ЕСТЬNULL(ХозрасчетныйВидыСубконтоКт3.ВидСубконто, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка)) КАК ВидСубконто3Кт,
	ХозрасчетныйОборотыДтКт.Организация,
	ХозрасчетныйОборотыДтКт.ВалютаДт,
	ХозрасчетныйОборотыДтКт.ВалютаКт,
	ХозрасчетныйОборотыДтКт.ПодразделениеДт,
	ХозрасчетныйОборотыДтКт.ПодразделениеКт,
	ХозрасчетныйОборотыДтКт.НаправлениеДеятельностиДт,
	ХозрасчетныйОборотыДтКт.НаправлениеДеятельностиКт,
	ХозрасчетныйОборотыДтКт.СуммаОборот КАК Сумма,
	ХозрасчетныйОборотыДтКт.КоличествоОборотДт КАК КоличествоДт,
	ХозрасчетныйОборотыДтКт.КоличествоОборотКт КАК КоличествоКт
ИЗ
	РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода, Регистратор, , , СчетКт В (&СчетКТ), , ПодразделениеКт = &Подразделение) КАК ХозрасчетныйОборотыДтКт
		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоКт1
		ПО ХозрасчетныйОборотыДтКт.СчетКт = ХозрасчетныйВидыСубконтоКт1.Ссылка
			И (ХозрасчетныйВидыСубконтоКт1.НомерСтроки = 1)
		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоКт2
		ПО ХозрасчетныйОборотыДтКт.СчетКт = ХозрасчетныйВидыСубконтоКт2.Ссылка
			И (ХозрасчетныйВидыСубконтоКт2.НомерСтроки = 2)
		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоКт3
		ПО ХозрасчетныйОборотыДтКт.СчетКт = ХозрасчетныйВидыСубконтоКт3.Ссылка
			И (ХозрасчетныйВидыСубконтоКт3.НомерСтроки = 3)
		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоДт1
		ПО ХозрасчетныйОборотыДтКт.СчетДт = ХозрасчетныйВидыСубконтоДт1.Ссылка
			И (ХозрасчетныйВидыСубконтоДт1.НомерСтроки = 1)
		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоДт2
		ПО ХозрасчетныйОборотыДтКт.СчетДт = ХозрасчетныйВидыСубконтоДт2.Ссылка
			И (ХозрасчетныйВидыСубконтоДт2.НомерСтроки = 2)
		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоДт3
		ПО ХозрасчетныйОборотыДтКт.СчетДт = ХозрасчетныйВидыСубконтоДт3.Ссылка
			И (ХозрасчетныйВидыСубконтоДт3.НомерСтроки = 3)
Показать
О.Ж; saver77; JohnyDeath; acanta; +4 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. Sashares 35 12.07.18 14:02 Сейчас в теме
(1) Не использовать виртуальную таблицу ДвиженияССубконто нельзя? Это самая медленная вируальная таблица.
Попробуйте в запросе использовать таблицу ОборотыДтКт.
6. PerlAmutor 155 12.07.18 14:20 Сейчас в теме
(5) Кстати любопытную вещь обнаружил. Эта виртуальная таблица возвращает около 500000 записей, и 500 раз (по 1000 строк за раз) она выполняет мелкие запросы. Я сделал тестовый запрос, который показывает, что суммарное время выполнения этих запросов гораздо меньше, чем суммарное время выполнения всех этих запросов:

sel ect DATEDIFF(ms,MIN(starttime),MAX(endtime)),SUM(Duration)/1000 fr om trace1 where TextData like '%tt10%'


994300 | 121546

Т.е. видно, что 994 секунды ушло, чтобы их выполнить и 121 секунда была потрачена на сами запросы. Стало быть ЛАГ идет где-то внутри самой 1С, возможно она что-то проверяет или обрабатывает между этими мелкими запросиками. А может быть просто на вызов и подготовку очередного запроса уходит время.
7. spacecraft 12.07.18 14:29 Сейчас в теме
(6)
Стало быть ЛАГ идет где-то внутри самой 1С

это не "ЛАГ" самой 1С. Это "ЛАГ" использования виртуальной таблицы не по назначению.
Если в ней не ограничить субконто, то будет соединение со всеми таблицами, где возможно использование любых субконто.
8. Sashares 35 12.07.18 14:33 Сейчас в теме
(7)
Если в ней не ограничить субконто, то будет соединение со всеми таблицами, где возможно использование любых субконто.

Зачем? Зачем будет соединение, если реквизиты от субконто не берутся?
Вот если бы было Регистратор.Дата или Субконто1.Код, вот тогда бы да, было бы соединение со всеми таблицами составных типов.
Так что кажется, вы что-то путаете.
9. spacecraft 12.07.18 14:37 Сейчас в теме
(8) а что в вашем понимании : ХозрасчетныйДвиженияССубконто.ВидСубконтоДт1, ХозрасчетныйДвиженияССубконто.СубконтоДт1 ?
10. Sashares 35 12.07.18 14:45 Сейчас в теме
(9)Отдельная таблица.
Есть таблица записей регистра, а есть таблица значений субконто для каждой записи каждого счета.
СубконтоДт1 - ссылка на значение - справочник или документ или что еще.
ВидСубконто - пвх вид субконто. Из СубконтоДт1 вы вид субконто не получите никак.
11. spacecraft 12.07.18 15:04 Сейчас в теме
(10)
СубконтоДт1 - ссылка на значение - справочник или документ или что еще.

Другими словами Характеристика ПВХ видов субконто. Составной тип.
И теперь нужно найти все регистраторы, в которых встречаются Субконто.
13. Sashares 35 12.07.18 15:09 Сейчас в теме
(11)У РБ есть 2 таблицы - записи измерений и ресурсов и таблица с субконто где хранится вид субконто и его значение для каждой записи.
Запрос ТС без отборов по субконто/их реквизитам. Зачем надо искать все регистраторы?
Что за бред вы несете?
14. spacecraft 12.07.18 15:11 Сейчас в теме
(13) озвучьте эти таблицы и их измерения.
12. PerlAmutor 155 12.07.18 15:08 Сейчас в теме
(10)
Из СубконтоДт1 вы вид субконто не получите никак.


Тогда непонятно как получить вид субконто при использовании таблицы ОборотыДтКт. В запросах дальше там идет проверка видов субконто в "ВЫБРАТЬ КОГДА".
15. Sashares 35 12.07.18 15:17 Сейчас в теме
(12) Все зависит от решаемой задачи. Виды субконто можно брать из плана счетов - т.к. обычно вид субконто на счете не меняется.
Если с таблицей ОборотыДтКт работает быстрее, можно подготовить временную таблицу где будет счет и его виды субконто и соединиться с ней.
Если не быстрее, то и смысла в этом нет.
17. PerlAmutor 155 13.07.18 07:24 Сейчас в теме
(7)
это не "ЛАГ" самой 1С. Это "ЛАГ" использования виртуальной таблицы не по назначению.

Её ни при каком назначении невозможно использовать, я же писал ранее. Плевать она хотела на параметры. Есть единственный вариант когда она работает быстро - когда в полях выборки не указано ничего связанного с субконто.
2. dka80 21 10.07.18 17:38 Сейчас в теме
А если заменить 20 на 20.01? Дело в том, что на 20.02 другие субконто. И еще Субконто лучше написать через Выразить(Субконто1 Как НоменклатурнаяГруппа)
3. PerlAmutor 155 11.07.18 09:14 Сейчас в теме
(2) Возможно размер самих таблиц влияет. В таблице ЗначенияСубконто - 54 000 000 строк, в основной таблице хозрасчетного регистра 10 000 000 строк. Судя по запросу INNER JOIN аж 3 раза по каждой из таблиц соединяет

По идее, если вообще никаких отборов не делать, то это должно быть быстрее всего.

Этот запрос возвращает 500 000 записей. 400 000 из которых приходится на 30 июня.
ВЫБРАТЬ
	КОЛИЧЕСТВО(*) КАК Количество
ИЗ
	РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2018, 6, 1), ДЕНЬ), КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(2018, 6, 30), ДЕНЬ), , , ) КАК ХозрасчетныйДвиженияССубконто


Затем я делаю:

ВЫБРАТЬ
	*
ПОМЕСТИТЬ втТаблица
ИЗ
	РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2018, 6, 1), ДЕНЬ), КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(2018, 6, 30), ДЕНЬ), , , ) КАК ХозрасчетныйДвиженияССубконто


И могу уходить курить 30 минут.

Тоже самое происходит если сделать так:

ВЫБРАТЬ ПЕРВЫЕ 10
	*
ИЗ
	РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2018, 6, 1), ДЕНЬ), КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(2018, 6, 30), ДЕНЬ), , , ) КАК ХозрасчетныйДвиженияССубконто


Т.е. ему все равно, хоть 10 я записей отберу, хоть 500к записей помещу во временную таблицу, хоть кучу отборов понаставлю.
19. nvv1970 14.10.18 22:52 Сейчас в теме
(3) "Первые" в этой таблице задаются внутри последним параметром, а не снаружи!
20. PerlAmutor 155 15.10.18 09:44 Сейчас в теме
(19) Правильное замечание. Тогда я на это почему-то не обратил внимание, это также как с условиями после "ГДЕ".
21. nvv1970 15.10.18 09:55 Сейчас в теме
(20)
это также как с условиями после "ГДЕ".
Почти )) ГДЕ как правило отлично отрабатывает, MS сам строит хороший план с фильтром при первичной выборке данных.
4. PerlAmutor 155 12.07.18 13:03 Сейчас в теме
Похоже все еще хуже чем я думал. Дело не в одном запросе. Самый долгий запрос выполняющий выборку из таблицы размером 50 млн.строк длится всего лишь - 5 секунд. Зато потом идет целый шквал различных запросов соединяющих десятки временных таблиц, делающих порционные выборки типа:

exec sp_executesql N'INS ERT INTO #tt11 WITH(TABLOCK) (_RecorderTRef, _RecorderRRef, _LineNo) SEL ECT
T1.RecorderTRef,
T1.RecorderRRef,
T1.LineNo_
FR OM (SELE CT TOP 1000
T2._RecorderTRef AS RecorderTRef,
T2._RecorderRRef AS RecorderRRef,
T2._LineNo AS LineNo_
FR OM #tt10 T2 WITH(NOLOCK)
WH ERE (T2._RecorderTRef > 0x0000C817 OR T2._RecorderTRef = 0x0000C817 AND T2._RecorderRRef > @P1) OR T2._RecorderTRef = 0x0000C817 AND T2._RecorderRRef = @P2 AND T2._LineNo > @P3
ORDER BY T2._RecorderTRef, T2._RecorderRRef, T2._LineNo) T1',N'@P1 varbinary(16),@P2 varbinary(16),@P3 numeric(10)',0x942300155DF63C0511E880889E90E4C6,0x942300155DF63C0511E880889E90E4C6,2246
Показать


Я склоняюсь к тому, что именно большое количество разнообразных мелких запросов приводит к такому результату. Неясно только как их все собрать в кучу, отделить от других и проанализировать детальней.
18. PerlAmutor 155 13.10.18 15:17 Сейчас в теме
Наконец-то дошли руки. В общем изменил запрос таким образом и все стало летать:

ВЫБРАТЬ
	ХозрасчетныйОборотыДтКт.Период,
	ХозрасчетныйОборотыДтКт.Регистратор,
	ХозрасчетныйОборотыДтКт.СчетДт,
	ХозрасчетныйОборотыДтКт.СчетКт,
	ХозрасчетныйОборотыДтКт.СубконтоДт1,
	ЕСТЬNULL(ХозрасчетныйВидыСубконтоДт1.ВидСубконто, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка)) КАК ВидСубконто1Дт,
	ХозрасчетныйОборотыДтКт.СубконтоДт2,
	ЕСТЬNULL(ХозрасчетныйВидыСубконтоДт2.ВидСубконто, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка)) КАК ВидСубконто2Дт,
	ХозрасчетныйОборотыДтКт.СубконтоДт3,
	ЕСТЬNULL(ХозрасчетныйВидыСубконтоДт3.ВидСубконто, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка)) КАК ВидСубконто3Дт,
	ХозрасчетныйОборотыДтКт.СубконтоКт1,
	ЕСТЬNULL(ХозрасчетныйВидыСубконтоКт1.ВидСубконто, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка)) КАК ВидСубконто1Кт,
	ХозрасчетныйОборотыДтКт.СубконтоКт2,
	ЕСТЬNULL(ХозрасчетныйВидыСубконтоКт2.ВидСубконто, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка)) КАК ВидСубконто2Кт,
	ХозрасчетныйОборотыДтКт.СубконтоКт3,
	ЕСТЬNULL(ХозрасчетныйВидыСубконтоКт3.ВидСубконто, ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка)) КАК ВидСубконто3Кт,
	ХозрасчетныйОборотыДтКт.Организация,
	ХозрасчетныйОборотыДтКт.ВалютаДт,
	ХозрасчетныйОборотыДтКт.ВалютаКт,
	ХозрасчетныйОборотыДтКт.ПодразделениеДт,
	ХозрасчетныйОборотыДтКт.ПодразделениеКт,
	ХозрасчетныйОборотыДтКт.НаправлениеДеятельностиДт,
	ХозрасчетныйОборотыДтКт.НаправлениеДеятельностиКт,
	ХозрасчетныйОборотыДтКт.СуммаОборот КАК Сумма,
	ХозрасчетныйОборотыДтКт.КоличествоОборотДт КАК КоличествоДт,
	ХозрасчетныйОборотыДтКт.КоличествоОборотКт КАК КоличествоКт
ИЗ
	РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода, Регистратор, , , СчетКт В (&СчетКТ), , ПодразделениеКт = &Подразделение) КАК ХозрасчетныйОборотыДтКт
		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоКт1
		ПО ХозрасчетныйОборотыДтКт.СчетКт = ХозрасчетныйВидыСубконтоКт1.Ссылка
			И (ХозрасчетныйВидыСубконтоКт1.НомерСтроки = 1)
		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоКт2
		ПО ХозрасчетныйОборотыДтКт.СчетКт = ХозрасчетныйВидыСубконтоКт2.Ссылка
			И (ХозрасчетныйВидыСубконтоКт2.НомерСтроки = 2)
		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоКт3
		ПО ХозрасчетныйОборотыДтКт.СчетКт = ХозрасчетныйВидыСубконтоКт3.Ссылка
			И (ХозрасчетныйВидыСубконтоКт3.НомерСтроки = 3)
		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоДт1
		ПО ХозрасчетныйОборотыДтКт.СчетДт = ХозрасчетныйВидыСубконтоДт1.Ссылка
			И (ХозрасчетныйВидыСубконтоДт1.НомерСтроки = 1)
		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоДт2
		ПО ХозрасчетныйОборотыДтКт.СчетДт = ХозрасчетныйВидыСубконтоДт2.Ссылка
			И (ХозрасчетныйВидыСубконтоДт2.НомерСтроки = 2)
		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоДт3
		ПО ХозрасчетныйОборотыДтКт.СчетДт = ХозрасчетныйВидыСубконтоДт3.Ссылка
			И (ХозрасчетныйВидыСубконтоДт3.НомерСтроки = 3)
Показать
О.Ж; saver77; JohnyDeath; acanta; +4 Ответить
22. lev6975 26.10.21 18:14 Сейчас в теме
Да ладно, автор, в таблице ОборотыДтКт нет поля период и регистратор!
Не может Ваш запрос работать)!
Движения с субконто как ни крути нужно юзать иначе никак
23. nomad_irk 76 26.10.21 18:32 Сейчас в теме
(22)
в таблице ОборотыДтКт нет поля период и регистратор!
Не может Ваш запрос работать)!

как давно убрали период и регистратор из виртуальной таблицы ОборотыДтКт?
24. lev6975 11.11.21 15:43 Сейчас в теме
(23) На 16.1841 нету
Прикрепленные файлы:
25. Sashares 35 11.11.21 15:47 Сейчас в теме
(24)Для этого надо в параметрах виртуальной таблицы задать соответствующее поле.
26. nomad_irk 76 11.11.21 15:49 Сейчас в теме
(24)я может открою большую тайну, но у любой виртуальной таблицы, без дополнительных действий пользователя в конструкторе запроса, нет полей период и регистратор

Домашнее задание: узнать, как включить поля
Прикрепленные файлы:
27. пользователь 11.11.21 15:51
Сообщение было скрыто модератором.
...
28. пользователь 11.11.21 15:54
Сообщение было скрыто модератором.
...
29. lev6975 11.11.21 17:53 Сейчас в теме
В движения с субконто есть)
Оставьте свое сообщение

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