Аналитика
http://www.geosystema.net/forum/

XML против Reports
http://www.geosystema.net/forum/viewtopic.php?f=1&t=2051
Страница 4 из 20

Автор:  kukin [ 16 апр 2011 16:26 ]
Заголовок сообщения:  Re: XML против Reports

Интересно, корректно ли работает шифрование?!!!
грохнул шаблон при попытке защитится, размер файла стал "ноль"
благо бекаплюсь, хотя кое-что исчезло без следа(почти вся работа с диалоговым окном) Изображение
да.. повторение-мать учения.. тут прийдется лучше познать диалоговые окна...чаще бекапится!

Автор:  kukin [ 16 апр 2011 19:23 ]
Заголовок сообщения:  Re: XML против Reports

В данный момент диалоговым окном заносится такая информация:
- Название документа являющийся основой приобретения (ComboBox)
- Данные по договору: №(Edit), дата(DateEdit)
- Описание размещения земельного участка (в какой части населенного пункта )
- Периметр участка(Edit)
- Данные про недвижимость, и документы на эту недвижимость(ComboBox, поскольку или нет недвижимости, либо описание с включенным csDropDown)


Чтоб завершить пояснительную записку, требуется вывести информацию об ограничениях на землю.
В ин4 шел перебор по угодиям, в них происходил поиск идентификационного кода организации, отвечающей за данное ограничение.
На этом основании определялось:
-Наличие ограничение, или его отсутствие
-Какой тип ограничения
-Суммировалась площадь всех угодий в которых были однотипные отграничении
я

В XML существует слой "Обмеження", тем самым пункт первый можно проверить наличием этого "слоя".
Тип ограничения, и суммарную площадь ограничения по каждому типу можно провести по коду.
(тут стоит подумать над функцией, и ссылкой на текстовый файл с кодами предприятий-у меня он уже существует)
_________________________________________________
Пардон у ХМЛ, есть прямое описание ограничения, даже по идентификационному ничего рыскать не надо!
Зато полная "лажа" с площадью. _________________________________________________
тут здорово надо покопаться в:
-Boundarytype Boundary Межа зони обмеження
-InternalsБлок опису внутрішніх полігонів зони обмеження
-Boundarytype BoundaryМежа внутрішнього полігона зони обмеження

Те-же "яйца", что и с периметром.
Надо бы встроенную функцию!
______________________________________________________
или решать "буфером обмена"

Автор:  kukin [ 17 апр 2011 11:23 ]
Заголовок сообщения:  Re: XML против Reports

Еще один камушек в огород Setup.ini:
Зачем создавать список склонений, если склонение работает с женскими именами: "міська рада", "сільська рада" "адміністрація"? :shock:
надо всего [ROP(FILE('Setup.ini','RepНазва(Сільрада)'))]
правда в ini пришлось сделать исправдения(добавив 10 знаков вместо 8, чтоб наверняка знать "в межах-за межами"):
RepНазва(Сільрада)=SEF(LocID,'Rada.txt')
DMTНазва(Сільрада)=SEF(CUT(1,10,P[ID106]),Rada.txt)


где в коде репорта добавляется переменная
LocID:=Copy(CadNumberClear,1,10);

Список Rada.txt подается в таком виде:
...
2111000000 Чопська міська рада
2124855500 Ужгородська районна державна адміністрація
2124855501 Середнянська сільська рада
2124880300 Ужгородська районна державна адміністрація
2124880301 Баранинська сільська рада
2124880302 Баранинська сільська рада
2124880303 Баранинська сільська рада
2124880304 Баранинська сільська рада
....


Все это взято с работающего шаблона (2008г.)

Автор:  kukin [ 17 апр 2011 14:16 ]
Заголовок сообщения:  Re: XML против Reports

В пояснительную записку надо сделать описание ограничений и сервитутов.
Путь к ограничению: /UkrainianCadastralExchangeFile/InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Restrictions
В шаблоне есть код для ограничений, но он для таблички, и я решил в него не влазить.
сделал так:
if XMLMode //вывод ограничений
then begin
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Restrictions')//проверяем наличие ограничений
then begin
RestrCount:=NodesCount(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Restrictions','RestrictionInfo');
//проверяем сколько сушествует ограничений
Restrictions:='На використання земельної ділянки встановлені такі обмеження (обтяження), сервітути: ';// присваеваем переменной ограничений значение с ограничением
end;
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Restrictions')
//если усть ограничения
then begin
Begin
for I:=1 to RestrCount do
//начинаем перебор по ограничениям
Restrictions:=Restrictions+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Restrictions/RestrictionInfo/RestrictionName')+' площею____га.'+IIF(I<>RestrCount,', ','');//присваеваем переменной с ограничением описание ограничения и текст её площади
end;
end
else
Restrictions:='На використання земельної ділянки обмеження (обтяження), сервітути не встановлені.';
//если ограничения нет, присваеваем отсуцтвие ограничения
Edit2.text:=Restrictions //запихиваем все это в диалоговое окно
end;
В теле отчета за это отвечает переменная [Edit2.text]

Может кто подскажет, есть ли перенос слов в Edit? Или надо другие элементы формы использовать, тогда какие?

Автор:  kukin [ 17 апр 2011 14:50 ]
Заголовок сообщения:  Re: XML против Reports

Purpose
Цільове призначення (використання) земельної ділянки
Текстовий (згідно із документацією із землеустрою)
и менеджер обменных файлов "намекает", мол он "тупа" текстовый(без номера), указывая на ошибку!
надо нормал и экспликацию поправить :wink:
________________________________________
экспликация исправится легко ,а вот нормал надо пофиксить

Автор:  Dmitry_Zolotar [ 18 апр 2011 09:44 ]
Заголовок сообщения:  Re: XML против Reports

Новый классификатор целевых назначений введен 15.02.2011, то есть позже Наказа 573, использование нового классификатора неизбежно :). И в схему и в Менеджере будут внесены исправления/изменения.

Автор:  Dmitry_Zolotar [ 18 апр 2011 11:16 ]
Заголовок сообщения:  Re: XML против Reports

Площадь участка:
XPath('InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelMetricInfo/Area/Size')

Периметр участка:
используем функцию GetPerimeter из вложенного примера
function GetPerimeter(ParcelNumber:Integer; IncludeInternals:Boolean):Double;
Первый параметр - номер участка, пока всегда равен 1. Вторым параметром задаем включать или не включать в подсчет периметра внутренние контура.

Вложения:
AreaPerimeter.zip [1.4 Кб]
Скачиваний: 542

Автор:  kukin [ 18 апр 2011 12:02 ]
Заголовок сообщения:  Re: XML против Reports

За примерчик огромное спасибо, будем пробовать!
коменты бы в примерчик :roll:
Dmitry_Zolotar писал(а):
Площадь участка:
XPath('InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelMetricInfo/Area/Size')

а как быть с ограничениями, там ссылочки не работают?

Автор:  Dmitry_Zolotar [ 18 апр 2011 13:06 ]
Заголовок сообщения:  Re: XML против Reports

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

Автор:  kukin [ 18 апр 2011 14:38 ]
Заголовок сообщения:  Re: XML против Reports

попытался расписать
const
ParcelsPath='InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels';
// непонятно для чего
PerimeterFormat='0.00';//формат переменной
var AreaStr,PerimeterStr:String;//задаём типы переменных
N:Integer;

function GetPerimeter(ParcelNumber:Integer; IncludeInternals:Boolean):Double;
//название самой функции
var R,P:Double; Path:String; ULID,LinesCount,LineCount:Integer; //переменные
begin
R:=0.0;
//переменная которая в себе будет нести периметр
Path:='InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo['+IntTostr(ParcelNumber)+']'; //путь к дилянке с номером ParcelNumber
LinesCount:=NodesCount(Path+'/ParcelMetricInfo/Externals/Boundary','Lines'); //количество наружных блоков линий
for I:=1 to LinesCount do //перебор от одного до количества линий
begin
LineCount:=NodesCount(Path+'/ParcelMetricInfo/Externals/Boundary/Lines['+IntToStr(I)+']','Line');
//количество наружных линий текущего блока
for J:=1 to LineCount do //перебор по
begin
ULID:=StrToInt(XPath(Path+'/ParcelMetricInfo/Externals/Boundary/Lines['+IntToStr(I)+']/Line['+IntToStr(J)+']'));
//подбор текущего номера линий
P:=StrToFloat(XPath('InfoPart/MetricInfo/Polyline/PL['+IntToStr(ULID)+']/Length')); //текущая длина линии
R:=R+P;//сумма длин линий
end;
end;
if IncludeInternals then if IsNodeExists(Path+'/ParcelMetricInfo/Externals/Internals/Boundary') then
//если существует внутренняя граница
begin
LinesCount:=NodesCount(Path+'/ParcelMetricInfo/Externals/Internals/Boundary','Lines');
//количество внутренних блоков линий
for I:=1 to LinesCount do//перебор от первой до последней линии
begin
LineCount:=NodesCount(Path+'/ParcelMetricInfo/Externals/Internals/Boundary/Lines['+IntToStr(I)+']','Line');
// количество внутренних линий текущегоблока
for J:=1 to LineCount do //перебор по внутренним линиям
begin
ULID:=StrToInt(XPath(Path+'/ParcelMetricInfo/Externals/Internals/Boundary/Lines['+IntToStr(I)+']/Line['+IntToStr(J)+']'));
//подбор текущего номера линии
P:=StrToFloat(XPath('InfoPart/MetricInfo/Polyline/PL['+IntToStr(ULID)+']/Length')); //текущая длина линии
R:=R+P; //сумма всех линиий
end;
end;
end;
Result:=R;
//вывод результата функции сумой всех длин линий
end;
begin
N:=1;
AreaStr:=XPath('InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo['+IntToStr(N)+']/ParcelMetricInfo/Area/Size');
//площадь по пути..
PerimeterStr:=FormatFloat(PerimeterFormat,GetPerimeter(N,True)); //вывод периметра с до 2 знаков после нуля в отчет
end.
но почему то функция у меня не работает :?:
а площадь считает..

Вложения:
.JPG
.JPG [ 8.28 Кб | Просмотров: 13929 ]

Автор:  Dmitry_Zolotar [ 18 апр 2011 15:33 ]
Заголовок сообщения:  Re: XML против Reports

Проблема в разделителе целой и дробной части, решается использованием функции AnyStrToFloat.
Вместо
P:=StrToFloat(XPath('InfoPart/MetricInfo/Polyline/PL['+IntToStr(ULID)+']/Length')); //текущая длина линии
поставить
P:=AnyStrToFloat(XPath('InfoPart/MetricInfo/Polyline/PL['+IntToStr(ULID)+']/Length')); //текущая длина линии
и добавить функцию AnyStrToFloat из, допустим, экспликации.

Автор:  Guevara [ 18 апр 2011 15:58 ]
Заголовок сообщения:  Re: XML против Reports

извините за оффтоп. а будут ли такие же шаблоны в Reports для XML как и для in4, или придется самому их писать?

Автор:  Dmitriy Fedorov [ 18 апр 2011 16:14 ]
Заголовок сообщения:  Re: XML против Reports

Guevara писал(а):
а будут ли такие же шаблоны в Reports для XML как и для in4, или придется самому их писать?

Вот как раз этим тут парни и занимаются, какой бы тарабарщиной это не казалось. ;)
Точнее, для начала, учат программу извлекать инфу из xml полей.

Автор:  kukin [ 18 апр 2011 17:13 ]
Заголовок сообщения:  Re: XML против Reports

Dmitry_Zolotar писал(а):
Проблема в разделителе целой и дробной части, решается использованием функции AnyStrToFloat.
Вместо
P:=StrToFloat(XPath('InfoPart/MetricInfo/Polyline/PL['+IntToStr(ULID)+']/Length')); //текущая длина линии
поставить
P:=AnyStrToFloat(XPath('InfoPart/MetricInfo/Polyline/PL['+IntToStr(ULID)+']/Length')); //текущая длина линии
и добавить функцию AnyStrToFloat из, допустим, экспликации.

Поучительно, на другой "машине" регианальніе настройки я правил, и с разделителем "точка" все работает на ура.
Одно поле из диалогового(чуть язык не сломал) окна пропало
Спасибо, за подсказку на функцию.

Вот тут дело дошло и до экспликации.
Дело в том, что в техничке, в пояснительной записке пишется экспликация земель как в ХМЛ файле, тобиш которая будет после "выдачи акта"(и она уже слизана с готового шаблона).
А в экспликацию которую "дает" зем. отдел заносятся данные которые были, и они не всегда сходятся с теми, которые будут.
Одним словом идея такова:
- Растрепать по кусочкам экспликацию Дмирия (чтоб в ней разобратся)
- Добавить в неё переменные из диалогового окна (можно ли вносить переменные из диалоговых окон перед обработкой кода?)
- создать вторую экспликацию от Зем.отдела (кстати, полезно продвинутым зем.отделам)
Вот такой страшнейший план я задумал Изображение

Автор:  kukin [ 18 апр 2011 20:28 ]
Заголовок сообщения:  Re: XML против Reports

В общем полностью разобратся в коде вряд получится.
Но наверно это и не потребуется, нам важна процедура AddMemoToBody
Я не собираюсь делать шаблон на "зміну цільового призначення", по этому будут меняться только поля Номер рядка, Власники землі, землекористувачі .., Шифр рядка, возможно Код цільового використання. Вот эти поля отвечают за занесение в столбцы А,Б,В нужных нам переменных:
case StringPart(SL[Col],1,chr(9)) of
'А':if XMLMode
then Memo.Text:=SEF(XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors/ProprietorInfo/ProprietorCode'),'KZ.txt')
else Memo.Text:=SEF(Param('KZ',Row),'KZ.txt');
'Б':begin
if XMLMode
then Memo.Text:=PrepareXMLNMList(',')
else Memo.Text:=' '+Param('NM',Row);
HAlign:=haLeft;
end;
'В':if XMLMode
then Memo.Text:=XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors/ProprietorInfo/ProprietorCode')
else Memo.Text:=Param('KZ',Row);
'Г':if XMLMode
then Memo.Text:=XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/CategoryPurposeInfo/Purpose')
else Memo.Text:=Param('CV',Row);
'02':begin
if XMLMode
then Memo.Text:=XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelMetricInfo/Area/Size')
else begin
Memo.Text:=Param('AS',Row);
if Areas[(Row-1)*SL.Count+Col]<>AnyStrToFloat(Param('AS',Row))
then Font.Color:=clRed;

Дмитрий, пожалуйста поверхностно опешите алгоритм последовательности выполнения процедур и функций, чтоб решить как создать вторую форму 6-зем, её "клон" с измененными memo.
Как создать "клон", чтоб небыло повторяющихся имен?
Хотел узнать, можно ли не лазить в код, а "переназначать" текст клону, через диалоговое окно, по имени создаваемого memo?

Страница 4 из 20 Часовой пояс: UTC + 2 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/