Для расчета различных показателей продаж будем использовать вычисляемые поля (), то есть поля, которых изначально нет в наборе данных отчета, но которые вычисляются на основе доступных полей отчета.
Система компоновки данных предоставляет возможность вычисления выражений для родительских группировок. Например, с помощью функции ВычислитьВыражение() можно вычислить для каждой вложенной группировки (Номенклатура, Период) процент продаж по родительской группировке (Контрагент).
Для реализации этой возможности перейдем на закладку Вычисляемые поля и добавим вычисляемое поле ПроцентПродажПоКонтрагенту. Выражение для его расчета мы здесь определять не будем, а зададим его на закладке Ресурсы, так как у нас в отчете нет детальных записей (рис. 2.290). В колонке Оформление зададим формат поля, чтобы ограничить число выводимых десятичных знаков. Вызовем диалог Формат поля и в строку Формат введем выражение (листинг 2.49).
Листинг 2.49. Формат поля «ПроцентПродажПоКонтрагенту»
ЧДЦ=2

Рис. 2.290. Создание вычисляемого поля
Перейдем на закладку Ресурсы и определим доступные поля ресурсов отчета (), рис. 2.291. В колонку Выражение для ресурса ПроцентПродажПоКонтрагенту введем следующий текст (листинг 2.50).
Листинг 2.50. Выражение для расчета ресурса на основе вычисляемого поля «ПроцентПродажПоКонтрагенту»
Сумма(Стоимость)*100 / ВычислитьВыражение("Сумма(Стоимость)", "Контрагент")

Рис. 2.291. Определение ресурсов отчета
Функция ВычислитьВыражение() вычисляет выражение в контексте некоторой группировки. В качестве первых трех параметров в нее передается выражение для расчета (например, "Сумма(Стоимость)"), имя группировки, в которой вычисляется выражение (например, "Контрагент"), и область вычисления – "ОбщийИтог", имя группировки или "Иерархия" (в нашем случае третий параметр опущен).
В других параметрах, передаваемых в функцию, имеется возможность указать, с какой записи начинать и какой записью заканчивать массив записей для расчета (возможно указание первой, последней, следующей, предыдущей, текущей записи). Более подробно о функциях языка выражений системы компоновки данных можно прочитать в книге «1С:Предприятие 8.2. Руководство разработчика», гл. 10.3.7.2.11.
В настройках отчета на закладке Выбранные поля перенесем из списка доступных полей поля Стоимость и ПроцентПродажПоКонтрагенту. На закладке Другие настройки установим макет оформления () отчета – Арктика. Запустим и сформируем отчет в режиме 1С:Предприятие (рис. 2.292).

Рис. 2.292. Результат отчета
В колонке Процент продаж по контрагенту мы видим процентное отношение стоимости продаж по группировке Период и Номенклатура к стоимости продаж по группировке Контрагент.
Теперь продемонстрируем обратную возможность. Система компоновки данных предоставляет возможность вычисления выражений для вложенных группировок. Например, с помощью функции ВычислитьВыражениеСГруппировкойМассив() для каждого контрагента можно вычислить максимальную сумму продаж купленного им товара.
Для реализации этой возможности на закладке Вычисляемые поля добавим вычисляемое поле МаксимальнаяСуммаПродажТовара.
На закладке Ресурсы добавим вычисляемое поле в список ресурсов отчета. В колонку Выражение для ресурса МаксимальнаяСуммаПродажТовара введем следующий текст (листинг 2.51).
Листинг 2.51. Выражение для расчета ресурса на основе вычисляемого поля «МаксимальнаяСуммаПродажТовара»
Максимум(ВычислитьВыражениеСГруппировкойМассив(«Сумма(Стоимость)», «Номенклатура»))
Функция ВычислитьВыражениеСГруппировкойМассив()возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю. Более подробно о функциях языка выражений системы компоновки данных можно прочитать в книге «1С:Предприятие 8.2. Руководство разработчика», гл. 10.3.7.2.11.
В нашем случае для родительской группировки Контрагент возвращается массив, содержащий стоимость продаж по вложенной группировке Номенклатура. Затем из этого массива берется максимальный элемент и отображается в вычисляемом поле.
Добавим поле МаксимальнаяСуммаПродажТовара в список полей отчета. Выполним отчет (рис. 2.293).

Рис. 2.293. Результат отчета
Мы видим, что в колонке Максимальная сумма продаж товара для каждого контрагента отражена максимальная сумма продаж купленного им товара.
Рассмотрим еще пример. В некоторых аналитических отчетах требуется сравнить объем продаж каждого товара с объемом продаж заданного товара. Создадим вычисляемое поле, в котором для каждого товара будет выведено процентное отношение его суммы продаж к сумме продаж исследуемого товара.
Для демонстрации этой возможности создадим новый вариант отчета РасчетПоказателейПродаж. Для этого на закладке Настройки схемы компоновки данных нажмем кнопку Добавить слева над списком вариантов отчета. Зададим имя варианта и его представление как СписокПродаж и добавим в структуру нового варианта отчета одну группировку по полю Номенклатура.
На закладке Вычисляемые поля добавим вычисляемое поле ПроцентПродажОтИсследуемогоТовара. В колонке Оформление зададим формат поля, чтобы ограничить число выводимых десятичных знаков. Вызовем диалог Формат поля и в строку Формат введем выражение (листинг 2.52).
Листинг 2.52. Формат поля «ПроцентПродажОтИсследуемогоТовара»
ЧДЦ=2
На закладке Ресурсы добавим вычисляемое поле в список ресурсов отчета. В колонку Выражение для ресурса ПроцентПродажОтИсследуемогоТовара введем следующий текст (листинг 2.53).
Листинг 2.53. Выражение для расчета ресурса на основе вычисляемого поля «ПроцентПродажОтИсследуемогоТовара»
Сумма(Стоимость)*100 / ВычислитьВыражение("Сумма(Выбор Когда Номенклатура = &ИсследуемыйТовар Тогда Стоимость Конец)", , "ОбщийИтог")
На закладке Параметры () добавим параметр ИсследуемыйТовар и укажем тип значения параметра СправочникСсылка.Номенклатура (рис. 2.294).

Рис. 2.294. Добавление параметра отчета
Добавим поля Стоимость и ПроцентПродажОтИсследуемогоТовара в список полей отчета. Для того чтобы пользователь мог вводить значение исследуемого товара, добавим параметр Исследуемый товар в состав быстрых пользовательских настроек.
Запустим отчет на исполнение, выберем вариант отчета Список продаж, введем значение параметра Исследуемый товар и получим следующий результат (рис. 2.295).

Рис. 2.295. Результат отчета
Мы видим, что в колонке Процент продаж от исследуемого товара выводится процентное отношение суммы продаж по каждому товару к сумме продаж товара, заданного в параметре Исследуемый товар.
Теперь на этом же варианте отчета продемонстрируем возможность вывода в ячейке отчета списковых данных. Допустим, рядом со стоимостью продаж по каждому товару требуется вывести список контрагентов, которые покупали этот товар. Для этого можно использовать функцию языка выражений системы компоновки данных Массив().
На закладке Вычисляемые поля добавим вычисляемое поле СписокКонтрагентов. На закладке Ресурсы добавим вычисляемое поле в список ресурсов отчета. В колонке Рассчитывать по… укажем, что ресурс нужно рассчитывать для группировки Номенклатура. В колонку Выражение для ресурса СписокКонтрагентов введем следующий текст (листинг 2.54).
Листинг 2.54. Выражение для расчета ресурса на основе вычисляемого поля «СписокКонтрагентов»
Массив(Различные Контрагент)
Результатом работы функции Массив() является массив, в котором элементом является значение параметра для каждой детальной записи. Перед параметром функции допустимо указывать ключевое слово Различные, в этом случае получаемый массив не будет содержать одинаковых значений. Более подробно о функциях языка выражений системы компоновки данных можно прочитать в книге «1С:Предприятие 8.2. Руководство разработчика», гл. 10.3.7.2.6.
Добавим поле СписокКонтрагентов в список полей отчета. Выполним отчет (рис. 2.296).

Рис. 2.296. Результат отчета
Мы видим, что в колонке Список контрагентов для каждого товара через запятую выводится список контрагентов, покупавших этот товар.
Теперь на этом же варианте отчета продемонстрируем возможность расчета ресурсов по интервалу. Например, с помощью функции ВычислитьВыражение() можно вычислить стоимость продаж номенклатуры с накоплением по указанному интервалу.
На закладке Вычисляемые поля добавим вычисляемое поле СтоимостьПродажСНакоплением. На закладке Ресурсы добавим вычисляемое поле в список ресурсов отчета. В колонку Выражение для ресурса введем следующий текст (листинг 2.55).
Листинг 2.55. Выражение для расчета ресурса на основе вычисляемого поля «СтоимостьПродажСНакоплением»
ВычислитьВыражение("Сумма(Стоимость)", , , "Первая", "Текущая")
Таким образом, суммарная стоимость продаж для ресурса будет вычисляться с первой по текущую запись отчета.
Добавим поле СтоимостьПродажСНакоплением в список полей отчета. Выполним отчет (рис. 2.297).

Рис. 2.297. Результат отчета
Мы видим, что в колонке Стоимость продаж с накоплением для каждого товара выводится стоимость продаж с накоплением с первой по текущую запись отчета.
Теперь рассмотрим возможность группировки записей отчета по значению ресурса, определенного с помощью языка выражений системы компоновки данных.
Для демонстрации этой возможности создадим новый вариант отчета РасчетПоказателейПродаж. Для этого на закладке Настройки схемы компоновки данных нажмем кнопку Добавить слева над списком вариантов отчета. Зададим имя варианта и его представление как ОбъемПродаж.
На закладке Вычисляемые поля добавим вычисляемое поле ОбъемПродаж. На закладке Ресурсы добавим вычисляемое поле в список ресурсов отчета. В колонку Выражение для ресурса введем следующий текст (листинг 2.56).
Листинг 2.56. Выражение для расчета ресурса на основе вычисляемого поля «ОбъемПродаж»
Выбор Когда Сумма(Стоимость) <= 3000 Тогда "Малый" Иначе
Выбор Когда Сумма(Стоимость) >= 10000 Тогда "Большой" Иначе "Средний" Конец Конец
В выражении для расчета ресурса ОбъемПродаж мы задаем градацию суммарной стоимости продаж – <= 3000 («Малый»), от 3000 до 10000 («Средний»), >= 10000 («Большой»).
На закладке Настройки определим следующую структуру нового варианта отчета – отчет будет содержать составную группировку по полям ОбъемПродаж и Номенклатура с вложенной группировкой Номенклатура. Добавим поля Стоимость и ОбъемПродаж в список полей отчета (рис. 2.298).

Рис. 2.298. Структура отчета
Запустим отчет на исполнение, выберем вариант отчета Объем продаж и получим следующий результат (рис. 2.299).

Рис. 2.299. Результат отчета
Мы видим, что в колонке Объем продаж выводится значение выражения, которое мы задали для ресурса в листинге 2.56. Кроме того, записи отчета группируются по значению ресурса Объем продаж – сначала выводятся записи с большим (Сумма(Стоимость) >= 10000) объемом продаж, затем записи с малым (Сумма(Стоимость) <= 3000) объемом продаж и затем записи со средним (3000 < Сумма(Стоимость) < 10000) объемом продаж.
Таким образом, мы рассмотрели некоторые примеры использования в отчетах языка выражений системы компоновки данных: