RTFReport EXAMPLE
Описание расширения шаблонов RTFReport v3.0 beta
Шаблоны являются свободно распространяемыми.
Назначение: Печать отчетов в файл формата RTF и/или HTML.
Состав файлов:
RTFCp.clw - Определения CodePages (скопируйте этот файл в каталог LIBSRC)
RTFRpt.tpl - под основные шаблоны Clarion
RTFRptAb.tpl - под основные шаблоны ABC
RTFGpRep.tpw - Содержит группы для обеих версий
RTFRptRu.txt - этот файл описания
Что это такое:
Шаблон не использует ни дополнительных библиотек ни других
каких либо программных ресурсов - только среда Кларион и все.
При подключении этого Extension к стандартному Report
отчет генерится не на принтер, а в файл (документ) RTF
или HTML. При этом получается не картинка, как следовало ожидать,
а полноценный документ (RTF) для дальнейшего редактирования или
распечатки, но уже в текстовом редакторе типа Microsoft Word.
Аналогично и файл HTML используется по назначению.
Кроме обычного текста в документе можно получить таблицу,
рамки таблицы можно настроить как для всей таблицы, так и
для отдельных (RTF) ячеек. В таблице HTML можно настроить объединение
ячеек в колонке, а в строке объединение ячеек вычисляется шаблоном.
При генерации в HTML используются все цветовые настройки элементов,
а также есть специфичные для HTML настройки цветов.
Кроме этого, для тонкой настройки, разработчик может отметить
поле и вписывать в это поле элементы языка HTML.
Кроме основного Report в шаблоне разработана поддержка
шаблонов UnivReport - CPCS(v5.15) Creative PC Solutions.
Но не реализовано для CPCS:
EXTENSION:
CPCSDynaLabels, 'CPCS Dynamic Label Generator'
CPCSFastDMprint,'Fast DotMatrix Printing support'
CODE:
StoreBinary,'Store Binary BLOB/MEMO'
CPCSReportColumns,'CPCS Columnar Report'
Как с этим работать:
Скопируйте файлы RTFRpt.tpl, RTFRptAb.tpl и RTFGpRep.tpw
в каталог TEMPLATE. RTFCp.clw скопируйте в каталог LIBSRC.
Подключите шаблоны средствами Clarion в Temlate Registry.
Если вы пользовались предыдущей версией шаблонов то
перерегистрируйте шаблоны (unregister и register).
Для использования шаблонов в вашем проекте необходимо
в Global Extensions, подключить extension RtfReportDef.
Для создания/проектирования отчета используется стандартный
форматер отчетов "Report" из основного набора шаблонов. К процедуре,
использующей шаблон Report, подключите Extension: RtfReport.
Глобальные настройки шаблона (RtfReportDef):
В Global Extensions настройте CharSet, Code Page, Default Suffix.
CharSet и Code Page необходимо настроить обязательно, это необходимо
для того чтобы, в полученном документе, текст выглядел нормально а
не непонятными иероглифами. Default Suffix - возможно потребуется вам,
для того чтобы во все используемые шрифты добавлялся суффикс,
к примеру "Cyr". Например: если у вас в свойствах элемента или
отчета используется шрифт "Arial", то в полученном документе
будет вписан Arial Cyr. Эти значения хранятся в глобальных переменных:
RtfFontDefaultCharSet, RtfFontDefaultCodePage, RtfFontDefaultPostPosition
соответственно.
При необходимости можно изменять эти значения во время исполнения программы.
Локальные настройки шаблона (RTFReport):
*****************
Некоторые термины в моем контексте для исключения разночтений:
* Структура - Структура отчета типа Band это Page Header, Group Foter,
Detail и подобные.
* Элемент - Элемент типа Control размещенный в структуре это String
в различных вариантах - String, Variable String и т.д.
* В настройках шаблона, где требуется вписать имя, используется
стандартный подход - Имя/!Поле. То есть если значение будет
использовано из переменной, то первым символом нужно вписать "!"
*****************
RTF File Name, HTML File Name - впишите сюда имя файла или Переменную,
для имени полученного документа.
View Procedure - сами догадаетесь.
HTML (Закладка) - Настройки специфичные для HTML документа.
(Глобальные цвета и картинка для подложки)
---------
Page (Закладка) - Список используемых структур и их настройки.
Для каждой структуры можно указать, сколько строк нужно занести
в таблицу, а также некоторые настройки этой таблицы
отдельно для RTF и HTML. Количество строк - это то количество
строк, которое видно во время визуального форматирования отчета.
Количество строк в таблицу указывается диапазоном с N по N.
Printed Lines Per Page - количество строк на странице.
если равно 0 то переход на новую страницу не будет формироваться
принудительно. Во время исполнения это значение храниться в локальной
переменной RtfLinesPerPage, а счетчик строк в переменной
RtfLinesPerPageCount. При желании можно манипулировать этими значениями.
Для того, чтобы, к примеру, какую либо страницу сделать короче или
длиннее, или вообще убрать принудительное разделение на страницы.
Кроме этого вы можете использовать какой-нибудь элемент строкового
типа и в необходимый момент вписать в него обычный код перехода
на новую страницу - <12> но в этом случае не будут сформированы
PageFooter и PageHeader.
----------
Fields (Закладка) - Список используемых элементов и их настройки.
Некоторые индивидуальные настройки элементов:
Для RTF настраивается наличие и толщина каждой линии ячейки в таблице.
Для HTML можно указать, что за корректность значения в этом элементе
отвечает разработчик. Такой элемент не будет обрабатываться функцией
AnsiToHTML(). И здесь же можно указать, сколько ячеек в столбце
должен использовать этот элемент (RowSpan). Но это значение не должно быть
больше чем количество строк, попадающих в таблицу начиная с этого
элемента и ниже. ** То есть, если в структуре 5 строк. В таблицу
вы указали со 2 по 4. Элемент расположен в 3 строке. То этот
элемент может занять не более 2 ячеек в столбце. **
Значения меньше 2 не имеют смысла (1 и 0 игнорируются).
---------
Ignore Left Position - игнорировать значение левой позиции у крайнего
левого элемента в строке. Например: Крайний левый элемент
расположен на расстоянии 8мм от левого поля листа. Но если
"Ignore Left Position" будет равно 10, то строка, в полученном документе,
не будет сдвинута от левого поля листа. Но если элемент расположить
на расстоянии 11мм то и в полученном документе строка будет сдвинута
на 11мм от левого поля листа. Это относится и к строкам формируемой
таблицы. В связи с чем нужно выравнивать левую позицию у левых
элементов строк попадающих в таблицу.
Что не может делать шаблон:
При генерации игнорируется все пользовательское хозяйство кроме
Control элементов типа STRING. т.е. графические примитивы, тексты,
Check Box и прочее не обрабатываются. Цвет для RTF игнорируется.
Почему так и не иначе:
При генерации текста программы, шаблон использует свойства структур и элементов
доступных на этапе генерации программы. А это то что видно в Source Report.
Самыми важными для генерации являются значения AT(N,N,N,N) как в настройках
Report так и в настройках структур и элементов. Здесь не должно быть
отрицательных значений, к примеру, AT(-10,,50,60) говорит о том, что в
визуальном форматере отчета съехала какая-то структура, элемент, или
разметка страницы. Для элементов недопустимы свойства AT(X,Y,,)
хотя X и Y могут иметь нулевые значения, но длина и высота должны быть указаны
обязательно. Шаблон использует все эти значения как для определения
последовательности вывода в файл, так и для определении позиции
элемента в документе и формирования дополнительных пространств
между строками или параграфами. Если, например, в строке из
5ти элементов 3й расположить чуть ниже остальных то в документе
он окажется на следующей строке. Поэтому элементы в одной строке
выравнивайте по низу.
Не менее важны идентификация структур и элементов
по их свойствам USE. Уже на этапе настроек вы это почувствуете
если эти свойства не будут прописаны.
Если строка не будет помещена в таблицу
то в полученном документе (RTF) она будет выровнена, так как указано
в свойствах крайнего правого элемента (Это свойство документа).
Если вы желаете чтобы в таблице колонки по вертикали не были вразброс
то выравнивайте элементы по правому краю.
При формировании документа изымаются все лишние пробелы
где бы они ни находились. При разработке шаблона предприняты
усилия к тому, чтобы строки, попадающие в таблицу, склеивались
в единую таблицу. В связи чем, вам, при необходимости,
не сразу удастся сделать так, чтобы таблица получилась разорванной.
Да и для обычных строк предусмотрен люфт, после превышения которого,
формируется дополнительное пространство между строками.
Это из-за того, что размеры визуального элемента могут очень
сильно отличаться от полученного набора символов в документе.
-------
Не забывайте что формируемый документ (RTF) может содержать верхний
колонтитул. И номер страницы должен быть в колонтитуле -
там его место. А Word сам пронумерует и перенумерует.
Для этого в PageHeader разместите String (где либо вверху чтобы
попало в колонтитул) в свойствах этого элемента поставьте галочку
на "Variable String" а "Total Type" = "Page No" и достаточно.
Манипулировать значением этого элемента не нужно.
В HTML колонтитул используется для свойства TITLE документа.
И еще, не забывайте, что в результате получиться документ.
То есть, нам иногда мешает привычка, использовать имеющиеся возможности.
К примеру, на одной строке можно разместить штук 40 элементов
с форматом @s255, а в результате, в документе, может получиться
несколько десятков строк.
*****
Мною шаблон испытан на версиях Clarion 5 и 5.5
Возможно будет работать и на более старых версиях
но необходимо чтобы в LIBSRC\EQUATES.CLW были определены CHARSET:...
Для тех кто использовал предыдущую версию шаблонов:
Прошу прошения за доставленные неудобства.
Но в глобальных настройках (Global -> Extension) настройте
еще раз "Default Code Page"
Ко всем:
Если вы обнаружите ошибки, пишите мне или в списки рассылки (ClaList,Clarion)
или конференции. Если у вас что-то не получается, будет жаль если вы
только из-за этого забросите шаблон - лучше спросите, не стесняйтесь,
и лучше если через списки рассылки. Вполне допускаю что некоторые
очевидные для меня вещи могут быть для вас совершенно непонятны.
К шаблонам приложен небольшой пример использования RTFReport,
посмотрите его, он простенький, но использует почти все средства шаблона.
(для демонстрации печати в HTML заимствована база данных Products.tps
и набор GIF картинок из примера "Invoice" поставляющегося с Кларионом.
Скопируйте файлы *.gif в каталог GIF)
Владимир Дегтяренко
vlad@v-ufal.chel.su (рабочий)
vhome@v-ufal.chel.su (домашний)
*******************************