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

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

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

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

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

Повідомлення NoViChoK » 09 жовтня 2014, 12:07

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

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

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

Повідомлення NickS » 09 жовтня 2014, 12:26

NoViChoK писав:Здравствуйте! А что нужно в коде прописать чтобы автоматически отключался показ стрелок и обозначений смежеств (по аналогии с слоями) ?

Если Вы умете пользоваться включением/отключением слоёв, то и для меню "Отображение" проблем не должно возникнуть.
Для этого надо использовать функцию VisibleGisMenu(<Название>,<Отображение>), где
<Отображение> - true - включено, false - отключено
<Название> - название пункта меню.
Для смежеств:
ShowOMLine - Стрелок смежества
ShowOMLitera - Обозначений смежества
ShowOMColor - Смежества цветом
ShowOMCad - Кадастровых номеров
ShowOMMej - Описаний смежества
ShowOMName - Наименований смежества
Более детальный список названий есть в файле "_Описание переменных.txt" (в папке с программой)

Например, чтобы отключить показ стрелок смежеств, надо выполнить такую команду:

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

VisibleGisMenu('ShowOMLine', false);

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

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

Повідомлення NoViChoK » 11 лютого 2015, 11:20

Що потрібно змінити чи додати в коді:

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

procedure Picture1OnBeforePrint(Sender: TfrxComponent);
begin
   with Picture1, Engine do
   begin
      VisibleGisLayer(0, true);   // участок
      VisibleGisLayer(1, true);   // план
      VisibleGisLayer(2, false);   // агрогруппы
      VisibleGisLayer(3, false);   // таблица расчётов
      VisibleGisLayer(4, true);   // обозначения
      VisibleGisLayer(5, false);   // ситуация
      VisibleGisLayer(6, true);   // чертёж
      VisibleGisLayer(7, false);   // каталог координат
      VisibleGisLayer(8, true);   // горизонтали
      VisibleGisLayer(9, true);   // оформление
      VisibleGisLayer(10, false);  // общий
      VisibleGisLayer(11, true);  // сервитуты
      VisibleGisLayer(12, true);  // ограничения
      VisibleGisLayer(13, true);  // аренда
      VisibleGisLayer(14, false);  // теодолитный ход
      VisibleGisLayer(15, true);  // карта
      VisibleGisLayer(16, false);  // проектные дороги
      VisibleGisLayer(17, false);  // сторонние земли
      VisibleGisLayer(18, false);  // секущая линия

      DrawWmf(Width * 100 /3.77953, Height * 100 /3.77953, 0);
      Loadfromfile( StartPath +'\gis.wmf');
   end;
end;


щоб масштабувати картинку ? Не обов'язково на якесь точне значення масштабу (хоча якщо можливо, то не завадить), потрібно мати можливість зменшити/збільшити (не розміри, а масштаб) напрклад в 2 чи 3 рази.

P.S. Виставити масштаб у вікні "камеральні функції" не пропонувати. Потрібно саме в коді.

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

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

Повідомлення feNICKs » 11 лютого 2015, 16:04

DRAWWMF(<Длинна>,<Высота>,<Масштаб>) - Выполняет формирование рисунка для активного земельного участка

Если <Масштаб> = 0, берется масштаб с Камералки.

есть переменная Scale() - она возвращает масштаб с камералки. Умножаете эту переменную на нужное число чтоб уменьшить картинку (увеличить масштаб).

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

DrawWmf(Width * 100 /3.77953, Height * 100 /3.77953, Scale()*2);


Само число можно вводить например с диалог.окна:

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

DrawWmf(Width * 100 /3.77953, Height * 100 /3.77953, Scale()*IntToStr( Edit1.Text));

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

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

Повідомлення NoViChoK » 11 лютого 2015, 16:19

Использую этот код:

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

DrawWmf(Width * 100 /3.77953, Height * 100 /3.77953, Scale()*2);

Пишет: "несумісні типи"

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

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

Повідомлення feNICKs » 11 лютого 2015, 17:49

Я пропустил один параметр, исправьте на StrToInt(Scale())*2

Eltar
Повідомлень: 5
З нами з: 28 березня 2015, 21:17

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

Повідомлення Eltar » 28 березня 2015, 22:19

Здравствуйте!
Помогите пожалуйста! Очень надо!

За сегодня добился от FastReport в GIS 6 примерно такого результата:

- <u>типу 01.05</u> - охоронна зона навколо (вздовж) об'єкта енергетичної системи на площі <b>0.0618 га</b> (підставою для проектування обмеження є Постанова Кабінету Міністрів України від 04.03.97 № 209 "Про затвердження Правил охорони електричних мереж") - кабельна мережа;
- <u>типу 01.05</u> - охоронна зона навколо (вздовж) об'єкта енергетичної системи на площі <b>0.0146 га</b> (підставою для проектування обмеження є Постанова Кабінету Міністрів України від 04.03.97 № 209 "Про затвердження Правил охорони електричних мереж") - кабельна мережа;
- <u>типу 01.05</u> - охоронна зона навколо (вздовж) об'єкта енергетичної системи на площі <b>0.0217 га</b> (підставою для проектування обмеження є Постанова Кабінету Міністрів України від 04.03.97 № 209 "Про затвердження Правил охорони електричних мереж") кабельна мережа;
- <u>типу 01.05</u> - охоронна зона навколо (вздовж) об'єкта енергетичної системи на площі <b>0.0217 га</b> (підставою для проектування обмеження є Постанова Кабінету Міністрів України від 04.03.97 № 209 "Про затвердження Правил охорони електричних мереж") кабельна мережа;
- <u>типу 01.08</u> - охоронна зона навколо інженерних комунікацій на площі <b>2.7392 га</b> (підставою для проектування обмеження є Постанова 355 від 02.10.1986, Рада міністрів Української РСР) - каналізація;
- <u>типу 01.08</u> - охоронна зона навколо інженерних комунікацій на площі <b>0.0023 га</b> (підставою для проектування обмеження є Постанова Кабінету Міністрів України від 30.03.94 № 198 "Про затвердження Єдиних правил ремонту і утримання автомобільних доріг, вулиць, залізничних переїздів, правил користування ними та охорони") - тепломережа;
- <u>типу 01.08</u> - охоронна зона навколо інженерних комунікацій на площі <b>0.0023 га</b> (підставою для проектування обмеження є Постанова Кабінету Міністрів України від 30.03.94 № 198 "Про затвердження Єдиних правил ремонту і утримання автомобільних доріг, вулиць, залізничних переїздів, правил користування ними та охорони") - тепломережа;


необходимо сделать так, чтобы типы ограничений не повторялись, а площади складывались. Чтобы вследствии вышло
- <u>типу 01.05</u> - охоронна зона навколо (вздовж) об'єкта енергетичної системи загальною площею <b>0.1198 га</b> (підставою для проектування обмеження є Постанова Кабінету Міністрів України від 04.03.97 № 209 "Про затвердження Правил охорони електричних мереж") кабельна мережа;
- <u>типу 01.08</u> - охоронна зона навколо інженерних комунікацій на площі <b>2.7392 га</b> (підставою для проектування обмеження є Постанова 355 від 02.10.1986, Рада міністрів Української РСР) - каналізація;
- <u>типу 01.08</u> - охоронна зона навколо інженерних комунікацій на площі <b>0.0046 га</b> (підставою для проектування обмеження є Постанова Кабінету Міністрів України від 30.03.94 № 198 "Про затвердження Єдиних правил ремонту і утримання автомобільних доріг, вулиць, залізничних переїздів, правил користування ними та охорони") - тепломережа;

Подскажите КАК это сделать?? :?

Применял вот этот код:

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

Var NumberOfLim, NameOfLim, DecisionName, AreaOFLim,
Summa, Summa1, Summa2, Summa3, Summa4, Obmejennya, sStr :string;

iObmej :integer;

begin

//=================================================================================================
//   ќ√–јЌ»„≈Ќ»я
  //-----------------------------------------------------------------------------------------------
  // Описание ограничений

  Lim.SQL.Text := 'Select TR.*,D.Name DName,L.Area LArea From Limination L, Decision D, TypeRestrict TR Where L.ID_Object = ' +
                   IntToStr(<DM1.QbObject."ID_Object">) + ' and L.ID_Decision = D.ID_Decision and ' +
                   'L.ID_TypeRestrict = TR.ID_TypeRestrict order by TR.Number asc';
  Lim.Open;

  //---------------------------------------------------------------------------------------------------


// String + мемо ограничений
     begin
       Lim.First;

       While Lim.EOF = false do
        begin
           NumberOfLim := <Lim."Number">;
           NameOfLim   := LowerFirst(<Lim."Name">);
           DecisionName  := <Lim."DName">;
           AreaOFLim     := (FormatFloat( fdLandAreaG, <Lim."LArea"> /10000)) + ' га';
           Summa1 := ' - <u>типу ' + NumberOfLim;
           Summa2 := Summa1 + '</u> - ' + NameOfLim;
           Summa3 := Summa2 + ' на площі <b>' + AreaOfLim;
           Summa4 := Summa3 + '</b> (підставою для проектуванн¤ обмеження є ' + DecisionName + ');';
           Summa  := Summa + Summa4;
         Lim.Next;
        end;
     Obmejennya := Summa;


 MemoObmej.Lines.Clear;
   While Length( Summa) > 0 Do
   Begin
      If Pos( ';', Summa) > 0 Then
         Begin
            sStr := Trim( Copy( Summa, 1, Pos( ';', Summa)));
            Summa := Trim( Copy( Summa, Pos( ';', Summa) +1, Length( Summa) -Pos( ';', Summa)));
         End
      Else
         Begin
            sStr := Trim( Summa);
            Summa := '';
         End;

      iObmej := iObmej +1;
      MemoObmej.Lines.Add( sStr);
   End;
 end;
//==================================================================================================
end.


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

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

Повідомлення feNICKs » 30 березня 2015, 09:56

Я бы сделал SQL-запрос для выборки минимального набора данных: общая площадь, код типа ограничений и решения, а потом в цикле или в бендэ выполнил перебор объекта Lim (привязав к бенду и закинув код в обработчик событий OnBeforePrint).

На примере.

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

Var
   Decision, LName: String;

// перебор в бендэ
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
    Decision := '';
    LName := '';

    If LocateData( 'DM1.QbDecision', 'ID_Decision', <Lim."ID_Decision">) Then
       Decision := <DM1.QbDecision."Name"> + DateWriteFull( <DM1.QbDecision."Dec_Date">, True, False, True) + ' № ' + <DM1.QbDecision."Dec_Num">;

    If LocateData( 'DM2.TbTypeRestrict', 'ID_TypeRestrict', <Lim."ID_TypeRestrict">) Then
       LName := '- <u>типу'+ <DM2.TbTypeRestrict."Number"> +'</u> - '+<DM2.TbTypeRestrict."Name"> +' на площі <b>' +FormatFloat( '0.0000', <Lim."LArea">/10000)+' га</b>';                               
end;

// основное тело формы
begin
//-----------------------------------------------------------------------------------------------
  // Описание ограничений

Lim.SQL.Text :=  'Select Sum( L.Area) LArea, TR.ID_TypeRestrict, L.ID_Decision '+
                          'From Limination L, TypeRestrict TR ' +
                          'Where L.ID_Object = '+ IntToStr(<DM1.QbObject."ID_Object">)+' and '+
                          'L.ID_TypeRestrict = TR.ID_TypeRestrict '+
                          'Group By TR.ID_TypeRestrict, L.ID_Decision ' +
                          'Order by TR.ID_TypeRestrict ASC';
  Lim.Open;

  //---------------------------------------------------------------------------------------------------
end.



А в бендэ добавляете текстовое поле и в нем выводите Ваши переменные Decision LName.

Eltar
Повідомлень: 5
З нами з: 28 березня 2015, 21:17

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

Повідомлення Eltar » 09 квітня 2015, 13:31

Спасибо за ответ, но у меня отчет не работает. SQL, понятно, выполняет запрос, а вот Decision и LName не выводит абсолютно ничего. Проверил у себя в базе данных, поле Lim."ID_Decision" и DM1.QbDecision."ID_Decision" совпадают, совпадают так же поля Lim."ID_TypeRestrict" и DM2.TbTypeRestrict."ID_TypeRestrict". То есть условия "Если" выполняются по идее.
Подскажите в чем может быть проблема, пожалуйста.

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

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

Повідомлення feNICKs » 09 квітня 2015, 13:39

Скрипт рабочий, проверял у себя на примере - все выводит...
В текстовых полях вставили переменные? а к бэнду подключили источник данных Lim? Или у Вас бэнд не перебирается или что-то очищает текстовые поля или переменные (пройдитесь по всему коду).
Можете просто создать чистый (новый) отчет и проверьте этот скрипт. Если что - выполните отладку - заходите в закладку код и нажимаете отладка и двигайтесь к Вашей части кода, чтоб увидеть, происходит там присвоение значений или нет.