powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / 8.1 В языке запросов нет аналога WITH ROLLUP?
35 сообщений из 35, показаны все 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
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36881022
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПаляСделайте два одинаковых запроса с группировкой.Зачем, простите, для анализа итогов делать ещё и группировку?

ПаляДобавьте к одному из них расчёт итогов.
Запустите один и второй - посмотрели разницу увидели что разница большая - объяснили почему.
затем на разных количествах строк ещё надо убедится что зависимость от итогов существенная и несравнима с тормозом от обхода таблицы языком 1с и обращения к полям.В отличие от ваших предыдущих собеседников, не буду сыпать доказательствами - мне всё равно, будете считать правым или нет. Давайте рассмотрим это как байку.
Тестировал я с год назад один отчёт. В отчёте нет ничего особого, а вот база... Там завели 4-е субконто, и даже простые отчёты стали тестами производительности серверов.
Тестовое железо - два сервера (железо не особо важно, главное, не рабочие станции, названные "сервер", а двойные ксеоны, памяти 8+, не помню точно, и железный RAID10 из 4х SAS), один 1С:Предприятие 8.1, второй MSSQL2005. Тестировал не отчёт, а запрос для получения данных, за значительный период.
1. Снимаю с запроса для отчёта галочку "Итоги". MSSQL отрабатывает за 3 секунды (отслеживаю нагрузку по дискам, процу и сетевухе), затем жужжит графиком в perfmon 1С секунд 15-20, получаю результат.
2. Ставлю галку "Итоги" на место. MSSQL отрабатывает за 3 секунды (неудивительно), далее 1С зависает наглухо минут на 15. Уходит в жёсткий своп при этом, разумеется (ведь распараллелить один запрос-то как?).
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36881282
Паля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тестировал не отчёт, а запрос для получения данных, за значительный период.
1. Снимаю с запроса для отчёта галочку "Итоги". MSSQL отрабатывает за 3 секунды (отслеживаю нагрузку по дискам, процу и сетевухе), затем жужжит графиком в perfmon 1С секунд 15-20, получаю результат.
2. Ставлю галку "Итоги" на место. MSSQL отрабатывает за 3 секунды (неудивительно), далее 1С зависает наглухо минут на 15. Уходит в жёсткий своп при этом, разумеется (ведь распараллелить один запрос-то как?).

Во! Это уже похоже на разговор!
однако ваша фраза
Уходит в жёсткий своп при этом, разумеется (ведь распараллелить один запрос-то как?). расстраивает меня неимоверно! этож ерунда полная написана! слово "ведь" подразумевает причинно-следственную связь какую-то... ладно, предположим описка.

Ещё важно узнать количество строк в отчете.
Дело в том что если количество строк очень большое то собственно их вывод может занять долгое время.

В отличие от ваших предыдущих собеседников, не буду сыпать доказательствами - мне всё равно, будете считать правым или нет.
Клянусь я вам верю что всё так и было.
Хотел бы понять, что такое "тормозят итоги".

Зачем, простите, для анализа итогов делать ещё и группировку?
Если бы были тестовые данные а не байки то можно было бы попробовать поизучать влияет ли сортировка и группировка на скорость.

Смотрите. Для того чтоб реализовать функцию итоги в 1с достаточно выполнить запрос +
group by + order by. После этого можно построить дерево итогов за время равное одному пробегу по таблице результатов.
Даже тупо свёрткой таблицы итоги можно реализовать средствами 1с за O(N*LOG(N)).
Поэтому почему "тормозят" встроенные итоги мне непонятно.

Вопрос количества строк важен. Если вы получаете миллион строк в отчете и у вас тормозят итоги то это нормально. у вас будет тормозить и вывод этих милион строк в макет по группам. ничо страшного. надо сравнить процентное соотношение времен.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36881296
Паля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да.
В тесте необходимо проверить что при вычислении итогов не осуществляется обращения к ссылочным объектам для получения представления.

Это тоже может тормозить, но собственно к вычислению итогов не относится.

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

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

Сделайте два одинаковых запроса с группировкой.
Добавьте к одному из них расчёт итогов.
Запустите один и второй - посмотрели разницу увидели что разница большая - объяснили почему.
затем на разных количествах строк ещё надо убедится что зависимость от итогов существенная и несравнима с тормозом от обхода таблицы языком 1с и обращения к полям.
Мне лично очевидно, что нет проблем считать итоги на клиенте и во много раз быстрее чем обход таблицы скриптом 1с. если это не так, то просто надо это показать и удивится багу платформы.
Ваш пример не демонстрирует ничего.

Паля, ключевые слова здесь: Построитель отчета и отчет "Анализ доступности товаров на складах".

Расшифрую все по полочкам: Стандартный отчет "Анализ доступности товаров на складах" использует для запроса и его вывода объект ПостроительОтчета (котрый вызывается через Универсальный Отчет) и два его метода:
1. ПостроительОтчета.Выполнить() - выполняется запрос к SQL серверу.
2. ПостроительОтчета.Вывести() - выполненный запрос выводиться в табличный документ. (метод в коде универсального отчета идет следом за ПостроительОтчета.Выполнить(), т.е. никаких промежуточных расчетов не осущевстляется )

В тесте стоят умолчанию настройки для этого отчета, т.е. группировки Склад и Номенклатура, включена галка - выводить итоги.

По первому пункту - метод выполнить, выполняет запрос и по скорости был приблизительно равен, скорости выполнения запроса в MS SQL и естественно + время трансляции.
По второму пункту - метод вывести, как раз и выводит отчет в Табличный документ, который передается ему в качестве параметра, как раз таки когда бежит бегунок в отчете снизу это и есть время работы этого метода, т.е. никаких кривых ручек подобных предположенными вами вариантами развития событий:
Паля В тесте необходимо проверить что при вычислении итогов не осуществляется обращения к ссылочным объектам для получения представления.

Это тоже может тормозить, но собственно к вычислению итогов не относится.
здесь в принципе быть не может, т.е. обращения к выборке из языка 1С кроме ПостроительОтчета.Вывести(), отсутствуют как класс.

Так вот в соответсвии со всем этим можно сделать вывод, что суперагрегирование происходит средствами 1С происходит оно гораздо медленнее чем сам отчет, в тесте указанно, что вывод отчета занимает 98% времени.
Сейчас на память (т.к. действо происходило в 2007) могу сказать, что вывод отчета занимал несколько минут.
Пусть в отчете даже 10000 позиций наличиствующей номенклатуры, такой вывод занимает непозволительное количество времени. В других более простых отчетах, тот же отчет "Ведомость по товарам на складах" вывод отчета занимал несколько секунд. Поэтому и был сделан вывод о том, что существeт зависимость скорости агрегирования от количества таблиц используемых в запросе.

Кстати сам Group By относительно выборки в запросе используется, на что, мне и было указанно постом ниже. Т.е. можно сделать вывод, что потери времени происходят именно на суперагрегировании, т.е. на том , что в MS SQL фактически делает WITH ROLLUP, за исключением вот этого :
ДжиннЯ бы хотел посмотреть, как уважаемый критик средствами SQL сделал бы группировку с итогами по иерархии :)

этого WITH ROLLUP делать не умеет. Но данная проблема на T-SQL решается другими путями и т.к. в моем тесте группировки по групам не используются данное замечание к скорости выполнения моих тестов не имеет никакого отношения.


Да еще забыл добавить, сегодня мой последний день отпуска, который вы мне фактически испортили своей настойчивостью, хотел отдохнуть от изучения SAP и английского и тем более не планировал погружаться в 1С.

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


Паля если вы хотите проводить разговор, а не "сраца по существу" (с) то подобные вашему заявления, здесь неуместны:

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

и т.п. в более завуалированной форме.

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

А вот это здря конечно. ну его нафик. малоли кто там в интернете неправ :-)

vitkhv
Расшифрую все по полочкам: Стандартный отчет "Анализ доступности товаров на складах" использует для запроса и его вывода объект ПостроительОтчета (котрый вызывается через Универсальный Отчет) и два его метода:
1. ПостроительОтчета.Выполнить() - выполняется запрос к SQL серверу.
2. ПостроительОтчета.Вывести() - выполненный запрос выводиться в табличный документ. (метод в коде универсального отчета идет следом за ПостроительОтчета.Выполнить(), т.е. никаких промежуточных расчетов не осущевстляется )

(ээ. а без галочки итоги всё быстро работает? )

И опять недоконца разобрались.
Метод вывести() слишком много действий делает. в чём проблема и как её решать непонятно.

Начали кстати с языка запросов и ИТОГОВ. а вы из слишком высокоуровнего отчета делаете далекоидущие выводы.

Пока из ваших слов ясно что в построителе запросов в некоторых случаях отчеты выводится медленно и это может быть связано с итогами. Ну может быть. Может проблема с выводом в макет секции итоги?

Не надо никаких построителей.

Нужно сделать запрос с итогами и без. c group by и без. (order by и без)
и вызвать у запроса метод выгрузить (с группировкой и без. ).
Исключить получение представлений по ссылкам.

Посчитать время исполнения каждого из двух методов и подумать.
Только после этого можно хоть что-нибудь интересное утверждать.

Я настаиваю на GROUP BY потому что Totals и GROUP BY работают очень похоже и вообще это почти одно и тоже при выгрузке по группировкам.

В тесте необходимо проверить что при вычислении итогов не осуществляется обращения к ссылочным объектам для получения представления.
здесь в принципе быть не может, т.е. обращения к выборке из языка 1С кроме ПостроительОтчета.Вывести(), отсутствуют как класс.
вы не правы. Очевидно что здесь это самое обращение для получения представления и происходит. в запросе вы получаете ссылку - в таблицу выводится наименование справочника. получение наименования по ссылке должно быть где-то и кем-то осуществлено. и функция вывести это делает и это значительное время.

Паля если вы хотите проводить разговор, а не "сраца по существу" (с) то подобные вашему заявления, здесь неуместны:
Не принимайте близко к сердцу. я без злобы.
Более того.
1) это действительно ерунда (связь свопа и параллельности)
2) ссылка действительно безграмотная (только для зарегестрированных и не разворачивается основной запрос)
3) насчёт дилетанта тут каюсь - это лишнее.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36881726
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению, по отчёту я выдал всё что помню.
Результирующих строк было меньше тысячи, иерархические итоги.

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


Проводить такие тесты без галочки, не корректно, т.к. WITH ROLLUP выдает информацию с общими итогами.

Паля
Начали кстати с языка запросов и ИТОГОВ. а вы из слишком высокоуровнего отчета делаете далекоидущие выводы.

Опять же не представляйте мои выводы как далеко идущие, они достаочно ограниченны:
ИТОГИ ПО работают не всегда с той производительность которую дает WITH ROLLUP.

Паля
Я настаиваю на GROUP BY потому что Totals и GROUP BY работают очень похоже и вообще это почти одно и тоже при выгрузке по группировкам.

Естественно работают с одинаковой скоростью, ведь Totals использует GROUP BY и мы сравниваем не скорость агрегирования, а скорость суперагрегирования т.е. WITH ROLLUP vs ИТОГИ ПО (Totals).

Паля
Пока из ваших слов ясно что в построителе запросов в некоторых случаях отчеты выводится медленно и это может быть связано с итогами. Ну может быть. Может проблема с выводом в макет секции итоги?


вы не правы. Очевидно что здесь это самое обращение для получения представления и происходит. в запросе вы получаете ссылку - в таблицу выводится наименование справочника. получение наименования по ссылке должно быть где-то и кем-то осуществлено. и функция вывести это делает и это значительное время.

Я бы с вами согласился если бы, в том же отчете "Ведомость по товарам на складах", были бы аналогичные проблемы, но таких проблем не наблюдалось. А оба отчета выводят одинаковое количество строк т.к. "Заказы поставщикам" на том предприятии не использовались.
Настройки по умолчанию в отчете "Ведомость по товарам на складах" такие же как и в "Анализ доступности" - Группировки Склад, Товар, галочка итоги стоит. Нулевая загрузка SQL сервера тоже показательна, да и в профайлере я такой ужас увидел бы сразу, открытый курсор либо >10 000 запросов по получению "Наименований" номенклатуры не возможно не заметить.
Хотя каюсь, мое изначально ошибочное предположение об отсутствии Groop By (видимо, ошибочно отнес последний Groop By к предстоящему Union ALL) в запросе не дало мне сфокусировать внимание на других вещах в частности на запросе по получению представлений :(, и так как такой запрос все же был (в приведенном мною запросе, получения Наименований нет), не выполнялся он несколько минут, иначе я бы его заметил :)

ПаляНе надо никаких построителей.
В топике идет указание именно на проблемы в построителе отчетов:
vitkhv
как я понял из своих наблюдений 1С тянет на сервер предприятия выборку и там ее группирует в соответсвии с параметрами указанными в построителе отчетов.

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

Паля
Нужно сделать запрос с итогами и без. c group by и без. (order by и без)
и вызвать у запроса метод выгрузить (с группировкой и без. ).
Исключить получение представлений по ссылкам.

Посчитать время исполнения каждого из двух методов и подумать.
Только после этого можно хоть что-нибудь интересное утверждать.


Паля, может быть вы подготовите для нас такие тесты? А то ваших постах ровно такие же как и у нас "ничем не подкрепленные" утверждения по типу, "я настаиваю", ну раз настаиваете, все карты вам в руки ;).
В частности для меня было бы интересно увидеть, что в этом отношении изменилось с 2007 года.

Паляссылка действительно безграмотная (только для зарегестрированных и не разворачивается основной запрос) т.е. вы безграмотность ссылки определяете по тому, требуется ли там регистрация или не требуется? Паля, вы не исправимы.
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36882456
Паля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять же не представляйте мои выводы как далеко идущие, они достаочно ограниченны:
ИТОГИ ПО работают не всегда с той производительность которую дает WITH ROLLUP.
Ну это слишком слабое утверждение. ясно дело что не всегда и вообще любая обработка данных в 1с - тормозит неимоверно (по сравнению с нормальными языками или sql сервером) .
ЛЮБАЯ. поэтому упоминать о том что тормозят итоги надо не на фоне ролапа а на фоне клиентской обработки..

Имеет смысл соотношение затрат подсчета итогов и других обработок данных (в частности вывод их в макет или просто перебор) на клиенте.

В топике идет указание именно на проблемы в построителе отчетов:vitkhv
как я понял из своих наблюдений 1С тянет на сервер предприятия выборку и там ее группирует в соответсвии с параметрами указанными в построителе отчетов.

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

Мне как раз интересно было экстраполировать. К сожалению я вообще не умею работать с построителем отчетов. мне трудно мысленно препарировать его и сообразить в чём проблема.
может и в нём ошибка.то что построитель отчета тормозит при выводе на экран - это понятно.
то что итоги в запросе занимают некоторое время для расчета - тоже понятно.
что значит что "итоги по" "тормозят" - непонятно.

WildSery более понятный пример привёл. хотя тоже надо исследовать. может галочка итогов - дополнительную секцию в макете отрисовывает которая и тормозит. да и упоминание о свопе настораживает. Или может по иерархии у него что тоже отдельная песня.

как я понял из своих наблюдений 1С тянет на сервер предприятия выборку и там ее группирует в соответсвии с параметрами указанными в построителе отчетов.
Ну как вы уже поняли - это не так.

Я бы с вами согласился если бы, в том же отчете "Ведомость по товарам на складах", были бы аналогичные проблемы, но таких проблем не наблюдалось. А оба отчета выводят одинаковое количество строк т.к. "Заказы поставщикам" на том предприятии не использовались.
Настройки по умолчанию в отчете "Ведомость по товарам на складах" такие же как и в "Анализ доступности" - Группировки Склад, Товар, галочка итоги стоит.

Ну надо поизучать почему так. и в чём тут затык.
Не понимаю: какое утверждение о скорости работы итогов в 1с вы можете сформулировать на основе этих посылок? :-) (то что они не так быстро как роллап это очевидно и не так быстро как много других операций тоже).
(например : Есть два отчета. и там и там стоит галочка итоги. один из них выводит на экран данные 5минут второй 10 секунд => очевидно итоги в 1с работают медленно! доколе!)

Паля, может быть вы подготовите для нас такие тесты?
я не умею. я бездельник (в смысле теоретег).
...
Рейтинг: 0 / 0
8.1 В языке запросов нет аналога WITH ROLLUP?
    #36882844
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПаляОпять же не представляйте мои выводы как далеко идущие, они достаочно ограниченны:
ИТОГИ ПО работают не всегда с той производительность которую дает WITH ROLLUP.
Ну это слишком слабое утверждение. ясно дело что не всегда и вообще любая обработка данных в 1с - тормозит неимоверно (по сравнению с нормальными языками или sql сервером) .
ЛЮБАЯ. поэтому упоминать о том что тормозят итоги надо не на фоне ролапа а на фоне клиентской обработки..

Теоретически так, но в нашем случае тема, есть ли аналог WITH ROLLUP в 1С. Но по вашему 1С конечно же не причем, скорость работы ее конкретных методов можно только сравнивать с гипотетической клиентской обработкой, все остальные сравнения по вашему некорректны.


Паля
Vitkhvкак я понял из своих наблюдений 1С тянет на сервер предприятия выборку и там ее группирует в соответсвии с параметрами указанными в построителе отчетов.
Ну как вы уже поняли - это не так.


Не выдергивайте из контекста, я понял, что это не так еще в 2007 году и лично вы в этом никак не поучаствовали.

Паля
я не умею. я бездельник (в смысле теоретег).


Т.е. вы для себя даже теоритечески не можете допустить мысли, о том что Итоги ПО и были причиной торомзов, виновата конечно же была (конечно только теоретически) отрисовка этого отчета на экране. А все мои аргументы и утверждения конечно же слабы.

Палято что построитель отчета тормозит при выводе на экран - это понятно.
то что итоги в запросе занимают некоторое время для расчета - тоже понятно.
что значит что "итоги по" "тормозят" - непонятно.

Ну надо поизучать почему так. и в чём тут затык.
Не понимаю: какое утверждение о скорости работы итогов в 1с вы можете сформулировать на основе этих посылок? :-) (то что они не так быстро как роллап это очевидно и не так быстро как много других операций тоже).
(например : Есть два отчета. и там и там стоит галочка итоги. один из них выводит на экран данные 5минут второй 10 секунд => очевидно итоги в 1с работают медленно! доколе!)

Опять вы передергиваете. Я вам представляю одно утверждение как подкрепление второго, вы берете это подкрепляющее утверждение и делаете из него цирк, как будто первого утверждения и не существует. Т.е. как в анекдоте про Логику - раз спичек нет, значит Импотент.
Так же и мои аргументы у вас превращаются в это: Есть два отчета. и там и там стоит галочка итоги. один из них выводит на экран данные 5минут второй 10 секунд => очевидно итоги в 1с работают медленно!
С таким подходом общение с вами напрягает и какой либо аргументированный спор с вами становиться просто бессмысленным.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / [игнор отключен] [закрыт для гостей] / 8.1 В языке запросов нет аналога WITH ROLLUP?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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