Не все пользователи ГИС MapInfo знают, что в комплект поставки этой программы входит генератор отчётов Crystal Reports. Возможности его настолько широки, что с ним можно создавать отчёты практически любой сложности. Конечно, для распечатки вашего списка можно воспользоваться созданием макета (Layouts), поместив на него фрейм с вашей таблицей. Но это спасёт лишь в простейшем случае. Настоящие возможности по созданию сложных отчётов открываются лишь при использовании Crystal Reports.
Строго говоря, можно подбить какие-то результаты, используя инструмент SQL-запросов, создав новую таблицу для Отчета. Но, опять-таки, гораздо проще переложить эту работу на Crystal Reports.
В качестве учебного примера возьмём карту сельхозугодий на административный район со следующей структурой:

На рисунке выше приведена структура «учебной» карты со следующими полями: FARM_ID — код хозяйства, FARM_NAME — наименование хозяйства, FLP_ID — код участка, Area — его площадь.
Для построения простейшего отчёта идём в меню Программы>Crystal Reports>Новый отчёт и видим следующий макет отчёта:

Как видим, в секцию отчёта Details помещены поля из нашей учебной таблицы, а в «шапку» отчёта(секция Page Header) — наименования полей. Настройка вида полей (выравнивание, длина, фонт, округление числовых величин и т.д.) доступны по правой кнопке из контекстного меню Format Fields:
![]() |
Здесь размещены основные опции отображения поля: Suppress — подавление(скрытие) поля, Horizontal Aligment — горизонтальное выравнивание поля, Keep Object Together — если эта опция будет сброшена, то не поместившуюся часть поля будет перенесена на сл. строку, Close Border ob Page Break— исключает разрыв поля при переходе на сл. страницу отчёта |
Для числовых полей (типа Area в нашем случае) доступны следующие настройки:
![]() |
Назначение опций: Suppress if Zero — не показывать поле при нулевом значении, Deсimal Separator — знак разделителя целой и дробной части, Thousands Separator — разделение разрядов тысяч, Leading Zero — печать/не печать ведущих нулей |
Жмём на кнопку предварительного просмотра отчёта и видим следующий результат:

Таак … Простейший отчёт создали. Теперь немного усложним задачу- пусть необходимо, скажем, подавить контура с площадью менее 10 гектар. Для выполнения этой задачи идём на вкладку Design, становимся на секцию отчёта Details и по правой кнопке выбираем контекстное меню Format и жмём на пимпочку аккурат напротив Suppress:
В появившемся редакторе выражений набираем следующую формулу:

Теперь наш отчёт будет выглядеть так:

Как видим, контура с площадью менее 10 гектар в отчёт не вошли.
Усложним задачу дальше. Допустим, у шефа возникло желание выделить контура с площадью более 50 гектар красным цветом. Нет проблем! Становимся на поле отчёта Area, жмём на правую кнопку и выбираем в контекстном меню пункт Border and Colors:

Жмём на кнопку напротив Background и в редакторе формул набираем следующее выражение:

Получаем отчёт в следующем виде:

Вышло немного совсем не то, что надо … Ничего, щас подавим чёрные поля. Опять идём в редактор формул и слегка подправляем наше выражение:

и получаем результат:
Вот теперь всё правильно. Значения площади более 50 гектар подкрашены красным цветом.
Идём дальше. Теперь хотелось бы сгруппировать наши записи в отчёте по хозяйствам. Для этого в отчёт необходимо добавить группировку по коду хозяйства (поле FARM_ID). Идём в меню Insert>Group:

Немного ретушируем отчёт и теперь он может выглядеть так (c учётом включенной группировки):

Далее хотелось бы подбивать сумму площадей контуров в разрезе хозяйств. Для этого идём Insert>Summary и вставляем в отчёт указанный промежуточный итог:

Так же хотелось бы избежать повторений названия хозяйств в отчёте ( ну так, чтобы вместо повторяющихся названий были прочерки). Здесь нам придётся создать формулу. Для этого опять идём в меню Insert>Field Object, выбираем в появившейся форме пункт Formula Fields:

Далее жмём на правую кнопку и создаём новую формулу с именем NoReply со следующим выражением и вставляем её в отчет взамен поля FARM_NAME(Название хозяйства):
![]() |
Здесь функция Previous возвращает значение поля в предыдущей записи. |
После всех этих манипуляций конструктор нашего отчёта может выглядеть так:

А отчёт в окончательном виде так:

Здесь в конце отчёта мы вставили конечный результат по сумме площадей всех участков. Делается это так: меню Insert>Grand Total:

… и вcтавляем это поле в секцию отчёта Report Footer.
Разумеется, в короткой статье невозможно описать все возможности генератора Отчётов Crystal Reports. Но полученных здесь данных будет вполне достаточно, чтобы самостоятельно приступить к подготовке несложных форм. Основные моменты уже разобраны.
Кстати, если вы будете в дальнейшем писать программы с использованием MS Visual Studio 2008/2010 (платформа .NET), вам пригодиться знание Crystal Reports. Этот генератор отчётов в этой инструментальной среде является штатным. Да и в ArcGIS’ е этот генератор тоже используется. Так что, изучив Crystal Reports, в любом случае не проиграете …
Еще об использовании Crystal Reports для создания отчетов можно посмотреть на нашем сайте в этой статье
© Simashkov.2011
19.02.2011 г.