Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Digitals.pdf
Скачиваний:
73
Добавлен:
28.06.2022
Размер:
9.86 Mб
Скачать

Глава 12. Применение в землеустройстве

Советы по разработке шаблонов отчетов

Главный совет при разработке шаблонов: учитесь на примерах. Не стесняйтесь экспериментировать, внося изменения в поставляемые шаблоны. Если вы боитесь напортачить, то сделайте копию файлов с расширением FR3, находящихся в папке Templates.

Особенностью проектирования шаблонов отчетов в модуле Reports является тот факт, что в ряде случаев вы можете обойтись вообще без бэндов. Для примера, обратитесь к шаблону Технічна документація. Учитывая, что данный шаблон “заточен” под выдачу документа на один единственный участок, усложнять себе жизнь бэндами не было нужды.

Разработчику этого шаблона удалось обойтись без бэндов и в пофамильной версии отчета, которая предназначена для выдачи документов для пары участков с целевыми назначениями ОЖБ и ОСГ. Дополнительные аргументы функции PARAM позволяют извлечь данные из второго участка по его номеру, а сам номер участка можно отыскать, написав довольно простой код в скрипте.

Вообще, анализируя поставляемые с Digitals шаблоны можно заметить, что написанию в них программного кода отводится ведущая роль. Очень часто используется следующий подход: после запуска шаблона на выполнение в стартовом коде отчета вычисляются все необходимые в дальнейшем переменные, которые и используются в элементах шаблона вместо прямых вызовов функций.

Отсюда возникает еще один совет: вспоминаем школьные уроки информатики. Ну и не забываем заглядывать в справочную систему.

XML+DMT+FastReport

Данная технология призвана объединить оба описанных выше подхода (шаблоны документов DMT и отчеты FastReport) и учесть сложности, сопутствующие представлению обменного файла XML в кадастровой карте. Вот как все происходит:

1.Откройте файл XML и пометьте участок. Для примера можно взять файл XMLExample.xml из папки

Maps.

2.Выполните команду меню Сервис > Документы и выберите один из шаблонов, чье имя задано в угловых скобках и помечено специальной иконкой. Например, пункт <CadPlanA4>.

Этот пункт соответствует пакету (по сути - папке) CadPlanA4.dmt, хранящейся в папке Templates. Внутри нее находится шаблон документа CP.dmt и шаблон отчета CadPlanA4.fr3.

3.Программа сгенерирует графическую часть на базе шаблона CP.dmt и откроет ее в новой карте. Далее, вам следует отредактировать ваш будущий план по своему вкусу. После окончания редактирования, нажмите кнопку Продолжить в диалоге ожидания.

Все, что попадает в рамку карты, будет автоматически экспортировано в файл формата WMF в подпапку Pictures программной папки под уникальным именем. Временная карта будет закрыта.

Далее, в буфер обмена программа запишет данные о самом обменном файле. Отметим, что от передачи в виде неявно формируемого Комбинированного списка разработчикам пришлось отказаться. Вместо этого используется тот же язык XML, немного адаптированный для данной задачи. Подробности чуть ниже.

4.На этом шаге запускается модуль Reports, в который на обработку передается шаблон отчета

CadPlanA4.fr3.

Здесь вступает в игру программный код, которым данный шаблон просто таки “нафарширован”. Код выполняет разбор данных, переданных из Digitals, создает элементы отчета (в частности, экспликацию), а также загружает сохраненную на предыдущем этапе графическую часть.

5.Готовый документ можно открыть для окончательной правки в дизайнере двойным щелчком. Сохранить и/или распечатать отчет можно с помощью стандартных команд модуля Reports.

Создание нового шаблона

Вероятно, самый простой способ создать новый шаблон - это воспользоваться Проводником Windows, чтобы скопировать существующий:

312

XML+DMT+FastReport

1.Создайте папку вида ИмяШаблона.DMT в папке Templates.

2.Скопируйте внутрь из другого пакета файл шаблона отчета FR3 и файл шаблона документа DMT. Чтобы новый пакет отобразился в меню Документы, Digitals придется перезапустить.

Отметим, что шаблонов DMT может быть несколько, если требуется несколько вариантов графической части, а может и не быть вовсе, если вы составляете, к примеру, шаблон каталога координат.

3.Отредактируйте шаблон DMT, просто открыв его в окне Digitals.

Здесь вам должна помочь информация, изложенная выше в разделах «IN4+DMT» и «XML+DMT».

4.Чтобы отредактировать шаблон отчета FastReport, запустите пакет на выполнение командой меню Сервис > Документы и, в открывшемся окне модуля Reports, выберите команду меню Дизайнер >

Правка шаблона.

За дополнительной информацией о работе с Дизайнером отчетов обращайтесь к разделу

«IN4+FastReport».

5.Повторяйте предыдущие два пункта, пока не добьетесь желаемого результата.

Порядок работы с XML в скриптах

Чтобы представить себе, какие именно данные передаются модулю Reports из Digitals в случае создания документов из обменного файла XML, попробуем заглянуть в буфер обмена. Для этого, сразу после создания документа, следует открыть любой текстовый редактор и нажать кнопку Вставка.

В качестве редактора автор использовал NotePad++, рекомендованный одним из старожилов форума в ветке “XML против Reports3”. Будучи оснащенным плугином XMLTools, этот редактор является замечательным средством для просмотра и правки документов XML.

К слову, упомянутая ветка форума, несмотря на большей частью устаревшую информацию, содержит массу примеров по извлечению данных из XML. Также здесь можно найти и скачать довольно неплохие готовые шаблоны.

Ниже на снимке экрана показано содержимое буфера обмена после форматирования в редакторе. Поскольку полный текст занял бы слишком много места, часть информации “свернута” (такие строки слева помечены + плюсами).

3 http://www.geosystema.net/forum/viewtopic.php?f=1&t=2051

313

Глава 12. Применение в землеустройстве

Прежде чем мы продолжим, сделаем небольшой экскурс в синтаксис языка XML. Если сказать совсем просто, то язык состоит из элементов (или узлов), каждый из которых состоит из открывающего тега вида <element1>, соответсвующего ему закрывающего тега вида </element1> и данных, которые заключены между ними.

Элементы могут быть вложенными друг в друга, образуя тем самым иерархическое дерево. Для удобства чтения документов на языке XML человеком, вложенные элементы принято показывать с некоторым отступом. Цепочка вложенных элементов, ведущая к неким данным, представляет собой ветку или путь.

Для работы с путями используется так называемый язык запросов XPath. Подробное его изучение его в рамках данной книги невозможно, да и не нужно. В Digitals используется упрощенная его версия, которая позволяет извлекать значение одного заданного узла, содержащего текстовое значение.

Пути бывают абсолютными, то есть от самого внешнего элемента, и относительными - от текущего. Первые обязательно начинаются с символа / (прямого слэша). Такой же прямой слэш применяется и для разделения элементов, входящих в путь. Если на некотором уровне имеется несколько элементов, то конкретный элемент можно указать по номеру в [ ] квадратных скобках.

Например:

'ProprietorInfo/Authentication/NaturalPerson/FullName/LastName'

Извлекает фамилию собственника участка.

'ProprietorInfo[1]/Authentication/NaturalPerson/FullName/LastName'

В этом случае собственников несколько, поэтому указываем номер в квадратных скобках после элемента ProprietorInfo.

Теперь вернемся к снимку экрана, показанному выше. Что же мы видим:

Вся информация заключена в один внешний элемент самого высокого уровня Data.

На втором уровне находится три элемента, каждый из которых отвечает за свой “кусок” данных:

EmbeddedXML

Этот элемент предназначен для передачи “чистого” XML файла, каким бы вы его увидели при сохранении на диск. Пользователи, знакомые со структурой обменного файла формата XML, сразу узнают его по элементу UkrainianCadastralExchangeFile. Внутри последнего находится абсолютно все “родные” элементы, предусмотренные данным форматом.

Map

Этот элемент предназначен для передачи информации об исходной карте. Здесь имеется информация о слоях, параметрах, объектах и их узлах (точках).

Graphics

Вдочерних узлах этого элемента указаны имена файлов, содержащие графическую часть отчета (элемент Graphic), а также элемент, содержащий таблицу смежников (элемент Neighbours).

Таким образом, в распоряжении разработчика шаблона отчета имеется вся доступная информация - остается только ее правильно обработать. И здесь на сцену выходит язык PascalScript и функции запросов к XML.

Функции для работы с XML

Ниже даны формальные описания функций и примеры запросов. (В примерах, ввиду слишком длинных для книги строк, пришлось применить перенос строки, которого в реальном коде быть не должно.)

IsNodeExists(Path:String):Boolean

Проверка наличия узла. Возвращает True или False. Например, следующий запрос отвечает на вопрос, является ли первый по счету собственник участка физическим лицом:

IsNodeExists('InfoPart/CadastralZoneInfo/CadastralQuarters/

CadastralQuarterInfo/Parcels/ParcelInfo[1]/Proprietors/

ProprietorInfo[1]/Authentication/NaturalPerson')

314