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