1с скд разные итоги группировкам. Функции языка выражений системы компоновки данных

Есть регистр сведений «Остановки по маршруту», в котором хранится информация о расстоянии от начальной до конечной остановки.

Рис. 1. Регистр сведений "Остановки по маршруту"

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

Решение

В любой конфигурации, поддерживающей управляемые формы, создадим непериодический регистр сведений "Остановки по маршруту". Добавим в него измерения Маршрут и Остановка с типом строка длиной, соответственно 4 и 50, а также ресурс Расстояние с типом число длиной 10.2. Сохраним изменения в новой конфигурации. Для создания внешнего отчёта в Меню-->Файл-->Новый выбираем “Внешний отчёт”, зададим его название и открываем схему компоновки данных:

Рис. 2. Создание внешего отчёта на СКД

В открывшемся окне нажимаем кнопку “Добавить набор данных” и выбираем строку “Добавить набор данных - запрос”:

Рис. 3. Добавление набора данных - запрос

Создадим новый запрос. Для решения задачи нам понадобится в запросе регистр сведений "Остановки по маршруту" и, поскольку отчёт должен наглядно показывать расстояние между любыми двумя остановками, сформируем запрос для табличного представления по осям X и Y, используя полное внешнее соединение таблицы регистра с самим собой:

Рис. 5. Указание ресурсов для СКД

Перейдём теперь на закладку "Настройки" и с нажмём кнопку "Открыть констуктор настроек", выберем тип отчёта Таблица:

Рис. 7. Выбор полей отчёта

Рис.8. Выбор полей группировки

Рис. 9. Выбор полей сортировки

Осталось с помощью кнопки "Свойства элементов пользовательских настроек" создать эти настройки, а также на закладке "Другие настройки" указать, как будут располагаться ресурсы, и отказаться от итогов (здесь они не нужны):

Рис. 10 Пользовательские и другие настройки.

Отчёт готов. Теперь перейдём из конфигурации в Предприятие, и заполним регистр сведений (если он ещё не заполнен):

Рис. 11. Заполнение регистра сведений

И, наконец, из Меню-->Файл вызываем наш отчёт из места, куда мы его сохранили в конфигураторе, нажимаем кнопку "Сформировать" и видим решение задачи:

Рис. 12. Отчёт "Расстояние между остановками"

На написание статьи меня подтолкнула публикация

В компоновке данных настройка итогов выглядит несколько иначе, чем в запросах. Определим в системе компоновки данных набор данных «Запрос».

В самом запросе мы не настраиваем итоги, а переходим на закладку «Ресурсы» компоновки данных. На уровне схемы компоновки данных мы определяем ресурсы . Это те поля, которые нужно посчитать на уровне группировок. Нажмём на кнопку «>>» и система сама перенесёт все числовые поля и определит их в качестве ресурсов.

В ресурсах можно указывать и нечисловые поля. Например, если выбрать реквизит «Ссылка», то система подсчитает количество документов в наших группировках. Эта информация тоже может быть полезной. Итак, в схеме компоновки мы определяем только ресурсы , а сами группировки настраиваются на уровне варианта отчёта. Так же пользователь сам может создать группировки, которые хочет видеть в своей настройке варианта отчёта.

Создадим стандартную настройку компоновки данных.
Нажмём на кнопку «Открыть конструктор настроек».

Выберем тип отчета — список. Нажмём кнопку «Далее».

Выберем все поля и переместим поле контрагент на самую верхнюю позицию. Нажмём кнопку «Далее».

Выберем все поля и переместим поле контрагент на самую верхнюю позицию. Нажмём кнопку «OK».

Получилась следующая настройка:

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

Если открыть наш отчёт в режиме 1С:Предприятие и сформировать его, то мы увидим, что формируются итоговые данные на уровне группировок. Итоги по номенклатуре и по контрагентам.

Настройка ресурсов в схеме компоновки данных 1С

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

Здесь в поле «Выражение» мы можем написать и своё собственное выражение.

В поле «Выражение» мы можем обращаться и к функциям общих модулей.

Кроме того, можно указать в поле «Расчитывать по…» по каким группировкам необходимо рассчитывать ресурс. Если поле «Расчитывать по…» не заполнено, то итоговое значение ресурса будет считаться на всех уровнях группировки, которые определены в настройках варианта отчёта . В нашем случае нужно заполнить поле «Расчитывать по…» ресурса «Количество», так как мы можем продавать товар с разными единицами измерения. Например: масло в литрах и колёса в штуках. Не правда ли, нелогично будет складывать количество этих товаров? Поэтому нам нужно оставить суммирование количества на уровне номенклатуры, а на уровне контрагентов
суммирование уберём.

Если сформируем отчёт, то увидим, что итоги по количеству считаются только по номенклатуре, а по контрагентам итоги количества пустые.

Возможности при описании ресурсов в схеме компоновки данных 1С

Давайте рассмотрим ряд неочевидных особенностей связанных с описанием ресурсов .

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

Если сформируем отчёт, то увидим, что по контрагенту «Дерия» минимальная закупка составляет пять единиц номенклатуры «Бумага самоклеющаяся».

  • В поле «Выражение», кроме написания формулы, можно использовать специальную функцию компоновки данных которая называется «Вычислить» . Эта функция позволяет вычислить какое-то итоговое значение по определённой формуле. Например, по каждому контрагенту необходимо знать процент закупки в натуральных единицах относительно общего объёма. Но как получить общий объём закупок по количеству? Для этого воспользуемся функцией «Вычислить» и запишем следующее выражение в поле «Выражение»:
Сумма(Количество)/Вычислить("Сумма(Количество)", "ОбщийИтог")*100

Как видно, все параметры функции «Вычислить» являются строковыми . Чтобы поле количество отображалось в отчёте красиво, настроим его на вкладке «Наборы данных». В строке количество найдём поле «Параметры редактирования». Откроем диалог, отыщем строку «Формат» и отредактируем в нём форматную строку, поставив на вкладке «Число», значение «Точность» равным двум.

Запустим отчёт и увидим результат вычисления процента закупки по контрагенту «АУПП КОС ТОО» относительно
общего объёма:


В конце статьи хочу посоветовать вам бесплатный от Сотникова Анатолия. Это курс от опытного программиста. Он на отдельной базе покажет вам, как строить отчеты в СКД. Вам только нужно внимательно слушать и запоминать! Вы получите ответы на такие вопросы:
  • Как создать простой отчет в виде списка?
  • Для чего нужны колонки Поле, Путь и Заголовок на закладке «Поля»?
  • Какие существуют ограничения для полей компоновки?
  • Как правильно настраивать роли?
  • Какие существуют роли для полей компоновки?
  • Где найти закладку компоновка данных в запросе?
  • Как настраивать параметры в СКД?
  • Дальше еще интереснее...
Наверное, не стоит самому стараться бороздить интернет в поисках нужной информации? Тем более все готово для применения. Только начните! Все подробности о том, что есть в бесплатных видеоуроках

Вот один из уроков о закладке компоновки данных в запросе:

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

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

По определению, - СРЕДНЕВЗВЕШЕННОЕ (weighted average) - это среднее арифметическое значение, в котором учтен вес каждого из слагаемых, для которых рассчитывается это среднее значение.

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

Тот самый хрестоматийный пример: был закуплен товар тремя партиями одна из которых - 100 тонн по 70 ф. ст. за тонну, другая - 300 тонн по 80 ф. ст. за тонну и третья - 50 тонн по 95 ф. ст. за тонну, то в общей сложности он закупает 450 тонн товара; обычная средняя цена закупки составит (70 + 80 + 95) : 3 = 81,7 ф. ст. Средневзвешенная цена с учетом объемов каждой из партий равна (100 × 70) + (300 × 80) + (50 × 95) : 450 = 79,4 ф. ст. за тонну.

Формула:

Где Х - это значения, средневзвешенное которых мы хотим получить, а W - это веса.

На этом теория заканчивается.

Мне пришлось с этим столкнуться, когда я выводил в отчет данные о продажах товаров, с группировкой по менеджерам, где нужно было в итогах получить рентабельность. В строках отчета выводилась рентабельность по каждому товару в реализации, в итогах нужно было увидеть с какой рентабельностью отработал менеджер. Соответственно рентабельность - это «значение», а «вес» этого значения - это выручка. Ряд уточнений, для полноты картины. Выручка (объем реализации) - это произведение цены продажи товара на количество. Валовая прибыль - это выручка минус себестоимость (как именно рассчитывалась себестоимость в контексте этой статьи не принципиально). И наконец, рентабельность у нас - это выраженное в процентах отношение валовой прибыли к выручке.

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

Для того чтобы в СКД получить средневзвешенное по рентабельности в конструкторе запроса создаем вспомогательное поле вида произвольное выражение , куда записываем произведение рентабельности на выручку. Назначаем этому полю псевдоним - ВспомогательноеПоле . Смотрим рисунок ниже.

Это поле мы в отчет выводить не будем, нам нужны данные для расчетов итогов. Итоги мы будем рассчитывать уже в СКД на вкладке Ресурсы .

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

Для колонки отчета «ПроцентРентабельности» прописываем выражение Сумма(ВспомогательноеПоле)/Сумма(Выручка).

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

Надеюсь, что для кого-то эта статья окажется полезной.

Войдите на сайт как ученик

Войдите как ученик, чтобы получить доступ к материалам школы

Система компоновки данных 1С 8.3 для начинающих: считаем итоги (ресурсы)

Целью этого урока будет:

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

Создаём новый отчёт

Как и на предыдущих уроках открываем базу "Гастроном " в конфигураторе и создаём новый отчёт через меню "Файл "->"Новый... ":

Вид документа - внешний отчёт :

В форме настройки отчёта пишем имя "Урок3 " и нажимаем кнопку "Открыть схему компоновки данных ":

Оставляем имя схемы по умолчанию и нажимаем кнопку "Готово ":

Добавляем запрос через конструктор

На закладке "Набор данных " нажимаем зелёный плюсик и выбираем пункт "Добавить набор данных - запрос ":

Вместо того, чтобы писать текст запроса вручную, вновь запускаем конструктор запроса :

На вкладке "Таблицы " перетягиваем таблицу "Еда " из первой колонки во вторую:

Выбираем из таблицы "Еда " поля, которые будем запрашивать. Для этого перетаскиваем поля "Наименование ", "Вкус ", "Цвет " и "Калорийность " из второй колонки в третью:

Получилось вот так:

Нажимаем кнопку "ОК " - текст запроса сформировался автоматически:

Формируем настройки представления отчёта

Переходим на закладку "Настройки " и нажимаем на волшебную палочку , чтобы вызвать конструктор настроек :

Выбираем вид отчета "Список ..." и нажимаем кнопку "Далее ":

Перетаскиваем из левой колонки в правую поля, которые будут отображаться в списке и нажимаем "Далее ":

Перетаскиваем из левой колонки в правую поле "Цвет " - по нему будет происходить группировка строк в отчёте. Нажимаем "ОК ":

А вот и результат работы конструктора. Иерархия нашего отчёта:

  • отчёт в целом
  • группировка "Цвет"
  • детальные записи - строки с названиями еды

Сохраним отчёт (кнопка дискета ) и не закрывая конфигуратора тут же откроем его в режиме пользователя. Получилось вот так:

Меняем порядок колонок

Но давайте поменяем порядок колонок (стрелки вверх-вниз), чтобы он был таким как на рисунке ниже:

Сохраним отчёт и вновь откроем в режиме пользователя:

Отлично, так гораздо лучше.

Подводим итог (сумму) по калорийности

Было бы неплохо выводить итог калорийности продуктов по группам. Чтобы видеть сумму калорийности всех продуктов, скажем, белого или жёлтого цвета. Или узнать общую калорийность вообще всех продуктов в базе.

Для этого существует механизм вычисления ресурсов.

Переходим на вкладку "Ресурсы " и перетаскиваем поле "Калорийность " (мы же по нему собираемся итог подводить) из левой колонки в правую.

При этом в поле выражение выбираем из выпадающего списка "Сумма(Калорийность) ", так как итогом будет являться сумма всех входящих в итог элементов:

Сохраняем и формируем отчёт:

У нас появились итоги по каждой из групп и по отчёту в целом.

Подводим итог (среднее) по калорийности

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

Трогать уже имеющуюся колонку "Калорийность" нельзя - в неё уже выводится итог-сумма, поэтому заведём ещё одно поле , которое будет являться точной копией поля "Калорийность".

Чтобы завести такое "виртуальное" поле воспользуемся механизмом вычисляемых полей .

Переходим на закладку "Вычисляемые поля " и нажимаем зелёный плюсик:

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

Мы добавили новое поле ("СредняяКалорийность "), но в отчёте оно само по себе не появится - нужно или вновь вызывать конструктор настроек ("волшебная палочка") или добавить это поле вручную .

Поступим вторым способом. Для этого переходим на закладку "Настройки ", выбираем "Отчет " (ведь мы хотим добавить поле в целом к отчёту), выбираем внизу закладку "Выбранные поля " и перетаскиваем поле "СредняяКалорийность " из левой колонки в правую:

Получилось вот так:

Сохраняем и формируем отчет:

Поле появилось и мы видим, что его значениями являются значения поля "Калорийность". Отлично!

Для этого вновь воспользуемся уже знакомым нам механизмом ресурсов (подведение итогов). Переходим на закладку "Ресурсы " и перетаскиваем поле "СредняяКалорийность " из левой колонки в правую:

При этом в колонке "Выражение " выбираем "Среднее(СредняяКалорийность) ":

Сохраняем и формируем отчёт:

Видим, что по группам, то есть по каждому цвету, и по отчёту в целом совершенно верно посчиталось среднее значение. Но присутствуют лишние записи по отдельным продуктам (не по группам), которые хотелось бы убрать из отчёта.

Знаете почему они появились (значения не по группам)? Потому что, когда мы добавляли поле "СредняяКалорийность " в настройки отчёта, на втором шаге мы выделили весь отчёт в целом и это новое поле попало в элемент "Детальные записи ".

Исправим ошибку. Для этого вернёмся на закладку "Настройки ", выберем "Детальные записи " сначала сверху (шаг 2), а затем "Детальные записи " снизу (шаг 3), перейдём на закладку "Выбранные поля " и увидим в её правой колонке элемент "Авто ".

Элемент "Авто " - это не одно поле. Это несколько полей, которые попадают сюда автоматически на основании вышестоящих настроек.

Чтобы увидеть, что это за поля - нажмём на элемент "Авто " правой кнопкой и выберем пункт "Развернуть ":

Элемент "Авто " раскрылся в следующие поля:

А вот и наше поле "СредняяКалорийность ", которое попало сюда из пункта "Отчет ", когда мы его туда перетаскивали. Просто снимем галку рядом с этим полем, чтобы убрать его вывода.

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


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

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

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

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

Параметры:

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

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

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

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

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

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

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