Створення. Редагування шаблонів

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

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

Victor
Повідомлень: 26
З нами з: 22 квітня 2020, 08:24

Створення. Редагування шаблонів

Повідомлення Victor » 22 квітня 2020, 09:22

По специфики работы отредактировал стандартный шаблон "Ведомость координат" и добавил переменную - если есть договор аренды то владелец - арендодатель, если нет то владелец с вкладки "субъект права". Но в последней работе столкнулся с проблемой что в договоре аренды два арендатора но в "ведомости координат" отображаться ФИО только одного. Можно выводить всех арендодателей?

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

Subject_Pravo := '';

     DataFirst( 'DM1.ListUser');
      While DataEof( 'DM1.ListUser') = False Do
begin
    If LocateData( 'DM2.TbTypeOwner', 'ID_TypeOwner', <DM1.ListUser."ID_TypeOwner">) = True Then
begin
    If (<DM2.TbTypeOwner."ID_TypeUser"> = True) And (LocateData( 'DM1.QsFirm', 'ID_Firm', <DM1.ListUser."ID_Firm">) = True) Then
      Subject_Pravo := Subject_Pravo + <DM1.QsFirm."Name_Who"> + ', ';

    If (<DM2.TbTypeOwner."ID_TypeUser"> = False) And (LocateData( 'DM1.QsPeople', 'ID_People', <DM1.ListUser."ID_People">) = True) Then
      Subject_Pravo := Subject_Pravo + <DM1.QsPeople."Family"> + ', ' ;   
end;
     DataNext( 'DM1.ListUser');
end;
  Subject_Pravo := Copy(Subject_Pravo, 1, LENGTH(Subject_Pravo) -2);
   
 If RECORDCOUNT( 'DM1.QiLease') > 0 Then
      Subject_Pravo := <DM1.QiLease."LeaserName">; //Оредар  ДОБАВИЛ             

end.

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

Re: Создание. Редактирования шаблонов

Повідомлення NickS » 22 квітня 2020, 10:59

В таком случае надо использовать цикл. Формат его такой:

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

<переменная> := ''; // Очищаем переменную, если это необходимо

// Проверяем есть ли вообще записи в таблице
If RecordCount(<таблица>) > 0 then
begin
  // Стаём на первую запись
  DataFirst(<таблица>);

  While DataEOF(<таблица>) = false do
  begin
    <переменная>:= <переменная> + <значение> + ', ';

    DataNext(<таблица>);
  end;

  // Удаляем из переменной запятую в конце
  <переменная> := Copy(<переменная>, 1, Length(<переменная>) - 2);
end;


Тепер на примере аренды. Если у нас несколько договоров аренды и надо взять их арендаторов, то вот этот Ваш код:

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

If RECORDCOUNT( 'DM1.QiLease') > 0 Then
      Subject_Pravo := <DM1.QiLease."LeaserName">; //Оредар  ДОБАВИЛ 

Надо исправить вот так:

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

  If RecordCount('DM1.QiLease') > 0 then
  begin // Проверяем есть ли аренда
    Subject_Pravo := '';  //Оредар  ДОБАВИЛ

    DataFirst('DM1.QiLease'); // Становимся на первую запись аренды

    While DataEOF('DM1.QiLease') = false do
    begin // В цыкле перебираем все записи аренды и собираем в одну переменную
      Subject_Pravo := Subject_Pravo + <DM1.QiLease."LeaserName"> + ', ';

      DataNext('DM1.QiLease'); // Переходим на следующую запись аренды
    end;

    // Удаляем точку с запятой в конце
    Subject_Pravo := Copy(Subject_Pravo, 1, Length(Subject_Pravo) - 2);
  end;


Конечно, если речь идёт о нескольких арендаторах в одной аренде, тогда надо в цикле перебирать не список договоров, а таблицу арендаторов текущего договора. Тут сложнее, потому что надо использовать запрос:

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

  If RecordCount('DM1.QiLease') > 0 then
  begin // Проверяем есть ли аренда
    Subject_Pravo := <DM1.QiLease."LeaserName"> + ', ';  //Оредар  ДОБАВИЛ

    // Создаём запрос, чтобы отобратьт остальных арендаторов текущей аренды
    QuerySQL('Select * From LeaseUser Where (ID_Lease = ' + IntToStr(<DM1.QiLease."ID_Lease">) + ') and (ID_TypeRecord = 0)');

    If RecordCount('DM1.QuerySQL') > 0 then
    begin
      DataFirst('DM1.QuerySQL'); // Становимся на первую запись арендаторов

      While DataEOF('DM1.QuerySQL') = false do
      begin // В цыкле перебираем все записи арендаторов и собираем в одну переменную
        Subject_Pravo := Subject_Pravo + <DM1.QuerySQL."NameUser"> + ', ';

        DataNext('DM1.QuerySQL'); // Переходим на следующую запись арендаторов
      end;
    end;

    // Удаляем точку с запятой в конце
    Subject_Pravo := Copy(Subject_Pravo, 1, Length(Subject_Pravo) - 2);
  end;

Victor
Повідомлень: 26
З нами з: 22 квітня 2020, 08:24

Re: Создание. Редактирования шаблонов

Повідомлення Victor » 22 квітня 2020, 11:15

Все исправил и добавил ваш вариант и все заработало :)
Огромное спасибо за помощь

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

Re: Создание. Редактирования шаблонов

Повідомлення NickS » 22 квітня 2020, 11:55

Victor писав:Все исправил и добавил ваш вариант и все заработало :)
Огромное спасибо за помощь

Должен заметить, что у владельцах у Вас та же проблема. Если будет несколько владельцев, то оно выведет только одного. Надо так же делать цикл для владельцев (DM1.ListUser)

Victor
Повідомлень: 26
З нами з: 22 квітня 2020, 08:24

Re: Создание. Редактирования шаблонов

Повідомлення Victor » 22 квітня 2020, 11:59

Да Я уже это тоже увидел и будем исправлять.

Victor
Повідомлень: 26
З нами з: 22 квітня 2020, 08:24

Re: Создание. Редактирования шаблонов

Повідомлення Victor » 26 квітня 2020, 08:36

Здраствуйте. В стандартнык ГИС функциях есть

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

Function UpperFirst(Text:String):String
которая делает первую букву заглавной. Есть ли возможность перевода всей строки в верхний регистр? В работе ми юрлица прописываем верхним регистром - возможно зделать если владелец юрлицо то название при использовании маленьких букв трансформировалось в большие.

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

Re: Создание. Редактирования шаблонов

Повідомлення NickS » 27 квітня 2020, 09:23

Victor писав:Есть ли возможность перевода всей строки в верхний регистр? В работе ми юрлица прописываем верхним регистром - возможно зделать если владелец юрлицо то название при использовании маленьких букв трансформировалось в большие.

Конечно! Это функция UpperCase()
Есть ещё функции LowerCase() - для всех букв в маленьком регистре и функция LowerFirst() - для первой буквы в маленьком регистре.

Victor
Повідомлень: 26
З нами з: 22 квітня 2020, 08:24

Re: Создание. Редактирования шаблонов

Повідомлення Victor » 27 квітня 2020, 09:34

:tnk:

Victor
Повідомлень: 26
З нами з: 22 квітня 2020, 08:24

Re: Создание. Редактирования шаблонов

Повідомлення Victor » 17 листопада 2020, 14:01

Доброго дня. Чи можливо здійснити привязку одного шаблону до іншого? Тобто в першому файлі прописати код а в другому задати індифікатори та оформити сам шаблон який буде виводитися.

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

Re: Создание. Редактирования шаблонов

Повідомлення NickS » 17 листопада 2020, 15:55

Victor писав:Доброго дня. Чи можливо здійснити привязку одного шаблону до іншого? Тобто в першому файлі прописати код а в другому задати індифікатори та оформити сам шаблон який буде виводитися.

Можна. Це буде не прив'язка до іншого шаблону, а створення глобальних змінних. Наприклад, в одному шаблоні можна зробити код, а потім створити глобальну змінну:

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

SetVariable('GL_Variable', MyVariable);

а в іншому шаблоні цю змінну прочитати:

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

[GL_Variable]

де, GL_Variable - назва глобальної змінної
MyVariable - локальна змінна в шаблоні або вираз

Глобальна змінна буває лише текстовою. Її не потрібно описувати в блоці "Var" Глобальна змінна перезаписується тією ж командою "SetVariable". Глобальна змінна один раз створивши, діє на всі шаблони, поки не закриємо або перезапустимо програму ГІС6. Але дуже важливо, щоб шаблон, де ця змінна присвоюється (створюється) запускався першим, бо інакше буде помилка ("Не визначена змінна").

Часто я це використовую таким чином:
- Коли потрібно одне діалогове вікно зробити спільним для багатьох шаблонів. Тому в таке вікно я поміщую глобальні параметри для інших шаблонів і там створюються глобальні змінні.
- Коли хочу зробити наскрізну нумерацію сторінок для шаблонів підшивки.
- Створюю шаблон "Початкові дані" і в ньому відключаю відображення сторінки. Цей шаблон ставлю першим в підшивці. От і виходить, що він нічого не виводить, але він зате створює змінні, які потім використовуються іншими шаблонами