dimuhametov | Дата: Четверг, 26.12.2019, 09:13 | Сообщение # 1 |
Группа: Администраторы
Сообщений: 204
Статус: Offline
| Переменные поля блока
Полосы блоков шаблона могут содержать переменные поля в квадратных скобках, значения которых вычисляются и подставляются в отчет вместо полей. Информация вне полей в квадратных скобках переносится из шаблона в отчет без изменения.
Переменные поля могут содержать имена полей таблицы, связанной с блоком, имена переменных, функцию или любое выражение Visual FoxPro. Допускаются также имена полей других таблиц, взглядов, курсоров (они должны быть предварительно открыты и могут быть связанны отношениями с таблицей блока, которая в данном случае тоже должна быть открыта до вызова генератора). Переменные, используемые в полях блока, должны быть определены в вызывающей программе командами PUBLIC или PRIVATE. Функция пользователя, использованная в переменном поле, не должна менять текущую запись в таблице блока (если, конечно, этого не требует логика построения отчета).
Переменные поля допускают также агрегатные функции, которые используются в команде CALCULATE (то есть, функции SUM, CNT, MIN, MAX, AVG, STD, NPV, VAR). Имя агрегатной функции должно быть самым первым в переменном поле (сразу после открывающей квадратной скобки). При вычислении агрегатной функции фильтруются только те записи таблицы блока, которые соответствуют группе, в полосе которой встретилось поле с агрегатной функцией. При этом в случае обычного блока учитываются только группы строк, а в случае перекрестного блока – группы строк и группы колонок.
Наконец, имеются еще две агрегатные функции: FST(expr) и LST(expr), где expr – имя поля или выражение с именами полей таблицы блока. Функция FST вычисляет значение выражения expr для первой записи группы, а функция LST – для последней записи группы.
Если агрегатная функция используется в полосе детализации обычного блока, то при ее вычислении фильтруются все записи таблицы блока от первой до текущей записи (то есть, функции SUM будет соответствовать накопительное суммирование, функции CNT – номер записи и т.д.). Нет смысла использовать агрегатную функцию одновременно в полосе детализации строк и полосе детализации колонок перекрестного блока, поскольку в этом случае фильтроваться будет только одна запись таблицы блока, соответствующая этим двум полосам. Но агрегатная функция в полосе детализации строк (колонок) и любой полосе колонок (строк), отличной от полосы детализации, конечно же, имеет смысл.
|
|
| |