Аналитика 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: Зачем создавать список склонений, если склонение работает с женскими именами: "міська рада", "сільська рада" "адміністрація"? надо всего [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 Цільове призначення (використання) земельної ділянки Текстовий (згідно із документацією із землеустрою) и менеджер обменных файлов "намекает", мол он "тупа" текстовый(без номера), указывая на ошибку! надо нормал и экспликацию поправить ________________________________________ экспликация исправится легко ,а вот нормал надо пофиксить |
Автор: | 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. Вторым параметром задаем включать или не включать в подсчет периметра внутренние контура.
|
Автор: | kukin [ 18 апр 2011 12:02 ] |
Заголовок сообщения: | Re: XML против Reports |
За примерчик огромное спасибо, будем пробовать! коменты бы в примерчик 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. но почему то функция у меня не работает а площадь считает..
|
Автор: | 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/ |