Тормозит запрос (РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто)
Запрос выполняется от 8 до 30 минут. Как можно оптимизировать?
В качестве параметров передается Период - месяц (скажем июнь). Подразделение - понятное дело подразделение организации. СчетКт - массив из 3х счетов 20, 23 и 29 счет.
Запрос не мой, но нужно понять причину. Пробовал менять порядок проверки условий к виртуальной таблице, убирал 1000000. Вот что обнаружил, если убрать любой вывод ВидовСубконто или самих Субконто, то все выполняется за 500 мс:
Если к оригинальному запросу добавить ПЕРВЫЕ 1, то на скорость выполнения запроса это не влияет. А так он возвращает всего 18000 записей.
Такой SQL запрос генерирует 1С:
План запроса прилагаю (картинку в полный размер можно просмотреть, если нажать ПКМ и выбрать просмотр в отдельной вкладке)
---
Добавил новый план запроса, сегодня он изменился, но время выполнения не уменьшилось
ВЫБРАТЬ
ХозрасчетныйДвиженияССубконто.Период,
ХозрасчетныйДвиженияССубконто.Регистратор,
ХозрасчетныйДвиженияССубконто.НомерСтроки,
ХозрасчетныйДвиженияССубконто.Активность,
ХозрасчетныйДвиженияССубконто.СчетДт,
ХозрасчетныйДвиженияССубконто.СчетКт,
ХозрасчетныйДвиженияССубконто.Организация,
ХозрасчетныйДвиженияССубконто.ВалютаДт,
ХозрасчетныйДвиженияССубконто.ВалютаКт,
ХозрасчетныйДвиженияССубконто.ПодразделениеДт,
ХозрасчетныйДвиженияССубконто.ПодразделениеКт,
ХозрасчетныйДвиженияССубконто.НаправлениеДеятельностиДт,
ХозрасчетныйДвиженияССубконто.НаправлениеДеятельностиКт,
ХозрасчетныйДвиженияССубконто.Сумма,
ХозрасчетныйДвиженияССубконто.КоличествоДт,
ХозрасчетныйДвиженияССубконто.КоличествоКт,
ХозрасчетныйДвиженияССубконто.Содержание,
ХозрасчетныйДвиженияССубконто.ВидСубконтоДт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
ПоказатьПлан запроса прилагаю (картинку в полный размер можно просмотреть, если нажать ПКМ и выбрать просмотр в отдельной вкладке)
---
Добавил новый план запроса, сегодня он изменился, но время выполнения не уменьшилось
Прикрепленные файлы:
sql09072018.txt
Найденные решения
Наконец-то дошли руки. В общем изменил запрос таким образом и все стало летать:
ВЫБРАТЬ
ХозрасчетныйОборотыДтКт.Период,
ХозрасчетныйОборотыДтКт.Регистратор,
ХозрасчетныйОборотыДтКт.СчетДт,
ХозрасчетныйОборотыДтКт.СчетКт,
ХозрасчетныйОборотыДтКт.СубконтоДт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)
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5) Кстати любопытную вещь обнаружил. Эта виртуальная таблица возвращает около 500000 записей, и 500 раз (по 1000 строк за раз) она выполняет мелкие запросы. Я сделал тестовый запрос, который показывает, что суммарное время выполнения этих запросов гораздо меньше, чем суммарное время выполнения всех этих запросов:
Т.е. видно, что 994 секунды ушло, чтобы их выполнить и 121 секунда была потрачена на сами запросы. Стало быть ЛАГ идет где-то внутри самой 1С, возможно она что-то проверяет или обрабатывает между этими мелкими запросиками. А может быть просто на вызов и подготовку очередного запроса уходит время.
sel ect DATEDIFF(ms,MIN(starttime),MAX(endtime)),SUM(Duration)/1000 fr om trace1 where TextData like '%tt10%'
994300 | 121546
Т.е. видно, что 994 секунды ушло, чтобы их выполнить и 121 секунда была потрачена на сами запросы. Стало быть ЛАГ идет где-то внутри самой 1С, возможно она что-то проверяет или обрабатывает между этими мелкими запросиками. А может быть просто на вызов и подготовку очередного запроса уходит время.
(7)
Зачем? Зачем будет соединение, если реквизиты от субконто не берутся?
Вот если бы было Регистратор.Дата или Субконто1.Код, вот тогда бы да, было бы соединение со всеми таблицами составных типов.
Так что кажется, вы что-то путаете.
Если в ней не ограничить субконто, то будет соединение со всеми таблицами, где возможно использование любых субконто.
Зачем? Зачем будет соединение, если реквизиты от субконто не берутся?
Вот если бы было Регистратор.Дата или Субконто1.Код, вот тогда бы да, было бы соединение со всеми таблицами составных типов.
Так что кажется, вы что-то путаете.
(9)Отдельная таблица.
Есть таблица записей регистра, а есть таблица значений субконто для каждой записи каждого счета.
СубконтоДт1 - ссылка на значение - справочник или документ или что еще.
ВидСубконто - пвх вид субконто. Из СубконтоДт1 вы вид субконто не получите никак.
Есть таблица записей регистра, а есть таблица значений субконто для каждой записи каждого счета.
СубконтоДт1 - ссылка на значение - справочник или документ или что еще.
ВидСубконто - пвх вид субконто. Из СубконтоДт1 вы вид субконто не получите никак.
(12) Все зависит от решаемой задачи. Виды субконто можно брать из плана счетов - т.к. обычно вид субконто на счете не меняется.
Если с таблицей ОборотыДтКт работает быстрее, можно подготовить временную таблицу где будет счет и его виды субконто и соединиться с ней.
Если не быстрее, то и смысла в этом нет.
Если с таблицей ОборотыДтКт работает быстрее, можно подготовить временную таблицу где будет счет и его виды субконто и соединиться с ней.
Если не быстрее, то и смысла в этом нет.
(7)
Её ни при каком назначении невозможно использовать, я же писал ранее. Плевать она хотела на параметры. Есть единственный вариант когда она работает быстро - когда в полях выборки не указано ничего связанного с субконто.
это не "ЛАГ" самой 1С. Это "ЛАГ" использования виртуальной таблицы не по назначению.
Её ни при каком назначении невозможно использовать, я же писал ранее. Плевать она хотела на параметры. Есть единственный вариант когда она работает быстро - когда в полях выборки не указано ничего связанного с субконто.
(2) Возможно размер самих таблиц влияет. В таблице ЗначенияСубконто - 54 000 000 строк, в основной таблице хозрасчетного регистра 10 000 000 строк. Судя по запросу INNER JOIN аж 3 раза по каждой из таблиц соединяет
По идее, если вообще никаких отборов не делать, то это должно быть быстрее всего.
Этот запрос возвращает 500 000 записей. 400 000 из которых приходится на 30 июня.
Затем я делаю:
И могу уходить курить 30 минут.
Тоже самое происходит если сделать так:
Т.е. ему все равно, хоть 10 я записей отберу, хоть 500к записей помещу во временную таблицу, хоть кучу отборов понаставлю.
По идее, если вообще никаких отборов не делать, то это должно быть быстрее всего.
Этот запрос возвращает 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к записей помещу во временную таблицу, хоть кучу отборов понаставлю.
Похоже все еще хуже чем я думал. Дело не в одном запросе. Самый долгий запрос выполняющий выборку из таблицы размером 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
ПоказатьЯ склоняюсь к тому, что именно большое количество разнообразных мелких запросов приводит к такому результату. Неясно только как их все собрать в кучу, отделить от других и проанализировать детальней.
Наконец-то дошли руки. В общем изменил запрос таким образом и все стало летать:
ВЫБРАТЬ
ХозрасчетныйОборотыДтКт.Период,
ХозрасчетныйОборотыДтКт.Регистратор,
ХозрасчетныйОборотыДтКт.СчетДт,
ХозрасчетныйОборотыДтКт.СчетКт,
ХозрасчетныйОборотыДтКт.СубконтоДт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)
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот