powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / 8.1 В языке запросов нет аналога WITH ROLLUP?
25 сообщений из 35, страница 1 из 2
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36877635
Фотография cyx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конструкция WITH ROLLUP, применяемая с GROUP BY, позволяет добавить строку с суммой значений всех предыдущих строк.
Если ее в 1С все же нет, то вопрос в том, как решить эту задачу, модернизировав запрос "малой кровью".
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36877663
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cyxКонструкция WITH ROLLUP, применяемая с GROUP BY, позволяет добавить строку с суммой значений всех предыдущих строк.

если речь о платформе 8.Х, то попробуй ИТОГИ
...
Предложение ИТОГИ позволяет определить, расчет каких итогов необходим в запросе. При расчете итогов вычисляются значения агрегатных функций по выборкам с одинаковыми значениями полей – контрольных точек. Итоги добавляются в результат запроса как итоговые строки.

Порядок расчета итогов запроса описывается в соответствии со следующими правилами:

<Описание итогов>

<Итоги> [<Описание итогов>]

<Итоги>

ИТОГИ [<Список итоговых_полей>] ПО [ОБЩИЕ] <Список контрольных точек>

<Список итоговых_полей>

<Итоговое_поле> [,<Список_итоговых_полей> [, …]]

<Итоговое_поле>

<Агрегатная_функция> | <Выражение> [[КАК] <Псевдоним_поля>]

<Список контрольных точек>

<Контрольная точка> [, <Контрольная точка> [, …]]

<Контрольная точка>

<Выражение> [[ТОЛЬКО] ИЕРАРХИЯ] | [ПЕРИОДАМИ(Секунда | Минута | Час | День | Неделя | Месяц | Квартал | Год | Декада | Полугодие
[,<Литерал типа DATE> | <Идентификатор параметра>]
[,<Литерал типа DATE> | <Идентификатор параметра>])] [[КАК] Псевдоним поля]

Описание итогов начинается с обязательного ключевого слова ИТОГИ.

<Список агрегатных функций> содержит перечень агрегатных функций, которые необходимо рассчитывать в итогах. Агрегатные функции рассматриваются в Агрегатные функции языка запросов.

Ключевое слово ОБЩИЕ означает, что необходимо сформировать итоговую строку по всему результату запроса. Подробнее расчет общих итогов описан в Расчет общих итогов.

Помимо общих итогов, можно задать расчет итогов по контрольным точкам. Для этого после обязательного ключевого слова ПО необходимо указать <Список контрольных точек>. Каждая <Контрольная точка> содержит <Выражение>, вычисляемое при выполнении запроса. По каждой комбинации значений этих выражений будут рассчитаны и добавлены в результат запроса итоговые строки.

Если контрольная точка является ссылкой на справочник, возможен расчет итогов по иерархии справочника. Для этого после такой ссылки надо указать обязательное ключевое слово ИЕРАРХИЯ. Иерархические итоги описаны в Итоги по иерархии.

Если контрольная точка является полем - субконто регистра бухгалтерии, то при получении итогов по этой контрольной точке будут игнорироваться значения NULL.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36877763
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36877816
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvShuhard,

Почитай

Shuhard извни, это для cyx.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36877946
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ссылка ни то, ни сё. Перлы так и сыпят, типа "А сейчас в 1С расчет итогов - узкое место, так как происходит на клиенте"
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36877954
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvvitkhvShuhard,

Почитай

Shuhard извни, это для cyx.
не за что
сходил
прочитал
поржал
спасибки
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36878009
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryСсылка ни то, ни сё. Перлы так и сыпят, типа "А сейчас в 1С расчет итогов - узкое место, так как происходит на клиенте"

Такие операции на клиенте не есть гуд или вы думаете иначе?
Хотя по моим наблюдениям такие расчеты производяться на сервере 1С.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36878265
Паля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitkhvWildSeryСсылка ни то, ни сё. Перлы так и сыпят, типа "А сейчас в 1С расчет итогов - узкое место, так как происходит на клиенте"

Такие операции на клиенте не есть гуд или вы думаете иначе?
Хотя по моим наблюдениям такие расчеты производяться на сервере 1С.
Такие операции есть "ПОХ" где производятся. это копейка.
и не надо пихать безграмотные ссылки на никому не нужные мнения дилетанта.

Если у вас есть проблемы с производительностью итогов то предложите их предметно к обсуждению, а не так что "есть такое мнение". Предметно - это запросы, версии 1с, результат в ms.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36878282
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПаляЕсли у вас есть проблемы с производительностью итогов то предложите их предметно к обсуждению, а не так что "есть такое мнение". Предметно - это запросы, версии 1с, результат в ms.

Там есть и запрос в 1С и трасса в профайлере. Или для вас в том топике слишком много букф?

Паля
Такие операции есть "ПОХ" где производятся. это копейка.


Копейка? 90 % от общего времени выполнения запроса! Насколько я помню у меня данный запрос выполнялся несколько минут, а это запрос из стандартного отчета в 1С.

Я вообще то не ожидал, что моя ссылка вызовет такую бурю, если одбросить весь тот флуд которым славиться миста, т.е. три главных вывода в тему топика:
1. ИТОГИ ПО это есть аналог WITH ROLLUP для запросов 1С.
2. ИТОГИ ПО работают не всегда с той производительность которую дает WITH ROLLUP.
3. Многоплатформенность 1С применительно к серверам БД приводит к не применимости использования WITH ROLLUP т.к. данная конструкция является частным расширением синтаксиса языка T-SQL.

Паля
и не надо пихать безграмотные ссылки на никому не нужные мнения дилетанта.

Ну уж если лично вам не данно читать между строк, не стоит мнение других выставлять за мнениями дилетантов.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36878300
Паля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitkhv
Там есть и запрос в 1С и трасса в профайлере. Или для вас в том топике слишком много букф?


мм. может я что-то путаю . не вижу в ссылке вообще ничего ПО ТЕМЕ "быстродействие ИТОГов 1с".
Ну то есть вообще ничего кроме "по моему мнению наблюдаются тормоза". что предлагаете делать с такими заявлениями?

Копейка? 90 % от общего времени выполнения запроса! Насколько я помню у меня данный запрос выполнялся несколько минут, а это запрос из стандартного отчета в 1С.

Ещё раз. для того чтобы это было не только в вашей голове - необходимо раскрыть тему. как минимум привести как можно более простой, воспроизводимый запрос, вычисление итогов которого критично, c объяснениями и замерами.
Приводить ссылку на такой текст имеет смысл. Зачем приводить ссылку на непонятные утверждения неизвестно кого - "я что-то помню" и "мне вроде казалось"?
Ерунда какая.

1. ИТОГИ ПО это есть аналог WITH ROLLUP для запросов 1С.
2. ИТОГИ ПО работают не всегда с той производительность которую дает WITH ROLLUP.
3. Многоплатформенность 1С применительно к серверам БД приводит к не применимости использования WITH ROLLUP т.к. данная конструкция является частным расширением синтаксиса языка T-SQL.

Ну да. согласен по всем трём. мораль?
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36878313
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паля
Ну да. согласен по всем трём. мораль?

8.1 В языке запросов нет аналога WITH ROLLUP?
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36878330
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паля
мм. может я что-то путаю . не вижу в ссылке вообще ничего ПО ТЕМЕ "быстродействие ИТОГов 1с".
Ну то есть вообще ничего кроме "по моему мнению наблюдаются тормоза". что предлагаете делать с такими заявлениями?

Вы правы, тема топика там "v8: По мотивам-обсуждение статьи о сравнении 1С и Navision."

А по поводу "по моему наблюдению наблюдаются тормоза", чьи наблюдения для вас имеют вес, что бы вы такого тестера не назвали дилетантом? Самомнение хлещет через край, господин Паля.


Паля
Ещё раз. для того чтобы это было не только в вашей голове - необходимо раскрыть тему. как минимум привести как можно более простой, воспроизводимый запрос, вычисление итогов которого критично, c объяснениями и замерами.
Приводить ссылку на такой текст имеет смысл. Зачем приводить ссылку на непонятные утверждения неизвестно кого - "я что-то помню" и "мне вроде казалось"? Ерунда какая.

Не передергивайте, там нет "я что то помню" и "мне вроде показалось", там есть утверждение что есть потери производительности в ИТОГИ ПО с которым вы в итоге согласились, приведен запрос 1С и трасса в профайлере и указанно, что сам запрос выполняется моментально, а затем идет его обработка на сервере 1С, которая занимает огромное количество времени по сравнению со временем выполнения самого запроса. Т.к. трасса в профайлере показывает, что в 1С запросе не используется Group By, следует вывод функцию 1С выполняет сама, причем выполняет отвратительно медленно. Какие еще вам замеры нужны, какого рода нагрузочное тестирование?

Про "простой" и "воспроизводимый запрос", там приведен конкретный запрос который тормозил с указанием в топике про то, что в запросе используются множественные объединения, на простых запросах, как раз таки проблем и не наблюдалось.

Да кстати, от вас кроме обвинений в некомпетенции я никаких опровержений хотя бы на уровне приведенных примеров топика указанного в ссылке я не увидел, я уже молчу про нагрузочное тестирование в ВАШЕМ исполнении, также как я никогда до этого не видел ВАШИ подобные тесты на этом форуме, может конечно плохо смотрел, если ошибаюсь дайте ссылку.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36878531
Фотография cyx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shuhard,

Спасибо!
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36878561
Паля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ээ. вы про чо вообще?
Пальцем ткните где это всё о чём вы говорите. Нет честно. я может не в ту ссылку ткнулся. я вижу только вот по ссылке:
авторВот вычитал такое в статье - "1С 80 поддерживает полноценные SQL запросы на чтение данных, с объединениями множества таблиц."
Не согласен - 1С не подерживает функции суперагрегирования данных WITH CUBE и WITH ROLLUP.
В 1С в большинстве SQL запросов не используется GROUP BY,
как я понял из своих наблюдений 1С тянет на сервер предприятия выборку и там ее группирует в соответсвии с параметрами указанными в построителе отчетов.
Трассировка в профайлере только подтвердила мои наблюдения.
Так вот по некоторым SQL запросам в которых используется "с объединениями множества таблиц" наблюдаются жуткие тормоза.
Поэтому если читать вот это-"Или же можно предположить наличие большой избыточности данных, т.е. наличие большого количества таблиц, служащих только для облегчения обработки данных, данные в которые переносятся триггерами из исходных таблиц." в 1C чтоб не тормозила тоже необходима определенная избыточность данных и по моему мнению необходимая избыточность превосходит все разумные границы.
Где все те чудесные исследования о которых вы говорите. чот я туплю куда смотреть то надо?
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36878577
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cyxShuhard,

Спасибо!
Пожалуйста

Стоит обратить внимание, что в 8.2 для ускорения расчета Итогов появились разные "вкусности"
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36878729
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паля
Где все те чудесные исследования о которых вы говорите. чот я туплю куда смотреть то надо?

Паля я где то писал об иследованиях да кто му же и чудесных? Право не нужно сарказма.
Ну а если вы не можете найти сам запрос и его трассу - в одном из моих постов есть такой значечек ">>" нажмите на него, и текст откроется.
Ну и цель моей ссылки вызвавшей в вашей душе такой дискомфорт было все во лишь донести до автора топика - такую простую мысль:
1. ИТОГИ ПО это есть аналог WITH ROLLUP для запросов 1С. (на это сух указал до меня Shuhard)
2. ИТОГИ ПО работают не всегда с той производительность которую дает WITH ROLLUP. (это я описал в своей ссылке)
3. Многоплатформенность 1С применительно к серверам БД приводит к не применимости использования WITH ROLLUP т.к. данная конструкция является частным расширением синтаксиса языка T-SQL. (ну это естественный вывод если учитывать, что 1С может работать с несколькими серверами БД).

Что вас так завело, что вы позволили себе обвинить меня в дилетанстве мне не понятно, будте добры объясните.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36878736
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhv[Многоплатформенность 1С применительно к серверам БД приводит к не применимости использования WITH ROLLUP т.к. данная конструкция является частным расширением синтаксиса языка T-SQL. (ну это естественный вывод если учитывать, что 1С может работать с несколькими серверами БД).+1. Обсуждали подобные вопросы на курсах.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36878764
Паля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitkhv,

Ну а если вы не можете найти сам запрос и его трассу - в одном из моих постов есть такой значечек ">>" нажмите на него, и текст откроется.
ааа!! типа должно разворачиваться там?
звиняйте коллега!! у меня не разворачивается ни в опере ни в IE..
Сори. что вижу то вижу.

Если там что-то есть разумное - тогда я виноват! прошу прощения! (уже неважно что, главно что есть!! )
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36879703
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паляvitkhv,

Ну а если вы не можете найти сам запрос и его трассу - в одном из моих постов есть такой значечек ">>" нажмите на него, и текст откроется.
ааа!! типа должно разворачиваться там?
звиняйте коллега!! у меня не разворачивается ни в опере ни в IE..
Сори. что вижу то вижу.

Если там что-то есть разумное - тогда я виноват! прошу прощения! (уже неважно что, главно что есть!! )

эта фича Мисты, броузер не причём
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36879941
Паля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shuhard
эта фича Мисты, броузер не причём
В смысле в чём фича? ну теперь то я догадался что там что-то должно быть. но у меня не раскрывается по нажатию..
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36880313
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паля
В смысле в чём фича? ну теперь то я догадался что там что-то должно быть. но у меня не раскрывается по нажатию..

Извиняюсь, совсем забыл, что там это счастье можно посмотреть только после регистрации. И если в опере, после регистрации надо нажать Ctrl+R.

За значком там скрывается вот это:

авторВот запрос - из Анализ доступности товаров на складах:

Код: 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.
ПостроительОтчета.Текст =     "    
|ВЫБРАТЬ   
|    Номенклатура,//    
|    ХарактеристикаНоменклатуры,     
|    КоличествоОстаток,   
|    КоличествоВРезерве,    
|    КоличествоКПолучению,    
|    КоличествоКПередаче,    
|    Склад//    
|    ,ДокументОснование     
|{ВЫБРАТЬ    
|    Номенклатура.*,    
|    ХарактеристикаНоменклатуры.*,   
|    Склад.*,    
|    ДокументОснование.*//    
|,    (ВЫБОР Когда СвободныеОстатки.СвободныйОстаток ЕСТЬ NULL Тогда Ложь Когда СвободныеОстатки.СвободныйОстаток>0 Тогда Истина Иначе Ложь КОНЕЦ) КАК НаличиеСвободногоОстатка     
|} ИЗ    
|(    |ВЫБРАТЬ    
|    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,    
|    ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,    
|    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,    
|    0 КАК КоличествоВРезерве,    
|    0 КАК КоличествоКПолучению,    
|    0 КАК КоличествоКПередаче,    
|    ТоварыНаСкладахОстатки.Склад КАК Склад,    
|    NULL КАК ДокументОснование    
|ИЗ    
|    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон    //, {Номенклатура.*, Склад.*}     
|) КАК ТоварыНаСкладахОстатки    
|    
|ОБЪЕДИНИТЬ ВСЕ    
|   
|ВЫБРАТЬ   
|    ТоварыВРезервеНаСкладахОстатки.Номенклатура,    
|    ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры,    
|    0,    
|    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток,    
|    0,    
|    0,    
|    ТоварыВРезервеНаСкладахОстатки.Склад,    
|    ТоварыВРезервеНаСкладахОстатки.ДокументРезерва    
|ИЗ    
|    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаКОн    //, {Номенклатура.*, Склад.*}     
|) КАК ТоварыВРезервеНаСкладахОстатки    
|    |ОБЪЕДИНИТЬ ВСЕ    
|    |ВЫБРАТЬ    
|    ТоварыКПолучениюНаСкладыОстатки.Номенклатура,    
|    ТоварыКПолучениюНаСкладыОстатки.ХарактеристикаНоменклатуры,    
|    0,    
|    0,    
|    ТоварыКПолучениюНаСкладыОстатки.КоличествоОстаток,    
|    0,    
|    ТоварыКПолучениюНаСкладыОстатки.ДокументПолучения.Склад,    
|    ТоварыКПолучениюНаСкладыОстатки.ДокументПолучения    
|ИЗ    
|    РегистрНакопления.ТоварыКПолучениюНаСклады.Остатки(&ДатаКон    //, {Номенклатура.*, Склад.*}     
|) КАК ТоварыКПолучениюНаСкладыОстатки    
|    
|ОБЪЕДИНИТЬ ВСЕ    
|    
|ВЫБРАТЬ    
|    ТоварыКПередачеСоСкладовОстатки.Номенклатура,    
|    ТоварыКПередачеСоСкладовОстатки.ХарактеристикаНоменклатуры,    
|    0,    
|    0,    
|    0,    
|    ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток,    
|    ТоварыКПередачеСоСкладовОстатки.Склад,    
|    ТоварыКПередачеСоСкладовОстатки.ДокументПередачи    
|ИЗ    
|    РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&ДатаКон    //, {ТоварыКПередачеСоСкладовОстатки.Номенклатура.*, ТоварыКПередачеСоСкладовОстатки.Склад.*}     
|) КАК ТоварыКПередачеСоСкладовОстатки) КАК ВнутреннийЗапрос    
|{ЛЕВОЕ СОЕДИНЕНИЕ (    
|    ВЫБРАТЬ    
|        ТоварыНаСкладахОстатки.Номенклатура КАК НоменклатураСО,     
|        ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатурыСО,     
|        ТоварыНаСкладахОстатки.Склад КАК СкладСО,    
|        СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток - ВЫБОР КОГДА ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КОНЕЦ) КАК СвободныйОстаток    
|    ИЗ    
|        РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон    //, {Номенклатура.*, Склад.*}     
|)КАК ТоварыНаСкладахОстатки    
|            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаКОн    //, {Номенклатура.*, Склад.*}     
|) КАК ТоварыВРезервеНаСкладахОстатки    
|                ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура    |                И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры    
|                И ТоварыНаСкладахОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад    
|    
|    СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры, ТоварыНаСкладахОстатки.Склад) КАК СвободныеОстатки    |        ПО СвободныеОстатки.НоменклатураСО = ВнутреннийЗапрос.Номенклатура    
|        И СвободныеОстатки.ХарактеристикаНоменклатурыСО = ВнутреннийЗапрос.ХарактеристикаНоменклатуры    |        И СвободныеОстатки.СкладСО = ВнутреннийЗапрос.Склад    
|    
|}    
|{    
|ГДЕ     
|    Номенклатура.*,     
|    Склад.*,     
|    ХарактеристикаНоменклатуры   
|,    (ВЫБОР Когда СвободныеОстатки.СвободныйОстаток ЕСТЬ NULL Тогда Ложь Когда СвободныеОстатки.СвободныйОстаток>0 Тогда Истина Иначе Ложь КОНЕЦ) КАК НаличиеСвободногоОстатка    
|    
|}    
|ИТОГИ    
|    СУММА(КоличествоОстаток),    
|    СУММА(КоличествоВРезерве),    
|    СУММА(КоличествоКПолучению),    
|    СУММА(КоличествоКПередаче)    
|ПО ОБЩИЕ, Склад, Номенклатура    
|{    |ИТОГИ ПО    
|    Номенклатура.*,    
|    ХарактеристикаНоменклатуры.*,    
|    Склад.*,    
|    ДокументОснование.*    
|}    
|";    // 

Вот трасса в профайлере-

Код: 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.
exec sp_executesql N'SELECT 
#V8TblAli1_Q_000_T_001._Q_004_F_000RRef f_1, #V8TblAli1_Q_000_T_001._Q_004_F_002 f_2, #V8TblAli1_Q_000_T_001._Q_004_F_003 f_3, #V8TblAli1_Q_000_T_001._Q_004_F_004 f_4, #V8TblAli1_Q_000_T_001._Q_004_F_005 f_5, #V8TblAli1_Q_000_T_001._Q_004_F_006RRef f_6 FROM
( 
SELECT#V8TblAli1_Q_004_T_001._Fld4791RRef _Q_004_F_000RRef, #V8TblAli1_Q_004_T_001._Fld4792RRef _Q_004_F_001RRef, #V8TblAli1_Q_004_T_001._Fld4795Balance _Q_004_F_002, 
CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(28,3)) _Q_004_F_003, 
CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(28,3)) _Q_004_F_004, 
CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(28,3)) _Q_004_F_005, 
#V8TblAli1_Q_004_T_001._Fld4790RRef _Q_004_F_006RRef, 
CAST(NULL AS BINARY(1)) _Q_004_F_007_TYPE, 
CAST(NULL AS BINARY(4)) _Q_004_F_007_RTRef, 
CAST(NULL AS BINARY(16)) _Q_004_F_007_RRRef 
FROM(SELECT#V8TblAli1_B._Fld4790RRef _Fld4790RRef, #V8TblAli1_B._Fld4791RRef _Fld4791RRef, #V8TblAli1_B._Fld4792RRef _Fld4792RRef, SUM(#V8TblAli1_B._Fld4795Balance) _Fld4795Balance FROM(SELECT_AccumRegTotals4797._Fld4790RRef _Fld4790RRef,_AccumRegTotals4797._Fld4791RRef _Fld4791RRef,_AccumRegTotals4797._Fld4792RRef _Fld4792RRef,_AccumRegTotals4797._Fld4795 _Fld4795BalanceFROM_AccumRegTotals4797 WITH(NOLOCK)WHERE
_AccumRegTotals4797._Period = @P1 AND _AccumRegTotals4797._Fld4795 <> CAST(@P2 AS NUMERIC(1,0)) 
UNION ALLSELECT_AccumReg4789._Fld4790RRef _Fld4790RRef,_AccumReg4789._Fld4791RRef _Fld4791RRef,_AccumReg4789._Fld4792RRef _Fld4792RRef,CAST(CASE
WHEN _AccumReg4789._RecordKind = CAST(0 AS NUMERIC(1,0)) 
THEN - _AccumReg4789._Fld4795
WHEN _AccumReg4789._RecordKind = CAST(1 AS NUMERIC(1,0)) 
THEN _AccumReg4789._Fld4795 
ELSE CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(15,3)) 
END AS NUMERIC(21,3)) _Fld4795Balance 
FROM_AccumReg4789 WITH(NOLOCK)WHERE
_AccumReg4789._Period >= @P3 AND _AccumReg4789._Period < @P1 AND _AccumReg4789._Active = @P4 
) #V8TblAli1_B GROUP BY#V8TblAli1_B._Fld4790RRef, #V8TblAli1_B._Fld4791RRef, #V8TblAli1_B._Fld4792RRef HAVINGSUM(#V8TblAli1_B._Fld4795Balance) <> CAST(@P2 AS NUMERIC(1,0)) ) #V8TblAli1_Q_004_T_001 UNION ALLSELECT#V8TblAli1_Q_001_T_001._Fld4727RRef _Q_004_F_000RRef, #V8TblAli1_Q_001_T_001._Fld4728RRef _Q_004_F_001RRef, 
CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(28,3)) _Q_004_F_002, 
#V8TblAli1_Q_001_T_001._Fld4729Balance _Q_004_F_003, 
CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(28,3)) _Q_004_F_004, 
CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(28,3)) _Q_004_F_005, 
#V8TblAli1_Q_001_T_001._Fld4725RRef _Q_004_F_006RRef, #V8TblAli1_Q_001_T_001._Fld4726_TYPE _Q_004_F_007_TYPE, #V8TblAli1_Q_001_T_001._Fld4726_RTRef _Q_004_F_007_RTRef, #V8TblAli1_Q_001_T_001._Fld4726_RRRef _Q_004_F_007_RRRef FROM(SELECT#V8TblAli1_B._Fld4725RRef _Fld4725RRef, #V8TblAli1_B._Fld4726_TYPE _Fld4726_TYPE, #V8TblAli1_B._Fld4726_RTRef _Fld4726_RTRef, #V8TblAli1_B._Fld4726_RRRef _Fld4726_RRRef, #V8TblAli1_B._Fld4727RRef _Fld4727RRef, #V8TblAli1_B._Fld4728RRef _Fld4728RRef, SUM(#V8TblAli1_B._Fld4729Balance) _Fld4729Balance FROM(SELECT_AccumRegTotals4732._Fld4725RRef _Fld4725RRef,_AccumRegTotals4732._Fld4726_TYPE _Fld4726_TYPE,_AccumRegTotals4732._Fld4726_RTRef _Fld4726_RTRef,_AccumRegTotals4732._Fld4726_RRRef _Fld4726_RRRef,_AccumRegTotals4732._Fld4727RRef _Fld4727RRef,_AccumRegTotals4732._Fld4728RRef _Fld4728RRef,_AccumRegTotals4732._Fld4729 _Fld4729BalanceFROM_AccumRegTotals4732 WITH(NOLOCK)WHERE
_AccumRegTotals4732._Period = @P1 AND _AccumRegTotals4732._Fld4729 <> CAST(@P2 AS NUMERIC(1,0)) 
UNION ALLSELECT_AccumReg4724._Fld4725RRef _Fld4725RRef,_AccumReg4724._Fld4726_TYPE _Fld4726_TYPE,_AccumReg4724._Fld4726_RTRef _Fld4726_RTRef,_AccumReg4724._Fld4726_RRRef _Fld4726_RRRef,_AccumReg4724._Fld4727RRef _Fld4727RRef,_AccumReg4724._Fld4728RRef _Fld4728RRef,CAST(CASE
WHEN _AccumReg4724._RecordKind = CAST(0 AS NUMERIC(1,0)) 
THEN - _AccumReg4724._Fld4729
WHEN _AccumReg4724._RecordKind = CAST(1 AS NUMERIC(1,0)) 
THEN _AccumReg4724._Fld4729 
ELSE CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(15,3)) 
END AS NUMERIC(21,3)) _Fld4729Balance 
FROM_AccumReg4724 WITH(NOLOCK)WHERE
_AccumReg4724._Period >= @P3 AND _AccumReg4724._Period < @P1 AND _AccumReg4724._Active = @P4 
) #V8TblAli1_B GROUP BY#V8TblAli1_B._Fld4725RRef, #V8TblAli1_B._Fld4726_TYPE, #V8TblAli1_B._Fld4726_RTRef, #V8TblAli1_B._Fld4726_RRRef, #V8TblAli1_B._Fld4727RRef, #V8TblAli1_B._Fld4728RRef HAVINGSUM(#V8TblAli1_B._Fld4729Balance) <> CAST(@P2 AS NUMERIC(1,0)) ) #V8TblAli1_Q_001_T_001 UNION ALLSELECT#V8TblAli1_Q_002_T_001._Fld4778RRef _Q_004_F_000RRef, #V8TblAli1_Q_002_T_001._Fld4779RRef _Q_004_F_001RRef, 
CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(28,3)) _Q_004_F_002, 
CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(28,3)) _Q_004_F_003, 
#V8TblAli1_Q_002_T_001._Fld4784Balance _Q_004_F_004, 
CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(28,3)) _Q_004_F_005, 
CASEWHEN #V8TblAli1_Q_002_T_001._Fld4777_TYPE = 0x08 AND #V8TblAli1_Q_002_T_001._Fld4777_RTRef = 0x0000007D THEN _Document125._Fld2922RRefELSE CAST(NULL AS BINARY(16))END _Q_004_F_006RRef,#V8TblAli1_Q_002_T_001._Fld4777_TYPE _Q_004_F_007_TYPE, #V8TblAli1_Q_002_T_001._Fld4777_RTRef _Q_004_F_007_RTRef, #V8TblAli1_Q_002_T_001._Fld4777_RRRef _Q_004_F_007_RRRef FROM(SELECT#V8TblAli1_B._Fld4777_TYPE _Fld4777_TYPE, #V8TblAli1_B._Fld4777_RTRef _Fld4777_RTRef, #V8TblAli1_B._Fld4777_RRRef _Fld4777_RRRef, #V8TblAli1_B._Fld4778RRef _Fld4778RRef, #V8TblAli1_B._Fld4779RRef _Fld4779RRef, SUM(#V8TblAli1_B._Fld4784Balance) _Fld4784Balance FROM(SELECT_AccumRegTotals4786._Fld4777_TYPE _Fld4777_TYPE,_AccumRegTotals4786._Fld4777_RTRef _Fld4777_RTRef,_AccumRegTotals4786._Fld4777_RRRef _Fld4777_RRRef,_AccumRegTotals4786._Fld4778RRef _Fld4778RRef,_AccumRegTotals4786._Fld4779RRef _Fld4779RRef,_AccumRegTotals4786._Fld4784 _Fld4784BalanceFROM_AccumRegTotals4786 WITH(NOLOCK)WHERE
_AccumRegTotals4786._Period = @P1 AND _AccumRegTotals4786._Fld4784 <> CAST(@P2 AS NUMERIC(1,0)) 
UNION ALLSELECT_AccumReg4775._Fld4777_TYPE _Fld4777_TYPE,_AccumReg4775._Fld4777_RTRef _Fld4777_RTRef,_AccumReg4775._Fld4777_RRRef _Fld4777_RRRef,_AccumReg4775._Fld4778RRef _Fld4778RRef,_AccumReg4775._Fld4779RRef _Fld4779RRef,CAST(CASE
WHEN _AccumReg4775._RecordKind = CAST(0 AS NUMERIC(1,0)) 
THEN - _AccumReg4775._Fld4784
WHEN _AccumReg4775._RecordKind = CAST(1 AS NUMERIC(1,0)) 
THEN _AccumReg4775._Fld4784 
ELSE CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(15,3)) 
END AS NUMERIC(21,3)) _Fld4784Balance 
FROM_AccumReg4775 WITH(NOLOCK)WHERE
_AccumReg4775._Period >= @P3 AND _AccumReg4775._Period < @P1 AND _AccumReg4775._Active = @P4 
) #V8TblAli1_B GROUP BY#V8TblAli1_B._Fld4777_TYPE, #V8TblAli1_B._Fld4777_RTRef, #V8TblAli1_B._Fld4777_RRRef, #V8TblAli1_B._Fld4778RRef, #V8TblAli1_B._Fld4779RRef HAVING
SUM(#V8TblAli1_B._Fld4784Balance) <> CAST(@P2 AS NUMERIC(1,0)) 
) #V8TblAli1_Q_002_T_001 
LEFT OUTER JOIN _Document125 WITH(NOLOCK) 
ON #V8TblAli1_Q_002_T_001._Fld4777_TYPE = 0x08 AND #V8TblAli1_Q_002_T_001._Fld4777_RTRef = 0x0000007D AND #V8TblAli1_Q_002_T_001._Fld4777_RRRef = _Document125._IDRRef 
UNION ALLSELECT#V8TblAli1_Q_003_T_001._Fld4751RRef _Q_004_F_000RRef, #V8TblAli1_Q_003_T_001._Fld4752RRef _Q_004_F_001RRef, 
CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(28,3)) _Q_004_F_002, 
CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(28,3)) _Q_004_F_003, 
CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(28,3)) _Q_004_F_004, 
#V8TblAli1_Q_003_T_001._Fld4757Balance _Q_004_F_005, #V8TblAli1_Q_003_T_001._Fld4749RRef _Q_004_F_006RRef, #V8TblAli1_Q_003_T_001._Fld4750_TYPE _Q_004_F_007_TYPE, #V8TblAli1_Q_003_T_001._Fld4750_RTRef _Q_004_F_007_RTRef, #V8TblAli1_Q_003_T_001._Fld4750_RRRef _Q_004_F_007_RRRef FROM(SELECT#V8TblAli1_B._Fld4749RRef _Fld4749RRef, #V8TblAli1_B._Fld4750_TYPE _Fld4750_TYPE, #V8TblAli1_B._Fld4750_RTRef _Fld4750_RTRef, #V8TblAli1_B._Fld4750_RRRef _Fld4750_RRRef, #V8TblAli1_B._Fld4751RRef _Fld4751RRef, #V8TblAli1_B._Fld4752RRef _Fld4752RRef, SUM(#V8TblAli1_B._Fld4757Balance) _Fld4757Balance FROM(SELECT_AccumRegTotals4759._Fld4749RRef _Fld4749RRef,_AccumRegTotals4759._Fld4750_TYPE _Fld4750_TYPE,_AccumRegTotals4759._Fld4750_RTRef _Fld4750_RTRef,_AccumRegTotals4759._Fld4750_RRRef _Fld4750_RRRef,_AccumRegTotals4759._Fld4751RRef _Fld4751RRef,_AccumRegTotals4759._Fld4752RRef _Fld4752RRef,_AccumRegTotals4759._Fld4757 _Fld4757BalanceFROM_AccumRegTotals4759 WITH(NOLOCK)WHERE
_AccumRegTotals4759._Period = @P1 AND _AccumRegTotals4759._Fld4757 <> CAST(@P2 AS NUMERIC(1,0)) 
UNION ALLSELECT_AccumReg4748._Fld4749RRef _Fld4749RRef,_AccumReg4748._Fld4750_TYPE _Fld4750_TYPE,_AccumReg4748._Fld4750_RTRef _Fld4750_RTRef,_AccumReg4748._Fld4750_RRRef _Fld4750_RRRef,_AccumReg4748._Fld4751RRef _Fld4751RRef,_AccumReg4748._Fld4752RRef _Fld4752RRef,CAST(CASE
WHEN _AccumReg4748._RecordKind = CAST(0 AS NUMERIC(1,0)) 
THEN - _AccumReg4748._Fld4757
WHEN _AccumReg4748._RecordKind = CAST(1 AS NUMERIC(1,0)) 
THEN _AccumReg4748._Fld4757 
ELSE CAST(CAST(0 AS NUMERIC(1,0)) AS NUMERIC(15,3)) 
END AS NUMERIC(21,3)) _Fld4757Balance 
FROM_AccumReg4748 WITH(NOLOCK)WHERE
_AccumReg4748._Period >= @P3 AND _AccumReg4748._Period < @P1 AND _AccumReg4748._Active = @P4 
) #V8TblAli1_B GROUP BY#V8TblAli1_B._Fld4749RRef, #V8TblAli1_B._Fld4750_TYPE, #V8TblAli1_B._Fld4750_RTRef, #V8TblAli1_B._Fld4750_RRRef, #V8TblAli1_B._Fld4751RRef, #V8TblAli1_B._Fld4752RRef HAVINGSUM(#V8TblAli1_B._Fld4757Balance) <> CAST(@P2 AS NUMERIC(1,0)) ) #V8TblAli1_Q_003_T_001 ) #V8TblAli1_Q_000_T_001 
SELECT @@TRANCOUNT', N'@P1 datetime,@P2 numeric(1,0),@P3 datetime,@P4 varbinary(1)', {ts '3999-11-01 00:00:00'},  0 , {ts '2007-07-03 00:00:00'}, 0x01 

Группировки - Склад,Номенклатура
Запрос на SQL сервере выполняется моментально
98% времени тратится на вывод отчета.
Все эти 98% загружен сервер предприятия.
В трассе запроса нет Group BY.
В случае если бы группировал SQL сервер это было бы моментально.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36880516
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паля но у меня не раскрывается по нажатию..
мне пох,
тебе обидно
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36880888
Паля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лана. с техзатыком разобрались.
Продолжим сраца по существу.

Группировки - Склад,Номенклатура
Запрос на SQL сервере выполняется моментально
98% времени тратится на вывод отчета.
Все эти 98% загружен сервер предприятия.
В трассе запроса нет Group BY.
В случае если бы группировал SQL сервер это было бы моментально.

Нет ну причём тут ИТОГИ?
То что вы написали ВООБЩЕ ничего не означает. о чём эти наблюдения?

Сделайте два одинаковых запроса с группировкой.
Добавьте к одному из них расчёт итогов.
Запустите один и второй - посмотрели разницу увидели что разница большая - объяснили почему.
затем на разных количествах строк ещё надо убедится что зависимость от итогов существенная и несравнима с тормозом от обхода таблицы языком 1с и обращения к полям.
Мне лично очевидно, что нет проблем считать итоги на клиенте и во много раз быстрее чем обход таблицы скриптом 1с. если это не так, то просто надо это показать и удивится багу платформы.
Ваш пример не демонстрирует ничего.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36880925
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПаляНет проблем считать итоги на клиенте и во много раз быстрее чем обход таблицы скриптом 1с

в абстрактной учетной системе возможно проблем и нет
к 8.1 утверждение отношения не имеет
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36881019
Егоров Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паля Нет ну причём тут ИТОГИ?
То что вы написали ВООБЩЕ ничего не означает. о чём эти наблюдения?

Сделайте два одинаковых запроса с группировкой.
Добавьте к одному из них расчёт итогов.
Запустите один и второй - посмотрели разницу увидели что разница большая - объяснили почему.
затем на разных количествах строк ещё надо убедится что зависимость от итогов существенная и несравнима с тормозом от обхода таблицы языком 1с и обращения к полям.
Умея пользоваться мониторингом не только 1С, достаточно и одного запроса, чтобы понять, что затык расчета итогов - на стороне 1С. :) А уже в чем конкретно этот затык - совершенно фиолетово, ибо повлиять на его, не выходя за рамки платформы еще пока нельзя...
ПаляМне лично очевидно, что нет проблем считать итоги на клиенте и во много раз быстрее чем обход таблицы скриптом 1с. Это естественно, но расчет итогов на сервере БД также во много раз быстрее, чем на клиенте. Даже если клиентом тут выступает сервер приложения 1С. И это не бага платформы, а вполне нормальное поведение - с учетом единого сервера приложения под все поддерживаемые БД. Вот если бы 1С сделала под каждую БД отдельный оптимизированный сервер приложения - тогда это было бы бага. А пока это фича, ибо "так и было задумано"... :)
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / [игнор отключен] [закрыт для гостей] / 8.1 В языке запросов нет аналога WITH ROLLUP?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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