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

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

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

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

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

Повідомлення feNICKs » 22 жовтня 2012, 09:01

Вам необходимо связаться с нашей службой тех.поддержки http://www.shels.ru/contact.htm т.к. стоимость заказа зависит от объема, сложности формирования выборки данных и содержания отчетной формы.

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

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

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

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

Я так розумію мова йде про шаблон, який повинен виводити інформацію по відміченим ділянкам? І в даному випадку є дві відмічені, вірно? Спочатку потрібно більш детальніше продумати алгоритм:
1. Ділянки відмічаються лише в даній раді?
2. Вулиці ставляться лише як "вул."?
3. Чи може краще орієнтуватись по заповненим полям "вулиця", "номер будинку"?
4. Відмічаються лише дві ділянки чи може бути більше?
Від варіантів відповідей буде залежати код.

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

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

Повідомлення NoViChoK » 22 жовтня 2012, 12:02

Ділянки відмічаються лише у даній раді. Так, напевно краще орієнтуватись на заповнені поля "вулиця та "будинок". Ділянок може бути більше.

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

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

Повідомлення feNICKs » 22 жовтня 2012, 13:33

Ділянки відмічаються лише у даній раді. Так, напевно краще орієнтуватись на заповнені поля "вулиця та "будинок". Ділянок може бути більше.

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

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

Var
    City, Street, StreetTo, Address, Numb_House, Territory  : String;
    ID_Object : Byte;
    OneObject : Boolean;

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;
    //------------------------------------------------>
     SeekIKN(<DM1.QbObject."IKN">);
     Territory         := 'на території '; // Місцезнаходження зем.ділянки

   //Рада
   If Length(Name_Advice) > 0 then
   begin
     If Pos('ька ', Name_Advice) > 0 then
       If Pos('сільська', Name_Advice) > 0 then
         Territory   := Territory + Copy(Name_Advice, 1, Pos('ька ', Name_Advice)) + 'кої сільської ради '
       else
         If Pos('міська', Name_Advice) > 0 then
           Territory := Territory + Copy(Name_Advice, 1, Pos('ька ', Name_Advice)) + 'кої міської ради '
         else
           If Pos('селищна', Name_Advice) > 0 then
              Territory := Territory + Copy(Name_Advice, 1, Pos('ька ', Name_Advice)) + 'кої селищної ради '
           else
              Territory := Territory + Name_Advice + ' '
     else
       Territory     := Territory + Name_Advice + ' ';
   end;

   //Район
   If (Length(Name_Region) > 0) Then
   begin
     If (Pos('ький ', Name_Region) > 0) Then
        Territory    := Territory + Copy(Name_Region, 1, Pos('ький ', Name_Region)) + 'кого району '
     else
       If (Pos('ний ', Name_Region) > 0) Then
         Territory   := Territory + Copy(Name_Region, 1, Pos('ний ', Name_Region)) + 'ного району '
       else
         Territory   := Territory + Name_Region + ' ';
   end;

   //Область
   If (Length(Name_Area) > 0) then
   begin
     If (Pos('ька ', Name_Area) > 0) then
       Territory     := Territory + Copy(Name_Area, 1, Pos('ька ', Name_Area)) + 'кої області '
     else
       Territory     := Territory + Name_Area + ' ';
   end;

   // Удаление запятой с пробелом в конце строки
   If Length(Trim(Territory)) > 1 then
     Territory       := Copy(Territory, 1, LENGTH(Territory)-1);
    //------------------------------------------------>

    //-----> Цикл по відміченим (формування адреси)
    Repeat
         SeekIKN(<DM1.QbObject."IKN">);

         //Населений пункт
        If (Length(Name_Place) > 0)  And ((Pos( 'м.', Name_Place) > 0) Or (Pos( 'с.', Name_Place) > 0) Or (Pos( 'смт',Name_Place) > 0) Or (Pos( 'c-', Name_Place) > 0)) Then
            City                := Name_Place;
        // Назва вулиці
    //    Street                  := SeekStreet(<DM1.QbObject."ID_Street">);
        Query('Select S.* From Street S Where S.ID_Street='+IntToStr(<DM1.QbObject."ID_Street">));

        If (RecordCount('DM1.Query')>0) Then
        Begin
        If(LocateData('DM2.TbTypeStreet','ID_TypeStreet', GetValue('DM1.Query','ID_TypeStreet'))) Then
           Street := GetValue('DM2.TbTypeStreet','NameSmall');

        IF (GetValue('DM1.Query','NameWhom') <> Null) Then
            Street          := Street +  GetValue('DM1.Query','NameWhom')
        Else
            Street          := Street +  GetValue('DM1.Query','NameStreet');
        End;
        // Номер вулиці/будинку
        Numb_House              := <DM1.QbObject."Num_House">;

        //Якщо зем.ділянка в нас.пункті

        IF (<DM1.QbObject."ID_TypeLocation"> = 0) Then
        Begin
           // Адреса зем.ділянки
           IF (Length(Address) = 0) Then
           Begin
              Address := Address + ' в ' +City;
              Address := Address + ' по ' +Street;
              Address := Address + IIF(Length(Numb_House)>0,', '+ Numb_House, '');
           End
           Else
           Begin
              IF (Pos(City,Address)=0) Then
              Begin
                 Address := Address + ' та в ' +City;

                IF (Pos(Street,Address)=0) Then
                   Address := Address + ' по ' +Street;
              End;

              IF (Pos(Street,Address)=0) Then
                  Address := Address + ' та по ' +Street;

              IF (Pos(Numb_House,Address)=0) Then
              Address := Address + IIF(Length(Numb_House)>0,', '+ Numb_House, '');
           End;
        End
        Else
        // якщо за межами населенного пункта
        Begin
            IF (Length(Address) = 0) Then
               Address := Territory
            Else
               Address := Address + ' та ' + Territory;
        End;

If (OneObject = False) Then
           DataNext('DM1.QbObject');
    Until (DataEOF('DM1.QbObject') = True) or OneObject;

End.

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

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

Повідомлення NoViChoK » 29 жовтня 2012, 13:23

Допоможіть ще раз будьласка :)
Хочу щоб в кадастровому плані автоматично прописувало сільску раду та П.І.Б. голови, тобто так:

"Погоджено"
Голова Синявської сільської ради______________П.І. Лавський

Як реалізувати це за допомогою коду? Які дані треба підключити? (використовую шаблон fr3)

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

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

Повідомлення NickS » 29 жовтня 2012, 13:56

NoViChoK писав:Допоможіть ще раз будьласка :)
Хочу щоб в кадастровому плані автоматично прописувало сільску раду та П.І.Б. голови, тобто так:

"Погоджено"
Голова Синявської сільської ради______________П.І. Лавський

Як реалізувати це за допомогою коду? Які дані треба підключити? (використовую шаблон fr3)


Код:

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

  RdaFirmKogo := ''; //Название территориального органа (кого?)
  RdaPostPred := ''; //Должность представителя территориального органа
  RdaFIOPred  := ''; //ФИО представителя территориального органа

  If (RecordCount('DM1.QiGosakt') > 0) then
  begin
    If (<DM1.QiGosAkt."Dec_Firm"> > 0) And LOCATEDATA( 'DM1.QbFirm', 'ID_Firm', <DM1.QiGosAkt."Dec_Firm">) Then
      If LocateData('DM1.TbWorking', 'ID_People', <DM1.QiGosAkt."Dec_People">) = true then
      begin
         RdaFirmKogo := <DM1.QbFirm."Name_Whom">;

         If LocateData('DM2.TbTypeWorking', 'ID_TypeWorking', <DM1.TbWorking."ID_TypeWorking">)= true then
           RdaPostPred := Trim(<DM2.TbTypeWorking."Name">);

         If LocateData('DM1.QbPeople', 'ID_People', <DM1.TbWorking."ID_People">)= true then
           RdaFIOPred := <DM1.QbPeople."Family">;
      end;
  end
  else
  begin
     RdaFirmKogo := Rda_Firm_Whom;
     RdaPostPred := Rda_Post;
     RdaFIOPred  := Rda_People;
  end;


Описуємо змінні:

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

RdaFirmKogo, RdaPostPred, RdaFIOPred : string;


Підключаємо таблиці: DM1.QbPeople, DM1.QbFirm, DM1.TbWorking, DM2.TbTypeWorking, DM1.QiGosAkt

В тексті посада: [UpperFirst(RdaPostPred)] [RdaFirmKogo]
ФІО: [ShortFamily(RdaFIOPred)]

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

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

Повідомлення NoViChoK » 02 листопада 2012, 15:50

Скажіть будьласка, в чому може бути причина? Для формування адреси в шаблонах використовую даний код:

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

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;
    //------------------------------------------------>
     SeekIKN(<DM1.QbObject."IKN">);
     Territory         := 'на території '; // Місцезнаходження зем.ділянки

   //Рада
   If Length(Name_Advice) > 0 then
   begin
     If Pos('ька ', Name_Advice) > 0 then
       If Pos('сільська', Name_Advice) > 0 then
         Territory   := Territory + Copy(Name_Advice, 1, Pos('ька ', Name_Advice)) + 'кої сільської ради '
       else
         If Pos('міська', Name_Advice) > 0 then
           Territory := Territory + Copy(Name_Advice, 1, Pos('ька ', Name_Advice)) + 'кої міської ради '
         else
           If Pos('селищна', Name_Advice) > 0 then
              Territory := Territory + Copy(Name_Advice, 1, Pos('ька ', Name_Advice)) + 'кої селищної ради '
           else
              Territory := Territory + Name_Advice + ' '
     else
       Territory     := Territory + Name_Advice + ' ';
   end;

   //Район
   If (Length(Name_Region) > 0) Then
   begin
     If (Pos('ький ', Name_Region) > 0) Then
        Territory    := Territory + Copy(Name_Region, 1, Pos('ький ', Name_Region)) + 'кого району '
     else
       If (Pos('ний ', Name_Region) > 0) Then
         Territory   := Territory + Copy(Name_Region, 1, Pos('ний ', Name_Region)) + 'ного району '
       else
         Territory   := Territory + Name_Region + ' ';
   end;

   //Область
   If (Length(Name_Area) > 0) then
   begin
     If (Pos('ька ', Name_Area) > 0) then
       Territory     := Territory + Copy(Name_Area, 1, Pos('ька ', Name_Area)) + 'кої області '
     else
       Territory     := Territory + Name_Area + ' ';
   end;

   // Удаление запятой с пробелом в конце строки
   If Length(Trim(Territory)) > 1 then
     Territory       := Copy(Territory, 1, LENGTH(Territory)-1);
    //------------------------------------------------>

    //-----> Цикл по відміченим (формування адреси)
    Repeat
         SeekIKN(<DM1.QbObject."IKN">);

         //Населений пункт
        If (Length(Name_Place) > 0)  And ((Pos( 'м.', Name_Place) > 0) Or (Pos( 'с.', Name_Place) > 0) Or (Pos( 'смт',Name_Place) > 0) Or (Pos( 'c-', Name_Place) > 0)) Then
            City                := Name_Place;
        // Назва вулиці
    //    Street                  := SeekStreet(<DM1.QbObject."ID_Street">);
        Query('Select S.* From Street S Where S.ID_Street='+IntToStr(<DM1.QbObject."ID_Street">));

        If (RecordCount('DM1.Query')>0) Then
        Begin
        If(LocateData('DM2.TbTypeStreet','ID_TypeStreet', GetValue('DM1.Query','ID_TypeStreet'))) Then
           Street := GetValue('DM2.TbTypeStreet','NameSmall');

        IF (GetValue('DM1.Query','NameWhom') <> Null) Then
            Street          := Street +  GetValue('DM1.Query','NameWhom')
        Else
            Street          := Street +  GetValue('DM1.Query','NameStreet');
        End;
        // Номер вулиці/будинку
        Numb_House              := <DM1.QbObject."Num_House">;

        //Якщо зем.ділянка в нас.пункті

        IF (<DM1.QbObject."ID_TypeLocation"> = 0) Then
        Begin
           // Адреса зем.ділянки
           IF (Length(Address) = 0) Then
           Begin
              Address := Address + ' в ' +City;
              Address := Address + ' по ' +Street;
              Address := Address + IIF(Length(Numb_House)>0,', '+ Numb_House, '');
           End
           Else
           Begin
              IF (Pos(City,Address)=0) Then
              Begin
                 Address := Address + ' та в ' +City;

                IF (Pos(Street,Address)=0) Then
                   Address := Address + ' по ' +Street;
              End;

              IF (Pos(Street,Address)=0) Then
                  Address := Address + ' та по ' +Street;

              IF (Pos(Numb_House,Address)=0) Then
              Address := Address + IIF(Length(Numb_House)>0,', '+ Numb_House, '');
           End;
        End
        Else
        // якщо за межами населенного пункта
        Begin
            IF (Length(Address) = 0) Then
               Address := Territory
            Else
               Address := Address + ' та ' + Territory;
        End;

If (OneObject = False) Then
           DataNext('DM1.QbObject');
    Until (DataEOF('DM1.QbObject') = True) or OneObject;

End.


Але він чомусь не відображає назву вулиці, хоча номер будинку відображає, тобто: при вводі [Address] відображає так - "...в с. Синявка по вул.,21". Якщо ввести [Street ] то - "вул."
В чому може бути причина? (ну дані по земельній ділянці звісно заповнені).

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

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

Повідомлення NickS » 02 листопада 2012, 16:33

NoViChoK писав:Але він чомусь не відображає назву вулиці, хоча номер будинку відображає, тобто: при вводі [Address] відображає так - "...в с. Синявка по вул.,21". Якщо ввести [Street ] то - "вул."
В чому може бути причина? (ну дані по земельній ділянці звісно заповнені).

Через оцей шмат коду:

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

        IF (GetValue('DM1.Query','NameWhom') <> Null) Then
            Street          := Street +  GetValue('DM1.Query','NameWhom')
        Else
            Street          := Street +  GetValue('DM1.Query','NameStreet');

Тут говориться про те, що якщо існує поле з відміненою (кого?) вулицею, то воно вставляє її, якщо ні, то вставляє без відмінка. Треба або прибрати відмінок, бо я сумніваюсь, що Ви записуєте відмінок вулиці:

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

      Street          := Street +  GetValue('DM1.Query','NameStreet');

Або переробити на іншу перевірку:

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

        IF (Length(Trim(GetValue('DM1.Query','NameWhom'))) > 0) Then
            Street          := Street +  GetValue('DM1.Query','NameWhom')
        Else
            Street          := Street +  GetValue('DM1.Query','NameStreet');

NTD
Повідомлень: 26
З нами з: 23 липня 2008, 10:29

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

Повідомлення NTD » 06 листопада 2012, 09:22

Подскажите как распечатать характеристику земельного участка по агрогруппам в табличной форме: 1. Наименование агрогруппы, 2. Площадь, 3. Денежная оценка агрогруппы.

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

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

Повідомлення NickS » 06 листопада 2012, 12:19

NTD писав:Подскажите как распечатать характеристику земельного участка по агрогруппам в табличной форме: 1. Наименование агрогруппы, 2. Площадь, 3. Денежная оценка агрогруппы.

Для начала надо подключить таблицу DM1.TbAgro, потом создать бэнд (MasterData) и установить источником эту таблицу. На бенд кинуть поля:
1 - [DM1.TbAgro."Name"]
2 - [DM1.TbAgro."Area"] (оформить по желанию)
3 - [DM1.TbAgro."Cost"]