СКД строковое поле в группировке
По теме из базы знаний
Найденные решения
(7)
попытайтесь объяснить разные результаты.
Результаты я уже объяснял в (6). Не защищаю оптимизатор СКД, но примите это как факт, если у поля в роли не указано "Обязательное" и оно не участвует в структуре, это поле будет удалено из запроса макета компоновки. В отладке или консоли СКД можете посмотреть как выглядит результирующий запрос.
Прикрепленные файлы:
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
ВЫБРАТЬ
ХозрасчетныйОборотыДтКт.Организация КАК Организация,
ПОДСТРОКА(ДоговорыКонтрагентов.Наименование, 1, 3) КАК Направление,
ХозрасчетныйОборотыДтКт.Регистратор КАК Регистратор,
ХозрасчетныйОборотыДтКт.СуммаОборот КАК Выручка,
0 КАК Затраты,
ХозрасчетныйОборотыДтКт.СуммаОборот КАК ТорговаяНаценка
ПОМЕСТИТЬ ВТ_Обороты
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&ДатаНачала, &ДатаОкончания, Регистратор, СчетДт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателямиИЗаказчиками)), , СчетКт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Продажи)), , ) КАК ХозрасчетныйОборотыДтКт
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ПО ХозрасчетныйОборотыДтКт.СубконтоДт2 = ДоговорыКонтрагентов.Ссылка
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ХозрасчетныйОборотыДтКт.Организация,
"",
ХозрасчетныйОборотыДтКт.Регистратор,
0,
ХозрасчетныйОборотыДтКт.СуммаОборот,
-ХозрасчетныйОборотыДтКт.СуммаОборот
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&ДатаНачала, &ДатаОкончания, Регистратор, СчетДт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.СебестоимостьПродаж)), , , , ) КАК ХозрасчетныйОборотыДтКт
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Обороты.Организация КАК Организация,
МАКСИМУМ(ВТ_Обороты.Направление) КАК Направление,
ВТ_Обороты.Регистратор КАК Регистратор,
СУММА(ВТ_Обороты.Выручка) КАК Выручка,
СУММА(ВТ_Обороты.Затраты) КАК Затраты,
СУММА(ВТ_Обороты.ТорговаяНаценка) КАК ТорговаяНаценка
ПОМЕСТИТЬ ВТ_Группировка
ИЗ
ВТ_Обороты КАК ВТ_Обороты
СГРУППИРОВАТЬ ПО
ВТ_Обороты.Организация,
ВТ_Обороты.Регистратор
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Группировка.Организация КАК Организация,
ВТ_Группировка.Направление КАК Направление,
СУММА(ВТ_Группировка.Выручка) КАК Выручка,
СУММА(ВТ_Группировка.Затраты) КАК Затраты,
СУММА(ВТ_Группировка.ТорговаяНаценка) КАК ТорговаяНаценка
ПОМЕСТИТЬ ВТ_Итоговая
ИЗ
ВТ_Группировка КАК ВТ_Группировка
СГРУППИРОВАТЬ ПО
ВТ_Группировка.Организация,
ВТ_Группировка.Направление
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Итоговая.Организация КАК Организация,
ВТ_Итоговая.Направление КАК Направление,
ВТ_Итоговая.Выручка КАК Выручка,
ВТ_Итоговая.Затраты КАК Затраты,
ВТ_Итоговая.ТорговаяНаценка КАК ТорговаяНаценка,
ВЫРАЗИТЬ(ВТ_Итоговая.ТорговаяНаценка / ВТ_Итоговая.Выручка * 100 КАК ЧИСЛО(15, 2)) КАК ПроцентТорговойНаценки
ИЗ
ВТ_Итоговая КАК ВТ_Итоговая
Показать
Если делать через соединение, а не через объединение - все работает. Это что, группировка строк в одной из временных таблиц запроса неправильно отрабатывает функцию "МАКСИМУМ"? Тогда бы в детальных записях была бы одна строка. Консоль запросов то как надо все возвращает, а эта свинидла не хочет. Интересно, что в детальных записях присутствуют записи с другим значение поля "Направление". Но, когда это поле ставишь в качестве группировки - тупо одну запись выводит СКД, аут.
Зачем столько ВТ? СКД это всё сама бы посчитала, вам только нужно правильную структуру настроить.
По теме, у вас поле Регистратор СКД удалила из запроса ВТ_Группировка, так как оно нигде не используется.
Для примера, отчет СКД с таким запросом по умолчанию выведет только одну строку "В":
По теме, у вас поле Регистратор СКД удалила из запроса ВТ_Группировка, так как оно нигде не используется.
Для примера, отчет СКД с таким запросом по умолчанию выведет только одну строку "В":
ВЫБРАТЬ
1 КАК Число,
"А" КАК Буква
ПОМЕСТИТЬ ВТ1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
2,
"Б"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
3,
"В"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ1.Число КАК Число,
МАКСИМУМ(ВТ1.Буква) КАК Буква
ПОМЕСТИТЬ ВТ2
ИЗ
ВТ1 КАК ВТ1
СГРУППИРОВАТЬ ПО
ВТ1.Число
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ2.Буква КАК Буква
ИЗ
ВТ2 КАК ВТ2
Показать
Еще раз, поле группировки у всех записей - уникальное, следовательно суммируемое поле должно остаться таким, какое оно на входе, а не превратиться в "максимум" при двух уникальных значениях поля группировки. Вот этот пример с буквами на СКД. Сформируйте. Потом уберите из "выбранных полей" число, сформируйте и попытайтесь объяснить разные результаты.
Прикрепленные файлы:
ВнешнийОтчет1.erf
(7)
попытайтесь объяснить разные результаты.
Результаты я уже объяснял в (6). Не защищаю оптимизатор СКД, но примите это как факт, если у поля в роли не указано "Обязательное" и оно не участвует в структуре, это поле будет удалено из запроса макета компоновки. В отладке или консоли СКД можете посмотреть как выглядит результирующий запрос.
Прикрепленные файлы: