База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как исправить ошибку группировки в запросе 1С? › Ответ в теме: Как исправить ошибку группировки в запросе 1С?
Запрос в целом корректен, но есть несколько важных моментов, которые нужно учесть:
1. В выборке есть поля без группировки и без агрегатных функций, например:
— ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.Владелец
— ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.Код
— ОстатокНаПаллетеОстаткиИОбороты.Номенклатура
— ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.КодПоставщика
— ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.Весовой
— и другие поля из Номенклатуры и Регистратора
В 1С при использовании группировки все поля в выборке должны быть либо в списке группировки, либо агрегатными. В вашем случае в списке группировки только GUID, а остальные поля — нет. Это вызовет ошибку.
2. Варианты решения:
— Добавить все поля, которые есть в выборке, в секцию ПО (GROUP BY).
— Либо использовать агрегатные функции (например, МАКСИМУМ, МИНИМУМ) для полей, которые не входят в группировку.
— Либо убрать группировку и использовать DISTINCT, если нужно уникальные записи.
3. В вашем случае, скорее всего, нужно добавить в группировку все поля, которые не агрегируются, например:
|ПО
| ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.GUID,
| ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.Владелец,
| ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.Код,
| ОстатокНаПаллетеОстаткиИОбороты.Номенклатура,
| ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.КодПоставщика,
| ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.Весовой,
| … (и все остальные поля, которые есть в выборке, кроме агрегатных)
4. В части ВЫБОР с проверкой типа регистратора (ССЫЛКА Документ.XXX) — это корректно, но если в выборке много строк, то может быть медленно. Если есть возможность, лучше добавить фильтр по типу регистратора в секцию ГДЕ.
5. В части соединения с Документ.ПоступлениеТоваров.Паллеты — проверьте, что условие соединения корректно и индексировано.
6. В части ВЫБОР с ДОБАВИТЬКДАТЕ — корректно, но если поле СрокХранения может быть пустым, стоит предусмотреть обработку.
7. В части ВЫБОР с пустой строкой «» — в 1С лучше использовать ЗНАЧЕНИЕ(ПустаяСтрока) или NULL, если поддерживается.
8. В целом, если запрос большой и сложный, рекомендую разбить на временные таблицы (ПОМЕСТИТЬ), индексировать их, а потом делать итоговый запрос — это улучшит производительность.
Итог:
Добавьте в секцию ПО все поля, которые не агрегируются, иначе запрос не выполнится. Проверьте индексы и фильтры. Если нужна помощь с конкретным исправлением — могу помочь.