При разработке отчетов не всегда хватает полей, определенных в наборе данных. Довольно часто бывает нужно отразить какие-то другие поля, которые рассчитываются на основе имеющихся по определенному алгоритму. Например, требуется рассчитать выручку как разницу между доходами и расходами и т. п.
Для этого в системе компоновки данных есть возможность определения вычисляемого поля. Вычисляемые поля представляют собой дополнительные поля схемы компоновки данных, значения которых будут вычисляться по некоторой формуле. В настройках компоновки данных вычисляемое поле будет фигурировать под именем, указанным в пути к данным этого поля. Пользователь сможет работать с вычисляемым полем точно так же, как и с полем набора данных.
Для того чтобы система смогла получить значение вычисляемого поля, необходимо указать выражение вычисляемого поля. Оно описывается на языке выражений компоновки данных. В выражениях вычисляемого поля есть ограничение: в нем нельзя использовать вычисляемые поля. В остальном ограничений нет: можно использовать все синтаксические конструкции языка выражений, можно использовать поля наборов данных, а также функции общих модулей конфигурации, описанные с ключевым словом Экспорт.
Для вычисляемого поля можно определить заголовок, ограничение доступности, выражение представления, выражения упорядочивания, тип значения, доступные значения и оформление так же, как для полей наборов данных. Кроме того, вычисляемое поле может быть определено как ресурс. Для этого необходимо добавить данное поле в список ресурсов и указать выражение, по которому будет вычисляться итог.
Для примера рассмотрим отчет Отчет по системным блокам. В схеме компоновки данных отчета на закладке Вычисляемые поля находится вычисляемое поле Прибыль. Выражение для его расчета указано в колонке Выражение (листинг 3.37).
Листинг 3.37. Выражение для расчета вычисляемого поля «Прибыль»
СтоимостьРасход - СтоимостьПриход
Заголовок вычисляемого поля, который будет отображаться в шапке отчета, задается по умолчанию, но можно его изменить или задать его в случае использования в конфигурации нескольких языков (рис. 3.139).
Рис. 3.139. Описание вычисляемого поля
Вычисляемое поле можно добавить в ресурсы отчета, чтобы вычислять по нему групповые и общие итоги (рис. 3.140).
Рис. 3.140. Добавление вычисляемого поля в ресурсы отчета
В результате выполнения отчета в поле Прибыль будет отражаться прибыль от продажи собранных системных блоков, то есть разница между его продажной стоимостью и стоимостью комплектующих и услуг, израсходованных на сборку компьютера (рис. 3.141).
Рис. 3.141. Результат отчета
Однако не всегда простым суммированием можно получить правильные итоги по вычисляемому полю. В таких случаях требуется задать собственное выражение для расчета ресурса. Как, например, в схеме компоновки данных АнализЦенКомплектующих для поля Выручка (рис. 3.142).
Рис. 3.142. Расчет итога для вычисляемого поля
Суммарная выручка будет получена как произведение количества ушедших в сборку комплектующих на разницу средних цен сборки и поступления по каждому из них. В этом случае нужно задать следующее выражение для расчета ресурса Выручка (листинг 3.38).
Листинг 3.38. Выражение для расчета ресурса «Выручка»
Сумма(Собрано) * (Среднее(ЦенаСборки) - Среднее(ЦенаПриход))
В выражении вычисляемого поля можно также использовать функции из общих модулей. Чтобы функцию можно было использовать в схеме компоновки данных, необходимо чтобы в ее описании присутствовало ключевое слово Экспорт. Например, в общем модуле ФункцииДляОтчетов есть функция ВВерхнийРегистр(Строка) (листинг 3.39).
Листинг 3.39. Функция общего модуля
Функция ВВерхнийРегистр(Строка) Экспорт
Возврат ВРег(Строка);
КонецФункции
Тогда в выражении вычисляемого поля можно воспользоваться следующим выражением (листинг 3.40).
Листинг 3.40. Выражение вычисляемого поля с использованием функции общего модуля
ФункцииДляОтчетов.ВВерхнийРегистр(Наименование)
В результате описание вычисляемого поля в схеме компоновки данных примет вид (рис. 3.143).
Рис. 3.143. Выражение для расчета вычисляемого поля
В результате выполнения отчета Оказание услуг название услуг будет выведено в следующем виде (рис. 3.144).
Рис. 3.144. Результат отчета