feNICKs писав:zigura_a писав:Підскажіть якщо в мене є два участка в гіс6 то чи можу я роздруквати технічну документацію щоб програма сама сплюсувала площі обох участків і вивела загальну площу і щоб в адресі розміщення ділянки також вказувались адреси обох участків. Дякую за відповідь
Ну тут не все так просто... Это нужно делать отчетную форму (техничку) для помеченных участков зеленной меткой т.е. применить фильтр + в цикле перебирать все участки с зеленной меткой и суммировать площадь( например, ObjectArea := ObjectArea + <DM1.QbObject."Area">). А с адресом, либо так (ObjectAdress := ObjectAdress + <DM1.QbObject."Address">), либо делать анализ по кадастровому номеру и собирать адрес по кусочкам (область, район, совет, нас.пункт, улица, дом).
Цикл по отмеченным:Код: Виділити все
VAR
ObjectArea : Double;
City, Street, StreetTo, Address, Numb_House : String;
BEGIN //основное тело (начало)
OneObject := True;
//-----> Для помес.зелен.меткой
ID_Object := <DM1.QbObject."ID_Object">; // Присваиваем текущий указатель
FilterData('DM1.QbObject', 'OK = ''ю'''); // Фильтруем по отмеченным
//Проверяем сколько отмечено участков и есть ли такие
If RecordCount( 'DM1.QbObject') > 0 Then
Begin
If RecordCount('DM1.QbObject') > 1 Then
OneObject := False;
DataFirst( 'DM1.QbObject');
End
Else
Begin
FilterData( 'DM1.QbObject', ''); //Снимаем фильтр
LocateData( 'DM1.QbObject', 'ID_Object', VarToStr(ID_Object)); //Возвращаем указатель на место
End;
//-----> Цикл по відміченим (початок)
Repeat
ObjectArea := ObjectArea + <DM1.QbObject."Area">; // Площа
SeekIKN( <DM1.QbObject."IKN">);
City := '';
Street := '';
StreetTo := '';
Numb_House := '';
// Адреса
If <DM1.QbObject."ID_TypeLocation"> = 0 Then
Begin
//Населений пункт
If (Length( Name_Place) > 0) And ((Pos( 'м.', Name_Place) > 0) Or (Pos( 'с.', Name_Place) > 0) Or (Pos( 'смт',Name_Place) > 0) Or (Pos( 'c-', Name_Place) > 0)) Then
City := ( Name_Place)
Else
If (Length( Name_Advice) > 0) And ((Pos( 'м.', Name_Advice) > 0) Or (Pos( 'с.', Name_Advice) > 0) Or (Pos( 'смт',Name_Advice) > 0) Or (Pos( 'c-', Name_Advice) > 0)) Then
City := ( Name_Advice)
Else
If (Length( Name_Region) > 0) And ((Pos( 'м.', Name_Region) > 0) Or (Pos( 'с.', Name_Region) > 0) Or (Pos( 'смт',Name_Region) > 0) Or (Pos( 'c-', Name_Region) > 0)) Then
City := ( Name_Region)
Else
If (Length( Name_Area) > 0) And ((Pos( 'м.', Name_Area) > 0) Or (Pos( 'с.', Name_Area) > 0) Or (Pos( 'смт',Name_Area) > 0) Or (Pos( 'c-', Name_Area) > 0)) Then
City := ( Name_Area);
// Назва вулиці
Query('Select S.* From Street S Where S.ID_Street='+IntToStr(<DM1.QbObject."ID_Street">));
If RecordCount( 'DM1.Query') > 0 Then
Begin
If LocateData( 'DM2.TbTypeStreet','ID_TypeStreet', GetValue( 'DM1.Query','ID_TypeStreet')) Then
Street := GetValue('DM2.TbTypeStreet','NameSmall');
If (GetValue( 'DM1.Query','NameWhom')<> Null) And (Length( GetValue( 'DM1.Query','NameWhom')) > 0) Then
Street := Street + GetValue( 'DM1.Query','NameWhom')
Else
Street := Street + GetValue( 'DM1.Query','NameStreet');
End;
// Номер вулиці/будинку
Numb_House := <DM1.QbObject."Num_House">;
// Адреса зем.ділянки
If Length( Address) = 0 Then
Begin
Address := Address + ' в ' +City;
Address := Address + ' по ' +Street;
Address := Address + IIF( Length (Numb_House)>0,', '+ Numb_House, '');
End
Else
Begin
If Pos( City, Address) = 0 Then
Begin
Address := Address + ' та в ' +City;
If Pos( Street, Address) = 0 Then
Address := Address + ' по ' +Street;
End;
If Pos( Street, Address)=0 Then
Address := Address + ' та по ' +Street;
If Pos( Numb_House, Address)=0 Then
Address := Address + IIF( Length( Numb_House)>0,', '+ Numb_House, '');
End;
End;
//-------------------------------------------->
If Not OneObject Then
DataNext( 'DM1.QbObject');
Until DataEOF( 'DM1.QbObject') or OneObject;
// кінець цикла
//------------------------------------------------>
END. // основное тело(конец)
п.с. не обращайте внимание на рус. и укр. комменты - набросал быстренько с разных форм.
зробив тая як Ви написали, видає помилку - Невизначений ідентифікатор:'OneObject'
Підскажіть чому так? І що потрібно зробити щоб усунути цю помилку.