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С
Санкт-Петербург
зарплата до 120 000 руб.
Полный день

Работа от Инфостарт
Санкт-Петербург
Временный (на проект)

Руководитель отдела внедрения 1С
Новосибирск
зарплата от 60 000 руб. до 160 000 руб.
Полный день

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