Фирма «1С» анонсировала группирующие наборы в языке запросов

05.07.2019      40487

Фирма «1С» анонсировала обновление в языке запросов, реализовав поддержку GROUPING SETS. Новая возможность появится в платформе «1С:Предприятие», начиная с версии 8.3.16.

Чем хорош GROUPING SETS

Конструкция GROUPING SETS предназначена для группировки по нескольким группам за одно сканирование таблицы, другими словами она эквивалентна конструкции ОБЪЕДИНИТЬ ВСЕ с запросами с СГРУППИРОВАТЬ ПО для указанных групп. Поля списка выборки, не попадающие в текущую группу, заменяются на NULL.

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

Как это будет работать

В качестве иллюстрации разработчики приводят решение задачи на базе регистра сведений ШтатноеРасписание, когда необходимо выбрать все возможные комбинации отдела, должности, руководителя, сгруппировав по ним и просуммировав зарплату. Ранее это можно было сделать только через три запроса и объединение их результатов.

 

Содержимое регистра и результат запроса

 

«С использованием GROUPING SETS этот запрос можно написать гораздо изящнее», – поясняют разработчики.

 

ВЫБРАТЬ

 РегистрСведенийШтатноеРасписание.Отдел КАК Отдел,

 РегистрСведенийШтатноеРасписание.Должность КАК Должность,

 РегистрСведенийШтатноеРасписание.Руководитель КАК Руководитель,

 СУММА(РегистрСведенийШтатноеРасписание.Зарплата) КАК Зарплата

ИЗ

 РегистрСведений.ШтатноеРасписание КАК РегистрСведенийШтатноеРасписание СГРУППИРОВАТЬ ПО ГРУППИРУЮЩИМ НАБОРАМ

( 

( РегистрСведенийШтатноеРасписание.Отдел,

 РегистрСведенийШтатноеРасписание.Должность,

 РегистрСведенийШтатноеРасписание.Руководитель),

( РегистрСведенийШтатноеРасписание.Отдел,

 РегистрСведенийШтатноеРасписание.Должность), 

( РегистрСведенийШтатноеРасписание.Должность,

 РегистрСведенийШтатноеРасписание.Руководитель)

)

 

Таким образом, поддержка конструкции GROUPING SETS позволит в ряде случаев в разы сократить количество строк в запросах и сделать их более читаемыми.

Подробное описание новой функциональности


Автор:
Обозреватель


См. также

Новость

17 октября 2024 года компания «Инфостарт» и фирма «1С» приглашают принять участие в 11-м ежегодном бизнес-форуме «1С:ERP», посвященном внедрению и развитию решений и сервисов «1С» для корпоративного рынка, предприятий крупного и среднего масштаба.

25.07.2024    581    AnastasiaKl    0       

16

Новость 1С:Документооборот Новый релиз Обзор готовых решений ЭДО

Фирма «1С» выпустила очередное обновление для линейки решений 1С:Документооборот. В состав релиза вошли несколько очень интересных решений для организации совещаний и встреч, а также разработчики анонсировали новую концепцию ЭДО для 1С:ДО 3.0.15.

24.07.2024    360    ЕленаЧерепнева    0       

1

Новость Обзор готовых решений

1С:MDM КОРП 3.1 – новое решение для управления данными. Может показаться, что это развитие ранее выпущенной конфигурации 1С:MDM 2.5, но это совершенно новый продукт. Рассказываем об особенностях 1С:MDM КОРП 3.1 и разбираем его отличия от 1С:MDM 2.5.

24.07.2024    915    ЕленаЧерепнева    0       

17

Новость Платформа 1С v8.3 Зазеркалье

Фирма «1С» сообщила о запланированных на релиз 8.3.27 изменениях. От нового релиза платформы можно ожидать ускорения в работе, новых возможностей для управления хранилищем двоичных данных, а также асинхронного создания объектов внешних компонент.

23.07.2024    5163    ЕленаЧерепнева    1       

0

Новость Автоматизация Искусственный интеллект

Инфостарт.Корпоративные решения 1С представляет Sherpa RPA – платформу автоматизации процессов, объединяющую классических программных роботов и современные технологии ИИ для выполнения рутинных и интеллектуальных задач бизнеса.

22.07.2024    444    vikad    0       

2

Новость Платформа 1С v8.3 Зазеркалье

Разработчики платформы рассказали о планах по оптимизации нагрузки при выполнении ресурсоемких операций, которые будут реализованы в версии 8.3.27. Администраторы смогут настраивать подключение определенных клиентов к выбранным серверам кластера.

17.07.2024    672    ЕленаЧерепнева    0       

1

Новость

Фирма «1С» выпустила «1С:LIMS Управление лабораторией предприятия КОРП». Ранее в линейке 1С:LIMS пользователям были доступны модули для встраивания в 1С:ERP и 1С:КА. Теперь вышла оригинальная конфигурация с расширенными функциональными возможностями.

16.07.2024    775    ЕленаЧерепнева    0       

2

Новость Зазеркалье

Фирма «1С» обещает добавить в версию платформы 8.3.27 новую возможность – задавать расписание перезапуска процессов для рабочего сервера.  

10.07.2024    1239    ЕленаЧерепнева    0       

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. w.r. 650 05.07.19 11:24 Сейчас в теме
Ждем. Запрос конечно сократится в разы и это не может не радовать. Учитывая какие они монструозные в 1С
2. s_vidyakin 68 05.07.19 11:25 Сейчас в теме
Зачем тут копипаста с зазеркалья? Лучше бы статью написали где пригодится. А то мы всем отделом пытались придумать кейсы использования, ничего не получилось. Догадываюсь что в ЗУПе пригодится, но это не точно, я с ним не работал
Можно было много других нужных фич добавить в язык, но почему-то добавили эту
for_sale; Ziggurat; SagittariusA; Jeka44; AlexK_2012; Brawler; RomaM; mark_oilbass; omut; PowerBoy; yku; TMV; igo1; CyberCerber; A_Max; Sonick; frkbvfnjh; newdigger; boln; dimisa; +20 Ответить
14. пользователь 05.07.19 13:30
Сообщение было скрыто модератором.
...
3. s22 19 05.07.19 11:28 Сейчас в теме
Вообще не ясен смысл данного.
Ziggurat; SagittariusA; PowerBoy; rozer; CyberCerber; +5 Ответить
26. zhichkin 1510 05.07.19 17:20 Сейчас в теме
(3)
(23)
А в ДБ2, Постгре 8.0, Оракле 10 и т д это будет работать нормально?

Согласен, у большой компании, взявшей на себя обязательства поддерживать большое количество СУБД, есть свои ограничения.
Уверен во всех этих СУБД есть свои аналоги оконных функций. Они были утверждены стандартом ANSI SQL 2003.
И да, Вы ещё забыли файловую СУБД 1С упомянуть - это, наверное, самая большая проблема.
4. zhichkin 1510 05.07.19 11:45 Сейчас в теме
Если я не ошибаюсь эта возможность появилась в SQL Server 2008 ... 11 лет прошло.
Интересно когда 1С реализует, например, оконные функции в запросах ?
Ну или обобщённые табличные выражения для выполнения рекурсивных запросов для работы с иерархическими структурами ?
Эти две возможности также появились ещё в SQL Server 2008 и были развиты в SQL Server 2012 ...
И вообще почему не сообщество решает какие функции нужно реализовывать в платформе в первую очередь ?
memb3r; SerVer1C; nnn123; +3 Ответить
13. sergathome 4 05.07.19 13:23 Сейчас в теме
(4) Главное - платформа не является отдельным продуктом.
23. s22 19 05.07.19 15:41 Сейчас в теме
(4)
Интересно когда 1С реализует, например, оконные функции в запросах ?

А в ДБ2, Постгре 8.0, Оракле 10 и т д это будет работать нормально?
Дмитрий74Чел; +1 Ответить
27. nytlenc 05.07.19 18:20 Сейчас в теме
(4) потому что 1С плевать хотела на сообщество.
5. rusmil 262 05.07.19 11:51 Сейчас в теме
Что-то я не понял, а какой тогда будет запрос без использования группирующих наборов?
6. palsergeich 05.07.19 11:52 Сейчас в теме
(5)
появилась в SQL Server 2008 ... 11 лет прошло.
Интересно когда 1С реализует, например, оконные функции в запросах ?
Ну или обобщённые табличные выражения для выполнения рекурсивных запросов для работы с иерархическими структурами ?
Эти две возможности также появились ещё в SQL Server 2008 и были развиты в SQL Server 2012 ...
И вообще почему не сообщество решает какие функции нужно реализовывать в платформе в первую очередь ?
+ – Ответить
5. rusmil 147 05.07.19 11:51
Что-то я не понял, а какой тогда будет запрос

https://wonderland.v8.1c.ru/blog/podderzhka-grouping-sets-v-yazyke-zaprosov/ Смотри тут
31. AntonNV 06.07.19 12:50 Сейчас в теме
(6) Смысл понятен, но в статье у старого запроса один порядок вывода у нового - другой. Надо поменять.
Прикрепленные файлы:
32. s22 19 06.07.19 13:57 Сейчас в теме
(6) c# не быстрее Явы. Раньше точно, сейчас не знаю разбор C# в студии был написан чуть ли не на с++ с вставками ассемблера
(31)
(6) Смысл понятен, но в статье у старого запроса один порядок вывода у нового - другой. Надо поменять.

возможно он не предопределен
39. Darklight 32 08.07.19 11:59 Сейчас в теме
(32)Сортировки в запросе нет - так что порядок не определён, правда интересно как отработает сортировка - но думаю ожидаемо - ведь эта операция будет выполнена после группировки
38. Darklight 32 08.07.19 11:53 Сейчас в теме
(5)В новости ссылка есть на оригинальную статью, там запрос указан - а тоут вырезали самое важное. Но даже в оригинальной статье не указано какой реальный запрос будет направлен к СУБД, чтобы оценить его эффективность, и не приведены оценочные замеры.
А так, для скорости, чтобы не читать одну и ту же таблицу по несколько раз (коли она большая) - можно было бы сначала во временную таблицу сагргировать а из неё уже делать выборки для нужных групп - но да, строк кода будет много - но стои ли фича данного синтаксического сахара, их сократившая, расширения языка запроса? На мой взгляд - совершенно не стоит - тем более, что язык запросов гораздо более нуждается в других конструкция для расширения. Да взять хотя бы гораздо более востребованную задачу получения дублей итогового значения по хронологии на даты, где в источнике нет рассчитанных ни остатков ни движений (пример: получение цен из регистра сведений на каждую дату периода с заданной периодичностью: день, месяц, квартал) - без формирования итогов - т.е. с возможностью применять в подзапросах и временных таблицах.

Ну или минимализироанный расчёт агрегатов истчника для поля с нужными группировками:

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


ИЗ
Справочник.ДоговораКонтрагентов

СГРУППИРОВАТЬ ПО
ДоговорКонтрагента, //да, по псевдонимам было бы здорово тоже группировать
Контрагент //если бы не коснтрукция "ПО АВТО" то от этой секции группировка можно было бы отказаться а так - она нужна как источник данных о группировки для расчета поля "СуммаПоСчету2"
Показать


Ну а если можно было бы создавать свои макро источники - так вообще было бы здорово

Например аналогичный скалярный макро источник:

ФУНКЦИЯ БухИтог
	(
	&Поле КАК Поле, 
	&ДатаОстатков КАК Дата,
	&Счет КАК СчетАрг
	) 

СУММА(Поле)

ИЗ

РегистрБухгалтерии.Хозрасчетный.Остатки(Дата, Счет  В ИЕРАРХИИ(СчетАрг) 

СГРУППИРОВАТЬ
АВТО

;

ВЫБРАТЬ
 
Ссылка КАК ДоговорКонтрагента,
Владелец КАК Контрагент,
 
БухИтог(СуммаОстаток,&ДатаОстатков,&Счет1) ПО (Контрагент, ДоговорКонтрагента=ДоговорКонтрагента) КАК СуммаПоСчету1,
БухИтог(СуммаОстаток,&ДатаОстатков,&Счет1) ПО Контрагент КАК СуммаПоСчету1К,
БухИтог(СуммаОстаток,&ДатаОстатков,&Счет2) ПО АВТО КАК СуммаПоСчету2, 
БухИтог(СуммаОстаток,&ДатаОстатков,&Счет2) ПО Контрагент КАК СуммаПоСчету2,
 

ИЗ
Справочник.ДоговораКонтрагентов

СГРУППИРОВАТЬ ПО
ДоговорКонтрагента, 
Контрагент
Показать



Ну а если такие функции можно было бы ещё и в конфигурации сохранять - для использования во всех запросах - вообще лепота была бы
40. s22 19 08.07.19 12:24 Сейчас в теме
(38)
Ну а если такие функции можно было бы ещё и в конфигурации сохранять - для использования во всех запросах - вообще лепота была бы


Давняя идея. Виртуальные таблицы. Добавляем новый оъект в метаданные - запрос, далее его можно использовать везде. на крайняк можно сделать материализуемым
7. Поручик 4684 05.07.19 12:19 Сейчас в теме
Лучше бы INSERT и DELETE сделали
igo1; Kinestetik; Darklight; rusmil; KazanKokos; zhichkin; Summer_13; acanta; kser87; JIEX@; sansys; wowik; +12 1 Ответить
8. Fox-trot 161 05.07.19 12:28 Сейчас в теме
(7) trancate забыл :-)
Kinestetik; Дмитрий74Чел; KazanKokos; CyberCerber; +4 Ответить
28. nytlenc 05.07.19 18:21 Сейчас в теме
(8) Не trancate а truncate...
9. JIEX@ 103 05.07.19 12:37 Сейчас в теме
Что то ЗП у программистов маленькая или это для провинциалов?
CyberCerber; +1 Ответить
20. AlX0id 05.07.19 14:29 Сейчас в теме
(9)
Они на ИП
10. DanilaDru 262 05.07.19 13:05 Сейчас в теме
Картинка то что надо :)
user915379; zarankony; +2 Ответить
11. AllexSoft 05.07.19 13:14 Сейчас в теме
Мне кажется актуальнее было бы реализация в запросах: trim для обрезки пустых символов в строках, convert для конвертации значений и получение уникального идентификатора объекта в запросе.
Kinestetik; SagittariusA; Tolpinski; sergbsv; karpik666; Darklight; memb3r; SerVer1C; alalsl; OksDallas; PowerBoy; TMV; igo1; CyberCerber; zhichkin; frkbvfnjh; +16 Ответить
24. s22 19 05.07.19 15:44 Сейчас в теме
(11) convert не нужно.
12. s_vidyakin 68 05.07.19 13:15 Сейчас в теме
Короче я почитал по ораклу материалы и понял, эта фича нужна только для оптимизации производительности на больших объемах, когда надо построить несколько отчетов в разных разрезах или сформировать подобие куба - если пользоваться объединением или отдельными запросами под каждый набор, происходит сканирование таблицы для каждого набора группировок. А с этой фичей все итоги считаются за 1 проход и результат можно сохранить во вр.таблицу или в таблицу значений как кэш, а потом быстро выбирать из нее только нужные группировки.
Например можно ночью запускать такой запрос по всем данным и потом днем строить отчеты по "закэшированным" итогам в любых разрезах
AllexSoft; acanta; +2 Ответить
15. json 3337 05.07.19 13:36 Сейчас в теме
Намного полезнее было бы, если б добавили Common table expressions и OUTER APPLY.
Darklight; +1 Ответить
16. asirius 114 05.07.19 13:39 Сейчас в теме
когда уже реализуют ROW_NUMBER и RANK, а то сквозь слезы квадратичные JOIN-ы приходится делать...
18. s_vidyakin 68 05.07.19 13:51 Сейчас в теме
(16) ROW_NUMBER уже ведь реализовали, правда только во временных таблицах
Kinestetik; Brawler; SerVer1C; asirius; lmnlmn; +5 Ответить
22. asirius 114 05.07.19 14:55 Сейчас в теме
(18) Wow! Есть повод перейти на 8.3.13
25. s_vidyakin 68 05.07.19 16:33 Сейчас в теме
(22) У нас давно уже в проде, все живы
17. zhichkin 1510 05.07.19 13:49 Сейчас в теме
Это совпадение, а не реклама =)
В своём докладе на Infostart Event 2019 я как раз планирую говорить о расширении языка запросов =)
Правда не средствами 1С ... устал ждать - решил сделать платформу над платформой =)
Darklight; +1 Ответить
19. herres 05.07.19 14:22 Сейчас в теме
а я страдаю по Мин(число1, число2) или Макс(число1,Число2)
anderson; s22; maxis33; AllexSoft; +4 Ответить
30. AntonNV 06.07.19 12:46 Сейчас в теме
21. KazanKokos 11 05.07.19 14:47 Сейчас в теме
А CAST и CONVERT? CAST вроде есть. Но CONVERT бы не помешал для простейших типов :)
Kinestetik; anderson; SerVer1C; rozer; acanta; +5 Ответить
29. nytlenc 05.07.19 18:24 Сейчас в теме
Ну наконец то!!!! 1С на шаг ближе к тому, чтобы наконец реализовать кнопку "Сделать все хорошо"!!! А конфигуратор??? А и ладно, как был убожеством так им пусть и остаётся. Зачем программистам удобный инструмент? Пусть работают как получится... 1С далеки от "народа" это факт...
33. PerlAmutor 130 06.07.19 18:14 Сейчас в теме
Т.е. придумали замену этому?

ВЫБРАТЬ
    Т.Сотрудник,
    СУММА(Т.Зарплата) КАК ОбщийДоход
ИЗ (
ВЫБРАТЬ
    Т1.Сотрудник КАК Сотрудник,
    СУММА(Т1.Зарплата) КАК Зарплата
ИЗ ДоходыСистемнымАдминистратором КАК Т1
СГРУППИРОВАТЬ ПО
    Т1.Сотрудник

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Т1.Сотрудник,
    СУММА(Т1.Зарплата) КАК Зарплата
ИЗ ДоходыПсихотерапевтом КАК Т1
СГРУППИРОВАТЬ ПО
    Т1.Зарплата

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Т1.Сотрудник,
    СУММА(Т1.Зарплата) КАК Зарплата
ИЗ ДоходыАналитиком КАК Т1
СГРУППИРОВАТЬ ПО
    Т1.Зарплата

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Т1.Сотрудник,
    СУММА(Т1.Зарплата) КАК Зарплата
ИЗ ДоходыКонсультантом КАК Т1
СГРУППИРОВАТЬ ПО
    Т1.Зарплата

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Т1.Сотрудник,
    СУММА(Т1.Зарплата) КАК Зарплата
ИЗ ДоходыПрограммистом1С КАК Т1
СГРУППИРОВАТЬ ПО
    Т1.Зарплата

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Т1.Сотрудник,
    СУММА(Т1.Зарплата) КАК Зарплата
ИЗ ДоходыСотрудникомТехПоддержки КАК Т1
СГРУППИРОВАТЬ ПО
    Т1.Зарплата

) КАК Т

СГРУППИРОВАТЬ ПО
    Т.Сотрудник
Показать


Лучше бы действительно разрешили в запросе преобразовывать строки в числа, числа в строки, сравнивать текстовые поля с учетом регистра, преобразовывать даты в секунды, секунды в даты, отбирать по удаленным объектам в запросе, выводить GUIDы ссылок прямо из запроса в текстовом виде, правильно создавать временные таблицы для внешних источников данных через конструктор запросов, ввести функцию ТекущаяДатаСеанса() в язык запросов, функцию определения длинны строки в запросе, функцию получения остатка от деления по модулю, функцию СтрЗаменить в запросе и функцию полнотекстового поиска в запросе (CONTAINS()) для справочников номенклатуры промышленных объемов.
Kinestetik; SagittariusA; Дмитрий74Чел; SerVer1C; AllexSoft; RSConsulting; +6 Ответить
34. Isakov_Artem 06.07.19 21:08 Сейчас в теме
Почему на превьюшке картинка с кодом HTML + CSS. Как это связано с запросами?
Почему такой ажиотаж вокруг не самой топовой функции. Она не так и часто нужна.
35. Lancelot-2M 115 07.07.19 00:38 Сейчас в теме
Да понятно всё - на своём монструозном ерп уперлись в производительность на каком-нибудь госпроекте и допилили язык запросов под это дело. А " сообщество" сразу сопли пускать))
SagittariusA; s_vidyakin; Дмитрий74Чел; memb3r; AllexSoft; zqzq; kuzyara; boln; CXY; +9 Ответить
36. aximo 2058 07.07.19 10:11 Сейчас в теме
Маркетосы отлично работают) раньше это было бы по меньшей мере странно, например «1с анонсировала функцию выделения целого числа «цел()»»
memb3r; acanta; +2 Ответить
37. user1249164 08.07.19 10:10 Сейчас в теме
Знать бы ещё для чего всё это
41. s_vidyakin 68 08.07.19 14:17 Сейчас в теме
(37) если кратко - можно получать все группировки за один проход.
Когда один запрос выполняется час, экономится несколько часов, можно быстрее строить аналитические кубы на больших базах
42. user774630 08.07.19 15:21 Сейчас в теме
Предлагаю ознакомиться с выдержками обсуждения этой темы на партнерском форуме 1С :)
Прикрепленные файлы:
Оставьте свое сообщение