0. Dioneo 55 11.02.19 18:40 Сейчас в теме

Ещё раз о суммировании группировок в СКД

Начинающие специалисты, создающие отчеты в СКД, часто сталкиваются с вопросом о суммировании результатов группировок. Столкнувшись с такой задачей, я понял, что часто проблемы возникают от неправильного понимания самой задачи, а также недопонимания действия механизмов платформы.
В приведенной ниже статье попробуем с этим разобраться.

Перейти к публикации

Вознаграждение за ответ
Показать полностью
Комментарии
Избранное Подписка Сортировка: Древо
1. lunjio 60 11.02.19 19:07 Сейчас в теме
А чем функции ВычислитьВыражение и ВычислитьВыражениСГруппировкойМассив на худой конец не устраивают ? Пример если честно простоват, если вы пытались обосновать два набора данных и соединение между ними, этот пример не самый лучший вариант.
glime; Артано; Dach; olbu; wowik; w.r.; +6 Ответить
3. w.r. 210 11.02.19 20:13 Сейчас в теме
5. Dioneo 55 12.02.19 09:09 Сейчас в теме
(1) ВычислитьВыражениСГруппировкойМассив пробовал, ожидаемого результата не получил. Наверное не так пробовал...
6. lunjio 60 12.02.19 10:00 Сейчас в теме
(5) Правильно использовать так - Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(ВашРесурс)", "ВашеПолеЗаявки")), во втором же поле достаточно обойтись классической суммой. Попробуйте ) Достаточно мощная функция, позволяет много чего сделать, без извращений в запросе.
Артано; Алексей_mir2mb; Dach; wowik; +4 Ответить
7. Dioneo 55 12.02.19 10:19 Сейчас в теме
2. w.r. 210 11.02.19 19:58 Сейчас в теме
Плохо, что не представлен исходный запрос. Можно было бы подумать над более оптимальным решением, чем связь 2х наборов в СКД
4. Dioneo 55 12.02.19 09:07 Сейчас в теме
(2) Обычное левое соединение документов списания и документов заказа по полям докзаказа.ссылка=доксписания.док-основание и докзаказа.номенклатура=доксписания.номенклатура
Алексей_mir2mb; +1 Ответить
9. w.r. 210 13.02.19 00:08 Сейчас в теме
(4) ох уж эти левые соединения, которые плодят дубли, когда в правой таблице строк больше, чем в левой (

Полагаю, что если бы в запросе СКД дополнительно сгруппировали по полям:

- Тип заявки
- Проект
- Ссылка на заявку
- Ссылка на ТН

- Максимум(Количество по заявке)
- Сумма(Количество по ТН)

То результат был бы верный

Но это уже на понимание, как работают запросы, а не особенности СКД
10. AlX0id 13.02.19 08:08 Сейчас в теме
(9)
А если меняется структура отчета - нужны другие поля, например - вы тоже запрос будете переписывать под каждую из них?
11. w.r. 210 13.02.19 09:53 Сейчас в теме
(10) в любом случае нужно менять отчёт

Лично считаю, что работу программы проще предсказать, когда ты ей явно указываешь каким образом нужно собирать данные (запрос) чем через минупуляции с СКД
12. AlX0id 13.02.19 10:00 Сейчас в теме
(11)
Нет, как раз в случае решения на СКД - не придется менять отчет и у пользователя будет возможность менять структуру.

То, что программисту проще настроить один вариант отчета и заточить под него запрос - это односзначно. Но это прошлый век.
14. w.r. 210 13.02.19 19:15 Сейчас в теме
(12)
Я не предлагаю отказаться от группировок в СКД, я предлагаю предварительно подготовить данные самым очевидным способом - в запросе

Считаю этот метод более наглядным и простым в отладке, чем соединение наборов данных или применение функций СКД в ресурсах
8. echo77 1077 12.02.19 12:02 Сейчас в теме
(0) Я бы назвал публикацию "Особенности расчета ресурсов при соединении наборов данных в СКД". По сути вы это и показываете - соединив два набора данных в СКД вы получаете правильно рассчитанные итоги.
В курсе Гилева по СКД, это кстати, было, но не многие(я в том числе не увидел :-)) с первого раза на это обращают внимание.
Артано; Алексей_mir2mb; Dach; GlebBR; +4 Ответить
13. MishaD 12 13.02.19 14:29 Сейчас в теме
Раз уж в теме собрались знатоки СКД есть вопрос. Как можно сократить выражение:
Сумма(ВычислитьВыражениеСГруппировкойМассив("Выбор Когда Сумма(СуммаОтгрузкаТекПериод) > 0 Тогда 1 Иначе 0 Конец", "Контрагент"))
Просто в дальнейшем придется считать процент отклонения, и там таких выражений будет 3 штуки. Получится вот такое "радостное" выражение.
Формат((Сумма(ВычислитьВыражениеСГруппировкойМассив("Выбор Когда Сумма(СуммаОтгрузкаТекПериод) > 0 Тогда 1 Иначе 0 Конец", "Контрагент")) -
Сумма(ВычислитьВыражениеСГруппировкойМассив("Выбор Когда Сумма(СуммаОтгрузкаПредГод) > 0 Тогда 1 Иначе 0 Конец", "Контрагент")))/Сумма(ВычислитьВыражениеСГруппировкойМассив("Выбор Когда Сумма(СуммаОтгрузкаТекПериод) > 0 Тогда 1 Иначе 0 Конец", "Контрагент")), "ЧДЦ = 2") + "%"
И это я еще деление на 0 не учитываю. Видимо буду от него избавляться условным оформлением.
15. w.r. 210 13.02.19 21:03 Сейчас в теме
(13)

Последняя запись неверна в принципе - если Сумма(СуммаОтгрузкаТекПериод) <= 0, то будет деление на 0
16. MishaD 12 14.02.19 09:18 Сейчас в теме
(15) Я написал, что буду избавляться условным оформлением. Для других, более коротких конструкций идет выражение через
Выбор Когда Б <> 0 Тогда Формат((А-Б)/Б, "ЧДЦ = 2")+"%"
Когда А > 0 Тогда 100%
Когда А < 0 Тогда -100% 
Иначе ""
Конец

Просто выражение получается очень длинным, если вместо А и Б подставлять подобные выражения.
Сумма(ВычислитьВыражениеСГруппировкойМассив("Выбор Когда Сумма(СуммаОтгрузкаТекПериод) > 0 Тогда 1 Иначе 0 Конец", "Контрагент")
17. par_62 17.02.19 21:14 Сейчас в теме
В приведенном прмере элементарно построить правильный запрос путем объединить. И все получится. СКД вещь отличная, но думаю, если можно построить запрос правильно,то и пользователькие варианты не помеха.
IVC_goal; +1 Ответить
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 115 000 руб. до 160 000 руб.
Полный день

Руководитель проектов 1С
Санкт-Петербург
зарплата от 150 000 руб.
Полный день

Программист 1С
Бобров
зарплата от 100 000 руб. до 150 000 руб.
Временный (на проект)

Программист 1С
Санкт-Петербург
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Программист 1С
Новосибирск
зарплата от 80 000 руб.
Полный день