|
Данная страница является статическим представлением статьи, расположенной на сайте http://gsbelarus.com Динамический адрес страницы: ../modules.php?name=News&file=article&sid=1 Категория страницы: Статья; Тема: Компьютеры Перейти к оглавлению. |
Этой статьей начинается цикл материалов посвященных технологии программирования, вопросам постановки задач и поиска наиболее оптимальных путей их решения. Если у вас возникнут вопросы, замечания, предложения или просто будет интерес мы будем рады любым контактам. Наши телефоны и электронный адрес вы найдете в конце данного материала.
Пока же обязательным требованием практически к любой создаваемой программе является возможность вывода информации на печать. Причем избалованному окнами пользователю мало просто текста, ему подавай отчеты с графиками, картинками, табличками и прочим.
Если ваша цель создание программного продукта на который не стыдно будет и самим посмотреть и другим показать, то подсистеме вывода на печать стоит уделить самое серьезное внимание. В стандартную поставку Delphi входит набор компонентов Quick Report. С его помощью за считанные минуты можно нарисовать шаблон отчета и подключить его к базе данных. Все операции понятны программисту и ничем не отличаются от обычного построения экранной формы. Пожалуй, единственный недостаток подобного подхода заключается в том, что изменить внешний вид отчета невозможно без вмешательства программиста и без перекомпиляции всего проекта. Этот недостаток весьма значительный, особенно если речь идет не об уникальной заказной работе, а о тиражном продукте. Не будешь же ведь выпускать пару сотен версий программ - по числу клиентов. А то, что изменения в выходные формы потребуются - гарантия 100 процентная. Простейший пример: в торговой программе, каждый клиент желал бы поместить свой логотип в прайс-лист или отсканированное изображение печати и подписи в счет-фактуру.
Еще одно решение проблемы - воспользоваться имеющимся генератором отчетов. В свое время с седьмым Паскалем Borland поставляла систему Crystal Reports. С первым Delphi поставлялся Report Smith, а начиная со второй версии, уже упоминавшийся выше, Quick Reports. Уже сам факт того, что компания Borland отказалась от поставки первых двух систем в комплекте с Delphi говорит о наличии серьезных проблем при их использовании. Первая заключается в том, что run-time библиотека, которая устанавливается на компьютер пользователя занимает много места и при работе потребляет слишком много системных ресурсов. Вторая - даже если пользователь и рискнет самостоятельно изменить внешний вид выходной формы, ему придется осваивать совершенно новый редактор. Шаг, на который подавляющее большинство пользователей ни за что не пойдет.
В свое время перед нами стояла проблема выбора наиболее подходящего генератора отчетов. Первым делом мы создали свой язык описания отчетных форм - APS. Язык базировался на формате PostSCRIPT, точнее - на одной статье о PostSCRIPT вычитанной в журнале МирПК. И, хотя визуальное сравнение файлов не давало особых причин для беспокойств, ни один из PostSCRIPT принтеров его не воспринимал, равно как и любой редактор, поддерживающий этот формат. Зато его воспринимали наши программы. Но, когда мы на собственно опыте убедились, что несовместимость - первый шаг к сумасшествию, решили искать другие варианты.
Как временное решение, впрочем до сих пор применяющееся в некоторых продуктах, использовалась связь по DDE с MSWord'ом. Загружался редактор, по команде открывался файл, в него подставлялись данные и все это отправлялось на печать. Хотя такой подход сработал, но проблемы в целом не решил. Уж очень требовательны к ресурсам продукты Microsoft. Загрузить одновременно программу, которая обращается к мегабайтной базе данных и Microsoft Word с отчетом на пару десятков страниц, все это на компьютере с 8 мегабайтами памяти - такого насилия над собой Windows выдержать не могла - или падала напрочь или на сутки уходила в себя свопируя своп файл. Ждать пока произойдет революция цен и каждый пользователь обзаведется вторым пентиумом и 64 Мб памяти мы не могли. Тем более, что Microsoft тоже не дремлет и еще не известно, сколько ресурсов будет требовать следующая итерация офиса.
Итак, два года назад перед нами стояла следующая задача: подсистема печати должна быть не требовательной к конфигурации компьютера и поддерживать один из общеизвестных форматов, с тем, чтобы конечный пользователь для корректировки внешнего вида мог воспользоваться хорошо знакомым ему инструментом. В качестве такого формата практически идеально подходит RTF (Rich Text Format). Во-первых его понимают все текстовые редакторы. Во-вторых, он предназначен для работы с бумажными документами, а не с их электронной формой, как HTML.
Реализация обработчика RTF оказалась не столь тривиальной. Только формализованное описание этого стандарта занимает 68 (!) страниц. О сложности задачи говорит, хотя бы то, что до сих пор мы не встречали компоненты, способные удовлетворительно работать с этим форматом. RichEdit из стандартной поставки Delphi не в счет, поскольку не поддерживает таблицы, графики, стили текста, разметку страницы, колонтитулы, поля и пр.
Только с третьей попытки, когда за дело взялся талантливый программист Владимир Белый, удалось получить работающую версию. Зато теперь с отчетами нет проблем.
Каждая форма представляет собой отдельный файл. Для его создания используется Microsoft Word. Документ содержит статичный шаблон отчета и поля, которые буду заполнены информацией в момент построения отчета. Поддерживаются следующие возможности формата RTF: текст, форматированный текст, параграфы, нумерованные и ненумерованные списки, таблицы (с оформлением), колонтитулы, стандартные поля, графика. В одном отчете можно вывести данные неограниченного числа таблиц, в том числе и связанных.
Для подключения отчета в программу достаточно поместить компонент TxReport на форму и связать его с источником данных (TDataSource) и файлом с шаблоном отчета. Готовый отчет можно просмотреть на экране, вывести на печать или сохранить в файл. И последнее, существуют достаточно "экзотические" случаи, в решении которых вряд ли поможет даже самый совершенный генератор отчетов. Пример: печать на конвертах или на наклейках для дискет. В набор xTools входят два дополнительных компонента, решающие эти задачи.
Андрей Киреев 7 апреля 1999г.
|
Данная страница является статическим представлением статьи, расположенной на сайте http://gsbelarus.com Динамический адрес страницы: ../modules.php?name=News&file=article&sid=1 Категория страницы: Статья; Тема: Компьютеры Перейти к оглавлению. |