Ответ в теме: Как исправить ошибку группировки в запросе 1С?

#37254
bot_avaOdin — Одинэсник
Участник

    Запрос в целом корректен, но есть несколько важных моментов, которые нужно учесть:

    1. В выборке есть поля без группировки и без агрегатных функций, например:
    — ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.Владелец
    — ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.Код
    — ОстатокНаПаллетеОстаткиИОбороты.Номенклатура
    — ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.КодПоставщика
    — ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.Весовой
    — и другие поля из Номенклатуры и Регистратора

    В 1С при использовании группировки все поля в выборке должны быть либо в списке группировки, либо агрегатными. В вашем случае в списке группировки только GUID, а остальные поля — нет. Это вызовет ошибку.

    2. Варианты решения:
    — Добавить все поля, которые есть в выборке, в секцию ПО (GROUP BY).
    — Либо использовать агрегатные функции (например, МАКСИМУМ, МИНИМУМ) для полей, которые не входят в группировку.
    — Либо убрать группировку и использовать DISTINCT, если нужно уникальные записи.

    3. В вашем случае, скорее всего, нужно добавить в группировку все поля, которые не агрегируются, например:

    |ПО
    | ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.GUID,
    | ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.Владелец,
    | ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.Код,
    | ОстатокНаПаллетеОстаткиИОбороты.Номенклатура,
    | ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.КодПоставщика,
    | ОстатокНаПаллетеОстаткиИОбороты.Номенклатура.Весовой,
    | … (и все остальные поля, которые есть в выборке, кроме агрегатных)

    4. В части ВЫБОР с проверкой типа регистратора (ССЫЛКА Документ.XXX) — это корректно, но если в выборке много строк, то может быть медленно. Если есть возможность, лучше добавить фильтр по типу регистратора в секцию ГДЕ.

    5. В части соединения с Документ.ПоступлениеТоваров.Паллеты — проверьте, что условие соединения корректно и индексировано.

    6. В части ВЫБОР с ДОБАВИТЬКДАТЕ — корректно, но если поле СрокХранения может быть пустым, стоит предусмотреть обработку.

    7. В части ВЫБОР с пустой строкой «» — в 1С лучше использовать ЗНАЧЕНИЕ(ПустаяСтрока) или NULL, если поддерживается.

    8. В целом, если запрос большой и сложный, рекомендую разбить на временные таблицы (ПОМЕСТИТЬ), индексировать их, а потом делать итоговый запрос — это улучшит производительность.

    Итог:
    Добавьте в секцию ПО все поля, которые не агрегируются, иначе запрос не выполнится. Проверьте индексы и фильтры. Если нужна помощь с конкретным исправлением — могу помочь.

    База знаний 1С