Скд сумма максимумов по группировке

Программирование как созидательный процесс.

1С СКД: Суммирование значений на различных уровнях группировок

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

1С СКД: Суммирование значений на различных уровнях группировок

Соответственно, теперь необходимо рассчитать итоги, по выше находящимся группировкам («Склады», «ТипыСкладов») и общий итог.
Для этого используется функция ВычислитьВыражениеСГруппировкойМассив:
ВЫЧИСЛИТЬВЫРАЖЕНИЕСГРУППИРОВКОЙМАССИВ (EVALEXPRESSIONWITHGROUPARRAY)
Синтаксис:
ВычислитьВыражениеСГруппировкойМассив( , , , )
Описание:
Функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет преобразовано в НаборДанных.Контрагент.
Компоновщик макета при генерации выражений для вывода пользовательского поля, в выражении которого присутствует только функцияВычислитьМассивСГруппировкойМассив(), генерирует выводимое выражение таким образом, чтобы выводимая информация была упорядочена. Например, для пользовательского поля с выражением:

ВычислитьВыражениеСГруппировкойМассив("Сумма(СуммаОборот)", "Контрагент")
Компоновщик макета сгенерирует для вывода следующее выражение:

Параметры:

Тип: Строка. Выражение, которое нужно вычислить. Строка, например, Сумма(СуммаОборот).

Тип: Строка. Выражения полей группировки – выражения полей группировки, перечисленные через запятую. Например, Контрагент, Партия.

Тип: Строка. Выражение, описывающее отбор, применяемый к детальным записям. В выражении не поддерживается использование агрегатных функций. Например,ПометкаУдаления = Ложь.

Тип: Строка. Выражение, описывающее отбор, применяемый к групповым записям. Например, Сумма(СуммаОборот) > &Параметр1.
Пример:

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

Подробное описание синтаксиса функции можно найти по адресу http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Теперь для расчета, продублируем поле «Заказать», с различными значениями «Рассчитывать по…», используя следующие выражения, обратите внимание, что в каждом выше стоящем уровне используются значения уровней ниже стоящих группировок.

Читайте также:  Приборы для дезинфекции квартиры

В итоге получаем следующую конструкцию:

1С СКД: Суммирование значений на различных уровнях группировок

1С СКД: Суммирование значений на различных уровнях группировок : 5 комментариев

Отлично, спасибо, очень помогла статья.

Хорошая статья. Благодарю.

А у меня не получилось…выходит ошибка — Отчет не сформирован ! Функция не найдена «ЧИСЛО».

Сумма(ВычислитьВыражениеСГруппировкойВМассив(«ВЫБОР КОГДА МесяцОтчета «» ТОГДА
ВЫРАЗИТЬ(Сумма(Показатель)+0.01, «ЧИСЛО(15,0)») ИНАЧЕ 0 КОНЕЦ
«,»МесяцОтчета»))

К предыдущему комментарию, вдруг кому пригодится:
1. ВычислитьВыражениеСГруппировкойВМассив — предлог «В» не нужен
2. Если внутри ВычислитьВыражениеСГруппировкойМассив используется ВЫРАЗИТЬ, то «»ЧИСЛО(15,0)»» обрамляется двойными кавычками

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

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

Синтаксис:
ВычислитьВыражениеСГруппировкойМассив (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)

  • Выражение (Строка) – выражение, которое нужно вычислить. Например, “Сумма(СуммаОборот)”;
  • ВыраженияПолейГруппировки – выражения полей группировки, перечисленные через запятую. Например, “Контрагент, Партия”;
  • ОтборЗаписей – выражение, применяемое к детальным записям. Например, “ПометкаУдаления = Ложь”. Если в данном параметре используется агрегатная функция, то при выполнении компоновки данных возникнет ошибка;
  • ОтборГруппировок – отбор, применяемый к групповым записям. Например: “Сумма(СуммаОборот) > &Параметр1”.

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

Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет конвертировано в НаборДанных.Контрагент.
Компоновщик макета при генерации выражений для вывода пользовательского поля, в выражении которого присутствует только функция ВычислитьМассивСГруппировкой генерирует выводимое выражение таким образом, чтобы данные выводить представления и данные были упорядочены.
Например, для пользовательского поля с выражением:
ВычислитьВыражениеСГруппировкойМассив("Сумма(СуммаОборот)", "Контрагент")
компоновщик макета сгенерирует для вывода следующее выражение:
СоединитьСтроки(Массив(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений ("Представление(Сумма(НаборДанных.СуммаОборот)), Сумма(НаборДанных.СуммаОборот)", "НаборДанных.Контрагент"), "2")))

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

Читайте также:  Ром карта вьеха кларо

Синтаксис:
ВычислитьВыражениеСГруппировкойТаблицаЗначений (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)

  • Выражение (Строка) – выражение, которое нужно вычислить. В строке может быть перечислено несколько выражений через запятую. После каждого выражения может быть необязательное ключевое слово КАК и имя колонки таблицы значений. Например: “Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж”.
  • ВыраженияПолейГруппировки – выражения полей группировки, перечисленные через запятую. Например, “Контрагент, Партия”;
  • ОтборЗаписей – выражение, применяемое к детальным записям. Например, “ПометкаУдаления = Ложь”. Если в данном параметре используется агрегатная функция, то при выполнении компоновки данных возникнет ошибка;
  • ОтборГруппировок – отбор, применяемый к групповым записям. Например: “Сумма(СуммаОборот) > &Параметр1”.

Пример:
ВычислитьВыражениеСГруппировкойТаблицаЗначений ("Контрагент КАК Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж", "Контрагент")

Результатом работы данной функции будет таблица значений с колонками Контрагент и ОбъемПродаж, в которых будут находиться контрагенты с их объемами продаж.
Компоновщик макета при генерации макета преобразовывает параметры функции в термины полей макета компоновки данных. Например, поле Контрагент будет конвертировано в НаборДанных.Контрагент.
Например, пользовательского поля с выражением:
ВычислитьВыражениеСГруппировкойТаблицаЗначений ("Контрагент, Сумма(СуммаОборот)", "Контрагент")
Компоновщик макета сгенерирует для вывода следующее выражение:
СоединитьСтроки(ПолучитьЧасть(Упорядочить(ВычислитьВыражениеСГруппировкойТаблицаЗначений ("НаборДанных.Контрагент, НаборДанных.КонтрагентПредставление, Сумма(НаборДанных.СуммаОборот), Представление(НаборДанных.СуммаОборот), НаборДанных.ПолеУпорядочивание", "НаборДанных.Контрагент"), "5, 1, 3"), "2, 4"))

Небольшая заметка по использованию ресурсов в СКД.

Как хотелось бы видеть расчет:

Подразделения Док Услуги Наименование Оплачено Стоимость
По Договору
Подраздление1 1600 1600 3 Сумма по группировке 2
Док1 1500 1500 2 Сумма по группировке 1
Услуга1 1000 1000 1 Максимум(дет запись)
Оплата1Услуги1 700 1000 дет запись
Оплата2Услуги1 300 1000 дет запись
Услуга2 500 500
Оплата1Услуги2 250 500 дет запись
Оплата2Услуги2 250 500 дет запись
Док2 100 100
Услуга3 100 100
ОплатаУслуги3 100 100

Как надо настраивать ресурсы:

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

Читайте также:  Системные требования gta online на pc

Поэтому несколько раз добавляем один и тот же ресурс “СтоимостьПоДоговору” и указывам:

Для группировки 1:
на закладке ресурсы:
Поле: СтоимостьПоДоговору,
Выражение: Максимум(СтоимостьПоДоговору)
Расчитывать ПО: Услуга

Для группировки 2:
на закладке ресурсы:
Поле: СтоимостьПоДоговору,
Выражение: Сумма(ВЫЧИСЛИТЬВыражениесгруппировкоймассив(“Максимум(СтоимостьПоДоговору)”, “Услуга”))
Расчитывать ПО: Док

Для группировки 3:
нельзя использовать вложенные агрегатные функции, поэтому
на закладке “Вычисляемые поля” добавляем
Поле: СтоимостьПоДоговоруПоДок
Выражение: Сумма(ВЫЧИСЛИТЬВыражениесгруппировкоймассив(“Максимум(СтоимостьПоДоговору)”, “Услуга”))

а на закладке ресурсы:
Поле: СтоимостьПоДоговору,
Выражение: Сумма(ВЫЧИСЛИТЬВыражениесгруппировкоймассив(“СтоимостьПоДоговоруПоДок”, “Док”))
Расчитывать ПО: Подразделение

“>

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>