Проблема с СКД

1. AbstractHuman 29.10.24 12:44 Сейчас в теме
Есть такой запрос -

ВЫБРАТЬ
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Характеристика КАК Характеристика,
	ЦеныНоменклатуры.ВидЦены КАК ВидЦены,
	ЦеныНоменклатуры.Цена КАК Цена,
	ЦеныНоменклатуры.Период КАК Период
ПОМЕСТИТЬ ВсеЦеныЗаПериод
ИЗ
	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
{ГДЕ
	(ЦеныНоменклатуры.Период МЕЖДУ &ПериодНачала И &ПериодОкончания),
	(ЦеныНоменклатуры.Номенклатура = &Номенклатура),
	(ЦеныНоменклатуры.ВидЦены = &ВидЦены)}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВсеЦеныЗаПериод.Номенклатура КАК Номенклатура,
	ВсеЦеныЗаПериод.Характеристика КАК Характеристика,
	ВсеЦеныЗаПериод.ВидЦены КАК ВидЦены,
	ЦеныНоменклатуры.Цена КАК ПерваяЦена,
	ЦеныНоменклатуры.Период КАК Период
ПОМЕСТИТЬ ПервыеЦены
ИЗ
	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ЛЕВОЕ СОЕДИНЕНИЕ ВсеЦеныЗаПериод КАК ВсеЦеныЗаПериод
		ПО ЦеныНоменклатуры.Номенклатура = ВсеЦеныЗаПериод.Номенклатура
			И ЦеныНоменклатуры.Характеристика = ВсеЦеныЗаПериод.Характеристика
			И ЦеныНоменклатуры.ВидЦены = ВсеЦеныЗаПериод.ВидЦены

СГРУППИРОВАТЬ ПО
	ВсеЦеныЗаПериод.Номенклатура,
	ВсеЦеныЗаПериод.Характеристика,
	ВсеЦеныЗаПериод.ВидЦены,
	ЦеныНоменклатуры.Цена,
	ЦеныНоменклатуры.Период

ИМЕЮЩИЕ
	ЦеныНоменклатуры.Период = МАКСИМУМ(ВсеЦеныЗаПериод.Период)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВсеЦеныЗаПериод.Номенклатура КАК Номенклатура,
	ВсеЦеныЗаПериод.Характеристика КАК Характеристика,
	ВсеЦеныЗаПериод.ВидЦены КАК ВидЦены,
	ВсеЦеныЗаПериод.Цена КАК Цена,
	ВсеЦеныЗаПериод.Период КАК Период
ПОМЕСТИТЬ ЦеныБезПервых
ИЗ
	ПервыеЦены КАК ПервыеЦены
		ЛЕВОЕ СОЕДИНЕНИЕ ВсеЦеныЗаПериод КАК ВсеЦеныЗаПериод
		ПО (ВсеЦеныЗаПериод.Номенклатура = ПервыеЦены.Номенклатура)
			И (ВсеЦеныЗаПериод.Характеристика = ПервыеЦены.Характеристика)
			И (ВсеЦеныЗаПериод.ВидЦены = ПервыеЦены.ВидЦены)
			И (ВсеЦеныЗаПериод.Период <> ПервыеЦены.Период)

СГРУППИРОВАТЬ ПО
	ВсеЦеныЗаПериод.Номенклатура,
	ВсеЦеныЗаПериод.Характеристика,
	ВсеЦеныЗаПериод.ВидЦены,
	ВсеЦеныЗаПериод.Цена,
	ВсеЦеныЗаПериод.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЦеныБезПервых.Номенклатура КАК Номенклатура,
	ЦеныБезПервых.Характеристика КАК Характеристика,
	ЦеныБезПервых.ВидЦены КАК ВидЦены,
	ЦеныНоменклатуры.Цена КАК ВтораяЦена,
	ЦеныНоменклатуры.Период КАК Период
ПОМЕСТИТЬ ВторыеЦены
ИЗ
	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ЛЕВОЕ СОЕДИНЕНИЕ ЦеныБезПервых КАК ЦеныБезПервых
		ПО (ЦеныБезПервых.Номенклатура = ЦеныНоменклатуры.Номенклатура)
			И (ЦеныБезПервых.Характеристика = ЦеныНоменклатуры.Характеристика)
			И (ЦеныБезПервых.ВидЦены = ЦеныНоменклатуры.ВидЦены)

СГРУППИРОВАТЬ ПО
	ЦеныБезПервых.Номенклатура,
	ЦеныБезПервых.Характеристика,
	ЦеныБезПервых.ВидЦены,
	ЦеныНоменклатуры.Цена,
	ЦеныНоменклатуры.Период

ИМЕЮЩИЕ
	ЦеныНоменклатуры.Период = МАКСИМУМ(ЦеныБезПервых.Период)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЦеныБезПервых.Номенклатура КАК Номенклатура,
	ЦеныБезПервых.Характеристика КАК Характеристика,
	ЦеныБезПервых.ВидЦены КАК ВидЦены,
	ЦеныБезПервых.Цена КАК Цена,
	ЦеныБезПервых.Период КАК Период
ПОМЕСТИТЬ ЦеныБезВторых
ИЗ
	ЦеныБезПервых КАК ЦеныБезПервых
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВторыеЦены КАК ВторыеЦены
		ПО ЦеныБезПервых.Номенклатура = ВторыеЦены.Номенклатура
			И ЦеныБезПервых.Характеристика = ВторыеЦены.Характеристика
			И ЦеныБезПервых.ВидЦены = ВторыеЦены.ВидЦены
			И ЦеныБезПервых.Цена <> ВторыеЦены.ВтораяЦена

СГРУППИРОВАТЬ ПО
	ЦеныБезПервых.Номенклатура,
	ЦеныБезПервых.Характеристика,
	ЦеныБезПервых.ВидЦены,
	ЦеныБезПервых.Цена,
	ЦеныБезПервых.Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЦеныБезВторых.Номенклатура КАК Номенклатура,
	ЦеныБезВторых.Характеристика КАК Характеристика,
	ЦеныБезВторых.ВидЦены КАК ВидЦены,
	ЦеныНоменклатуры.Цена КАК ТретьяЦена
ПОМЕСТИТЬ ТретьиЦены
ИЗ
	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ЛЕВОЕ СОЕДИНЕНИЕ ЦеныБезВторых КАК ЦеныБезВторых
		ПО (ЦеныБезВторых.Номенклатура = ЦеныНоменклатуры.Номенклатура)
			И (ЦеныБезВторых.Характеристика = ЦеныНоменклатуры.Характеристика)
			И (ЦеныБезВторых.ВидЦены = ЦеныНоменклатуры.ВидЦены)

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.Период,
	ЦеныБезВторых.Номенклатура,
	ЦеныБезВторых.Характеристика,
	ЦеныБезВторых.ВидЦены,
	ЦеныНоменклатуры.Цена

ИМЕЮЩИЕ
	ЦеныНоменклатуры.Период = МАКСИМУМ(ЦеныБезВторых.Период)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПервыеЦены.Номенклатура КАК Номенклатура,
	ПервыеЦены.Характеристика КАК Характеристика,
	ПервыеЦены.ВидЦены КАК ВидЦены,
	ПервыеЦены.ПерваяЦена КАК ПерваяЦена,
	ВторыеЦены.ВтораяЦена КАК ВтораяЦена,
	ТретьиЦены.ТретьяЦена КАК ТретьяЦена
ИЗ
	ПервыеЦены КАК ПервыеЦены
		ЛЕВОЕ СОЕДИНЕНИЕ ВторыеЦены КАК ВторыеЦены
		ПО ПервыеЦены.Номенклатура = ВторыеЦены.Номенклатура
			И ПервыеЦены.Характеристика = ВторыеЦены.Характеристика
			И ПервыеЦены.ВидЦены = ВторыеЦены.ВидЦены
		ЛЕВОЕ СОЕДИНЕНИЕ ТретьиЦены КАК ТретьиЦены
		ПО ПервыеЦены.Номенклатура = ТретьиЦены.Номенклатура
			И ПервыеЦены.Характеристика = ТретьиЦены.Характеристика
			И ПервыеЦены.ВидЦены = ТретьиЦены.ВидЦены

СГРУППИРОВАТЬ ПО
	ПервыеЦены.Период,
	ПервыеЦены.Номенклатура,
	ПервыеЦены.Характеристика,
	ПервыеЦены.ВидЦены,
	ПервыеЦены.ПерваяЦена,
	ВторыеЦены.ВтораяЦена,
	ТретьиЦены.ТретьяЦена
Показать


В консоли отрабатывает на ура, без каких-либо проблем. Тащу его в скд - начинает ругаться, что ЦеныНоменклатуры.Период = МАКСИМУМ(ЦеныБезПервых.Период) не входит в группу. Хотя, сами видите - все группировки прописаны. Что может быть не так?
По теме из базы знаний
Найденные решения
3. MissionOnly 3 29.10.24 15:17 Сейчас в теме
Вот тут проблема - СКД не дает делать АГРЕГАТНЫЕ ФУНКЦИИ ПО ПЕРИОДУ МАКСИМУМ(ЦеныБезВторых.Период) (видимо из-за своих механизмов, нужно это обходить):

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
ЦеныБезВторых.Номенклатура КАК Номенклатура,
ЦеныБезВторых.Характеристика КАК Характеристика,
ЦеныБезВторых.ВидЦены КАК ВидЦены,
ЦеныНоменклатуры.Цена КАК ТретьяЦена
ПОМЕСТИТЬ ТретьиЦены
ИЗ
РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ ЦеныБезВторых КАК ЦеныБезВторых
ПО (ЦеныБезВторых.Номенклатура = ЦеныНоменклатуры.Номенклатура)
И (ЦеныБезВторых.Характеристика = ЦеныНоменклатуры.Характеристика)
И (ЦеныБезВторых.ВидЦены = ЦеныНоменклатуры.ВидЦены)

СГРУППИРОВАТЬ ПО
ЦеныНоменклатуры.Период,
ЦеныБезВторых.Номенклатура,
ЦеныБезВторых.Характеристика,
ЦеныБезВторых.ВидЦены,
ЦеныНоменклатуры.Цена

ИМЕЮЩИЕ
ЦеныНоменклатуры.Период = МАКСИМУМ(ЦеныБезВторых.Период)
;
AbstractHuman; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. glek 120 29.10.24 15:05 Сейчас в теме
(1) Для того, чтобы понять что происходит в СКД и какой запрос генерируется (Вы же в курсе, что запрос меняется динамически при формировании отчета), необходимо словить макет компоновки и посмотреть там, что получается.
VyacheslavShilov; +1 Ответить
3. MissionOnly 3 29.10.24 15:17 Сейчас в теме
Вот тут проблема - СКД не дает делать АГРЕГАТНЫЕ ФУНКЦИИ ПО ПЕРИОДУ МАКСИМУМ(ЦеныБезВторых.Период) (видимо из-за своих механизмов, нужно это обходить):

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
ЦеныБезВторых.Номенклатура КАК Номенклатура,
ЦеныБезВторых.Характеристика КАК Характеристика,
ЦеныБезВторых.ВидЦены КАК ВидЦены,
ЦеныНоменклатуры.Цена КАК ТретьяЦена
ПОМЕСТИТЬ ТретьиЦены
ИЗ
РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ ЦеныБезВторых КАК ЦеныБезВторых
ПО (ЦеныБезВторых.Номенклатура = ЦеныНоменклатуры.Номенклатура)
И (ЦеныБезВторых.Характеристика = ЦеныНоменклатуры.Характеристика)
И (ЦеныБезВторых.ВидЦены = ЦеныНоменклатуры.ВидЦены)

СГРУППИРОВАТЬ ПО
ЦеныНоменклатуры.Период,
ЦеныБезВторых.Номенклатура,
ЦеныБезВторых.Характеристика,
ЦеныБезВторых.ВидЦены,
ЦеныНоменклатуры.Цена

ИМЕЮЩИЕ
ЦеныНоменклатуры.Период = МАКСИМУМ(ЦеныБезВторых.Период)
;
AbstractHuman; +1 Ответить
4. AbstractHuman 30.10.24 08:40 Сейчас в теме
(3)
Понял-принял. Жалко, конечно, что не знал этого раньше
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот