Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив
Предыдущие статьи по СКД можно посмотреть по ссылкам ниже:
- Основные понятия и элементы схемы компоновки,
- Настройки вариантов отчетов,
- Работа с пользовательскими настройками,
- Расширения языка запросов,
- Наборы данных и связи между ними, иерархии.
Система компоновки данных, это очень сложный и многофункциональный механизм. СКД имеет массу возможностей, которые далеко не всегда используются при создании простых отчетов.
Одним из таких механизмов является использование внутренних функций СКД.
Применение внутренних функций достаточно широко, их можно использовать:
- В реквизитах полей компоновки: «Выражение представления», «Выражение упорядочивания»
- В выражениях вычисляемых полей
- В выражениях ресурсов
- В выражениях связей наборов данных
- В выражениях параметров
- В выражениях параметров предопределенных макетов
- В выражениях пользовательских полей
Самих функций очень много, полный их перечень можно посмотреть в справке 1С:
В основном их назначение и использование интуитивно понятно, поэтому рассматривать их подробно я смысла не вижу.
Исключением являются функции из группы «Вычислить выражение»:
- Вычислить
- ВычислитьВыражение
- ВычислитьВыражениеСГруппировкойМассив
- ВычислитьВыражениеСГруппировкойТаблицаЗначений
Несмотря на достаточно внушительно описание в справке, их использование вызывает много вопросов. Функции часто используется «интуитивно», без глубокого понимания происходящего.
Цель этой статьи - «осознанное» применение функций из группы «Вычислять выражение».
И так, поехали…
Первая функция «Вычислить» - на данный момент устарела. Она является подмножеством функции «ВычислитьВыражение», в которой реализован весь ее функционал и добавлены дополнительные возможности. Функция «Вычислить» осталась только для сохранения обратной совместимости. Поэтому перейдем сразу к рассмотрению функции «ВычислятьВыражение».
ВычислитьВыражение
Полный синтаксис функции следующий:
ВычислитьВыражение(Выражение, Группировка, ТипРасчета, Начало, Конец, Сортировка, ИерархическаяСортировка, ОбработкаОдинаковыхЗначенийПорядка)
Общее описание функции:
Выполнить произвольное выражение в контексте некоторой группировки или набора группировок. Можно провести аналогию с расчетом итогов. Отличие в том, что при расчете итогов, выражение рассчитывается всегда в контексте текущей группировки, в зависимости от уровня, на котором происходит расчет. Тогда как функция «ВычислитьВыражение» позволяет получить расчет в контексте произвольной группировки, отличной от текущей.
Само выражение задается в первом параметре функции. Остальные семь параметров отвечают за определение группировки или набора группировок, в контексте которых этот расчет будет выполнен.
Рассмотрим эти параметры последовательно.
Группировка
Указание группировки, в контексте которой будет выполнен расчет.
Для примера, рассмотрим простой отчет со следующей структурой:
Если для такого отчета создать вычисляемое поле со следующим выражением:
ВычислитьВыражение("Сумма(Количество)", "Товар",)
Для всех детальных записей вычисляемого поля будет выполнен расчет по строкам, входящим в родительскую группировку «Товар».
Если создать поле с выражением:
ВычислитьВыражение("Сумма(Количество)", "Склад",)
Для всех записей (детальных и групповых) будет выполнен расчет по строкам, входящим в родительскую группировку «Склад»:
Если параметр не указан, расчет будет выполняться в контексте текущей группировки, и ничем не отличается от обычного расчета итогов по ресурсам.
Например, следующие выражения указанное для расчета итога ресурсу «Количество» будут работать абсолютно одинаково:
ВычислитьВыражение("Сумма(Количество)", , )
Сумма(Количество)
Если в качестве параметра указано значение «ОбщийИтог», выражение будет рассчитано по всем строкам отчета.
Тип расчета
Параметр позволяет указать уточнение группировки, в контексте которой будет выполнен расчет. Возможные варианты:
- Группировка,
- ОбщийИтог,
- Иерархия,
- ГруппировкаНеРесурса.
Если параметр не указан, значение по умолчанию - «Группировка». В этом случае никаких дополнительных уточнений выполняться не будет.
Если параметр имеет значение «ОбщийИтог», выражение будет вычисляться для всех группировок, которые находятся на одном уровне с указанной во втором параметре. Если во втором параметре группировка не указана, выражение будет вычислено для всех группировок или детальных записей, находящихся на одном уровне с текущей.
Ниже примеры работы выражений:
ВычислитьВыражение("Сумма(Количество)", "Товар", "ОбщийИтог")
ВычислитьВыражение("Сумма(Количество)", , "ОбщийИтог")

Значение параметра «Иерархия» имеет смысл только в том случае, если в отчете используется иерархическая группировка. Данная инструкция позволяет рассчитать выражение по родителю группировки, указанной во втором параметре. Если второй параметр не указан, по родителю текущей группировке.
Пример работы выражения:
ВычислитьВыражение("Сумма(Количество)", "Товар", "Иерархия")

Если в отчете не используется иерархия для группировок, значение «Иерархия» работает аналогично значению «ОбщийИтог».
Существует еще загадочное значение «ГруппировкаНеРесурса».
Описание, приведенное в справке не понятно:
«При вычислении функции для групповой записи по ресурсам, выражение будет вычислено для первой групповой записи исходной группировки».
Мне не доводилось использовать данное значение. Проводя эксперименты, каких-то отличий применения данного значения от значения «Группировка», я не выявил. Очень может быть, что это значение не актуально на сегодняшний день.
Если кто-то использовал это значение, напишите, пожалуйста, в комментариях, очень интересно!
Группа параметров: «Начало», «Конец»
Эти параметры позволяют еще более точно указать набор необходимых группировок. Они расширяют возможности параметра «Тип расчета». Позволяют выполнять расчет не только по текущей или по всем группировкам, а выбрать необходимый диапазон.
Поскольку данные параметры являются расширением параметра «Тип расчета», их нельзя использовать совместно с типами расчета: «ОбщийИтог», «Группировка».
Конструкции ниже являются аналогичными:
ВычислитьВыражение("Сумма(Количество)", , "ОбщийИтог")
ВычислитьВыражение("Сумма(Количество)", , , "Первая", "Последняя")
И
ВычислитьВыражение("Сумма(Количество)", , )
ВычислитьВыражение("Сумма(Количество)", , "Группировка")
ВычислитьВыражение("Сумма(Количество)", , , "Текущая", "Текущая")
Возможные значения параметров следующие:
- Первая – первая группировка или детальная запись в наборе, возможно указать смещение «Первая(2)»,
- Последняя - последняя группировка или детальная запись в наборе, возможно указать смещение «Последняя(2)»,
- Предыдущая – предыдущая от текущей группировки или детальной записи в наборе, возможно указать смещение «Предыдущая(2)»,
- Последующая - следующая от текущей группировки или детальной записи в наборе, возможно указать смещение «Следующая(2)»,
- Текущая – текущая группировка или детальная запись,
- ОграничивающееЗначение – ограничение по конкретному значению, которое можно указать в скобках. Ограничивающее значение применяется к первому полю упорядочивания.
Особенности применения параметров:
Конечная запись не должна предшествовать начальной.
Если указана только начальная запись, конечная будет равна значению «Текущая».
Если выражение рассчитывается по группировке, отбор записей выполняется на уровне этой группировки. Текущей в данном случае будет родительская группировка:
ВычислитьВыражение("Сумма(Сумма)", "Поставщик", ,"Предыдущая", "Текущая")

Для иерархической группировки, отбор записей выполняется на текущем уровне иерархии. Пример, для иерархической группировки по поставщику:
ВычислитьВыражение("СУММА(Сумма)", "Поставщик", , "Первая", "Первая")

Параметр «Начало» можно использовать совместно с выражением, которое не является агрегатной функцией.
В этом случае, выражение будет вычислено для группировки или строки указанной в данном параметре. Ниже пример получения номера документа из предыдущей строки:
ВычислитьВыражение("Номер", , ,"Предыдущая")
Если выражение (не агрегатная функция) получается не по строке, а по группировке, для расчета будет использоваться первая строка этой группировки:
ВычислитьВыражение("Номер", "Поставщик", ,"Предыдущая")

Сортировка, ИерархическаяСортировка
В данных параметрах можно переопределить сортировку строк или группировок, которые будут применены для получения первой и последней записи.
Параметр «ИерархическаяСортировка» позволяет отдельно переопределить сортировку иерархии элементов. Если он не указан, для иерархии действует выражение параметра «Сортировка».
Если параметр «Сортировка» не указан, получение первой и последней записей будет выполняться с учетом текущей сортировки данных в отчете.
В выражении сортировки можно использовать ключевые слова: «Возр», «Убыв», «Автоупорядочивание».
Поля, указанные в выражении сортировки, должны быть допустимыми на текущем уровне группировки.
Пример выражения сортировки:
Поставщик Возр Автоупорядочивание
ОбработкаОдинаковыхЗначенийПорядка
Дополнительная настройка, которая на практике применяется крайне редко. Параметр имеет два значения: «Отдельно» (по умолчанию) и «Вместе».
Значение параметра «Отдельно» говорит о том, что записи с одинаковыми значениями упорядочивания будут выстроены в последовательность в любом случае. Последовательность будет определена согласно выводу данных в отчете.
Если значение параметра «Вместе», записи с одинаковыми значениями упорядочивания будут объединены. Например, при определении текущей записи, будут возвращены все строки со значением упорядочивания как у текущей. Предыдущая или последующая строки будут возвращены также с учетом объединения строк с одинаковым значением упорядочивания.
Нюансы использования функции «ВычислитьВыражение»
Не стоит забывать, что функция «ВычислитьВыражение» совместно с агрегатной функцией, сама по себе уже является расчетом ресурса по некоторой группировке. По этому, если Вы указали для вычисляемого поля «Поле1» выражение следующего вида:
ВычислитьВыражение("Сумма(Количество)", "Товар",)
В выражении ресурса по этому полю не корректно использовать еще одну агрегатную функцию:
Сумма(Поле1)
В этом случае, по группировке «Товар», вы получите не корректные данные.
Правильным решением будет либо указание поля без агрегатной функции:
Поле1
Существует ограничение на использование полей содержащих функцию «ВычислитьВыражение» в групповых отборах.
Запрещается накладывать отбор на детальные записи, в которых используется функция «ВычислитьВыражение». Появляется ошибка вида «Выражение не может быть вычислено…». Если отбор накладывается на уровне группировки, и выполняется по полю «Ресурс» запрет распространяется только на конструкцию:
ВычислитьВыражение("Сумма(Количество)", , "ОбщийИтог")
Для остальных выражений, например:
ВычислитьВыражение("Сумма(Количество)", , , "Первая", "Текущая")
При групповом отборе сообщения об ошибке выдаваться не будет. Но следует иметь в виду, что отбор будет выполняться только по текущей группировке, аналогично выражению:
ВычислитьВыражение("Сумма(Количество)")
Скорее всего отбор будет не тем, который ожидается.
Для корректной работы, необходимо указать настройку группового отбора «Применение = После группировки или для иерархии», или «Применение = Только иерархия».
При выполнении отбора по детальным записям (на уровне отчета в целом), подобные конструкции также выдают ошибку. Однако, если наложить отбор по группировке «Детальные записи» с применением «После группировки или для иерархии» - он будет работать корректно.
Более подробно про настройку «Применение» групповых отборов смотрите в статье настройки вариантов отчетов.
Еще одно ограничение - функция «ВычислитьВыражение» не учитывает иерархические отборы примененные к группировкам.
ВычислитьВыражениеСГруппировкойМассив и ВычислитьВыражениеСГруппировкойТаблицаЗначений
Данные функции очень похожи. Разница состоит в том, что в первом случае возвращаются данные в виде массива, а во втором в виде таблицы значений. Также, вторая функция позволяет в выражении указать несколько полей, перечисленных через запятую. В этом случае, результирующая таблица будет содержать несколько колонок.
Остановимся подробнее на первой функции. Все рассмотренное будет справедливо и для второй.
Полный синтаксис функции следующий:
ВычислитьВыражениеСГруппировкойМассив (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)
Общее описание функции:
Выполнить произвольное выражение в контексте группировок по всем разрезам, указанным в выражении полей группировки и выдать результирующие данные в виде массива.
В отличие от функции «ВычислитьВыражение», расчет происходит не по одной выбранной, или по набору выбранных группировок, а отдельно по каждому набору группировок, согласно указанным разрезам.
Для примера возьмем предыдущий отчет, и создадим новое вычисляемое поле:
ВычислитьВыражениеСГруппировкойМассив("МАКСИМУМ(Сумма)","Поставщик")

Для каждой группировки отчета выполнен расчет в разрезе всех поставщиков, которые входят в группировку. По каждому поставщику выбрано максимальное значение. Одна строка массива, это данные по одному поставщику. Поскольку больше одного поставщика есть только на уровне группировки по организации, для всех остальных строк результирующий массив содержит только одну строку.
В параметрах «ОтборЗаписей» и «ОтборГруппировок» можно задать отбор, соответственно для детальных записей и для итоговых.
Можно использовать данную функцию в выражениях итогов совместно с агрегатными функциями. Если нужно использовать разные агрегатные функции на разных уровнях группировок, можно использовать вложение одной функции в другую. Например так:
СУММА(ВычислитьВыражениеСГруппировкойМассив("СРЕДНЕЕ(ВычислитьВыражениеСГруппировкойМассив(""МАКСИМУМ(Сумма)"", ""Поставщик, Склад""))", "Склад"))
Или создать вычисляемое поле:
ВычислитьВыражениеСГруппировкойМассив("МАКСИМУМ(Сумма)", "Поставщик, Склад")
А в выражении итогов написать следующее:
СУММА(ВычислитьВыражениеСГруппировкойМассив("СРЕДНЕЕ(ВычисляемоеПоле)", "Склад"))
Подробнее про использование вложенных функций «ВычислитьВыражениеСГруппировкойМассив» смотрите в этой статье.
С групповыми отборами, ситуация аналогична функции «ВычислитьВыражение». Отбор по группировке на поле с выражением «ВычислитьВыражениеСГруппировкойМассив» будет работать корректно, только если используется настройка отбора «Применение = После группировки или для иерархии».
На заметку. В выражениях системы компоновки данных помимо внутренних функций, можно использовать экспортные функции серверных общих модулей (глобальных и не глобальных).
В файловой информационной базе, в режиме работы обычного приложения можно использовать дополнительно функции глобальных и не глобальных клиентских общих модулей.
В клиент-серверной информационной базе в режиме работы обычного приложения доступны только клиентские общие модули.
В следующих статьях будут рассмотрены:
- Использование агрегатных функции СКД,
- Программная работа с отчетом на СКД,
- Разработка произвольных макетов.
Для ознакомления с предыдущими статьями можно перейти по ссылкам:
- Основные понятия и элементы схемы компоновки,
- Настройки компоновки данных,
- Пользовательские настройки,
- Расширения языка запросов для СКД,
- Наборы данных и связи между ними, собственная иерархия.
Спасибо за внимание.
Пишите комментарии, ставьте плюсы, подписывайтесь. Буду рад любой обратной связи.
Вступайте в нашу телеграмм-группу Инфостарт
внутренние функции СКД вычислить выражение с группировкой массив
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285492 1606 423
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
Как решить проблему с отборами по полям СКД, когда с одинаковым отбором Отчет показывает одно, а Консоль запросов другое.
16.06.2026 6358 sapervodichka 45
Инструментарий разработчика СКД Разработчик 1С 8.3 Бесплатно (free)
В этой статье представлен ПовелительОтчетов — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.
29.01.2026 9425 454 shapa_pro 31
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.
29.10.2025 26995 ovetgana 112
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).
01.07.2025 15754 krasnoshchekovpavel 7
СКД Разработчик Стажер 1С:Предприятие 8 Россия Бесплатно (free)
Несколько способов управления формами выбора параметров и отборов СКД.
10.04.2025 15195 Neti 0
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.
27.02.2025 19812 ovetgana 50
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
СКД – инструмент, на базе которого в современных конфигурациях реализованы практически все отчеты. СКД используется в динамических списках, печатных формах и универсальных механизмах. Если построить простейший отчет может каждый разработчик, то с нюансами знакомы далеко не все. Расскажем о неочевидных на первый взгляд приемах, способных значительно повысить качество отчетов.
24.12.2024 17734 Akcium 17
Как же мне посчитать итоги именно по значениям детальных записей кто скажет?
В Вашем случае нужно в итогах сделать так:
СУММА(ВычислитьВыражениеСГруппировкойМассив("РазностьДат", "Документ")).
Документ - это любой реквизит из детальных записей.
Тогда расчет будет корректный.
Буду очень признателен если поделитесь мыслями почему так может быть
Нужно сделать примерно как описано
Для общего итога отдельный расчет с вложенными друг в друга функциями ВычислитьВыражениеСГруппировкойМассив.
Мне не доводилось использовать данное значение. Проводя эксперименты, каких-то отличий применения данного значения от значения «Группировка», я не выявил. Очень может быть, что это значение не актуально на сегодняшний день.
Если кто-то использовал это значение, напишите, пожалуйста, в комментариях, очень интересно!
Намедни довелось прибегнуть с этому средству. Есть справочник с иерархией групп и элементов. Небезывестно, что с ними есть . Так вот "ГруппировкаНеРесурса" берет значения ресурсов как раз из этих "дублей" и рисует их на уровне группировки.
У меня была задача вывести привязку пользователей к группам номенклатуры в виде кросс-таблицы где по горизонтали пользователи, а по вертикали группы номенклатуры с учетом их иерархии в справочнике. На пересечении "галочка" - булево. Что-то типа "все роли" в конфигураторе только еще с сохранением иерархии групп по строкам. "ГруппировкаНеРесурса" позволяет выводить "галочки" только в том случае, если у пользователя есть право на использование именно этой группы не взирая на дочерние. При других типах расчета мы получим "галочку" при наличии прав на любую из дочерних групп, что мне совершенно не годилось.
P.S. Извиняюсь за сумбур в описании. Понимать и исследовать как это работает совершенно некогда.
В СКД уже могу многое, но вот эти функции никак не даются.
В приложении схема, которая пока у меня не работает. Вернее, не работают именно поля, которые рассчитываются этими функциями.
Если я убираю эти поля из группировки сделка, то все работает. А с ними получаю сообщение "Выражение не может быть вычислено ..."
Я так понимаю, программа пытается эти поля вычислить не для группировки Сделка...
Что не так?
Мне нужно вычислить Рентабельность по формуле (Выручка - СУММА (Затраты)) / Рентабельность
Я понимаю, что именно этот отчет можно посчитать и без этих функций. Но надо же когда-то начать! Поможете найти ошибку?
Кручу-верчу... запутать хочу :)
И так и эдак - не выходит каменный цветок...
Может быть, кто-то гуру этих самых функций подскажет как такое возможно настроить?
Нужно посчитать переработки и недоработки
Отчет в виде таблицы:
Колонки - группировка по месяцам + итого за весь период.
Строки - группировки по Организация, сотрудник.
При расчете итого за период - нужно сложить за все месяца переработки/недоработки и если
Всего по сотруднику за период > 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
Пробую настроить формулы для расчета итогов по периоду и организации - не получется.
для итого по периоду надо анализировать сумму и рассчитывать переработку или недоработку.
Для итогов по орг - надо просто найти сумму полученной колонки....
Возможно это настроить?
Спасибо!
Для иерархии, в расчете вообще убрать агрегатную функцию. По по-моему этого достаточно, чтобы выводилась первая запись группы.
Помогите убрать записи по ресурсам из детальных записей, но оставить их в итогах. СКД формирую программно
Строка создания ресурса ( структура передаётся в процедуру подстановки ресурсов для СКД)
СтруктураРесурсов.Вставить("ДебетНачальный", "Сумма(ВычислитьВыражениеСГруппировкойМассив(""Минимум(ДебетНачальный)"",""Точка""))");
Картина получается такая ( картинка во вложении).
Пробовал добавлять ещё один ресурс
ПолеРесурса = СхемКомпДанных.ПоляИтога.Добавить();
ПолеРесурса.ПутьКДанным = "ДебетНачальный";
ПолеРесурса.Выражение = "ВычислитьВыражение( ""0"",""ДебетНачальный"",""ДебетНачальный"")";
Суммирую, чтоб подсчитал общий итог.
Попробуйте сделать так:
СтруктураРесурсов.Вставить("ДебетНачальный", "Минимум(ДебетНачальный)","Точка");
Не помогло.
Подскажите пожалуйста, а настройки вывода полей по детальным записям как программно отредактировать?
Чтоб было типа такого
"Суммирую, чтоб подсчитал общий итог. "
Это имело бы смысл, для группировок более высокого уровня, чем "Точка".
А так будет тот же результат, что и Минимум(ДебетНачальный)
НомерСтр = 9;
Пока НомерСтр <> 200 Цикл
Если Результат.Область("R" + Строка(НомерСтр) + "C3").Шрифт.Жирный = Ложь Тогда
Результат.Область("R" + Строка(НомерСтр) + "C3").Текст = "";
Результат.Область("R" + Строка(НомерСтр) + "C4").Текст = "";
Результат.Область("R" + Строка(НомерСтр) + "C7").Текст = "";
Результат.Область("R" + Строка(НомерСтр) + "C8").Текст = "";
КонецЕсли;
НомерСтр = НомерСтр + 1;
КонецЦикла; ПоказатьПроцедура РассчитатьОстаток()
Строка = "R";
Столбец = "C";
ПоследняяСтрокаДанных = ЭтотОбъект.ОтчетТабличныйДокумент.ВысотаТаблицы - 1;
ОбластьПоследнегоСтолбцаПоследнейСтроки = Строка + ПоследняяСтрокаДанных + Столбец + 15;
КонечныйОстаток = ЭтотОбъект.ОтчетТабличныйДокумент.Область(ОбластьПоследнегоСтолбцаПоследнейСтроки).Текст;
ОбластьОстаткаВкроссТаблице = Строка + 4 + Столбец + 4;
ЭтотОбъект.ОтчетТабличныйДокумент.Область(ОбластьОстаткаВкроссТаблице).Текст = КонечныйОстаток;
КонецПроцедуры
ПоказатьНа код-ревью поррекомендовали переделать на вычислить выражение... Но я пробовал уже вычислить выражение... не работает((( хз что не так делаю, кто в курсе подскажите.
После прочтения остались вопросы:
1) Как и для чего использовать параметры «ОтборЗаписей» и «ОтборГруппировок»?
2) Функция языка выражений СКД "ВычислитьВыражениеСГруппировкойТаблицаЗначений" является аналогом агрегатной функции "ТаблицаЗначений", но с дополнительными параметрами/возможностями?
1. Параметр "Отбор записей" позволяет указать выражение для отбора детальных записей, которые будут обрабатываться, "ОтборГруппировок" - можно указать выражение для отбора уже сгруппированных строк. Как я понимаю, агрегатная функция в отборе группировок должна соответствовать агрегатной функции в выражении.
2. Я бы сказал, это объединение функциональности функций ВычислитьВыражение и ТаблицаЗначений
Так и не удалось этого сделать... Кто-нибудь использовал их совместно?
Бьюсь уже который день с группировками.
У меня выводятся в отчет данные плановых и фактических данных (будем называть их "Ссылки") в иерархии, где каждый узел иерархии выступает группировкой. Плановые значения лежат уже в регистре в сгруппированном виде (т.е., при записи документа, в регистр попадают данные в том виде, в котором они должны отображаться в отчете)
Перепробовал много чего и все-равно не понимаю, что не так.
Что, собственно, нужно:
1. Для колонки "Факт" группировки должны рассчитываться (с этим проблем нет, все норм - группировка делает свое);
2. Для колонки "План" - суммы должны подставляться в том же виде, как они лежат в регистре. На уровне СКД группироваться результирующие плановые данные не должны.
Особенность состоит в том, что на уровне запроса данные не группируются, поскольку в расшифровке по колонке "План" нужно отслеживать динамику изменений сумм (каким регистратором были скорректированы суммы), в том числе, и самой родительской ссылке, плюс еще дополнительно выводится множество колонок с данными для анализа.
Во вложении прикрепил скрин, как это все выглядит, для понимания.
Может подскажет кто, в каком русле копать.
Спасибо!
Как получить первое и последнее значение внутри группировки в ресурсах?
Эти вариант не проходят
ВЫЧИСЛИТЬВЫРАЖЕНИЕ("ОстатокНаНачало", "Сотрудник","Группировка", "Первая","Первая")
ВЫЧИСЛИТЬВЫРАЖЕНИЕ("ОстатокНаКонец", "Сотрудник", "Группировка" ,"Последняя " ,"Последняя ")
группировки Сотрудник, ДатаПериода.
Остаток на начало/конец вычисляется на каждую ДатаПериода
необходимо, чтобы на начало по сотрудникам попадал остаток на начало по самой первой ДатаПериода, остаток на конец - соответственно по самой последеней ДатаПериода
Для первой группировки нужно взять сумму максимальных записей по полям детальных записей...
А следующие группировки должны получаться суммированием нижлежайших.. (кроме нулевой)...
Группировку 1-го уровня получилось посчитать так....
Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Ресурс1)", "Группировка0"))а как теперь проссуммировать эти значения на группировках верхних уровней ?
Вроде как раз то что нужно получилось...
СУММА(ВычислитьВыражениеСГруппировкойМассив("Сумма(ВычислитьВыражениеСГруппировкойМассив(""Максимум(Ресурс1)"", ""Группировка0""))", "Группировка1"))
Спасибо за статью...
Не получается для иерархического справочника на уровне самой иерархии выводить значения реквизитов справочника. Если реквизиты переквалифицировать в ресурсы, то не получается на группировке вытащить значение элементы справочника, вместо того, чтобы система автоматом не подсчитывала агрегатные значения. Может есть какие-то идеи. Спасибо.
ВычислитьВыражение("Сумма(НачальныйОстаток) + Сумма(НачисленоПриход) - Сумма(НачисленоРасход)","Регистратор", "Группировка")Хочу расчитать "Конечный остаток" для группировки "Регистратор". Рассчитывать по поставил "Регистратор", но поле "Конечный остаток пустое"
Отчет вид "Таблица".
Строки: Контрагент, Договор.
Одно из колонок (Поле1) расчитываю следующим образом:
ВычислитьВыражение("Максимум(Процент)","ДоговорКонтрагента") / 100 * СуммаОбщаяСмета
На вкладке Ресурсы закидываю расчитываемое поле в Сумму
Сумма(Поле1)
По договорам все хорошо, Но нет итогов по Контрагенту. Что нужно добавить и куда?
В зависимости от того, что Вы хотите сделать, посчитать максимальный процент по контрагенту или сложить все значения по договорам, Вам нужно или очистить поле Группировка (для первого варианта) или использовать в ресурсах для группировки "Контрагент" функцию ВычислитьВыражениеСГруппировкойМассив.
Что-то типа такого:
СУММА(ВычислитьВыражениеСГруппировкойМассив(СУММА(Поле1), "ДоговорКонтрагента"))
Дело в том, что НЕ вовсех договорах есть "Процент", если использовать группировку по контрагенту, то из-за "Максимум(Процент)" в Договорах в которых НЕТ процента, начинает считаться процент. (P.S. не использовать Максимум не получается)
Если вставить Ресурсы:
СУММА(ВычислитьВыражениеСГруппировкойМассив(СУММА(Поле1), "ДоговорКонтрагента"))
То выдает ошибку: "Использование вложенных агрегатных функций не возможно"
Если использую: ВычислитьВыражениеСГруппировкойМассив(СУММА(Поле1), "ДоговорКонтрагента")
То итог для контрагента пересчитывается как при группировке по Контрагенту,то есть процент пересчитывается и для тех договоров где Процента нет.
ВычислитьВыражение("Сумма(Количество)", "Товар", "Иерархия")У меня не работает эта схема((( пишу
ВЫБОР
КОГДА (Показатели.Количество.КоличествоНачальныйОстаток>0 ИЛИ Показатели.Количество.КоличествоКонечныйОстаток>0) И (Показатели.Количество.КоличествоРасход/((Показатели.Количество.КоличествоНачальныйОстаток+Показатели.Количество.КоличествоКонечныйОстаток)/2))>0
ТОГДА ВычислитьВыражение("Показатели.Количество.КоличествоРасход/((Показатели.Количество.КоличествоНачальныйОстаток+Показатели.Количество.КоличествоКонечныйОстаток)/2)","АналитикаНоменклатуры.Номенклатура","Иерархия")
ИНАЧЕ 0
КОНЕЦпо позициям считает. в иерархии нет(( что не так? окиньте свежим взором!))
А сколько раз можно указывать вложенные группировки в функции ВычислитьВыражениеСГруппировкойМассив и каков будет сиснтантаксис
при вложении например трех функций?
Про два понятно: там двойные ковычки во вложенной функции.
Среднее(ВычислитьВыражениеСГруппировкойМассив(""Сумма(Значение)"",""Смена""))"
,"Период"))","ТО"))
Например
Долг - ВЫБОР КОГДА ТипЗаказа = 1 ТОГДА Сумма(Приход)-Сумма(Расход) .... КОНЕЦ
Долг1 - ВычислитьВыражение("Сумма(Долг)", "Заказ")
Долг2 - ВычислитьВыражение("Сумма(Долг1)", "Номенклатура")
Долг3 - ВычислитьВыражение("Сумма(Долг2)", "Подразделение")
У меня таблица СКД (колонки, строки)
Я хочу в ресурс по колонке передать значение предыдущей группировки (ресурса).
Получилось ВычислитьВыражение("Сумма(СписочныйСостав)", "Период", ,"Предыдущая", "Предыдущая")
Но в отчете первая колонка пустая, так как для первой группировки отсутствует предыдущая.
сделал проверку на МестоВПорядке. Если это первая группировка, то брать значения текущей группировки.
Работает, но наткнулся на случай, когда для первой группировки колонки для конкретных строк отсутствуют ресурсы (значения) и тогда вторая колонка становится №1 и берет текущие значения, а мне нужно всё же всегда брать из первой, даже если там 0.
Есть ли ещё функция для определения номера группировки?
Если сделать сортировку строк, а скажем в пересечении первой строки и колонки будет 0, а во второй строке будет 1, то строки отсортируются по этим значениям и номер колонки также изменится, если ресурс в колонке = 0, тогда функция будет возвращать номер колонки №1 для колонки, в которой ресурс не 0. Я не понимаю как сортировка строк вообще имеет отношение к определению номера колонки.
Выбираю запросом в СКД поля Номенклатура, Сумма и Количество. Есть Вычисляемое поле, считающее %. В ресурсах Сумма(Сумма) и Сумма(Количество).
Надо посчитать Вычисляемое поле по группировке Номенклатура. В ресурсы добавляю ВычислитьВыражение(Сумма(Сумма), "Номенклатура") и в результате выполнения отчета получается "синтаксическая ошибка", причем ВычислитьВыражение(Сумма(Количество), "Номенклатура") прекрасно работает. Думал, что это из-за денежного поля Сумма, но приведение к числу тоже ничего не изменило.
Подскажите, пожалуйста, в чем может быть дело?
"Последующая - следующая от текущей группировки или детальной записи в наборе, возможно указать смещение «Следующая(2)»,
Текущая – текущая группировка или детальная запись"
Сначала пишется "Последующая" а потом уже уточняется что должно быть "Следующая". По моему должно быть так:
"Следующая- следующая от текущей группировки или детальной записи в наборе, возможно указать смещение «Следующая(2)»,
Текущая – текущая группировка или детальная запись"
ERP. В статью бюджетирования нужно подтянуть значение страховых взносов для физ.лица из РН Исчисленные страховые взносы - т.е сложить все ресурсы взносов в ПФР, ФСС, ФОМС в одну итоговую сумму.
... при этом "смущает" требование к запросу, описанное на ИТС (, а именно:
5. Обязательно требуется указание полей:
● СуммаРегл – сумма в валюте регламентированного учета;
● СуммаУпр – сумма в валюте управленческого учета;
● СуммаВВалюте – сумма в валюте. Это поле должно быть использовано в паре с полем Валюта или аналитикой, у которой есть реквизит Валюта.
А в РН Исчисленные страховые взносы нет таких ресурсов..
Спасибо!
Сделать что-то типа такого:
ВычислитьВыражение("(ВычислитьВыражение(""Сумма(Лимит- ПланЗакупок)"", ""Регистратор, СтатьяБюджета"",, ""Первая"", ""Текущая"")", "СтатьяБюджета",, "Последняя", "Последняя")
Мне надо сделать нарастающий итог, но не просто Сумма(СуммаОборот)
ВычислитьВыражение("ТаблицаЗначений(СуммаОборот, Валюта)",,,"Первая","Текущая") - возвращает пустую таблицу,
А ВычислитьВыражение("Сумма(СуммаОборот)",,,"Первая","Текущая" ) - работает, но разумеется сваливает все валюты в одно число
А ВычислитьВыражениеСГруппировкойТаблицаЗначений не работает с "Первая","Текущая".
Далее идет один пример, без иных вариантов (либо).
ЗаказКлиента | Номенклатура | Сумма ТЧ | СуммаДокумента
ЗаказКлиента 1 Номенклатура 1 100 200
ЗаказКлиента 1 Номенклатура 2 100 200
ЗаказКлиента 2 Номенклатура 1 200 400
ЗаказКлиента 2 Номенклатура 2 200 400
Как посчитать итоги по ЗаказуКлиента без дублирования сумм,
в итоге должно получиться СуммаДокумента = 600.
Пробовал через закладку Ресурсы: для устанавливал Выражение: Сумма(СуммыДокумента), Расчитать по: ЗаказКлиента, ОбщийИтог
В итог суммирует все строки. Пробовал Максимум(СуммыДокумента) В итог проставляет максимальную сумму по колонке. И еще такой момент, вывод строк по заказу | номенклатура идет с неким фильтром, т.е. выводится не вся табличная часть ЗаказаКлиента. Как сделать, Спасибо.?
В Параметрах добавляете Параметр "ТекущаяДата" - у которого выражение = "ТекущаяДата()"
В вычисляемые поля помещаете
Реквизит1 ВнешнийМодуль.ФункцияРасчета(ВычислитьВыражениеСГруппировкойТаблицаЗначений("&ТекущаяДата КАК Дата, ПолеГруппировки КАК ПолеГруппировки, [...], Ресурс КАК Ресурс, [...]","ПолеГруппировки"),"Реквизит1"))
Реквизит2 ...аналогично..., "Реквизит2")
Функция ФункцияРасчета(ТЗ,ИмяРеквизита) Экспорт
Если ТЗ.Количество()=0 Тогда Возврат 0 КонецЕсли;
ТекСтрока=ТЗ[0];
АдресКэша = ХранилищеОбщихНастроек.Загрузить("НашОтчет","АдресКэша");
тзКэш = Неопределено;
Если АдресКэша<>Неопределено Тогда
тзКэш = ПолучитьИзВременногоХранилища(АдресКэша);
Если тзКэш <> Неопределено и ТекСтрока.Дата<>тзКэш[0].Дата Тогда
тзКэш.Очистить();
ПоместитьВоВременноеХранилище(тзКэш,АдресКэша);
КонецЕсли;
КонецЕсли;
Если тзКэш = Неопределено Тогда
тзКэш = тзПартия.СкопироватьКолонки();
тзКэш.Колонки.Добавить("ИмяРеквизита",Новый ОписаниеТипов("ТипРеквизита"));
АдресКэша = ПоместитьВоВременноеХранилище(тзКэш,Новый УникальныйИдентификатор);
ХранилищеОбщихНастроек.Сохранить("НашОтчет","АдресКэша",АдресКэша);
КонецЕсли;
сКэш = тзКэш.Найти(ТекСтрока.Группировка,"Группировка");
Если сКэш = Неопределено Тогда
сКэш = тзКэш.Добавить();
ЗаполнитьЗначенияСвойств(сКэш,ТекСтрока);
//Расчет всех колонок кэша
ПоместитьВоВременноеХранилище(тзКэш,АдресКэша);
КонецЕсли;
Возврат сПартия[ИмяРеквизита]
КонецФункции ПоказатьВычислитьВыражениеСГруппировкойМассив("МАКСИМУМ(Сумма)", "Поставщик, Склад")
А в выражении итогов написать следующее:
СУММА(ВычислитьВыражениеСГруппировкойМассив("СРЕДНЕЕ(ВычисляемоеПоле)", "Склад")) "
Скажите пожалуйста, выражение итогов это колонка "Выражение" на закладке "Вычисляемое поле" или речь о пользовательском поле и "Выражение итоговых полей"?
Ваши статьи очень полезные!!
Помогло.
ВычислитьВыражениеСГруппировкойМассив(
"ВЫБОР КОГДА СУММА(ВЫПОЛНЕНИЕ) > 0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ",
"КонтрагентКГ"
)
ВычислитьВыражениеСГруппировкойМассив(
"ВЫБОР КОГДА СУММА(ВЫПОЛНЕНИЕ) < 0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ",
"КонтрагентКГ"
)
Сделал 2 поля
Теперь все работает.
Есть кросс-таблица (группировка по строкам Категория, Номенклатура, по колонкам - ПериодГод). Нужно в итоге для некоего вычисляемого поля на уровне группировки по Категории (вышестоящая над Номенклатурой) вывести сумму количеств по номенклатурам этой группировки, за предыдущий год.
Пишу такое выражение для ресурса этого выч. поля на уровне группировки по ,Категории.
Ожидаю, что система возьмет сумму количеств по каждой номенклатуре (за пред. год), затем сложит их.
Но почему-то получаю такое: она просто считает итог по всей номенклатуре за пред. период (в части периода ок) входящей в нашу рассчитываемую группировку, затем берет его столько раз, сколько номенклатур в данной группировке в данном году (текущем), и, разумеется, складывает.
Вопрос - такая вложенность допустима? Система получается не понимает при вычислении внутренней функции ВВ , что нужно брать с учётом номенклатуры из внешней функции ВВГМ, а не просто суммировать по всей с учетом группировки по периоду (хоть за это спасибо). ЧЯДНТ?
ВычислитьВыражениеСГруппировкойМассив("ВычислитьВыражение(""ЕстьNull(Сумма(Количество), 0)"", ""ПериодГод"", ""Группировка"", ""Предыдущая"", ""Предыдущая"")", "Номенклатура")
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1101676
Создание 08.08.19 11:30
Обновление 27.02.20 18:00
Просмотры 496247
Загрузки 0
Рейтинг
705
Комментарии 113
Код открыт Да
Рубрики СКД
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)