СКД. Группировка по полю работает не корректно
Приветствую, коллеги
Конфигурация: 1С:ERP Управление предприятием 2 (2.5.12.53)
Платформа: 1С:Предприятие 8.3 (8.3.21.1775)
Создала отчет на СКД. Цель - получить количество дней за выбранный период, в которые выбранная номенклатура отсутствовала на выбранном складе.
В отчете соединяю регистр накопления ТоварыНаСкладах (таблица ОстаткиИОбороты) с регистром сведений ДанныеПроизводственногоКалендаря как завещал нам Гилёв (у него есть статья для получения как раз того, что мне надо).
Вывожу поля Номенклатура, Склад, Дата, Количество. Если группирую в запросе или в пользовательском режиме по трем полям (Номенклатура, Склад, Дата), суммируя по полю Количество, то выводится все хорошо. Проблема возникает когда убираю из группировки поле Дата - тогда в группировке выводится не сумма колонки, а 0.
Совсем без группировки все данные в каждой строке выводятся верно, в суммируемой колонке имею числа 0 или 1. Тип поля Количество точно число: я его выразила как число в Запросе, да ещё и формат назначила числовой в наборе данных СКД.
Пробовала менять псевдонимы полей, не помогло. Пробовала делать просто детальные записи, пробовала указывать группировки вручную.
Консоль запросов группирует корректно, значит магия именно в СКД. Не верю я в колдунство, помогите разобраться где косячу, пожалуйста =) У меня идеи пока что кончились.
Обработка приложена. Картинки тоже.
Рисунок 1. Результат отчета с группировкой по трём полям.
Рисунок 2. Снимаю галку с группировки.
Рисунок 3. Результат отчета с группировкой по 2 полям (исключая поле Дата)
Конфигурация: 1С:ERP Управление предприятием 2 (2.5.12.53)
Платформа: 1С:Предприятие 8.3 (8.3.21.1775)
Создала отчет на СКД. Цель - получить количество дней за выбранный период, в которые выбранная номенклатура отсутствовала на выбранном складе.
В отчете соединяю регистр накопления ТоварыНаСкладах (таблица ОстаткиИОбороты) с регистром сведений ДанныеПроизводственногоКалендаря как завещал нам Гилёв (у него есть статья для получения как раз того, что мне надо).
Вывожу поля Номенклатура, Склад, Дата, Количество. Если группирую в запросе или в пользовательском режиме по трем полям (Номенклатура, Склад, Дата), суммируя по полю Количество, то выводится все хорошо. Проблема возникает когда убираю из группировки поле Дата - тогда в группировке выводится не сумма колонки, а 0.
Совсем без группировки все данные в каждой строке выводятся верно, в суммируемой колонке имею числа 0 или 1. Тип поля Количество точно число: я его выразила как число в Запросе, да ещё и формат назначила числовой в наборе данных СКД.
Пробовала менять псевдонимы полей, не помогло. Пробовала делать просто детальные записи, пробовала указывать группировки вручную.
Консоль запросов группирует корректно, значит магия именно в СКД. Не верю я в колдунство, помогите разобраться где косячу, пожалуйста =) У меня идеи пока что кончились.
Обработка приложена. Картинки тоже.
Рисунок 1. Результат отчета с группировкой по трём полям.
Рисунок 2. Снимаю галку с группировки.
Рисунок 3. Результат отчета с группировкой по 2 полям (исключая поле Дата)
Прикрепленные файлы:
тестКолДней.erf



По теме из базы знаний
Найденные решения
(8)Быстрый вариант без переделки запроса, сделать через внешний набор данных или костыль типа такого:
в вычисляемых полях сделать поле Количество с таким выражением:
Выбор Когда Дата = Датавремя(1,1,1) ТОГДА Количество иначе количество конец
В общем поле дата нужно как то использовать.
в вычисляемых полях сделать поле Количество с таким выражением:
Выбор Когда Дата = Датавремя(1,1,1) ТОГДА Количество иначе количество конец
В общем поле дата нужно как то использовать.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ВЫБРАТЬ РАЗЛИЧНЫЕ
КОНЕЦПЕРИОДА(ДанныеПроизводственногоКалендаря.Дата, ДЕНЬ) КАК Дата
ПОМЕСТИТЬ КВАН_Дни
ИЗ
РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
И ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Движения.Номенклатура КАК Номенклатура,
Движения.Склад КАК Склад,
КВАН_Дни.Дата КАК Дата,
СУММА(ВЫБОР
КОГДА Движения.Период = &НачалоПериода
ТОГДА Движения.ВНаличииКонечныйОстаток
ИНАЧЕ ВЫБОР
КОГДА Движения.Период <= КВАН_Дни.Дата
ТОГДА Движения.ВНаличииОборот
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ) КАК ВНаличииКонечныйОстаток
ПОМЕСТИТЬ КВАН_ОстаткиПоДням
ИЗ
КВАН_Дни КАК КВАН_Дни,
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , {(Номенклатура).* КАК Номенклатура, (Склад).* КАК Склад, ((Номенклатура, Характеристика) В
(ВЫБРАТЬ
ОтборПоСегментуНоменклатуры.Номенклатура,
ОтборПоСегментуНоменклатуры.Характеристика
ИЗ
ОтборПоСегментуНоменклатуры
ГДЕ
ОтборПоСегментуНоменклатуры.ИспользуетсяОтборПоСегментуНоменклатуры = &ИспользуетсяОтборПоСегментуНоменклатуры))}) КАК Движения
СГРУППИРОВАТЬ ПО
Движения.Номенклатура,
Движения.Склад,
КВАН_Дни.Дата
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ОстаткиПоДням.Номенклатура КАК Номенклатура,
ВТ_ОстаткиПоДням.Склад КАК Склад,
ВТ_ОстаткиПоДням.Дата КАК Дата,
ВЫРАЗИТЬ(ВЫБОР
КОГДА ВТ_ОстаткиПоДням.ВНаличииКонечныйОстаток > 0
ТОГДА 0
ИНАЧЕ 1
КОНЕЦ КАК ЧИСЛО) КАК КоличествоДней
ПОМЕСТИТЬ КВАН_НеСгруппированные_Количество
ИЗ
КВАН_ОстаткиПоДням КАК ВТ_ОстаткиПоДням
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
КВАН_НеСгруппированные_Количество.Номенклатура КАК Номенклатура,
КВАН_НеСгруппированные_Количество.Склад КАК Склад,
СУММА(ЕСТЬNULL(КВАН_НеСгруппированные_Количество.КоличествоДней, 0)) КАК Количество,
КВАН_НеСгруппированные_Количество.Дата КАК Дата
ИЗ
КВАН_НеСгруппированные_Количество КАК КВАН_НеСгруппированные_Количество
СГРУППИРОВАТЬ ПО
КВАН_НеСгруппированные_Количество.Номенклатура,
КВАН_НеСгруппированные_Количество.Склад,
КВАН_НеСгруппированные_Количество.Дата
Показать
(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,
НоменклатураНаименование,
Номенклатура
Показать
(5) Но мне нужно получить остатки именно по каждому дню. Если я не выведу даты во второй временной таблице, то получу просто остатки, а не остатки по дням. Либо я не так поняла - в этом случае жду пояснительную бригаду =)
З.Ы. Приложенный запрос проверила, он показывает тот же самый результат, что и мой. Но параметры виртуальной таблицы ОстаткиИОбороты я перенесла в компоновку, в явном виде они меня не интересуют. Возможно дело в этом - ещё проверяю, но маловероятно. А вам случайно не удалось потеститьт этот запрос? В консоли не эффективно, консоль запросов по моему запросу тоже выдаёт корректный результат.
З.Ы. Приложенный запрос проверила, он показывает тот же самый результат, что и мой. Но параметры виртуальной таблицы ОстаткиИОбороты я перенесла в компоновку, в явном виде они меня не интересуют. Возможно дело в этом - ещё проверяю, но маловероятно. А вам случайно не удалось потеститьт этот запрос? В консоли не эффективно, консоль запросов по моему запросу тоже выдаёт корректный результат.
(8)Быстрый вариант без переделки запроса, сделать через внешний набор данных или костыль типа такого:
в вычисляемых полях сделать поле Количество с таким выражением:
Выбор Когда Дата = Датавремя(1,1,1) ТОГДА Количество иначе количество конец
В общем поле дата нужно как то использовать.
в вычисляемых полях сделать поле Количество с таким выражением:
Выбор Когда Дата = Датавремя(1,1,1) ТОГДА Количество иначе количество конец
В общем поле дата нужно как то использовать.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот