СКД. Группировка по полю работает не корректно

1. user749548 25.07.23 12:01 Сейчас в теме
Приветствую, коллеги

Конфигурация: 1С:ERP Управление предприятием 2 (2.5.12.53)
Платформа: 1С:Предприятие 8.3 (8.3.21.1775)

Создала отчет на СКД. Цель - получить количество дней за выбранный период, в которые выбранная номенклатура отсутствовала на выбранном складе.

В отчете соединяю регистр накопления ТоварыНаСкладах (таблица ОстаткиИОбороты) с регистром сведений ДанныеПроизводственногоКалендаря как завещал нам Гилёв (у него есть статья для получения как раз того, что мне надо).

Вывожу поля Номенклатура, Склад, Дата, Количество. Если группирую в запросе или в пользовательском режиме по трем полям (Номенклатура, Склад, Дата), суммируя по полю Количество, то выводится все хорошо. Проблема возникает когда убираю из группировки поле Дата - тогда в группировке выводится не сумма колонки, а 0.

Совсем без группировки все данные в каждой строке выводятся верно, в суммируемой колонке имею числа 0 или 1. Тип поля Количество точно число: я его выразила как число в Запросе, да ещё и формат назначила числовой в наборе данных СКД.

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

Консоль запросов группирует корректно, значит магия именно в СКД. Не верю я в колдунство, помогите разобраться где косячу, пожалуйста =) У меня идеи пока что кончились.

Обработка приложена. Картинки тоже.

Рисунок 1. Результат отчета с группировкой по трём полям.
Рисунок 2. Снимаю галку с группировки.
Рисунок 3. Результат отчета с группировкой по 2 полям (исключая поле Дата)
Прикрепленные файлы:
тестКолДней.erf
По теме из базы знаний
Найденные решения
9. WasiliyMay 8 25.07.23 15:29 Сейчас в теме
(8)Быстрый вариант без переделки запроса, сделать через внешний набор данных или костыль типа такого:
в вычисляемых полях сделать поле Количество с таким выражением:

Выбор Когда Дата = Датавремя(1,1,1) ТОГДА Количество иначе количество конец

В общем поле дата нужно как то использовать.
10. WasiliyMay 8 25.07.23 15:33 Сейчас в теме
(8)Я вам показал запрос, который генерирует СКД. Вы можете там заметить, что из группировки удаляется поле дата, что приводит к неправильному результату
11. WasiliyMay 8 25.07.23 15:48 Сейчас в теме
(8) Такой вариант имел ввиду.
Прикрепленные файлы:
тестКолДней (2).erf
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 25.07.23 12:46 Сейчас в теме
(1) Не видя запроса, остается только гадать. Роли полям корректно назначены?
3. user749548 25.07.23 13:26 Сейчас в теме
ВЫБРАТЬ РАЗЛИЧНЫЕ
	КОНЕЦПЕРИОДА(ДанныеПроизводственногоКалендаря.Дата, ДЕНЬ) КАК Дата
ПОМЕСТИТЬ КВАН_Дни
ИЗ
	РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
	ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
	И ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Движения.Номенклатура КАК Номенклатура,
	Движения.Склад КАК Склад,
	КВАН_Дни.Дата КАК Дата,
	СУММА(ВЫБОР
			КОГДА Движения.Период = &НачалоПериода
				ТОГДА Движения.ВНаличииКонечныйОстаток
			ИНАЧЕ ВЫБОР
					КОГДА Движения.Период <= КВАН_Дни.Дата
						ТОГДА Движения.ВНаличииОборот
					ИНАЧЕ 0
				КОНЕЦ
		КОНЕЦ) КАК ВНаличииКонечныйОстаток
ПОМЕСТИТЬ КВАН_ОстаткиПоДням
ИЗ
	КВАН_Дни КАК КВАН_Дни,
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад, ((Номенклатура, Характеристика) В
			    (ВЫБРАТЬ
			        ОтборПоСегментуНоменклатуры.Номенклатура,
			        ОтборПоСегментуНоменклатуры.Характеристика
			    ИЗ
			        ОтборПоСегментуНоменклатуры
			    ГДЕ
			        ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры))}) КАК Движения

СГРУППИРОВАТЬ ПО
	Движения.Номенклатура,
	Движения.Склад,
	КВАН_Дни.Дата
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ОстаткиПоДням.Номенклатура КАК Номенклатура,
	ВТ_ОстаткиПоДням.Склад КАК Склад,
	ВТ_ОстаткиПоДням.Дата КАК Дата,
	ВЫРАЗИТЬ(ВЫБОР
			КОГДА ВТ_ОстаткиПоДням.ВНаличииКонечныйОстаток > 0
				ТОГДА 0
			ИНАЧЕ 1
		КОНЕЦ КАК ЧИСЛО) КАК КоличествоДней
ПОМЕСТИТЬ КВАН_НеСгруппированные_Количество
ИЗ
	КВАН_ОстаткиПоДням КАК ВТ_ОстаткиПоДням
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КВАН_НеСгруппированные_Количество.Номенклатура КАК Номенклатура,
	КВАН_НеСгруппированные_Количество.Склад КАК Склад,
	СУММА(ЕСТЬNULL(КВАН_НеСгруппированные_Количество.КоличествоДней, 0)) КАК Количество,
	КВАН_НеСгруппированные_Количество.Дата КАК Дата
ИЗ
	КВАН_НеСгруппированные_Количество КАК КВАН_НеСгруппированные_Количество

СГРУППИРОВАТЬ ПО
	КВАН_НеСгруппированные_Количество.Номенклатура,
	КВАН_НеСгруппированные_Количество.Склад,
	КВАН_НеСгруппированные_Количество.Дата
Показать
4. user749548 25.07.23 13:27 Сейчас в теме
Роли: Номенклатура, Склад, дата - измерения. Во вкладке Ресурсы указано поле Количество.
5. WasiliyMay 8 25.07.23 14:31 Сейчас в теме
(4)Проблема из-за группировки во втором пакете. Вы убираете дату и оптимизатор запроса при компоновке результата убирает ее из группировки. Попробуйте переделать запрос без использования группировки по дате.

Такой запрос получается после оптимизации:

ВЫБРАТЬ РАЗЛИЧНЫЕ
	КОНЕЦПЕРИОДА(ДанныеПроизводственногоКалендаря.Дата, ДЕНЬ) КАК Дата
ПОМЕСТИТЬ КВАН_Дни
ИЗ
	РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
	ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
	И ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Движения.Номенклатура КАК Номенклатура,
	Движения.Склад КАК Склад,
	СУММА(ВЫБОР
			КОГДА Движения.Период = &НачалоПериода
				ТОГДА Движения.ВНаличииКонечныйОстаток
			ИНАЧЕ ВЫБОР
					КОГДА Движения.Период <= КВАН_Дни.Дата
						ТОГДА Движения.ВНаличииОборот
					ИНАЧЕ 0
				КОНЕЦ
		КОНЕЦ) КАК ВНаличииКонечныйОстаток
ПОМЕСТИТЬ КВАН_ОстаткиПоДням
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
			&П,
			&П2,
			День,
			,
			Номенклатура В ИЕРАРХИИ (&П3)
				И Склад В ИЕРАРХИИ (&П4)) КАК Движения,
	КВАН_Дни КАК КВАН_Дни

СГРУППИРОВАТЬ ПО
	Движения.Номенклатура,
	Движения.Склад
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ОстаткиПоДням.Номенклатура КАК Номенклатура,
	ВТ_ОстаткиПоДням.Склад КАК Склад,
	ВЫРАЗИТЬ(ВЫБОР
			КОГДА ВТ_ОстаткиПоДням.ВНаличииКонечныйОстаток > 0
				ТОГДА 0
			ИНАЧЕ 1
		КОНЕЦ КАК ЧИСЛО) КАК КоличествоДней
ПОМЕСТИТЬ КВАН_НеСгруппированные_Количество
ИЗ
	КВАН_ОстаткиПоДням КАК ВТ_ОстаткиПоДням
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КВАН_НеСгруппированные_Количество.Номенклатура КАК Номенклатура,
	КВАН_НеСгруппированные_Количество.Склад КАК Склад,
	СУММА(ЕСТЬNULL(КВАН_НеСгруппированные_Количество.КоличествоДней, 0)) КАК Количество,
	КВАН_НеСгруппированные_Количество.Номенклатура.Наименование КАК НоменклатураНаименование,
	КВАН_НеСгруппированные_Количество.Склад.Наименование КАК СкладНаименование,
	ВЫБОР
		КОГДА КВАН_НеСгруппированные_Количество.Склад.Ссылка ЕСТЬ NULL
			ТОГДА 0
		ИНАЧЕ 1
	КОНЕЦ КАК СкладПолеУпорядочивания1,
	ВЫБОР
		КОГДА КВАН_НеСгруппированные_Количество.Номенклатура.Ссылка ЕСТЬ NULL
			ТОГДА 0
		ИНАЧЕ 1
	КОНЕЦ КАК НоменклатураПолеУпорядочивания1
ИЗ
	КВАН_НеСгруппированные_Количество КАК КВАН_НеСгруппированные_Количество

СГРУППИРОВАТЬ ПО
	КВАН_НеСгруппированные_Количество.Номенклатура,
	КВАН_НеСгруппированные_Количество.Склад,
	ВЫБОР
		КОГДА КВАН_НеСгруппированные_Количество.Склад.Ссылка ЕСТЬ NULL
			ТОГДА 0
		ИНАЧЕ 1
	КОНЕЦ,
	ВЫБОР
		КОГДА КВАН_НеСгруппированные_Количество.Номенклатура.Ссылка ЕСТЬ NULL
			ТОГДА 0
		ИНАЧЕ 1
	КОНЕЦ,
	КВАН_НеСгруппированные_Количество.Номенклатура.Наименование,
	КВАН_НеСгруппированные_Количество.Склад.Наименование

УПОРЯДОЧИТЬ ПО
	СкладПолеУпорядочивания1,
	СкладНаименование,
	Склад,
	НоменклатураПолеУпорядочивания1,
	НоменклатураНаименование,
	Номенклатура
Показать
8. user749548 25.07.23 14:47 Сейчас в теме
(5) Но мне нужно получить остатки именно по каждому дню. Если я не выведу даты во второй временной таблице, то получу просто остатки, а не остатки по дням. Либо я не так поняла - в этом случае жду пояснительную бригаду =)

З.Ы. Приложенный запрос проверила, он показывает тот же самый результат, что и мой. Но параметры виртуальной таблицы ОстаткиИОбороты я перенесла в компоновку, в явном виде они меня не интересуют. Возможно дело в этом - ещё проверяю, но маловероятно. А вам случайно не удалось потеститьт этот запрос? В консоли не эффективно, консоль запросов по моему запросу тоже выдаёт корректный результат.
9. WasiliyMay 8 25.07.23 15:29 Сейчас в теме
(8)Быстрый вариант без переделки запроса, сделать через внешний набор данных или костыль типа такого:
в вычисляемых полях сделать поле Количество с таким выражением:

Выбор Когда Дата = Датавремя(1,1,1) ТОГДА Количество иначе количество конец

В общем поле дата нужно как то использовать.
10. WasiliyMay 8 25.07.23 15:33 Сейчас в теме
(8)Я вам показал запрос, который генерирует СКД. Вы можете там заметить, что из группировки удаляется поле дата, что приводит к неправильному результату
6. SAGerasimov 25.07.23 14:32 Сейчас в теме
(3) Попробуйте поместить финальный результат во временную таблицу еще одну, и выбрать все поля уже из нее
7. user749548 25.07.23 14:44 Сейчас в теме
(6)Спасибо за подсказку, но не помогло.
11. WasiliyMay 8 25.07.23 15:48 Сейчас в теме
(8) Такой вариант имел ввиду.
Прикрепленные файлы:
тестКолДней (2).erf
12. user749548 26.07.23 07:35 Сейчас в теме
(11) Так действительно работает! Убрала группировку по дате в настройках СКД потому что мне нужно так, и действительно таблица свернулась, колонка Количество просуммировалась. Большое спасибо!
Оставьте свое сообщение

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