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

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

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

ermack
Повідомлень: 5
З нами з: 15 березня 2011, 17:43

Re: Вопросы по базам данных в отчётных формах.

Повідомлення ermack » 05 жовтня 2011, 20:45

Можливо є якийсь інший код щоб цільове по новому класифікатору?

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

Re: Вопросы по базам данных в отчётных формах.

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

Vetaley писав:Код работает как надо:
NaznCelNom - вытягивает код целевого
NaznCelName - название целевого без номера
пробовал по-разному, но вытянуть номер секции у меня так и не вышло :o как вы это делаете?

Код работает как надо, но вытягивает номер секции и номер целевого, например "В.02.06". А просят, походу, чтобы было без номера секции, например "02.06". Это очень просто изменить! Дело в том, что изначально в базе хранится только номер в поле DM2.TbTypeUse."Number" чтобы вытягивать вместе секцией (да, просили так, чтобы и буква секции была!), сделали дополнительное поле в котором "В.02.06", это поле DM2.TbTypeUse."Number2"

Пример кода рассчитан на второй вариант. Чтобы использовать без номера секции, достаточно убрать двоичку в названии поля. Получится такой код:

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

    NaznCelNom  := '';
    NaznCelName := '';

    If LocateData( 'DM2.TbUses', 'ID_Uses', <DM1.TbUser."ID_Uses">) = True Then
    begin
        If RecordCount('DM2.TbUsesLnk') > 0 then
        begin
          DataFirst( 'DM2.TbUsesLnk');

          While DataEOF( 'DM2.TbUsesLnk') = False Do
          begin
            If LocateData( 'DM2.TbTypeUse', 'ID_TypeUse', GetValue('DM2.TbUsesLnk', 'ID_TypeUse')) = True Then
            begin
              NaznCelNom  := NaznCelNom + <DM2.TbTypeUse."Number2"> + ', ';
              NaznCelName := NaznCelName + <DM2.TbTypeUse."Name"> + ', ';
            end;

            DATANEXT( 'DM2.TbUsesLnk');
          end;
        end;

        NaznCelNom  := Copy(NaznCelNom, 1, Length(NaznCelNom)-2);
        NaznCelName := Copy(NaznCelName, 1, Length(NaznCelName)-2);
    end;

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

Re: Вопросы по базам данных в отчётных формах.

Повідомлення NickS » 07 жовтня 2011, 15:58

Vetaley писав:Уважаемый Николай! Помогите пожалуйста с планом обмежень!!! Никак не могу подставить площадя, а взять готовую конструкцию неоткудова (((
Шаблон выслал Вам на электронку. Спасибо!

По поводу этого, отослал Вам шаблончик на почту. Для тех, кому тоже интересно, объясняю. Есть шаблон план зон ограничений, где под рисунком есть несколько условных обозначений, типа: зелёным отображаются ограничения с номером 01.05 и 01.06, синим - 01.08, красным - 01.04. И напротив каждого условного обозначения должна прописываться общая площадь ограничений этого типа. Например:
Охоронна зона навколо інженерних комунікацій (код обмеження 01.08) (4.3), площа обмеження - 0,0343 га.

Чтобы это забабахать, надо делать код, но он индивидуальный для разных наборов ограничений, площадь которых вы хотите вывести. Вот код согласно примеру:

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

   //---------------------------------------------------------------------------------------------------
   //Подсчёт площади ограничений

   Lim1     := 0;
   Lim2     := 0;
   Lim3     := 0;
   LimOther := 0;

   DATAFIRST( 'DM1.TbLimination');

   While Not DATAEOF( 'DM1.TbLimination') Do
   Begin
      Other := true;

      If (LocateData('DM2.TbTypeRestrict', 'ID_TypeRestrict', <DM1.TbLimination."ID_TypeRestrict">) = true)
        and (<DM1.TbLimination."DateFirst"> < Date) And ((<DM1.TbLimination."ID_TypeTermin"> = 0)
        or ((<DM1.TbLimination."ID_TypeTermin"> = 1) and
        ((<DM1.TbLimination."DateLast"> > Date) or (<DM1.TbLimination."DateLast"> is Null )))) then
      Begin

         // 01.06.05
         If (<DM2.TbTypeRestrict."Number"> = '01.05') or (<DM2.TbTypeRestrict."Number"> = '01.06') Then
         begin
            Lim1 := Lim1 + <DM1.TbLimination."Area">;
            Other := false;
         end;

         // 01.08
         If <DM2.TbTypeRestrict."Number"> = '01.08' Then
         begin
            Lim2 := Lim2 + <DM1.TbLimination."Area">;
            Other := false;
         end;

         // 01.04
         If <DM2.TbTypeRestrict."Number"> = '01.04' Then
         begin
            Lim3 := Lim3 + <DM1.TbLimination."Area">;
            Other := false;
         end;

         // остальные ограничения
         If Other = true Then
            LimOther := LimOther + <DM1.TbLimination."Area">;
      End;

      DATANEXT( 'DM1.TbLimination');
   End;


В данном случае создаются три переменных и в них суммируется площадь ограничений соответствующих типов. Для своего задания нужно создавать столько переменных, сколько надо разных типов показать, причём на каждый тип отдельный кусочек кода, чтобы отбирать площадь отдельных видов ограничения. Причём в подсчёте учитываються только действующие ограничения.

Аватар користувача
Vetaley
Повідомлень: 119
З нами з: 15 лютого 2010, 13:16
Звідки: ХарькОфф
Контактна інформація:

Re: Вопросы по базам данных в отчётных формах.

Повідомлення Vetaley » 10 жовтня 2011, 15:23

((( "Набір даних "" не знайдений"!
К чему бы это? :shock:

Аватар користувача
Denver
Повідомлень: 282
З нами з: 27 вересня 2010, 22:36
Звідки: Бровари

Re: Вопросы по базам данных в отчётных формах.

Повідомлення Denver » 10 жовтня 2011, 15:38

Vetaley писав:((( "Набір даних "" не знайдений"!
К чему бы это? :shock:


може через це:

Чтобы это забабахать, надо делать код, но он индивидуальный для разных наборов ограничений, площадь которых вы хотите вывести.

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

Re: Вопросы по базам данных в отчётных формах.

Повідомлення NickS » 10 жовтня 2011, 16:31

Denver писав:
Vetaley писав:((( "Набір даних "" не знайдений"!
К чему бы это? :shock:


може через це:

Чтобы это забабахать, надо делать код, но он индивидуальный для разных наборов ограничений, площадь которых вы хотите вывести.

Нет.

Vetaley писав:((( "Набір даних "" не знайдений"!
К чему бы это? :shock:

Хм... не понял. Это та отчётная форма, что я подправил? Вы в ГИС6 её используете? Попробуйте зайти в список подключенных таблиц и нажать ОК.

Аватар користувача
Vetaley
Повідомлень: 119
З нами з: 15 лютого 2010, 13:16
Звідки: ХарькОфф
Контактна інформація:

Re: Вопросы по базам данных в отчётных формах.

Повідомлення Vetaley » 10 жовтня 2011, 17:27

NickS писав:Хм... не понял. Это та отчётная форма, что я подправил? Вы в ГИС6 её используете? Попробуйте зайти в список подключенных таблиц и нажать ОК.

Прикольно! Глюк такой? Теперь грит "нипанятна шо за переменная DM2.TbTypeRestrict."Number"?

Аватар користувача
Vetaley
Повідомлень: 119
З нами з: 15 лютого 2010, 13:16
Звідки: ХарькОфф
Контактна інформація:

Re: Вопросы по базам данных в отчётных формах.

Повідомлення Vetaley » 10 жовтня 2011, 17:35

http://www.ex.ua/view_storage/283991137252 шаблон тута.
Denver писав:може через це:
Чтобы это забабахать, надо делать код, но он индивидуальный для разных наборов ограничений, площадь которых вы хотите вывести.

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

Аватар користувача
Denver
Повідомлень: 282
З нами з: 27 вересня 2010, 22:36
Звідки: Бровари

Re: Вопросы по базам данных в отчётных формах.

Повідомлення Denver » 10 жовтня 2011, 20:13

Vetaley писав:ента коза на 3 типичных, наиболее встречаемых ограничения для населенки, кроме того NickS молодчага сбацал переменную "остальные", так что работать должно при любом раскладе.
(когда заработает)))


Та Вы меня хоть пристрелите :!: - я нибельмеса в ентих шаблонах не шурупаю :D :( :D :mrgreen:

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

Re: Вопросы по базам данных в отчётных формах.

Повідомлення NickS » 11 жовтня 2011, 09:25

Vetaley писав:
NickS писав:Хм... не понял. Это та отчётная форма, что я подправил? Вы в ГИС6 её используете? Попробуйте зайти в список подключенных таблиц и нажать ОК.

Прикольно! Глюк такой? Теперь грит "нипанятна шо за переменная DM2.TbTypeRestrict."Number"?

Да просто я забыл подключить таблицу DM2.TbTypeRestrict. :D Я думаю, Вы это и сами сможете. :)

Vetaley писав:сбацал переменную "остальные", так что работать должно при любом раскладе.
(когда заработает)))

Всегда нужно предусматривать "неправильные" варианты - это принцип программирования. :)