Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

0. ids79 5741 08.08.19 11:30 Сейчас в теме
Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ellavs 725 08.08.19 11:37 Сейчас в теме
Вот спасибо, только вчера искала решение по нестандартному итогу: нужно было сделать общий итог в виде суммы по группировкам, в которых итог рассчитывался как максимальное значение по группировке. Набегом не получилось. Снова попытаюсь с Вашей статьей :)
7. ids79 5741 08.08.19 16:28 Сейчас в теме
19. echo77 1167 19.08.19 15:51 Сейчас в теме
(1) нужно сделать двойное агрегирование: Сумма(Вычислить выражением группировкой массив())
20. ids79 5741 19.08.19 16:56 Сейчас в теме
(19)А это не двойное агрегирование. ВычислитьВыражениеСГруппировкойМассив - не агрегатная функция. А про вложенные функции написано кратно + ссылка на статью, где более подробно.
21. echo77 1167 19.08.19 17:02 Сейчас в теме
(20) сама по себе нет, но внутри, можно расположить агрегатную функцию
22. ids79 5741 19.08.19 17:49 Сейчас в теме
(21)Ну это да, в этом ее смысл. Если интересно про вложенные функции, посмотрите по ссылки из статьи.
2. wowik 813 08.08.19 11:43 Сейчас в теме
Спасибо! только вчера искал ВычислитьВыражение("Сумма(Количество)", , «ОбщийИтог»)
8. ids79 5741 08.08.19 16:30 Сейчас в теме
3. mvgfirst 5 08.08.19 11:44 Сейчас в теме
Давно ждал - что кто-то сделает описание с картинками )
И вот это свершилось )...
murat_; ids79; +2 Ответить
9. ids79 5741 08.08.19 16:31 Сейчас в теме
4. rpgshnik 2340 08.08.19 12:16 Сейчас в теме
Использовал, но так же пока сам не разобрался не понял :)
С картинками пример вообще супер!
ids79; SmArtist; +2 Ответить
10. ids79 5741 08.08.19 16:31 Сейчас в теме
5. Mx-RoN 08.08.19 12:40 Сейчас в теме
А есть возможность рассказать и про другие функции СКД и их практическое применение? Вроде таких как Корреляция, СтандартноеОтклонениеВыборки, Любой, КлассификацияABC и т.д.
TeMochkiN; scanner1980; +2 Ответить
11. ids79 5741 08.08.19 16:32 Сейчас в теме
(5)Планирую написать про агрегатные функции.
TeMochkiN; +1 Ответить
6. Aftee 08.08.19 13:28 Сейчас в теме
Само выражение задается в первом параметра функции

Опечатка
12. ids79 5741 08.08.19 16:35 Сейчас в теме
13. MishaD 14 09.08.19 16:26 Сейчас в теме
Ну вот, а я так надеялся узнать, что за штука такая - группировка не ресурса
14. Yashazz 3423 11.08.19 10:30 Сейчас в теме
Мегаспасибище! Вот наконец хоть кто-то занялся всерьёз.

Слушайте, а как плюс поставить??? Минус у меня поставился (когда тыркал) а плюс нифига. Куда щёлкать-то?
15. ids79 5741 11.08.19 11:32 Сейчас в теме
(14)Пожалуйста.
Нажимайте на плюс, и выбирайте раздел, в котором будет сохранена публикация, Загрузки или Избранное.
16. Yashazz 3423 12.08.19 10:50 Сейчас в теме
(15) Ага, спасибо, жмякнул.
Кстати, у меня лет 6 назад была иллюстрация работы "ВычислитьВыражение" на примере: https://infostart.ru/public/192746/
17. ids79 5741 12.08.19 20:32 Сейчас в теме
(16)Посмотрел, интересно.

П.С. А плюсик так и не поставили :))
18. Yashazz 3423 12.08.19 22:30 Сейчас в теме
(17) Поставил!!! Сделал, как Вы сказали!
23. djan 15.10.19 12:36 Сейчас в теме
Спасибо за статью - наглядно, доступно. Я вот давеча пробовал с помощью функции ВычислитьВыражение получить в итоге группировки значение последней строки из этой группировки. Так и не получилось у меня это сделать. Если знаете, подскажите пожалуйста, для общего развития..
24. ids79 5741 15.10.19 18:03 Сейчас в теме
(23)Посмотрите комментариях к этой статье Был такой же вопрос.
25. tireal 70 24.10.19 10:57 Сейчас в теме
"Если выражение рассчитывается по группировке, отбор записей выполняется на уровне этой группировки. Текущей в данном случае будет родительская группировка:" у меня выражение (разность дат между текущей строкой и предыдущей) рассчитывается без указания группировки (2 параметр), т. е. если верить описанию в контексте текущей группировки. В детальных записях все норм, но как только я пытаюсь получить по полученным в детальных записях значениям итоги (Сумма(Разность дат) - функция как понимаю игнорирует эти данные и в итог группировки рассчитывает как разность дат последней записи пред. группировки и первой текущей.

Как же мне посчитать итоги именно по значениям детальных записей кто скажет?
27. ids79 5741 24.10.19 13:23 Сейчас в теме
(25)Проблема в том, что на уровне группировки функция ВычислитьВыражение будет уже работать не с детальными записями, а с группировками.
В Вашем случае нужно в итогах сделать так:
СУММА(ВычислитьВыражениеСГруппировкойМассив("РазностьДат", "Документ")).
Документ - это любой реквизит из детальных записей.
Тогда расчет будет корректный.
28. tireal 70 24.10.19 14:20 Сейчас в теме
(27) да спасибо, уже нашел. Но! ) теперь какие то странные общие итоги...
Прикрепленные файлы:
29. tireal 70 24.10.19 15:32 Сейчас в теме
(27) убрал Сумма в СУММА(ВычислитьВыражениеСГруппировкойМассив("РазностьДат", "Документ")). - решил посмотреть из каких сумм складывается Общий итог - только первая совпадает с итогом по первой группировке а остальное ....

Буду очень признателен если поделитесь мыслями почему так может быть
Прикрепленные файлы:
30. ids79 5741 24.10.19 16:02 Сейчас в теме
(29)Да, не будет общий итог работать. Так как нарушается корректная последовательность для определения предыдущей записи.
Нужно сделать примерно как описано тут
Для общего итога отдельный расчет с вложенными друг в друга функциями ВычислитьВыражениеСГруппировкойМассив.
26. tireal 70 24.10.19 12:13 Сейчас в теме
вроде решил, вместо Сумма(Разность дат) в выражении итога нужно было Сумма(ВычислитьВыражениеСГруппировкойМассив(Разность дат))
31. lmnlmn 63 27.11.19 10:50 Сейчас в теме
Существует еще загадочное значение «ГруппировкаНеРесурса»...

Мне не доводилось использовать данное значение. Проводя эксперименты, каких-то отличий применения данного значения от значения «Группировка», я не выявил. Очень может быть, что это значение не актуально на сегодняшний день.

Если кто-то использовал это значение, напишите, пожалуйста, в комментариях, очень интересно!

Намедни довелось прибегнуть с этому средству. Есть справочник с иерархией групп и элементов. Небезывестно, что с ними есть проблема с дублями при выводе иерархии. Так вот "ГруппировкаНеРесурса" берет значения ресурсов как раз из этих "дублей" и рисует их на уровне группировки.
У меня была задача вывести привязку пользователей к группам номенклатуры в виде кросс-таблицы где по горизонтали пользователи, а по вертикали группы номенклатуры с учетом их иерархии в справочнике. На пересечении "галочка" - булево. Что-то типа "все роли" в конфигураторе только еще с сохранением иерархии групп по строкам. "ГруппировкаНеРесурса" позволяет выводить "галочки" только в том случае, если у пользователя есть право на использование именно этой группы не взирая на дочерние. При других типах расчета мы получим "галочку" при наличии прав на любую из дочерних групп, что мне совершенно не годилось.

P.S. Извиняюсь за сумбур в описании. Понимать и исследовать как это работает совершенно некогда.
32. Shaldryn 16.12.19 09:47 Сейчас в теме
Спасибо за статью, у меня вопрос, как можно сделать чтобы для каждой группы выводилось их сумма как по элементам, так и по группе?
Прикрепленные файлы:
33. ids79 5741 16.12.19 10:11 Сейчас в теме
(32)Можно сделать отдельный расчет итогов для товаров и для Иерархии товаров.
Для иерархии использовать такую формулу:
ВычислитьВыражение("Сумма(Количество)", "Товар")
Shaldryn; +1 Ответить
34. Shaldryn 16.12.19 11:31 Сейчас в теме
(33) Да, получилось, спасибо большое
35. gorakh 25 31.01.20 11:23 Сейчас в теме
Есть колонка полученная пометодике описанной "итоги по строкам таблицы ресурсы, отличные от ресурсов в колонках таблицы" . Как можно испоьзовать результаты полученные в ней в контексте ВычислитьВыражение?
36. ids79 5741 04.02.20 09:35 Сейчас в теме
37. temdj 12 27.05.20 14:20 Сейчас в теме
Добрый день, Суммы это конечно хорошо) Не пойму, как можно сделать разность между текущей и предыдущей группировкой, чтобы получить дельту (отклонение) по периоду.
38. dmitryts 2 25.06.20 16:15 Сейчас в теме
Добрый день

В СКД уже могу многое, но вот эти функции никак не даются.
В приложении схема, которая пока у меня не работает. Вернее, не работают именно поля, которые рассчитываются этими функциями.
Если я убираю эти поля из группировки сделка, то все работает. А с ними получаю сообщение "Выражение не может быть вычислено ..."
Я так понимаю, программа пытается эти поля вычислить не для группировки Сделка...
Что не так?
Мне нужно вычислить Рентабельность по формуле (Выручка - СУММА (Затраты)) / Рентабельность

Я понимаю, что именно этот отчет можно посчитать и без этих функций. Но надо же когда-то начать! Поможете найти ошибку?
Прикрепленные файлы:
рентабельность.xml
39. ids79 5741 27.06.20 11:22 Сейчас в теме
(38)А зачем Вы добавляете эти поля в группировку "Сделка"?
Удалите их и добавьте как ресурсы, только без агрегатной функции.
Тогда не должно быть ошибки.
И еще, "ОбщийИтог" в формуле, по моему его там быть не должно.
40. user_2010 517 29.06.20 15:27 Сейчас в теме
Добрый день!
Кручу-верчу... запутать хочу :)
И так и эдак - не выходит каменный цветок...

Может быть, кто-то гуру этих самых функций подскажет как такое возможно настроить?

Нужно посчитать переработки и недоработки
Отчет в виде таблицы:
Колонки - группировка по месяцам + итого за весь период.
Строки - группировки по Организация, сотрудник.

При расчете итого за период - нужно сложить за все месяца переработки/недоработки и если
Всего по сотруднику за период > 0 = переработка,
Всего по сотруднику за период < 0 = недоработка.

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


Для примера с цифрами

Иванов январь всего переработка/недоработка = -10 (< 0 => это недоработка)
Иванов февраль всего переработка/недоработка = +7 ( > 0 => это переработка)

Иванов Итого за период = -3 (< 0 => это недоработка)

Петров январь всего переработка/недоработка = +8 ( > 0 => это переработка)
Петров февраль всего переработка/недоработка = -6 (< 0 => это недоработка)

Петров Итого за период = +2 ( > 0 => это переработка)

Табличка:

Январь Февраль Итого за период
Всего Недораб Перераб Всего Недораб Перераб Всего Недораб Перераб
Иванов -10 -10 +7 +7 -3 -3
Петров +8 +8 -6 -6 +2 +2
Итого по орг -2 -10 +8 +1 -6 +7 -1 -3 +2

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

Возможно это настроить?

Спасибо!
41. Pryanishnikov_Vladimir 24.07.20 14:20 Сейчас в теме
Возможно ли получить значение первой записи в группировке?
Прикрепленные файлы:
43. ids79 5741 31.07.20 14:11 Сейчас в теме
(41) Первое, что нужно сделать, это сделать разные формулы расчета итогов для иерархии и для элементов.
Для иерархии, в расчете вообще убрать агрегатную функцию. По по-моему этого достаточно, чтобы выводилась первая запись группы.
42. LIL_PIVO 31.07.20 07:34 Сейчас в теме
Добрый день!

Помогите убрать записи по ресурсам из детальных записей, но оставить их в итогах. СКД формирую программно

Строка создания ресурса ( структура передаётся в процедуру подстановки ресурсов для СКД)
СтруктураРесурсов.Вставить("ДебетНачальный", "Сумма(ВычислитьВыражениеСГруппировкойМассив(""Минимум(ДебетНачальный)"",""Точка""))");

Картина получается такая ( картинка во вложении).

Пробовал добавлять ещё один ресурс
ПолеРесурса = СхемКомпДанных.ПоляИтога.Добавить();
ПолеРесурса.ПутьКДанным = "ДебетНачальный";
ПолеРесурса.Выражение = "ВычислитьВыражение( ""0"",""ДебетНачальный"",""ДебетНачальный"")";
Прикрепленные файлы:
44. ids79 5741 31.07.20 14:21 Сейчас в теме
(42) Не очень понял, зачем Вы используете функцию ВычислитьВыражениеСГруппировкойМассив…
Попробуйте сделать так:
СтруктураРесурсов.Вставить("ДебетНачальный", "Минимум(ДебетНачальный)","Точка");
45. LIL_PIVO 31.07.20 14:55 Сейчас в теме
(44)
Суммирую, чтоб подсчитал общий итог.

Попробуйте сделать так:
СтруктураРесурсов.Вставить("ДебетНачальный", "Минимум(ДебетНачальный)","Точка");

Не помогло.


Подскажите пожалуйста, а настройки вывода полей по детальным записям как программно отредактировать?
Чтоб было типа такого
https://forum.infostart.ru/forum9/topic58095/
46. ids79 5741 31.07.20 15:04 Сейчас в теме
(45)Я не знаю, не пробовал так делать. Но, по идеи должно быть примарно так как я написал.

"Суммирую, чтоб подсчитал общий итог. "
Это имело бы смысл, для группировок более высокого уровня, чем "Точка".
А так будет тот же результат, что и Минимум(ДебетНачальный)
47. LIL_PIVO 31.07.20 15:06 Сейчас в теме
(46) Спасибо, попробую переделать структуру отчета
48. LIL_PIVO 31.07.20 16:09 Сейчас в теме
(46) Придумал ужасное решение. Т.к. знаю номера ячеек у ресурсов и у области итогов цвет жирный, скрываю записи у которых это ложь. На выходных всё же надо придумать другой способ

НомерСтр = 9; 
	Пока НомерСтр <> 200 Цикл
		
		Если Результат.Область("R" + Строка(НомерСтр) + "C3").Шрифт.Жирный = Ложь Тогда
			
			Результат.Область("R" + Строка(НомерСтр) + "C3").Текст = "";
			Результат.Область("R" + Строка(НомерСтр) + "C4").Текст = "";
			Результат.Область("R" + Строка(НомерСтр) + "C7").Текст = "";
			Результат.Область("R" + Строка(НомерСтр) + "C8").Текст = "";
			
		КонецЕсли;
		
		НомерСтр = НомерСтр + 1; 
	КонецЦикла;
Показать
49. ids79 5741 01.08.20 10:09 Сейчас в теме
(48)Да, это не очень вариант
Оставьте свое сообщение
Вопросы с вознаграждением