После выполнения основной операции результат может быть обработан еще один раз, если вы зададите математическую функцию в свойстве
ResultFunction.
Таким образом, при помощи элемента CalcOp разработчик может реализо-вывать довольно сложные вычисления.
Если задать в качестве двух источников данных:
П два фиксированных значения (свойства Srcivalue и Src2Value);
О два поля из одного или двух просмотров данных (свойства SrclDataField И Src2DataField);
О комбинацию первых двух вариантов то их значения будут последовательно обработаны вычислительной операцией, которую вы зададите свойствами:
□
SrclFunction;
О SrclFunction;
П Operator;
О ResultFunction.
Кроме этого, элемент CalcOp позволяет создавать вычислительные цепочки, если использовать в качестве одного или двух источников другие вычислительные элементы (рис. 26.9).
Рис. 26.9. Пример вычислительной цепочки на основе элементов CalcOp
Это могут быть как простые элементы CalcText и CalcTotal, так и другие элементы CalcOp, которые, в свою очередь, могут содержать сколь угодно сложные вычислительные цепи.
Пример использования элемента CalcOp имеется в демонстрационном приложении Demo Reports на дискете, прилагаемой к этой книге.
Управляющие вычислительные элементы
Выше мы упоминали о свойстве controller элементов CaicText и CalcTotal, которое позволяет определить момент начала вычислений. Для этого используется специальный невизуальный элемент calcController. Обычно он располагается на той же полосе, что и вычислительные элементы и инициализирует процесс вычисления в момент своей печати. Хотя на самом деле невизуальный элемент CalcController не печатается, тем не менее событие onBeforePrint он получает исправно вместе со всеми элементами, расположенными на данной полосе. А значит и с инициализацией вычислений он справится вполне.
Обладая несколькими специфическими свойствами, он позволяет определить момент начала вычислений более точно. И так же, как элемент FontMaster используется для централизованного управления шрифтами, этот элемент может быть центром управления вычислениями.
Свойство initcalcVar должно ссыпаться на другой вычислительный элемент. И вычисленное им значение будет использовано в качестве начального.
Свойство initDataField задает поле данных, значение которого используется в качестве начального. Работает, если свойство initcaicvar не задано.
Свойство initvalue задает начальное значение, если предыдущие два свойства не заданы.
Для того чтобы эти свойства работали и задавали начальное значение, ссылка на элемент CalcController должна присутствовать в свойстве Initializer элементов оформления CaicText ИЛИ CaicTotai.
Элемент DataCycle используется для дополнительной фильтрации, сортировки и просмотра данных, поля которого используются для вычислений. С его помощью можно получить нужное для вычислений подмножество записей набора данных, не изменяя просмотра данных.
Свойство DataView задает просмотр данных, с которым будет работать элемент DataCycie.
При ПОМОЩИ СЮЙСТВ MasterDataView,MasterKey И DetailKey МОЖНО ПОЛУЧИТЬ подмножество записей для отношения "один-ко-многим".