Звітні форми. Площа, експлікація і т.д.

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

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

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

Re: Отчётные формы. Площадь, экспликация и т.д.

Повідомлення NickS » 01 жовтня 2010, 12:21

Dorochenko_iv писав:Скажите пожалуйста, можно ли разложить название документации взятое из поля "Вид технической документации in4" (закладка техническая документация) на составные? Например в поле стоит "проект із землеустрою щодо відведення земельної ділянки в оренду", а нужно отдельно взять "проект із землеустрою" и "щодо відведення земельної ділянки в оренду", более того "проект із землеустрою" нужно сделать заглавными.

Конечно можно! НО! Нужно точно знать либо количество букв, по которым будет разделение, либо известные какие-то буквы. Покажу на Вашем примере два способа:
Допустим имеем текстовую переменную Start:

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

Start := 'проект із землеустрою щодо відведення земельної ділянки в оренду';

Разделим на переменные Part1 и Part2:
1. Когда известно номер буквы до которой надо разделить на составные.

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

  Part1 := Copy(Start, 1, 21);
  Part2 := Copy(Start, 23, Length(Start)-22);

Объясню. Чтобы из текстовой переменной взять только часть, нужно воспользоваться функцией Copy. Первый параметр этой функции - это исходная текстовая переменная (в нашем случае это Start), второй параметр - из какого символа начинать вырезку (если сначала, то 1 - для переменной Part1, а для Part2 - 23, потому что слово "щодо" начинается с 23-ей буквы), и третий параметр - сколько символов вырезать (для Part1 - 21, пробел является 22-ым символом, но он нам не нужен, для Part2 - все до конца, для этого служит Length(Start)-22, тоесть от всего количества символов отнять 22).

2. Когда известно по каким буквам или словам надо разделить на составные.
Возьмём в качестве известного слова - "щодо"

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

    Part1 := Copy(Start, 1, Pos('щодо', Start)-2);
  Part2 := Copy(Start, Pos('щодо', Start), Length(Start)-Pos('щодо', Start)+1);

В данном варианте мы воспользовались той же функцией, но добавили ещё и функцию Pos - она ищет указанное слово и возвращает номер буквы, где его нашла. Первый параметр этой функции - слово или буква, которую надо найти, второй - текст или текстовая переменная, где ищется это слово.

Чтобы сделать первую букву заглавной, надо воспользоваться простенькой функцией UpperFirst:

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

Part1 := UpperFirst(Part1);

Аватар користувача
Dorochenko_iv
Повідомлень: 162
З нами з: 12 березня 2010, 21:55
Звідки: м.Чернігів
Контактна інформація:

Отчётные формы. Площадь, экспликация и т.д.

Повідомлення Dorochenko_iv » 25 жовтня 2010, 23:05

Добрый вечер. У нас есть два кода:
procedure Picture1OnBeforePrint(Sender: TfrxComponent);
begin
with Picture1, Engine do
begin
If Length( Edit1.Text) > 0 then
DrawWmf(Width * 10 / (2560/6773), Height * 10 /(2560/6773), StrToInt(Edit1.Text))
else
DrawWmf(Width * 10 / (2560/6773), Height * 10 /(2560/6773), 0);

Loadfromfile( StartPath +'\gis.wmf');
End;
end;
------------------------------------------------------------------------------------------------------
и
procedure Picture11OnBeforePrint(Sender: TfrxComponent);
begin
with Picture11, Engine do
begin
VisibleGisLayer(0, false);
DrawWmf(Width * 10 / (2560/6773), Height * 10 /(2560/6773), 0);
Loadfromfile( StartPath +'\gis.wmf');
VisibleGisLayer(0, true);
end;
end;
В первом случае масштаб изображение задается при открытии формы, но при этом участок не отображается на рисунке, во втором -масштаб не задается, но на рисунке будет отображен участок. Подскажите, каким образом сделать так, чтобы масштаб задавался и участок отображался на рисунке? Спасибо.

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

Re: Отчётные формы. Площадь, экспликация и т.д.

Повідомлення NickS » 26 жовтня 2010, 10:41

Проверил я Ваш код, поэкспериментировал у себя - всё нормально работает. Значит данный код тут непричём. Возможно где-то есть проблемы со значением Edit1.Text, возможно Вы что-то напутали и не то значение присваиваете, или гдето осуществялется переприсвоение. Проверте более детально остальные части кода, если не найдёте проблему, пришлите мне весь шаблон.

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

Re: Отчётные формы. Площадь, экспликация и т.д.

Повідомлення TiJester » 28 жовтня 2010, 13:01

Добрый день!
Не подскажите ли, существует возможность делать выборку по решению (документации подтверждающей право)? Коль решения, два, три и более. Первое решение несет первое основание? а в стольных поправка к первому.
Можно образец кода, заранее спасибо.

Вот ссылка для скачивания образца заполненного in4 + XML
http://dr-pc.ucoz.ua/load/0-0-0-34-20

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

Re: Отчётные формы. Площадь, экспликация и т.д.

Повідомлення NickS » 01 листопада 2010, 10:14

TiJester писав:Добрый день!
Не подскажите ли, существует возможность делать выборку по решению (документации подтверждающей право)? Коль решения, два, три и более. Первое решение несет первое основание? а в стольных поправка к первому.
Можно образец кода, заранее спасибо.

Да, конечно можно! Но только чтобы это сделать, нужно воспользоватся циклами и перебирать вручную таблицу данных. Как это делается, в общем виде, можно посмотреть в этой теме http://www.gis.org.ua/forum/viewtopic.php?f=4&t=36
Сам код, как записать все решения в строку, вот:

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

   //--------------------------------------------------------------
   //Документ подтверждающий право

   DocPrav := '';
   dAllocation := '';

   If (RECORDCOUNT('DM1.ListDec') > 0) Then
   Begin
      DATAFIRST( 'DM1.ListDec');
      g := 1;

      While DATAEOF( 'DM1.ListDec') = False Do
      Begin

         If LOCATEDATA( 'DM1.QbDecision', 'ID_Decision', <DM1.ListDec."ID_Decision">) = true Then
         Begin
            If Length(Trim(DocPrav)) > 0 then
            begin
              If g = RECORDCOUNT( 'DM1.ListDec') then
                 DocPrav := DocPrav + ' та '
              else
                 DocPrav := DocPrav + ', ';
            end;

            If LocateData( 'DM2.TbTypeDec', 'ID_TypeDec', <DM1.QbDecision."ID_Typeorgan">) = True Then
            begin
              dAllocation := <DM2.TbTypeDec."Name">;
              dAllocation := Lowercase(Copy(dAllocation, 1, 1)) + Copy(dAllocation, 2, Length(dAllocation));
            end;

            DocPrav := DocPrav + dAllocation;

            If <DM1.QbDecision."Dec_Date"> > 0 Then
               DocPrav := DocPrav +' від ' +DATEWRITE( <DM1.QbDecision."Dec_Date">);

            If Length( <DM1.QbDecision."Dec_Num">) > 0 Then
               DocPrav := DocPrav +' № ' +<DM1.QbDecision."Dec_Num">;

         End;

         g := g +1;
         DATANEXT( 'DM1.ListDec');
      End;
   End;


В данном примере используется таблица DM1.ListDec в которой хранятся все действующие документы права на текущий участок. В результате получим переменную DocPrav, в которой документы перечисленные через запятую.

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

Re: Отчётные формы. Площадь, экспликация и т.д.

Повідомлення TiJester » 01 листопада 2010, 11:27

Спасибо все работает)
Может кто будет использовать!
Еще надо подключить БД DM2.TbTypeDec помимо DM1.ListDec
Да и переменные прописать dAllocation как string и
g : integer

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

[b]var[/b]
   g : integer;
   dAllocation:string;
...
Ну а тут сам код)
...


Еще раз спасибо за помощь.

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

Re: Отчётные формы. Площадь, экспликация и т.д.

Повідомлення NickS » 02 листопада 2010, 09:19

TiJester писав:Еще надо подключить БД DM2.TbTypeDec помимо DM1.ListDec
Да и переменные прописать dAllocation как string и
g : integer

Ну я просто упустил это как само собой разумеющееся. :) Но если быть дотошным, то не только это, нужно ещё подключить БД DM1.QbDecision ну а в переменных ещё не забыть прописать как строку DocPrav ;)

korpol
Повідомлень: 18
З нами з: 02 квітня 2011, 21:28

Как отобразить данные

Повідомлення korpol » 08 травня 2011, 17:29

Подскажите, пожалуйста, как в тех. отчёте отобразить данные из полей показанных на рисунке ниже.
http://rghost.ru/5567611/image.png

И вообще вопрос, как определять идентификаторы необходимых полей чтобы данные из них добавить в отчёт?

shels_chorny
Повідомлень: 41
З нами з: 31 березня 2011, 15:17
Звідки: Кировоград
Контактна інформація:

Re: Как отобразить данные

Повідомлення shels_chorny » 11 травня 2011, 17:12

БД имеет свою структуру данных: набор таблицы, а таблицы в свою очередь набор записей.
Каждая таблица представлена именем её идентификатор по которому к ней обращаются. :shock:
Запись в таблицы содержит столбцы(колонки) обращение к котором также происходит по имени колонки. :shock:
Каждое поле или запись в ГИС6 хранится в определённой таблицы.
1. Так что первое что нужно, выяснить в какой именно таблица и в каком столбце это поле хранится. :?
2. Второе что нужно сделать это выяснить, а в какой именно строке она находится т.к. в таблице их может быть несколько. :?
В установленной папке ГИС6 есть основное описание БД "База данных GIS6.xls", а так же глобальных переменных "_Описание переменных.txt".
Стоить отметить что в отчетных формах имена таблиц могут не значительно отличатся от тех которые в БД, это из-за того что ГИС6 применяет группировку и дополняет базу своими таблицами для упрощения построения отчетов. :)
В зависимосте от того в каком окне вы находитесь, ГИС6 автоматически устанавливает указатель на нужною запись в таблице и так же в зависимих от неё таблицах :idea: , так что вам не придётся вручную устанавливать указатель.
Как выполнять поиск записей в таблице можно посмотреть в уже готовых шаблонах.
Например :
Мы знаем что нам нужна тех.док. выполняем поиск в файле "База данных GIS6.xls" - находим описание
таблицы TechDoc - QbTechDoc (QiTechDoc).
Дальше ищим поле "форма собственности". Если мы его не нашли то нужно смотреть в уже готовых шаблонах в котором оно используется.

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

Re: Как отобразить данные

Повідомлення NickS » 03 червня 2011, 17:11

korpol писав:Подскажите, пожалуйста, как в тех. отчёте отобразить данные из полей показанных на рисунке ниже.
http://rghost.ru/5567611/image.png

Разобрались? Не вижу рисунка, пишет ошибку 404, тоесть нету страници.

korpol писав:И вообще вопрос, как определять идентификаторы необходимых полей чтобы данные из них добавить в отчёт?

Как и сказали - в документе "База данных GIS6.xls".