Программный Файл: ...\Samples\Solution\Reports\Wrapping.frx

В настоящем разделе описывается Отчет с именем Wrapping.frx, в котором формируются данные Сотрудников (Служащих) - Employee, в этом Отчете иллюстрируются варианты специфического размещения Текстовых Элементов и Графики (картинок) - обтекание текста вокруг картинок, альтернативное размещение некоторых Объектов Отчета, динамические координаты Контролов в зависимости от размеров других Элементов Оточета. В качестве Среды Данных рассматриваемого Отчета используется таблица EMPLOYEE из Базы Данных Testdata.dbc, используемой в проекте Solution (Примеры Решений).

Структура Отчета, размещение Элементов Отчета

Полоса Заголовка (Title) содержит Название и краткое Описание Отчета. Детальная Полоса (Detail Band) обычно содержит информационные Поля и Метки, которые печатаются для каждой Записи Таблицы. В каждой Записи исходной Таблица размещены ссылки на 4 (четыре) категории информационных Данных:

  • Полное Имя Сотрудника ;

  • Биографические Данные ;

  • Информационный блок дополнительных данных (Адрес, Телефон) ;

  • Личная Фотография.

После вывода начальных данных (Полного Имени), в Отчете размещаются  личная фотография и биографические данные, установленные характеристики олбеспечивают комбинированное размещение Текстовой и Графической Информации (обтекание картинок текстом), используется также вариантное размещение отдельных Контролов Отчета, итоговый Информационный Блок имеет динамические координаты размещения в зависимости от печатаемого размера Биографических данных и Фотографии.

Окаймление Текстом Графических Объектов

Для размещения всей Информации из соответствующего Поля Записи типа MEMO рекомендуется предварительная обработка указанного Поля, используемое выражение представлено ниже: 
  CopyCode imageКопировать Код
LEFTC(employee.notes,nWrapCharPos)

Во втором Поле Отчета печатаются отсутствующие слова, которые не попали в первый Контрол. Для данного Контрола используется следующее выражение: 

  CopyCode imageКопировать Код
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  (плавающих координат).

См. также