REPORT FORM и LABEL FORM являются командами, которые работают в заданной области действия. Когда вы используете какую-либо команду с ключевым словом scope, вы можете задать диапозон записей таблицы и/или условыя фильтрации записей, для которых данная команда должна выполнить действия. Если вы не определили область действия явно, то у каждой команды есть область действия по умолчанию. Для отчетов и этикеток область действия по умолчанию - ALL (Все).

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

Когда вы определяете данные для отчета или этикетки, вы можете установить реляции других таблиц и курсоров к выбранной рабочей области, или ведущему псевдониму.  Вместе со стандартным диапазонным поведением Visual FoxPro, механизм отчетов также предоставляет возможность создания множественных проходов в диапазоне каждой области детализации базированных на этих реляциях.

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

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

Использование Целевых Псевдонимов (Target Aliases) для представления реляций

Целевой псевдоним (target alias) области детализации ссылается на откытую таблицу или представление (view) в текущей дата сессии. В дизайнере отчетов, информация о целевом псевдониме выглядит так же, как и выражение группы, но это - немного другое. Когда группа сменяется, указатель записи перемещается вперед. Когда механизм отчетов переходит на другую область детализации и переопределяет целевой псевдоним, то указатель записи перемещается вначало области действия детализации.

Как механизм отчетов проверяет достоверность целевого псевдонима в Run time

Механизм отчетов рассматривает ведущий псевдоним отчета плюс целевой псевдоним, заданный для каждой области детализации, для определения, как обрабатывать каждую область. Перед тем, как начать выполнение отчета, проверяется достоверность всех выражений целевых псевдонимов, содердащихся в данном отчете. Целевым псевдонимом может быть:

  • Пустая строка.

  • Псевдоним таблицы или представления, подчиненных ведущему псевдониму отчета.

  • Ведущий псевдоним для данного отчета.

Механизм отчетов определяет достоверность всех выражений, которые используются в качестве целевых псевдонимов, до начала обработки отчета.  Если эти выражения не определяют псевдонимы, используемые в данный момент, то выдается сообщение об ошибке "<псевдоним> not found". Если какой-то псевдоним используется, то это должен быть либо ведущий псевдоним, либо псевдоним, подчиненный ведущему. В противном случае, возникнет ошибка "<псенвоним> is not related to the current work area".

Области отчета с целевыми псевдонимами

Ведущий псевдоним для отчета - это типичная родительская таблица с одной или более реляцией. Например, таблица Заказчики связана с таблицей Заказы и таблицей Платежи.

Раскладка отчета, управляемая таблицей Заказчики, отражает эти реляции путем включения одной области детализации с целевым псевдонимом "Orders" и второй области детализации с целевым псевдонимом "Payments".

Важно
Надо включать кавички в каждое выражение целевого псевдонима, за исключением, когда Orders или Payments - это переменные, содержащие имена фактических псевдонимов.

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

Области детализации без целевого псевдонима

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

Например, в отчете по Заказчикам(Customer), вы создаете группу по Customer_ID, котора дает возможность предоставить информацию о Заказчике в верхнем или нижнем колонтитуле группы. Используя область детализации без целевого псевдонима, помещенную между областями детализации для Заказов и Платежей, вы можете расположить дополнительную информацию о Заказчике, как например, текущее состояние счета. Так как эта область детализации не имеет целевого псевдонима, то ее содержимое появится только один раз перед тем, как механизм отчетов перейдет к формированию Платежей.

Области детализации с целевым псевдонимом таким же, как управляющий псевдоним

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

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

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

Автоматический Режим Один-ко-Многим (One-To-Many)

Проверяя достоверность всех целевых псевдонимов, которые вы используете для областей детализации, механизм отчетов смотрит, устоновлены ли явно какие-либо свойства OneToMany в вашей DataEnvironment или, если вы открываете таблицы сами, есть ли у ведущего псевдонима реляции, установленные по команде SET SKIP TO. Если это так, то механизм отчетов не будет изменять вашу среду данных. Однако, если вы не установили реляцию one-to-many явно, то механизм отчетов установит ее, и потом удалит по окончанию формирования отчета. Такой автоматический режим one-to-many осуществляется только тогда, когда вы используете хотя бы один целевой псевдоним.

Переменные и Вычисляемые Поля для Реляционных Таблиц

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

Вычисляемые поля и переменные отчетов в версиях Visual FoxPro предшествующие 9 могут быть восстановлены в исходное состояние (Reset) в конце групп(ы), в конце страницы или в конце отчета. Свойство Reset_at_value показывало, в какой точке отчета механизм отчетов устанавливал эти величины в исходное значение, или на базе чего выполнялись их вычисления.

Другими словами, пределы действия вычисляемых полей и переменных базируется на том, где и когда переустанавливаются их значений. В Visual FoxPro 9, метка Reset at в диалоговом окне Дизайнера Отчетов была заменена на Reset based on, чтобы разъяснить такое поведение.

В отчете со множественными областями детализации, вы можете определить пределы действия переменных и вычисляемых полей базируясь на областях детализации и ассоциированных с ними целевыми псевдонимами. Например, в отчете Customer (Заказчик), вы можете установить предел действия переменной, педсчитывающей колличество (Count), на базе области детализации с целевым псевдонимом Orders(Заказы). Такая переменныя будет предоставлять количество заказов для каждого заказчика. Так как ее область действия - область с корректным целевым псевдонимом, то она предоставит корректный подсчет. Без целевого псевдонима, такой посчет не будет давать корректный результат в случае, когда у Заказчика Платежей больше, чем Заказов.

Предварительные вычисления

Так как вы можете задать тот же самый целеной псевдоним для нескольких областей детализации, то вы можете одну из областей для получения вычисляемых значений перед тем, как отображать какие либо данные. В примере с отчетом Customer, создайте две области с целевым псевдонимом Orders. Задайте две переменных отчета, OrderTotal и OrderCount, на базе первой области, но расположите все желаемые данные из таблицы Order во второй области. Это даст вам возможность показать количество и общую сумму всех заказов в верхнем колонтитуле второй области детализации.

Использование предварительно вычисляемых переменных отчета

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

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

Предварительно вычисляемые переменные на базе ведущего псевдонима

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

Смотрите также