Приветствую Вас ГостьСуббота, 18.05.2024, 23:11

Каталог статей


Выражения в ресурсах

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

Рассмотрим конкретные примеры:

Вычислить долю (процент) продаж от общего объема по контрагенту

Формула: Сумма(Стоимость)*100 / ВычислитьВыражение("Сумма(Стоимость)", "Контрагент")

Функция ВычислитьВыражение() вычисляет выражение в контексте некоторой группировки. В качестве первых двух параметров в нее передается выражение для расчета (например, "Сумма(Стоимость)"), имя группировки, в которой вычисляется выражение (например, "Контрагент"). Если название группировки не указано, то вычисление будет выполнено в контексте текущей группировки.

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

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

Сумма(Стоимость) - сумма продаж по дочерней группировке

ВычислитьВыражение("Сумма(Стоимость)", "Контрагент") - сумма всех продаж в группировке "Контрагент"

Другими словами мы из дочерней группировки обращаемся ко всем данным внутри родительской группировки

Максимальное значение в группировке (Максимальная сумма продаж товара)

Формула: Максимум(ВычислитьВыражениеСГруппировкойМассив(«Сумма(Стоимость)», «Номенклатура»))

Функция ВычислитьВыражениеСГруппировкойМассив()возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.

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

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

Сравнение объема продаж каждого товара с объемом продаж заданного товара и вывод массива

Формула: Сумма(Стоимость)*100 / ВычислитьВыражение("Сумма(Выбор Когда Номенклатура = &ИсследуемыйТовар Тогда Стоимость Конец)", , "ОбщийИтог")

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

Сумма(Стоимость) - сумма продаж текущей группировки

ВычислитьВыражение("Сумма(Выбор Когда Номенклатура = &ИсследуемыйТовар Тогда Стоимость Конец)", , "ОбщийИтог") - сумма продаж по заданной номенклатуре

"ОбщийИтог" - говорит о том, что выражение будет вычисляться для всех записей группировки.

Этот параметр может принимать следующие значения:

  • "Группировка", значения будут вычисляться для текущей групповой записи группировки.
  • "ГруппировкаНеРесурса", то при вычислении функции для групповой записи по ресурсам, выражение будет вычислено для первой групповой записи исходной группировки
  • "Иерархия" - выражение будет вычисляться для родительской иерархической записи, если таковая имеется и для всей группировки, если родительской нет

Пример отчета:

Если мы вместо "ОбщийИтог" в формуле укажем "Группировка", то в столбце "Процент продаж от исследуемого товара" будут стоять только цифры у эталонного товара (100) и в общем итоге 347,73.

Если поставим вместо "ОбщийИтог" значение "Иерархия" и настроим вывод группировки в виде иерархии, то получим цифры только по товарам, которые подчинены  тому же родителю, что и эталонный товар.

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

Потребовалось вывести значения количества введенных заявок и лимитов для первого дня в периоде, у которого есть свободные лимиты. Вариант решения получился не очень красивым, но рабочим.

1. Сделал вычисляемое поле ДатаСЛимитом с формулой

Выбор Когда КоличествоЗаявок < ЛимитЗаявок Тогда ПланируемаяДатаОбслуживания Иначе ДатаВремя(3000,1,1) Конец

т.е. если есть свободный лимит, то выводим дату обслуживания, если нет, то условную большую дату

Для вывода первой даты с лимитом установил формулу ресурса для этого поля "Минимум(ДатаСЛимитом)".

Чтобы вывести значения лимитов и заявок в группировке для первого дня использовал формулу:

Формат(ВычислитьВыражение("Максимум(Выбор Когда ПланируемаяДатаОбслуживания = ВычислитьВыражение(""Минимум(ДатаСЛимитом)"") Тогда КоличествоЗаявок Иначе 0 Конец)"),"ЧГ=")

Порядок вычисления:

  1. Вычисляем минимальное значение "ДатаСЛимитом" - ВычислитьВыражение("Минимум(ДатаСЛимитом)")
  2. Далее, если планируемая дата равна этому минимуму, то подставляем значение "КолчесвтоЗаявок", если нет, то 0
  3. Из полученного набора значение выбираем максимальное, так как для нужной даты будет заполнено значение количества заявок, а для остальных равно 0.
  4. Преобразуем в текстовый формат. Это сделано для того, чтобы добавить дополнительный текст к значению, здесь не существенно.

ВНИМАНИЕ! Так как получается вычисление формулы внутри формулы, то для второй формулы указали двойные кавычки - отображение кавычек внутри строки. ... ВычислитьВыражение(""Минимум(ДатаСЛимитом)"" ...

Стоимость продаж с накоплением

Формула: ВычислитьВыражение("Сумма(Стоимость)", , , "Первая", "Текущая")

Значения "Первая" и "Текущая" передаются в параметры "Начало" и "Конец" соответственно. Таким образом стоимость работ суммируется с первой по текущую запись, что приводит к расчету суммы с накоплением.

При изменении сортировки в отчете, суммы в в этом поле соответственно изменяться.

В параметрах "Начало" и "Конец" могут быть следующие значения:

  • "Первая" ("First"). Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки.

Получаемое значение должно целым быть числом, больше нуля. Например, Первая(3) – получение третьей записи от начала группировки. Если первая запись выходит за пределы группировки, то считается, что записей нет.  Например, если записей 3, а требуется получить Первая(4), то считается, что записей нет.

  • "Последняя" ("Last"). Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки.

Получаемое значение должно целым быть числом, больше нуля. Например, Последняя(3) – получение третьей записи от конца группировки. Если последняя запись выходит за пределы группировки, то считается, что записей нет.  Например, если записей 3, а требуется получить Последняя(4), то считается, что записей нет.

  • "Предыдущая" ("Previous"). Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки. Например, Предыдущая(2) – получение предыдущей от предыдущей записи.  Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3)), то получается первая запись группировки. 

При получении предыдущей записи для итога по группировке считается, что получается первая запись.

  • "Следующая" ("Next"). Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки. Например, Следующая(2) – получение следующей от следующей записи. Если следующая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3 и для третьей записи получают Следующая, то считается, что записей нет.  

При получении следующей записи для итога по группировке считается, что записи нет.

  • "Текущая" ("Current"). Необходимо получить текущую запись. При получении для итога по группировке получается первая запись.
  • "ОграничивающееЗначение" ("BoundaryValue"). Необходимость получить запись по указанному значению. После слова ОграничивающееЗначение в скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания. В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению. 

Например, если в качестве поля упорядочивания используется поле Период, оно имеет значения 01.01.2010, 01.02.2010, 01.03.2010, и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)), то будет получена запись с датой 01.02.2010.

Вывод нескольких значений в ячейке

Для вывода нескольких значений в одной ячейке есть несколько функций:

Массив

Пример: Массив(Различные Контрагент)

В этом случае в ячейке через точку с запятой, например: ООО "Автоматика"; ООО "Стандарт"

 

Категория: СКД | Добавил: leshic (06.12.2021)
Просмотров: 2743 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [41]
Администрирование [35]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0