Приклади робочих скриптів у звітових формах

Геодезична інформаційна система 6 та Геодезична інформаційна система 6 Агро

Модератори: NickS, feNICKs

feNICKs
Повідомлень: 412
З нами з: 13 січня 2012, 16:03
Контактна інформація:

Re: Примеры рабочих скриптов в отчётных формах

Повідомлення feNICKs » 27 липня 2012, 09:28

. Почему объект DrawGIS использует неправильный масштаб, во всяком случае размеры участка отличаются от тех, что получаются в пикчах WMF. Версия 6.1.4.5, винда ХР, SQL 2000?

Возможно Вы имели введу процедуру DrawWmf(...)? Данная процедура формирует рисунок на отчетной форме для объекта Picture из файла (\gis.wmf) в зависимости от введенных параметров(размеров) - высота, ширина, масштаб. Так что изображение самого файла не обязательно должно бить идентичным изображению на отчетной форме.

Можно ли провести диагональную линию в генераторе отчётов из кода по заведомо известным координатам?

Что Вы имеете введу под "по заведомо известным координатам"? Да, Вы можете через программный код задать нужные Вам параметры для рисовки диагональной линии, но они должны соответствовать стандартным параметрам данного объекта т.к. объект "Диагональная линия" - это стандартный объект FastReporta, а не GIS-кая. Чтоб нарисовать Диагональную линию, Вам нужно задать значение для полей Left и Width - где направления диагонали зависит от значение параметра Width относительно параметра Left (если значение со знаком "+" - направление нижний точки будет в правую сторону, а если "-" - в левую)

LeViK
Повідомлень: 63
З нами з: 25 січня 2012, 09:52
Звідки: BeerDyansk

Re: Примеры рабочих скриптов в отчётных формах

Повідомлення LeViK » 02 серпня 2012, 16:23

feNICKs писав:
. Почему объект DrawGIS использует неправильный масштаб?..

Возможно Вы имели введу процедуру DrawWmf(...)? .........не обязательно должно бить идентичным изображению на отчетной форме.

Разобрался, это на экран в после формирования отчёта выдавало вот такую вещь (наложеные на друг друга объекты Picture1 и DrawGis1 в одинаковых массштабах, http://www.fayloobmennik.net/2088934 Главное на бумагу вылазит один на одном, проверял. С DrawGis я бы вообще не работал, не будь он прозрачный, порой он выпендривается. При редактировании отчёта картинка вроде как улетает, но после сохранения изменений возвращается на новое место. Тут моя паника была преждевременной.
feNICKs писав:
Можно ли провести диагональную линию в генераторе отчётов из кода по заведомо известным координатам?

Что Вы имеете введу под "по заведомо известным координатам"? ...... Чтоб нарисовать Диагональную линию, Вам нужно задать значение для полей Left и Width - где направления диагонали зависит от значение параметра Width относительно параметра Left (если значение со знаком "+" - направление нижний точки будет в правую сторону, а если "-" - в левую)

спасибо, не усмотрел параметр [b\]Diagonal[b] а с координатами разберусь.

Аватар користувача
NoViChoK
Повідомлень: 140
З нами з: 10 вересня 2012, 18:09

Re: Примеры рабочих скриптов в отчётных формах

Повідомлення NoViChoK » 16 вересня 2012, 18:14

Здравствуйте. Как при нескольких отмеченых участках вытащить одельно по каждому целевое,адрес и площадь, чтобы получилось например так:
...для ведення особистого селянського господарства площею 0.12 га розташованої в с. ... вул. ....
...для будівницта та обслуговування господарських будівель та споруд площею 0.10 га. розташованої в с. .... вул. ...
И если можно ето прописать то обьясните пожалуйста код (вариант с бендами не подходит). Уж очень хочется во всём етом разобратся но без вашей помощи никак.

feNICKs
Повідомлень: 412
З нами з: 13 січня 2012, 16:03
Контактна інформація:

Re: Примеры рабочих скриптов в отчётных формах

Повідомлення feNICKs » 17 вересня 2012, 09:25

Здравствуйте!
Все это можно организовать в отчетных формах.

1. Сперва Вам необходимо в отчетной форме (в закладке "Код") организовать цикл по всем отмеченным участкам;
2. В теле цикла задать процедуры для отбора данных. ( _:\Books\Метод доступа до полей 5 и 6.pdf - наведены примеры программного кода для отбора данных)

Код: Виділити все


//-----> Для отмеченных участков

procedure Page1OnAfterPrint(Sender: TfrxComponent);
begin
  FilterData ('DM1.QbObject', '');
  LocateData ('DM1.QbObject', 'ID_Object', VarToStr(ID_Object));
end;
    //------------------------------------------------>

BEGIN
    ID_Object                := <DM1.QbObject."ID_Object">;  // Присваиваем текущий указатель
    FilterData('DM1.QbObject', 'OK = ''ю''');                         // Фильтруем по отмеченным

    //Проверяем сколько отмечено участков и есть ли такие

    If (RecordCount('DM1.QbObject') > 0) Then
    Begin
        If (RecordCount('DM1.QbObject') > 1) Then
            OneObject        := False;
        DataFirst('DM1.QbObject');
    End
    Else
    Begin
        FilterData('DM1.QbObject', '');                                                  //Снимаем фильтр
        LocateData('DM1.QbObject', 'ID_Object', VarToStr(ID_Object)); //Возвращаем указатель на место
    End;
    //------------------------------------------------>
    //-----> Цикл по отмеченным  (начало)
    Repeat
           
          //-----> Тело цикла
          //-----> Процедуры отбора данных (для примера)

//-----> Создаем список субъектов права для текущего зем.участка         
QuerySQL ('Select * From UserRec Where (ID_Object = ' + IntToStr(<DM1.QbObject."ID_Object">) + ') And (DateFirst <= GETDATE()) And (DateLast Is Null Or DateLast > GETDATE()) Order By ID_People, ID_Firm');
      DataFirst('DM1.QuerySQL');
      // в цикле делаем отбор данных
      While (DataEOF('DM1.QuerySQL') = False) Do
      Begin
          // 1. Отбор целевого назначение
          IF (LocateData( 'DM2.TbUses', 'ID_Uses',  GetValue('DM1.QuerySQL', 'ID_Uses'))) Then
             IF (RecordCount('DM2.TbUsesLnk') > 0) Then
                 IF (LocateData( 'DM2.TbTypeUse', 'ID_TypeUse', GetValue('DM2.TbUsesLnk', 'ID_TypeUse')) = True) And (Pos(Lowercase(<DM2.TbTypeUse."Name">), FunkName) = 0) Then
                 Begin
                    IF (Length(Trim(FunkName)) > 0) Then
                        FunkName   := FunkName + ' та ';
                    FunkName       := FunkName + Lowercase(<DM2.TbTypeUse."Name">);
                  End;
         DataNext('DM1.QuerySQL');
      End;
    //------------------------------------------------>

   // 2. Отбор площади земельного участка
       ObjectArea  := IIf(<DM1.QbObject."Area_Type"> = 1,  FormatFloat('0.0000',<DM1.QbObject."Area">/10000),  FloatToStr(<DM1.QbObject."Area">)+' кв.м.')

   // 3. Отбор адреса земельного участка     
   ObjectAddress  := <DM1.QbObject."Address">;


   //------------------------------------------------>
   
   //-----> Цикл по отмеченным  (условие для перехода на след. запись/Выход из тела цикла)
   If (OneObject = False) Then
           DataNext('DM1.QbObject');

    Until (DataEOF('DM1.QbObject') = True) or OneObject;
    //------------------------------------------------>
END.

Аватар користувача
NoViChoK
Повідомлень: 140
З нами з: 10 вересня 2012, 18:09

Re: Примеры рабочих скриптов в отчётных формах

Повідомлення NoViChoK » 17 вересня 2012, 12:25

Наскільки я зрозумів тепер після

//-----> Цикл по отмеченным (условие для перехода на след. запись/Выход из тела цикла)
If (OneObject = False) Then
DataNext('DM1.QbObject');

мені потрібно вставити код на відбір інформації з наступної поміченої ділянки, тобто, наприклад:

ObjectArea := IIf(<DM1.QbObject."Area_Type"> = 1, FormatFloat('0.0000',<DM1.QbObject."Area">/10000), FloatToStr(<DM1.QbObject."Area">)+' кв.м.')

Я правильно зрозумів?

І ще питання, що означає помилка: 'UNTIL'expected ? Як її виправити?

feNICKs
Повідомлень: 412
З нами з: 13 січня 2012, 16:03
Контактна інформація:

Re: Примеры рабочих скриптов в отчётных формах

Повідомлення feNICKs » 17 вересня 2012, 15:31

Конструкция цикла repeat:
repeat
<Операторы>
until <Условие>;

где <Условие> — любое логическое выражение.
<Операторы> — любые операторы.

В Вашем случаи:
<Операторы> - это процедуры для отбора нужных данных: целевое назначение, площадь зем.участка, адрес зем.участка;
<Условие> - пока не достигнут конец списка, выполняется тело цикла.

'UNTIL'expected ? Як її виправити?
Скорей всего, Вы не указали условие выполнения цикла.
В пред.ответе я навел пример части программного кода в котором организован цикл по отмеченным участкам и процедуры для отбора данных (см. комментарии).
Скопируйте данный код в основное тело отчетной формы (Begin <Циклы>, <Операторы> и< т.д.> End.), подключите нужные таблицы БД (Меню Отчет/Данные/.../Ок), определите нужные параметры (Var ).

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

kaminski_v
Повідомлень: 17
З нами з: 06 вересня 2012, 14:29

Re: Предложения по усовершенствованию GIS6

Повідомлення kaminski_v » 13 жовтня 2012, 13:55

А как бы сделать чтоб выводить на печать группу участков (сводный план) и рядом в таблице список собственников?

Аватар користувача
NickS
Повідомлень: 1393
З нами з: 04 квітня 2008, 12:21

Re: Предложения по усовершенствованию GIS6

Повідомлення NickS » 15 жовтня 2012, 09:47

kaminski_v писав:А как бы сделать чтоб выводить на печать группу участков (сводный план) и рядом в таблице список собственников?

Всё можно, используя методы FastReport. Надо либо через бенды перебирать участки и потом sql-запросом вытягивать их собственников, либо несколькими sql-запросами и перебирать их в цикле. Описать несколькими предложениями это всё невозможно. К тому же это ещё будет зависеть от оформления и набора информации, которую хочется напечатать. Потому либо постепенно с этим всем разбираться, либо заказать отчётную форму.

Аватар користувача
NoViChoK
Повідомлень: 140
З нами з: 10 вересня 2012, 18:09

Re: Примеры рабочих скриптов в отчётных формах

Повідомлення NoViChoK » 19 жовтня 2012, 20:17

Допоможіть з кодом. Потрібно ось що: наприклад - є дві ділянки. Одна знаходиться за адоесою: Житомирська область Коростишівський район с.Кмитів вул. Жовтнева 55, а друга ділянка - Житомирська область Коростишівський район с.Кмитів тобто якийсь город десь на території села...Як написати код щоб якщо вулиця однієї ділянки прописана а іншої ні то писало так: ділянки знаходятся за адресою Житомирська область Коростишівський район с.Кмитів вул. Жовтнева 55 та на території Кмитівської сільської ради.

kaminski_v
Повідомлень: 17
З нами з: 06 вересня 2012, 14:29

Re: Предложения по усовершенствованию GIS6

Повідомлення kaminski_v » 21 жовтня 2012, 14:18

NickS писав:
kaminski_v писав:А как бы сделать чтоб выводить на печать группу участков (сводный план) и рядом в таблице список собственников?

Всё можно, используя методы FastReport. Надо либо через бенды перебирать участки и потом sql-запросом вытягивать их собственников, либо несколькими sql-запросами и перебирать их в цикле. Описать несколькими предложениями это всё невозможно. К тому же это ещё будет зависеть от оформления и набора информации, которую хочется напечатать. Потому либо постепенно с этим всем разбираться, либо заказать отчётную форму.

Насчёт заказать отчётную форму: как это сделать?