Расчет сложных итогов СКД

05.08.19

Разработка - СКД

Малоизвестный прием для расчета итогов в отчетах на СКД.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Расчет сложных итогов СКД:
.erf 5,83Kb
67
67 Скачать (1 SM) Купить за 1 850 руб.

Однажды появилась необходимость посчитать в отчете не стандартные итоги. Долго искал информацию в интернете, но ничего подобного не нашел. Путем экспериментов нашел возможность, описания которой ранее нигде не видел.  Думаю, кому-то может быть полезно.
Задача: необходимо в отчете получить итоги, которые рассчитываются следующим образом


Для расчета вертикальных и горизонтальных итогов все стандартно:

  • Итог по горизонтали рассчитывается формулой 
Среднее(ВычислитьВыражениеСГруппировкойМассив("Максимум(Значение)","Лево, Верх"))
  • Итого по вертикали рассчитывается формулой
Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Значение)","Лево, Верх"))

С итогом на пересечении общих итогов по горизонтали и по вертикали (ячейка в правом нижнем углу) сложнее.
Эксперимент показал, что можно делать вложенные вычисляемые выражения, т.е. формула для общего итога будет 

Сумма(ВычислитьВыражениеСГруппировкойМассив("Среднее(ВычислитьВыражениеСГруппировкойМассив(""Максимум(Значение)"",""Лево,Верх""))","Лево"))

Вложенные кавычки, как в стандартных текстовых константах выделяются двойными кавычками.

В результате получаются такие формулы расчета итогов.


В файлах отчет с примером.

Тестировалось на платформе 8.3.10.2667.

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159401    872    399    

861

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    8684    implecs_team    6    

47

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

3 стартмани

05.02.2024    6995    56    obmailok    21    

79

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    3148    5    Yashazz    1    

34

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    10803    23    John_d    25    

124

СКД Программист Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    8013    PROSTO-1C    15    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DoctorRoza 05.08.19 10:07 Сейчас в теме
А есть ли возможность подсчитать произвольный итог для полей группировок, не ресурсов? Например, у меня есть группировка со списком регистраторов и нужно над ними, в верхнем поле группировки, вывести количество документов. В запросе я могу сгруппировать, и задать Количество(РАЗЛИЧНЫЕ Регистратор), а в СКД как быть?
2. json 3349 05.08.19 10:20 Сейчас в теме
(1) Если не ошибаюсь, это возможно реализовать через пользовательские поля с типом "Выражение".
У меня была задача посчитать количество дней, в которые были поступления (Количество(РАЗЛИЧНЫЕ Период)).
Так вот через пользовательские поля это удалось посчитать.
3. DoctorRoza 05.08.19 10:51 Сейчас в теме
(2) Получается, что добавляем доп. поле, так, в итоге, и сделал, Но хочется балалайку, как с ресурсами.
4. ixijixi 1913 05.08.19 12:58 Сейчас в теме
(1) Можно так попробовать
Прикрепленные файлы:
user886825; +1 Ответить
22. Serejka 29.09.21 15:10 Сейчас в теме
(1) чтото подобное я решил с помощью Массив( различные Регистратор), причем Регистратор нужно закиуть в ресурсы без выражения.
5. ids79 8535 05.08.19 13:45 Сейчас в теме
Можно добавить вычисляемое поле:
ВычислитьВыражениеСГруппировкойМассив("Максимум(Значение)","Лево, Верх")
И в итогах сделать проще:
Среднне(ВычисляемоеПоле)
Сумма(ВычисляемоеПоле)
Сумма(ВычислитьВыражениеСГруппировкойМассив("Среднне(ВычисляемоеПоле)","Лево"))
То же самое, но красивее получается.
6. s22 22 05.08.19 19:34 Сейчас в теме
Долго искал операторы Лево и ВВерх. Думал, как сильно улучшить жизнь с ними в сложных случаях.
А оказалось это имена колонок.
Жизнь не справедлива.
ownmkrd; Merkalov; user712426; Sardukar; Vyacheslide; Leshka_m; ediks; NoRazum; wowik; user717534; MikhailGirshberg; A_Max; +12 Ответить
7. logarifm 1122 06.08.19 09:28 Сейчас в теме
Это все конечно красиво кроме одного. Когда отчет перестроят и изменят группировки вот тогда значения будут весьма интересны. Для простенького примерчика покатит. А вот реально для сложного отчета предусмотреть вариации крайне тяжело.
Vyacheslide; It-developer; user634589_karolina_malboro; Summer_13; +4 Ответить
8. dandykry 11 15.11.19 09:04 Сейчас в теме
О божешки ты мои!!!! 2 дня 2 человека страдали (1 точно страдал) до прочтения этой статьи.
Кто ж знал, что можно выделять двумя кавычками вложенные выражения.
Я в шоке.
Спасибо
RibD; Sardukar; rpgshnik; +3 Ответить
9. xxxAndricxxx 66 11.02.20 10:19 Сейчас в теме
10. German_Tagil 43 14.07.20 14:05 Сейчас в теме
11. vasiliy_09_05 6 03.09.20 09:05 Сейчас в теме
Друзья, доброго времени суток.
Необходима Ваша помощь.
Думаю, что кто-либо сталкивался уже с таким:
По сути мне необходим именно такой алгоритм, который указан в статье, но с одним условием - структура отчета не фиксирована.
То есть использование
ВычислитьВыражениеСГруппировкойМассив("Максимум(Значение)","Лево, Верх")
мне не подходит, так как пользователь может поменять иерархию как угодно.
То есть пример - нужно соединить 2 РН - "Товары переданные" и "Товары полученные". На самом нижнем уровне начальный остаток - сумма начальных остатков переданных и полученных, далее приход и расход (стандартная сальдовка).
Но на вышестоящих уровнях должна быть сумма начальных и конечных остатков предыдущего уровня.

Пытался в ресурсе сделать выражение типа
ВЫБОР КОГДА УРОВЕНЬ()=2 Тогда НачальныйОстаток ИНАЧЕ Сумма(НачальныйОстаток) КОНЕЦ
(просто пример), но тогда СКД вышестоящих уровней суммирует все значения нижестоящей, а не значения группировок.

Если бы отчет был фиксированный, проблем бы не было.

Нашел описание подобной же проблемы: My Webpage, но там описывается общий принцип без конкретики.

Если кто то сможет натолкнуть на правильный вариант, был бы премного благодарен :)
12. masterkio 344 03.09.20 11:11 Сейчас в теме
(11) Добрый день. Если честно из описания не очень понятно что вы хотите получить. Если есть возможность сделать картинку с тем как и что должно считаться, может быть получиться помочь.
14. vasiliy_09_05 6 04.09.20 07:30 Сейчас в теме
(12) Доброго времени суток.
Спасибо за интерес к вопросу.
Вкратце что необходимо:
Смотрите, у меня 2 РН (Товары переданные и товары полученные).
В результате алгоритм должен быть следующим:
1) Получаем начальный остаток обоих РН на дату начала отчета
2) Получаем все записи обоих РН (у них реквизиты Организация и контрагент одинаковые, а договоры разные)
3) Сортируем список (2) по периоду
4) Последовательно проходим по всем отсортированным записям и, если запись из РН товары полученные, остаток увеличиваем на сумму записи, если товары переданные, уменьшаем.

В результате получается типовой отчет (нач остаток, приход, расход, кон остаток).

Все было бы просто если бы не несколько условий:
1) Иерархия отчета может строиться произвольно. То есть пользователь может убрать, например, договор, контрагента, а возможно и номенклатуру;
2) Ресурсы "Приход" и "Расход" по вышестоящим группировкам суммируются (здесь проблем нет, штатный механизм), а вот ресурсы "Начальный остаток" и "Конечный остаток" должны вести себя по-иному:
"Начальный остаток" - сумма группировки по первому значению (первая строка в группировке)
"Конечный остаток" - сумма группировки по последнему значению (последняя строка в группировке)

В общем вот такой нестандартный отчет :(

Чтобы было более понятно, приложил скрин:
Отчет

По вышестоящим группировкам начальный остаток должен быть 1457 (1367 первой строки номенклатуры Матал + 90 первой строки номенклатуры (евро))
конечный остаток - 1268 (1188 последней строки номенклатуры Матал + 80 последней строки номенклатуры (евро))

В общем что только я не пробовал, никак не получается каменный цветок.

Пробовал вычислять строки, добавлять их в ТЗ, а потом передавать в СКД, пробовал объединять 2 запроса и выводить строки с помощью
IsNull(ВЫЧИСЛИТЬВЫРАЖЕНИЕ("КонечныйОстаток", , , "Предыдущая", "Предыдущая"),НачальныйОстаток)


Ни один из вариантов не подошел :(

Может кто-нибудь сталкивался с подобным заданием и уже победил?
Был бы очень благодарен за советы :)
15. masterkio 344 04.09.20 10:54 Сейчас в теме
(14)Не проверял, но по идее как то так должно сработать.
В формуле расчета ресурса НачальныйОстаток должна быть примерно такая формула.

Сумма(ВычислитьВыражениеСГруппировкойМассив( "ВычислитьВыражение(""НачальныйОстаток"", """", ""Группировка"", ""Первая"", ""Первая"")", "Регистратор"))

т.е. группировка Регистратор есть всегда и именно в ней, как я понял, мы берем остаток из первой записи, а во всех вышележащих группировках просто складываем.
16. vasiliy_09_05 6 07.09.20 07:53 Сейчас в теме
(15) Хм, спасибо.
Сейчас попробую
18. echo77 1906 16.01.21 05:53 Сейчас в теме
13. cfifgoth 04.09.20 01:12 Сейчас в теме
Это просто супер. Я с этим долбался часов 6-7, пока не набрел на вашу статью. Спасибище. Статья неоценима просто.
17. SvLeo 22.10.20 12:25 Сейчас в теме
Спасибо, товарищ. применила идею к своим расчетам....
Сумма(ВычислитьВыражениеСГруппировкойМассив("Сумма(ВычислитьВыражениеСГруппировкойМассив(""Выручка"",""ДоговорСсылка""))","ДоговорСсылка"))
19. Hatson 536 23.03.21 17:08 Сейчас в теме
А почему формулы написаны только на закладке "Ресурсы"? Не видно настроек отчета. Не понятно что будет при выводе детальных записей вместо одной из группировок.

PS
Приходишь в какую-нибудь контору, видишь такой отчет и неделю втыкаешь, что автор пытался изобразить и получилось ли у него, ведь ни описания ни тех. задания обычно написать никто не удосужился, а заказчик утверждает, что отчет показывает "не совсем то", но сам не знает что. Но, правда, статистика всегда одинакова: отчет иногда работает в исключительно частном случае, в остальных случаях помогает только Ctrl+A -> Shift+Del
20. proger1c81 1 07.07.21 18:56 Сейчас в теме
Очень нужна помощь, может кто знает:

Возьмем ваш пример с группировками Лево1, Лево2, Лево3.
Как сделать так, чтобы итоги по горизонтали (итоги справа) не считались для конкретной группировки (например, лево2) ?
21. masterkio 344 07.09.21 11:43 Сейчас в теме
(20)
Думаю, можно просто добавить в формулу условие Выбор когда Поле = "Лево2" Тогда 0 Иначе формула Конец
23. gamletspb 105 16.11.21 16:56 Сейчас в теме
делаю вычисляемое поле,
ВычислитьВыражение(Максимум(НомерСтроки), "Контрагент.Ответственный")

ресурс
Сумма(ЧислоСтрок)


при формировании отчета получаю
Использование вложенных агрегатных функций не допускается


что я делаю не так?
Прикрепленные файлы:
24. gamletspb 105 18.11.21 13:11 Сейчас в теме
(23) разобрался - забыл про кавычки
25. Dermidont 11 27.05.22 10:19 Сейчас в теме
Автору респект за статью. Сильно помогло.
26. 4ytta 25 24.06.22 17:31 Сейчас в теме
Ребят, подскажите пожалуйста, а можно вложений сделать больше 2, а то везде пишут примеры именно с двумя вложениями, а как сделать например три вложения, я кавычки не могу победить...Вот пример: Среднее(ВычислитьВыражениеСГруппировкойМассив("Среднее(ВычислитьВыражениеСГруппировкойМассив("
Среднее(ВычислитьВыражениеСГруппировкойМассив(""Сумма(Значение)"",""Смена""))"
,"Период"))","ТО"))
27. angabanga5 18.09.22 00:33 Сейчас в теме
запутался к бабушке. у меня итоги не верно считаются с этими выражениями. сумма идет не верная. в пределах указанной в выражении группировки все верно,а общие итоги едут, он какбуд-то сложить их не может правильно, что за бред

Сумма(ВычислитьВыражение("Максимум(КоличествоОстаток41)","Номенклатура")).
Тут я по измерению номенклатура беру максимум и хочу, чтобы в отчете была сумма этих максимумов (естессно ез повторяющихся по номенклатуре, а вместо этого все едет
28. yudroma 09.01.23 16:28 Сейчас в теме
Лучший! Просто лучший!
29. buy_sale 220 16.06.23 08:09 Сейчас в теме
Если хоть в одной группировке отрицательное значение, то ваш принцип с максимумами не работает.
Узкоспециализированное решение, но за инфу о тонкостях платформы благодарю.
Sardukar; +1 Ответить
Оставьте свое сообщение