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

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

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

Аватар користувача
TiJester
Повідомлень: 39
З нами з: 28 жовтня 2010, 12:20
Контактна інформація:

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

Повідомлення TiJester » 11 лютого 2014, 12:31

Спасибо заработало, но добавил этот код в процедуру, отображения чертежа Picture1
procedure Picture1OnBeforePrint(Sender: TfrxComponent);
begin
with Picture1, Engine do
begin
// В условных обозначениях чертежа отображает либо скрывает обозначение ограничения
If Length(Trim(LimArea)) > 0 then
Picture5.Visible := true
else
Picture5.Visible := false;


Может кому пригодится!

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

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

Повідомлення feNICKs » 11 лютого 2014, 13:08

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

If Length(Trim(LimArea)) > 0 then
Picture5.Visible := true
else
Picture5.Visible := false;

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

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

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

Повідомлення NoViChoK » 14 квітня 2014, 08:48

Какой код нужен что бы вытащить "Целевое назначение 2 (УКЦИЗ)" во вкладке право собственности?

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

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

Повідомлення feNICKs » 14 квітня 2014, 09:10

NoViChoK писав:Какой код нужен что бы вытащить "Целевое назначение 2 (УКЦИЗ)" во вкладке право собственности?


TypeUses - TbTypeUses * Список целевого использования земель (УКЦИЗ)
DM2.TbTypeUses."Groupe" Varchar Группа
DM2.TbTypeUses."ID_TypeKf" Int Вид использования для оценки земли
DM2.TbTypeUses."ID_TypeUse" Int Вид КВЦПЗ
DM2.TbTypeUses."ID_TypeUses" * Int Код записи
DM2.TbTypeUses."Name" Varchar Наименование
DM2.TbTypeUses."Number" Varchar Номер

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

           If LocateData( 'DM2.TbUses', 'ID_Uses',  <DM1.TbUser."ID_Uses">) Then
               If RecordCount('DM2.TbUsesLnk') > 0 Then
                   If (LocateData( 'DM2.TbTypeUses', 'ID_TypeUses', GetValue('DM2.TbUsesLnk', 'ID_TypeUses'))) And (Pos( Lowercase( <DM2.TbTypeUses."Name">), FunkName) = 0) Then
                   Begin
                      If Length( Trim( FunkName)) > 0 Then
                         FunkName := FunkName + ' та ';

                      FunkName    := FunkName + IIF( Pos( 'для ', Lowercase( <DM2.TbTypeUses."Name">)) = 0, 'для ', '') + Lowercase( <DM2.TbTypeUses."Name">);
                   End;

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

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

Повідомлення NoViChoK » 14 квітня 2014, 10:33

Исправлю маленькую ошибку :)
Вот в этой строке: If LocateData( 'DM2.TbUses', 'ID_Uses', <DM1.TbUser.ID_Uses>) Then нужно <DM1.TbUser.ID_Uses> заменить на <DM2.TbUses."ID_Uses">

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

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

Повідомлення feNICKs » 14 квітня 2014, 10:57

NoViChoK писав:Исправлю маленькую ошибку :)
Вот в этой строке: If LocateData( 'DM2.TbUses', 'ID_Uses', <DM1.TbUser.ID_Uses>) Then нужно <DM1.TbUser.ID_Uses> заменить на <DM2.TbUses."ID_Uses">

Условие было правильное, а вот Ваше - нет.

Объясняю, Вы ищите в таблице Функционального назначения (TbUses), запись по полю "Код функционального назначения" взятого со справочника "Функционального назначения" (TbUses) т.е. поиск в таблице по записи с той же таблицы... А нужно с параметров субъекта права (TbUser)

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

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

Повідомлення NoViChoK » 14 квітня 2014, 11:09

хм... Тогда почему когда я оставляю ваше условие выдаёт такую ошибку: "Нет возможности преобразовать тип Variant (Null) в тип (Boolean)" и "Невідома змінна або поле БД:DM1.TbUser.ID_Uses" ?
DM1.TbUser подключено. FunkName прописал в String. Не туда? Как тогда исправить эти ошибки?
PS: sorry за неправильное исправление :oops: , но оно почему то работает)

...................................................
А всё разобрался, всё работает) Когда вставил ваш код то выдавало ошибки о которых я выше написал. Я просто удалил "DM1.TbUser.ID_Uses" и вставил опять (двойним кликом с DM1.TbUser). Не знаю что это изменило но всё заработало.
Востаннє редагувалось 14 квітня 2014, 11:17 користувачем NoViChoK, всього редагувалось 1 раз.

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

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

Повідомлення feNICKs » 14 квітня 2014, 11:16

NoViChoK писав:хм... Тогда почему когда я оставляю ваше условие выдаёт такую ошибку: "Нет возможности преобразовать тип Variant (Null) в тип (Boolean)" и "Невідома змінна або поле БД:DM1.TbUser.ID_Uses" ?
DM1.TbUser подключено. FunkName прописал в String. Не туда? Как тогда исправить эти ошибки?
PS: sorry за неправильное исправление :oops: , но оно почему то работает)

поле ID_Uses в лапки -> <DM1.TbUser."ID_Uses">. Мелочь, но я и сам не сразу обратил внимание)

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

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

Повідомлення LeViK » 24 червня 2014, 09:29

Добрый день. Вот есть такой кусок кода. Работает, но только после того как зайду в окно план. Это потому что я привязываюсь к DM2.TbTypeLands через переменную?

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

 
var
 
   I,  hei1: integer;
sVal1: array[0..60] of integer;

Begin
 DATAFIRST( 'DM1.TbPlan');

   While Not DATAEOF( 'DM1.TbPlan') Do
   Begin

      i:=0;
      For i:=0 to 49 do
      Begin
      if <DM1.TbPlan."ID_TypeLands">=i then
      begin
       sVal1[i]:= sVal1[i] + <DM1.TbPlan."Area">;

      end;

      end;

      DATANEXT( 'DM1.TbPlan');
   End;


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

    PerelikUgid.Lines.Clear;
     hei1:=0;
   For i:=0 to 49 do
      Begin
      if sVal1[i]>0 then
      begin
      if LocateData( 'DM2.TbTypeLands', 'ID_TypeLands', IntToStr(i)) = true then
      Begin
       PerelikUgid.Lines.Add( <DM2.TbTypeLands."Groupe">+'.'+<DM2.TbTypeLands."Number">+' - '+<DM2.TbTypeLands."Name">+ ' - ' +FORMATFLOAT(fdLandAreaG, sVal1[i]/10000)+'га');
       hei1:=hei1+1;
        end;
      end;
      end;

   PerelikUgid.Height := hei1*17;
end.

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

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

Повідомлення NickS » 24 червня 2014, 09:55

LeViK писав:Добрый день. Вот есть такой кусок кода. Работает, но только после того как зайду в окно план. Это потому что я привязываюсь к DM2.TbTypeLands через переменную?

Нет. Не работает из-за того, что изначально тип угодий по КВЗУ для этого участка (или угодья) не присвоен. Когда Вы импортируете in4 или берёте старые участки, которые делались ещё до классификатора КВЗУ, то в таких угодьях ID_TypeLands ещё не присвоено. Когда Вы переходите в параметры угодья, то там программа (если тип КВЗУ не присвоен) автоматически проставляет подходящий тип (именно потому Вам кажется, что КВЗУ уже задано), но присвоится КВЗУ только тогда, когда нажмёте кнопку "Сохранить". Иначе КВЗУ так и не присвоится и алгоритм работать не будет. Либо задавайте всегда в ручную классификатор КВЗУ либо используйте такой алгоритм:
1. С левой стороны выбираете "ADO" - "Запит ADO".
2. Для появившегося объекта, задайте имя, например ListPlan (кстати, таким образом создаются временные таблицы, которые можно использовать для любых sql-запросов).
3. В код, в самом начале после Begin добавте такой текст:

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

  //В самом начале присваиваем КВЗУ тем угодьям и ограничениям, которым оно ещё не присвоено
  ListPlan.SQL.Text := 'Update Land Set ID_TypeLands = TL.ID_TypeLands From Land L ' +
          'INNER JOIN TypeLand TL on TL.ID_TypeLand = L.ID_TypeLand Where L.ID_Object = ''' +
          IntToStr(<DM1.QbObject."ID_Object">) + ''' and L.ID_TypeLands is Null';
  ListPlan.ExecSQL;


Теперь, при запуске Вашей отчётной формы, программа проверит те угодья, которым ещё не присвоен КВЗУ и присвоит им согласно стандартным соответствиям.