Формы отчетов представляют из себя файлы, находящиеся в папке отчетов. Имя файла соответствует названию отчета. Управление файлами отчетов (удаление, переименование, копирование) происходит стандартными средствами управления файлами.
Отчеты могут быть разделены в группы (папки). Название группы совпадает с именем вложенной папки в папке отчетов.
Для самостоятельного создания отчетов может быть полезна следующая информация:
Формирование названий объектов через выражения
Проблема перехода с FreeReport 2.33 на FastReport 3(4)
Название источника |
Назначение |
Полигоны |
Полигоны |
Сегменты полигона |
Сегменты в полигонах |
Точки полигона |
Точки в полигонах (сегментах) |
Точки |
Все точки чертежа |
Линии |
Все линии чертежа |
Геоданные |
Строки ведомости геоданных |
Смежники |
Смежники участка |
Теодолитный ход |
Список точек из теодолитного хода (работает, если вызов печати произведен из утилиты "Теодолитный ход") |
Название переменной(короткое имя) |
Тип |
Назначение |
Без источника данных |
||
Масштаб(mas) |
Integer |
масштаб печати рисунка (который выбран в списке) |
Автор(author) |
String |
информация об авторских правах |
Версия(vers) |
String |
информация о версии Geozem |
Файл(file) |
String |
имя файла |
Размер_x (rx) |
Double |
размер чертежа по X |
Размер_y (ry) |
Double |
размер чертежа по Y |
Площадь_вся(allplh) |
Double |
сумма площадей всех участков |
База данных (работа с базой даных) |
||
Indbd |
Integer |
индекс базы данных, откуда была загрузка |
Namebd |
String |
название базы данных (короткое имя), откуда была загрузка |
Keybd |
Integer |
уникальный ключ загруженной записи |
Полигоны (Участки/Полигоны) |
||
Номер_полигона(np) |
Integer |
Номер полигона |
Название_полигона(nzp) |
String |
Название полигона |
Площадь(plh) |
Double |
Площадь текущего полигона |
Периметр(per) |
Double |
Периметр текущего полигона |
Сегменты полигона (многоконтурные полигоны) |
||
Номер_сегмента(ns) |
Integer |
Номер сегмента |
Площадь сегмента(plhsg) |
Integer |
Площадь сегмента |
Периметр_сегмента(persg) |
Integer |
Периметр сегмента |
Точки полигона (Точки в участках, сегментах) |
||
Название_точки(nzt) |
String |
Название текущей точки |
Название_сл_точки(nzt1) |
String |
Название следующей точки |
Длина(dln) |
Double |
Длина стороны |
Коорд_x (kx) |
Double |
Координата X текущей точки |
Коорд_y (ky) |
Double |
Координата Y текущей точки |
Номер(pnt) |
Integer |
Порядковый номер стороны |
Dirug(dirug) |
Double |
Дирекционный угол стороны (десятичный) |
Номер_точки (nt) |
Integer |
Номер текущей точки |
Номер_сл_точки(nt1) |
Integer |
Номер следующей точки |
Номер_пр_точки(nt2) |
Integer |
Номер предыдущей точки |
Лин_угол(ugl) |
String |
Угол между сторонами в текущей точке |
Приращ_x(dx) |
Double |
Приращение по координате X с текущей на следующую |
Приращ_y (dy) |
Double |
Приращение по координате Y с текущей на следующую |
Точки(все точки чертежа) |
||
Номер_точки(nt) |
Integer |
Порядковый номер точки |
Название_точки(nzt) |
Double |
Название текущей точки |
Коорд_x (kx) |
Double |
Координата X текущей точки |
Коорд_y (ky) |
Double |
Координата Y текущей точки |
Линии(все линии чертежа) |
||
Номер_линии(nl) |
Integer |
Порядковый номер линии |
Название_линии(nzl) |
Double |
Название текущей линии |
Номер_т1(nt1) |
Integer |
Номер 1 точки линии |
Номер_т2(nt2) |
Integer |
Номер 2 точки линии |
Геоданные(Ведомость геоданных) |
||
Геоданные_строка |
String |
Строка ведомости геоданных |
Смежники |
||
Смеж_т1(smj_t1) |
Integer |
Номер 1 точки границы смежника |
Смеж_т2(smj_t2) |
Integer |
Номер 2 точки границы смежника |
Смеж_кн(smj_np) |
String |
Кадастровый номер смежника |
Смеж_назв(smj_name) |
String |
Название смежника |
Теодолитный ход(Теодолитный ход) |
||
Nt |
Integer |
номер точки |
Ug |
Double |
измеренный угол в десятичном формате |
Dl |
Double |
измеренная длина |
Dx |
Double |
приращение по х |
Dy |
Double |
приращение по y |
Isug |
Double |
исправленный угол в десятичном формате |
Isdx |
Double |
исправленное приращение по х |
Isdy |
Double |
исправленное приращение по y |
Isx |
Double |
исправленное значение x |
Isy |
Double |
исправленное значение y |
Dirug |
Double |
дирекционный угол в десятичном формате |
Dirfirst |
Double |
начальный дирекционный угол в десятичном формате |
Dirlast |
Double |
конечный дирекционный угол в десятичном формате |
Fb |
Double |
угловая невязка в десятичном формате |
Fx |
Double |
невязка по x |
Fy |
Double |
невязка по y |
Fp |
Double |
абсолютная линейная невязка |
Fs |
Double |
относительная линейная невязка |
S |
Double |
периметр в м. |
P |
Double |
площадь в кв.м. |
Дополнительные переменные участка |
||
Владелец |
String |
Имя владельца |
Адрес |
String |
Адрес участка |
Вид_владения |
String |
Вид владения |
Целевое_назначение |
String |
Целевое назначение |
Категория_земель |
String |
Категория земель |
Кадастровый_номер |
String |
Кадастровый номер |
Смежники |
String |
Список смежников |
Примеры использования этих переменных и источников данных поставляются вместе с программой.
В состав поставки входят примеры отчетов:
- План участка;
- Описание земельных участков;
- Дежурная кадастровая карта;
- Экспорт ЕГРЗ – для создания текстового файла (экспорт координат участка в ЕГРЗ).
- Координаты все – создает текстовый файл, содержащий координаты всех точек;
- Выписка из межевого дела;
- Акт согласования границ;
- Оценка точности;
- Геоданные+рисунок;
- Геоданные;
- Рисунок A4;
- теод_ход_замкнутый – отчет о замкнутом теодолитном ходе;
- теод_ход_висячий – отчет о висячем теодолитном ходе.
Для формирования рисунка в отчетах применяются функции:
Рисование плана:
RisPlan(View: TFrxPictureView; wir: string=""; ms:double=-1)
Рисование плана с указанием центра:
RisPlanCXY(View:TFrxPictureView; CX,CY:double; wir:string=""; ms:double=-1)
Найти центр (x,y) и минимальный масштаб (mas):
GetXYM(View:TFrxPictureView; var x,y, mas:double):boolean
Вычислить минимальный масштаб для объекта с размерами (rx,ry):
CalcMinMas(View:TFrxPictureView; rx,ry:double):double
Нарисовать координатную сетку (центр в точке 0,0):
RisCell(View:TFrxPictureView; hag:double; tos_style:integer=-1; lin_style:integer=-1; tos_color:TColor=0; lin_color:TColor=0; tos_width:double=1; lin_width:double=1)
Нарисовать координатную сетку с указанием одного из узла сетки:
RisCellXY(View:TFrxPictureView; nx, ny:double; hag:double; tos_style:integer=-1; lin_style:integer=-1; tos_color:TColor=0; lin_color:TColor=0; tos_width:double=1; lin_width:double=1)
Вычислить координаты узла сетки:
GetCellXY(nX, nY:double; hag:double; iX, iY:integer; var eX, eY, X, Y):boolean;
Вычислить реальный размер (высоту) по размеру на рисунке:
CalcHeight(rz:double; mas:double):double
Вычислить реальный размер (ширину) по размеру на рисунке:
CalcWidth(rz:double; mas:double):double
Для работы этих функций необходимо задавать ссылку на объект-рисунок (View) типа TFrxPictureView из генератора отчетов FastReport.
При задании масштаба рисования (ms) можно задавать значения:
-1 – масштаб выбирается из списка (можно не указывать – по умолчанию);
0 – масштаб подгоняется под объект-рисунок;
>0 – значение масштаба 1:N (N=500, 1000, 2000 и т.д.);
Задание центра рисунка (CX, CY) – здесь указываются координаты, которые будут находится в центре рисунка.
Выражения для рисования (wir) представляют текстовую строку с выражениями, отвечающими за оформление:
Для этого в следующих строках пишутся строки выражений.
Для разделения типов выражений, впереди ставится обозначения:
-для точек "tos.", для фонового рисунка "pdltos.";
-для линий "lin.", для фонового рисунка "pdllin.";
-для полигонов "pol.", для фонового рисунка "pdlpol.";
-для текстов "txt.", для фонового рисунка "pdltxt.";
Эти выражения действуют только на формирование текущего рисунка, и после прорисовки, сбрасываются на исходные.
Процедуры рисования координатной сетки (RisCell, RisCellXY) нужно применять сразу поле процедуры рисования плана (RisPlan, RisPlanCXY).
В них задается:
- ссылка на объект-рисунок (View) типа TFrxPictureView
- шаг сетки (hag);
- стиль точки (tos_style) для обозначения пересечения сетки, -1 – точка не рисуется;
- стиль линии (lin_style) для обозначения линий сетки, -1 – линия не рисуется;
- цвет точки (tos_color);
- цвет линии (lin_color);
- размер точки (tos_width);
- толщина линии (lin_width);
- координаты центра узла сетки (nx, ny) для рисования произвольной сетки (без прохождения узла в точке 0,0);
Если нужно вычислить реальные размеры объекта-рисунка типа TFrxPictureView в плане, используются функции CalcHeight и CalcWidth:
- размер (ширина или высота) (rz);
- масштаб рисования (mas);
Очистка выражений для типа объекта:
Tos.Clear – очистка выражений для точек основного рисунка
Lin.Clear – очистка выражений для линий основного рисунка
Pol.Clear – очистка выражений для полигонов основного рисунка
Txt.Clear – очистка выражений для текстов основного рисунка
PdlTos.Clear – очистка выражений для точек фонового рисунка
PdlLin.Clear – очистка выражений для линий фонового рисунка
PdlPol.Clear – очистка выражений для полигонов фонового рисунка
PdlTxt.Clear – очистка выражений для текстов фонового рисунка
Очистка выражений для всех типов объектов:
Clear – очистка выражений для всех типов объектов основного рисунка
PdlClear – очистка выражений для всех типов объектов фонового рисунка
Управление видимостью:
VidOn – включить видимость основного рисунка.
VidOff – выключить видимость основного рисунка.
PdlVidOn – включить видимость фонового рисунка.
PdlVidOff – выключить видимость фонового рисунка.
Управление видимостью объектов:
Tos.VidOn – показать точки основного рисунка
Lin.VidOn –показать линии основного рисунка
Pol.VidOn – показать полигоны основного рисунка
Txt.VidOn – показать тексты основного рисунка
Tos.NVidOn – показать подписи точек основного рисунка
Lin.NVidOn – показать подписи линий основного рисунка
Pol.NVidOn – показать подписи полигонов фонового рисунка
Pol.NUVidOn – показать подписи углов полигонов фонового рисунка
PdlTos.VidOn – показать точки фонового рисунка
PdlLin.VidOn –показать линии фонового рисунка
PdlPol.VidOn – показать полигоны фонового рисунка
PdlTxt.VidOn – показать тексты фонового рисунка
PdlTos.NVidOn – показать подписи точек фонового рисунка
PdlLin.NVidOn – показать подписи линий фонового рисунка
PdlPol.NVidOn – показать подписи полигонов фонового рисунка
PdlPol.NUVidOn – показать подписи углов полигонов фонового рисунка
Выполнить скрипт
Можно задать выполнение скрипта перед печатью, в котором будет осуществляться модификация данных, управление видимостью объектов и подписей.
Execute - выполнить сприпт для основного чертежа
PdlExecute - выполнить сприпт для подложки
Формат установки: Execute=Func_name
Функция должна быть в формате: procedure Func_name(obj:TGZM_Layer); - в параметре задаётся ссылка на объект слоя.
Функции GetXYMиCalcMinMas предназначены для нахождения параметров рисования:
GetXYM- найти параметры плана – возвращает успешность операции. Ссылка на объект-картинку (View), возврат координат центра (x, y), возврат минимального масштаба (mas).
CalcMinMas- найти минимальный масштаб для объекта с размерами (rx, ry). Ссылка на объект-картинку (View).
Пример:
Зададим список выражений (wir):
Для удобства, на форму отчета поместим объект-Текст (TfrxMemoViev), присвоим свойству Visible значение False, что этот объект не показывался в отчете. Присвоим свойству Name значение PIC_VAL.
Редактируем свойство Memo – заносим следующие строки в редакторе текста:
tos.name=IF([n],("н"+STR([nomer])), [nztxt] ) tos.style=IF([nz]<0,IF([oldstyle]=0,257,[oldstyle]),0) tos.n=([nztxt]="") lin.n=(([t1.style]=256)or([t2.style]=256))and(([t1.style]<>0)and([t2.style]<>0)) lin.style=IF([n],2,0) pol.style=0 pol.name=IF(([kadnomer]=0),[S1], IF(([kadkwart]=0),[S3],[S2])) pol.S1=("#"+str([nomer])) pol.S2=(FormatFloat("0",[kadkwart])+":"+FormatFloat("0",[kadnomer])) pol.S3=("1:"+FormatFloat("0",[kadnomer])) pdllin.n=(([t1.style]=256)or([t2.style]=256))and(([t1.style]<>0)and([t2.style]<>0)) pdllin.style=IF([n],2,0) pdlpol.style=0
Сохраняем это свойство.
Помещаем на форму отчета объект-Рисунок (TfrxPictureViev), присвоим свойству Name значение PIC.
Активируем Рисунок, переходим на закладку События, щелкаем по событию OnBeforePrint и переходим в редактор скрипта, пишем:
procedurePICOnBeforePrint(Sender: TfrxComponent); begin RisPlan(PIC,PIC_VAL.memo.text); end;
Это означает, что рисунок формируется с применением выражений. Строка выражений не является обязательной – при ее отсутствии выражения будут по умолчанию, т.к. как в режиме просмотра. В этом случае можно просто написать:
RisPlan(PIC);
Список выражений можно формировать прямо в скрипте:
ST:="TOS.VID=0"+EOLN+"LIN.VID=0"+EOLN+"TXT.VID=0"+EOLN+"PDLVIDOFF"+EOLN; RisPlan(PIC,ST);
Функция EOLN вставляет признак перехода на другую строку. Написание строк выражений слитно без указания перехода на другую строку не допускается.
Можно модернизировать, рисовать с указанием масштаба:
RisPlan(PIC,PIC_VAL.memo.text,0);
В этом случае будет игнорироваться выбор масштаба в окне печати. Масштаб будет таким, чтобы рисунок полностью входил в объект-Рисунок c минимальным масштабом.
RisPlan(PIC,PIC_VAL.memo.text,1000);
В этом случае будет игнорироваться выбор масштаба в окне печати. Масштаб всегда будет 1:1000 вне зависимости от выбора.
Рисовать можно с явным указанием центра рисунка:
RisPlanCXY(PIC, 1000, 1000);
Здесь центр рисунка устанавливается в точке X=1000, Y=1000. Для работы с этой функцией нужно точно знать центр рисунка, в противном случае рисунок будет не виден – он просто не попадет в границы рисования.
Чтобы найти центр (x,y) и минимальный масштаб (mas) применяется функцияGetXYM(View:TFrxPictureView; var x,y, mas:double):Boolean:
Var
x, y, mas:double;
begin
GetXYM(PIC, x, y, mas);
//Рисуемплан
RisPlanCXY(PIC, X, Y, "",mas);
End;
После выполнения этого скрипта в переменных x, y будет содержаться координаты центра, в переменной mas-значение минимального масштаба.
Если известны размеры объекта по координатам x и y, то можно узнать минимальный масштаб, который необходим для рисования этого объекта. Используется функция CalcMinMas(View:TFrxPictureView; rx,ry:double):double:
Var
rx, ry, mas:double;
begin
rx:=100;
ry:=100;
mas:=CalcMinMas(PIC, rx, ry);
End;
После выполнения этого скрипта в переменной mas будет содержаться значение минимального масштаба для объекта с размерами по X: RX=100, по Y: КY=100.
Для рисования сетки, предназначены процедуры RisCell и RisCellXY, их нужно применять сразу после процедур рисования плана:
RisPlan(PIC,PIC_VAL.memo.text,0);
RisCell(PIC,100,-1,0,0,0);
Здесь рисуется план, затем поверх него рисуется сетка шагом
Если нужно вычислить реальные размеры объекта-рисунка типа TFrxPictureView в плане, используются функции CalcHeight и CalcWidth:
Высота объекта PIC при масштабе 1:1000:
RY:=CalcHeight(PIC.Height,1000)
Ширина объекта PIC при масштабе 1:1000:
RX:=CalcWidth(PIC.Width,1000)
Если нужно вычислить координаты узла сетки, используется функция GetCellXY:
M:=GetCellXY(0,0, 100, 0, 0, eX, eY, X, Y)
Здесь вычисляются экранные координаты (eX и eY), реальные координаты (X, Y), узла сетки (0, 0), с начальными координатами сетки (0, 0), шагом 100.
Функция возвращает признак попадания узла сетки на экранную область. Нумерация координат узлов сетки начинаются с 0, если задано значение -1, то по этой размерности вычисление не производится.
Функция UglStr формирует из десятичного значения угла строку формата ГГГ°ММ"CC":
[UglStr(
Функция UglRumb формирует из десятичного значения угла строку формата РР: ГГ.ММCC:
[UglRumb(
Если нужно, чтобы формат угла был вида ГГГ°ММ.М", тогда в отчете нужно вставить выражение (для дирекционного угла):
[IntToStr(Trunc(
Если формируется ведомость геоданных средствами Geozem (через источник данных "geodan") можно задавать выражение для формирования названий точек. Для этого в дизайнере отчетов в секции "Report Title" в каком-нибудь текстовом поле пишем функцию GEOCALC(s), где "s" - выражение для формирования названия точек.
Пример:
[GEOCALC("name=IF(([nztxt]=""""),(""н""+STR([nomer])),[nztxt])")]
Если требуется вставить название точек, линий, полигонов по выражению есть функции:
TOSCALC(n,s) – вычисляет название точки с номером (n), согласно строке для парсера (s).
LINCALC(n,s) – вычисляет название линии с номером (n), согласно строке для парсера (s).
POLCALC(n,s) – вычисляет название полигона с номером (n), согласно строке для парсера (s).
TXTCALC(n,s) – вычисляет название полигона с номером (n), согласно строке для парсера (s).
Пример:
[TOSCALC([номер_точки], "name=IF(([nztxt]=""""),(""н""+STR([nomer])),[nztxt])")]
[LINCALC([номер_линии], "name=IF(([nztxt]=""""),(""н""+STR([nomer])),[nztxt])")]
[POLCALC([номер_полигона], "name=IF(([nztxt]=""""),(""н""+STR([nomer])),[nztxt])")]
Если требуется в выражениях получить значение свойства объектов, то для этого применяются функции:
TOSVALUE(n, s) – возвращает значение свойства точки с номером (n), имя свойства (s).
LINVALUE(n, s) – возвращает значение свойства линии с номером (n), имя свойства (s).
POLVALUE(n, s) – возвращает значение свойства полигона с номером (n), имя свойства (s).
TXTVALUE(n, s) – возвращает значение свойства полигона с номером (n), имя свойства (s).
Пример:
[TOSVALUE([номер_точки], "x")] – получение свойства точкиX(координата)
[TOSVALUE([номер_точки], "tab.name")] - получение свойства точки в таблице с полем "NAME"
[LINVALUE([номер_линии], "t1")]– получение свойства линииT1 (номер первой точки в линии)
[LINVALUE([номер_линии], "tab.nztxt")] - получение свойства линии в таблице с полем "NZTXT"
[POLVALUE([номер_полигона], "plh")] - получение свойства полигонаPLH (площадь)
[POLVALUE([номер_полигона], "tab.kod")] - получение свойства полигона в таблице с полем "KOD"
Начиная с Geozem 6.30, используется новый генератор отчетов FastReport 3(4) вместо ранее используемого Freereport 2.33
Все формы отчётов созданные до выхода версии 6.30 несовместимы. Чтобы формы отчетов использовать в новой версии, необходимо их конвертировать или пересоздать вручную.
Порядок конвертации таков:
Подробнее о генераторе отчетов FastReport 3(4) можно узнать из руководства пользователя от разработчика –fastreport.chm, которую можно скачать с сайта Geozem.