Программный Файл: ...\Samples\Solution\Reports\Wrapping.frx
В настоящем разделе описывается Отчет с именем Wrapping.frx, в котором формируются данные Сотрудников (Служащих) - Employee, в этом Отчете иллюстрируются варианты специфического размещения Текстовых Элементов и Графики (картинок) - обтекание текста вокруг картинок, альтернативное размещение некоторых Объектов Отчета, динамические координаты Контролов в зависимости от размеров других Элементов Оточета. В качестве Среды Данных рассматриваемого Отчета используется таблица EMPLOYEE из Базы Данных Testdata.dbc, используемой в проекте Solution (Примеры Решений).
Структура Отчета, размещение Элементов Отчета
Полоса Заголовка (Title) содержит Название и краткое Описание Отчета. Детальная Полоса (Detail Band) обычно содержит информационные Поля и Метки, которые печатаются для каждой Записи Таблицы. В каждой Записи исходной Таблица размещены ссылки на 4 (четыре) категории информационных Данных:
-
Полное Имя Сотрудника ;
-
Биографические Данные ;
-
Информационный блок дополнительных данных (Адрес, Телефон) ;
-
Личная Фотография.
После вывода начальных данных (Полного Имени), в Отчете размещаются личная фотография и биографические данные, установленные характеристики олбеспечивают комбинированное размещение Текстовой и Графической Информации (обтекание картинок текстом), используется также вариантное размещение отдельных Контролов Отчета, итоговый Информационный Блок имеет динамические координаты размещения в зависимости от печатаемого размера Биографических данных и Фотографии.
Окаймление Текстом Графических Объектов
![]() |
|
---|---|
LEFTC(employee.notes,nWrapCharPos) |
Во втором Поле Отчета печатаются отсутствующие слова, которые не попали в первый Контрол. Для данного Контрола используется следующее выражение:
![]() |
|
---|---|
LTRIM(RIGHTC(employee.notes,(nMemoLen-(nWrapCharPos)))) |
Указанные выражения для Контролов используют внутренние переменные Отчета, в зависимости от которых выполняется требуемая обработка полей типа MEMO.
-
Переменная nFirstMemoLen определяет количество символов размещаемых в первом Контроле без отсечения. Для рассматриваемого Отчета эта переменная принимает значение =185. Если вы намереваетесь использовать данный подход, то вам нужно определить максимальное значение рассматриваемого параметра, который определит количество символов, печатаемых выше графического изображения (картинки).
-
Переменная nMemoLen определяет длину символьной строки, размещенной в текущем поле типа MEMO. для этого используется следующее выражение: LENC
(employee.notes)
. -
Переменная nSpace определяет позицию первого Пробела после всех символов, размещаемых в первом Контроле. Для этого используется следующее выражение:
AT_C(CHR(32),RIGHTC(employee.notes,(nMemoLen - nFirstMemoLen))).
-
Переменная nWrapCharPos определяет позицию, где будет выполнен переход на следующую строку. Для этого используется выражение:
nSpace + nFirstMemoLen
.
Алтарнативное размещение Печатаемых Объектов
В рассматриваемом Отчете, размещение основных информационных групп (бографических данных, фотографии и информационного блока) изменяется для каждой Записи в исходной Таблице. Для того, чтобы чередовать размещение основных двух групп (фотографии и информационного блока) используется специальный механизм. Третья составляющая (биография) не имеет альтернативы размещения, это начальный Элемент каждой Записи.
Сначала фотография размещается с левой стороны, а информационный
блок - с правой стороны, для следующей Записи Данных указанные Элементы
Отчета меняются местами, и так далее... Для отслеживания и управления
указанными режимами Печати используется внутренняя переменная Отчета:
nCounter, которая накапливает
количество обработанных (напечатанных) Сотрудников. Условиями
позиционирования каждого дублирующего набора Контролов Отчета являются
простейшие условные выражения, которые размещены в соответствующих
Событиях Print When (Условие Печати). Для одного набора - MOD(nCounter,2)
= 0
. а для второго набора: MOD(nCounter,2)
= 1
.
Растяжение Объектов переменной Длины
В данном Отчете выводится Блок информации, размещаемый ниже Биографических Данных. Так как размер Биографических данных может меняться для разных Записей Таблицы, то Блок Биографических данных размещается рядом с Графическим изображением (фотографией) и может занимать только отведенное для соответствующего Поля Место в Отчете. Рассматриваемый Блок Информации размещается ниже Биографии и "растягивается до конца текущей Страницы, его размер зависит от размера Биографии. Данный Блок представляет собой группу информационных Полей, Этикеток, прямоугольных Областей. Для исключения наложения данных из Биографии и Элементов из указанной группы для всех этих Элементов устанавливается Свойство Float (плавающих координат).