Аналитика

Цифровая фотограмметрия, картография и землеустройство
Текущее время: 28 мар 2024 11:31

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 300 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 20  След.
Автор Сообщение
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 06 апр 2011 08:15 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
Никто не мешает "надругаться" над mysetup.ini, например

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 06 апр 2011 09:19 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
06 фев 2008 18:09
Сообщения: 312
Откуда: Ужгород
Цитата:
Никто не мешает "надругаться" над mysetup.ini, например

Как это ? :shock:
Не понимаю выгоды.
Лишенный 21го стандартного файла LEdit.exe все равно не выживет.

_________________
ГрызЁм гранит науки, и внедряем осколки в массы!


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 06 апр 2011 10:26 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
kukin писал(а):
Цитата:
Никто не мешает "надругаться" над mysetup.ini, например

Как это ? :shock:
Не понимаю выгоды.
Лишенный 21го стандартного файла LEdit.exe все равно не выживет.

Файлы из дистрибутива можно было оставить, а в mysetup.ini ссылаться на другие файлы
kukin писал(а):
В этом шаблоне практически все работает без сбоев, надо лишь решить вопрос с открытием изображения(я просто его отключил):

Скрипт, подобный приведенному ниже, используется регистратором для формирования кадплана позем.книги по шаблону LBCP.dmt и сохранения его в растр под "правильным" именем.
Для формирования поземельной книги из Digitals:
1. Откройте XML-файл
2. Выполните скрипт
$PP=@ProgramPath
$N=@Map.Count
$I=0
%Loop
$I=$I+1
$LID=@Map.Object[$I].LayerID
@If $LID=70005 then @GoTo %Exit
@If $I<$N then @GoTo %Loop
@Break Не найден объект слоя XML-ділянка
%Exit
@Map.SelectObject $I
Документы | LBCP
$CPMap=@ActivateMap
@Dialog.WaitBox Отредактируйте кадастровый план и нажмите кнопку "Продолжить"
Файл | Сохранить
$FN=@Map.ClearShortFilename
@CreateFolder $PP\Pictures\
$FN=$PP\Pictures\$FN.bmp
@Map.SaveToTIF 300 24 $FN
@CloseMap $CPMap

3. Запустите генератор отчетов.

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 06 апр 2011 14:17 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
06 фев 2008 18:09
Сообщения: 312
Откуда: Ужгород
Цитата:
а в mysetup.ini ссылаться на другие файлы

Это понятно, притом надо все шаблоны перелапатить с setup.ini на mysetup.ini, этим самым отречься от следующих стандартных шаблонов.
Сохранив жизнь LEdit, еще больше усложнив программу и её понимание.
Цитата:
Файлы из дистрибутива можно было оставить

Можно и не использовать setup.ini, а работать на прямую с txt, и менять ничего не придется, в любом случае количество файлов-списков еще увеличится.
Надо помозговать над альтернативным методом редактирования списков.

За скрипт отдельное спасибо(редко ими пользуюсь).

_________________
ГрызЁм гранит науки, и внедряем осколки в массы!


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 07 апр 2011 15:56 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
06 фев 2008 18:09
Сообщения: 312
Откуда: Ужгород
Все-таки решил "похоронить" LEdit, буду править setup.ini.
А для "пакетной" правки я верну родной setup.ini (на время правки списка) выполню изменения, и снова верну рабочий ИНИ файлик на место.
Более разумного решения пока не вижу, разве править LEdit, но это не в моих силах, и приоритет тут не высок :D

_________________
ГрызЁм гранит науки, и внедряем осколки в массы!


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 07 апр 2011 23:01 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
06 фев 2008 18:09
Сообщения: 312
Откуда: Ужгород
Цитата:
1. Откройте XML-файл
2. Выполните скрипт
$PP=@ProgramPath
$N=@Map.Count
$I=0
%Loop
$I=$I+1
$LID=@Map.Object[$I].LayerID
@If $LID=70005 then @GoTo %Exit
@If $I<$N then @GoTo %Loop
@Break Не найден объект слоя XML-ділянка
%Exit
@Map.SelectObject $I
Документы | LBCP
$CPMap=@ActivateMap
@Dialog.WaitBox Отредактируйте кадастровый план и нажмите кнопку "Продолжить"
Файл | Сохранить
$FN=@Map.ClearShortFilename
@CreateFolder $PP\Pictures\
$FN=$PP\Pictures\$FN.bmp
@Map.SaveToTIF 300 24 $FN
@CloseMap $CPMap
3. Запустите генератор отчетов.

Выполнил все что было указано, пришлось добавить папку Documents в корень программы.
Одна поправка, сначала приходится генерить шаблон LBCP через сервис документы, а уж потом нажимать кнопочку(я пока поверхностно рассматривал скрипты, по этому могут возникать глупые вопросы).
Тогда нужное изображение создается и вставляется в отчет.
Вывод: LBCP.dmt отличная заготовка для шаблонов дигиталса.

Добавлено:

Очень интересно работают скрипты, на одном компьютере генерируется с ХМЛ файла, а на другомкнопка вовсе "отвисает" :shock:
«I'll think about it tomorrow»

_________________
ГрызЁм гранит науки, и внедряем осколки в массы!


Последний раз редактировалось kukin 08 апр 2011 13:05, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 08 апр 2011 00:57 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
06 фев 2008 18:09
Сообщения: 312
Откуда: Ужгород
Первое, что требуется в техничке, это читабельно записанный адрес земельного участка.
За него в шаблоне отвечает переменная ParcelLocation (строка).
За него отвечает код.
if XMLMode
then begin
ParcelLocation:='';
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelLocation/Urban')
then begin
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress')
then begin
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')
and IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetName')
then begin
ParcelLocation:=XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')+' '+
XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetName');
if ParcelLocation<>''
then begin
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building')
then ParcelLocation:=ParcelLocation+', б.'+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building');
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Block')
then ParcelLocation:=ParcelLocation+', корп.'+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Block');
end;
end;
end;
end
else ParcelLocation:='за межами населенного пункта';
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Settlement')
then ParcelLocation:=ParcelLocation+', '+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Settlement');
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/District')
then ParcelLocation:=ParcelLocation+', '+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/District');
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Region')
then ParcelLocation:=ParcelLocation+', '+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Region');
end
else begin
//todo
ParcelLocation:='';
//-todo
end;

В этоге мы имеем текст в таком виде:
вулиця Головна, б.-, корп.-, м.Чоп, Закарпатська область
Не совсем читабельно, придется добавить проверку на пустые строки "-" и создать сокращенную форму элемента StreetType:
для начала сделаем сокращение:
StreetType:='';
begin
if
XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')='вулиця'
then
StreetType:='вул.'
else if XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')='провулок'
then StreetType:='пров.'
else if XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')='проспект'
then StreetType:='просп.'
else if XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')='бульвар'
then StreetType:='б-р.'
else if XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')='площа'
then StreetType:='пл.'
else StreetType:=XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType');
end;
if XMLMode
then begin
ParcelLocation:='';
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelLocation/Urban')
then begin
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress')
then begin
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')
and IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetName')
then begin
ParcelLocation:=StreetType+' '+
XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetName');
if ParcelLocation<>''
then begin
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building')
then ParcelLocation:=ParcelLocation+', б.'+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building');
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Block')
then ParcelLocation:=ParcelLocation+', корп.'+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Block');
end;
end;
end;
end
else ParcelLocation:='за межами населенного пункта';
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Settlement')
then ParcelLocation:=ParcelLocation+', '+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Settlement');
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/District')
then ParcelLocation:=ParcelLocation+', '+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/District');
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Region')
then ParcelLocation:=ParcelLocation+', '+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Region');
end
else begin
//todo
ParcelLocation:='';
//-todo
end;

вуаля: вул. Головна, б.-, корп.-, м.Чоп, Закарпатська область
надеюсь я на ночь глядя ничего не натупил

_________________
ГрызЁм гранит науки, и внедряем осколки в массы!


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 08 апр 2011 13:14 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
06 фев 2008 18:09
Сообщения: 312
Откуда: Ужгород
Решил вопрос "пустых" тегов такими кодами:
if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building') //Номер будинку
then begin
if (XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building')<>'-')
and (XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building')<>'')
//проверка на наличие пропуска и символа "-"
then begin ParcelLocation:=ParcelLocation+' буд.'+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building');// добовляем Номер будинку

теперь адрес полностью читабелен: вул.Головна, м.Чоп, Закарпатська область

Хотел показать, что notpad++ очень здорово мне помагает в написании кодов, может кто более интересное ПО юзает?


Вложения:
Комментарий к файлу: работа с синтаксисом
notpade++.JPG
notpade++.JPG [ 182.43 Кб | Просмотров: 13312 ]

_________________
ГрызЁм гранит науки, и внедряем осколки в массы!
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 08 апр 2011 14:47 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
Я противник того чтоб вместо отуствующих данных вставлять "-", есть данные - создается тег, нет данных - не создается тег. Тогда отсутствие тега сразу говорит об отсутствии данных:
if IsNodeExists(Path,Tag)
then ..... //есть тег - значит есть данные, даже если это пустая строка
else .....; //нет тега - нет данных

А пустые теги создаются только там где наличие/отсутствие какого-то тега имеет какой-то смысл, например в "Відношення до населенного пункту" :
<ParcelLocationInfo>
....
<ParcelLocation>
<Urban/>
</ParcelLocation>
....
</ParcelLocationInfo>

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 08 апр 2011 15:31 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
06 фев 2008 18:09
Сообщения: 312
Откуда: Ужгород
Цитата:
Я противник того чтоб вместо отуствующих данных вставлять "-"

Тут вроде проверка содержания элемента не противоречит вашей идее. Просто дополняет.
Обменник с которым работаю, взят от "войнов" местного ДЗК, по их словам он сотворён на все 100% правильно, по образу и подобию "великой методической рекомендации" и конвертера!
Теперь я по другую сторону баррикады, и конфликтовать по таким вещам, это подстава тому флагу под которым ныне хожу.
Я думаю многое само устаканится, а может придется внушение проводить, если найду ссылку в нормативных актах и кончится терпение :twisted: .

_________________
ГрызЁм гранит науки, и внедряем осколки в массы!


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 08 апр 2011 15:47 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
06 фев 2008 18:09
Сообщения: 312
Откуда: Ужгород
Насколько я понял ребят из нашего филиала ДЗК, формируют обменник конвертером из ин4, со всеми вытикающими последствиями (символы"-", нарезанные контура угодий под ограничениями итд..).
Все руководствуются золотым правилом "инициатива, сношает инициатора" и сидят молча.


___________________________________________________

Добавлено:
Представители ДЗК утверждают, что менеджер обменных файлов версии 1.16, ругается на отсутствие веточки "будівля", считая это ошибкой.
По этому заполняют поля "-", при этом ошибка пропадает
Проверил, ошибки как таковой нет, но поле "будівля" удалить не могу.

_________________
ГрызЁм гранит науки, и внедряем осколки в массы!


Последний раз редактировалось kukin 13 апр 2011 14:21, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 08 апр 2011 16:01 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
06 фев 2008 18:09
Сообщения: 312
Откуда: Ужгород
следующий этап, это добовление к имени физ.лица приставки "гр."
тут надо провести поиск по:
/UkrainianCadastralExchangeFile/InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors/ProprietorInfo/Authentication/NaturalPerson
/UkrainianCadastralExchangeFile/InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors/ProprietorInfo/Authentication/LegalEntity
вроде так? :roll:
а в ин4 это делалось по идентификационному

это производится переменной ProprietorFullNameList,
которая в ХМЛ режиме приравнивается функции:
function PrepareXMLNMList(Delimeter:Char):String; // имя самой функции (микропрограммы)
var I,N:Integer; S,PPath:String; //переменные в теле функции
begin
Result:='';
//эта переменная выводится как результат действия функции
PPath:=XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors'; // путь "Блок опису усіх власників або користувачів земельної ділянки "
N:=NodesCount(PPath,'ProprietorInfo');//количество владельцев-пользователей
if N<1 then Exit;//проверка на наличие нескольких владельцев-пользователей
for I:=1 to N do // пошел перебор поштучно каждого пользователя
if IsNodeExists(PPath+'/ProprietorInfo/Authentication/NaturalPerson')//проверка на физ.лицо
then Result:=Result+
XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/LastName')+' '+
XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/FirstName')+' '+
XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/MiddleName')+IIF(I<>N,Delimeter+' ','')
//суммирует поштучно переменную Result с Ф.И.О.(полное)
else Result:=Result+XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/LegalEntity/Name')+IIF(I<>N,Delimeter+' ','')// суммирует названия юр.лиц
end;

_________________
ГрызЁм гранит науки, и внедряем осколки в массы!


Последний раз редактировалось kukin 08 апр 2011 17:04, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 08 апр 2011 16:28 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
kukin писал(а):
следующий этап, это добовление к имени физ.лица приставки "гр."

function PrepareXMLNMList(Delimeter:Char):String;
var I,N:Integer; S,PPath:String;
begin
Result:='';
PPath:=XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors';
N:=NodesCount(PPath,'ProprietorInfo');
if N<1 then Exit;
for I:=1 to N do
if IsNodeExists(PPath+'/ProprietorInfo/Authentication/NaturalPerson')
then Result:=Result+'гр. '+
XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/LastName')+' '+
XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/FirstName')+' '+
XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/MiddleName')+IIF(I<>N,Delimeter+' ','')
else Result:=Result+XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/LegalEntity/Name')+IIF(I<>N,Delimeter+' ','')
end;

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 08 апр 2011 16:33 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
06 фев 2008 18:09
Сообщения: 312
Откуда: Ужгород
Спасибо Дмитрий!
Только разжевал для себя функцию и собрался расписать её "по косточкам", но не успел)
Добавлю в предыдущее свое сообщение комментарии.
____________________________________________________
Объясню почему это важно, к примеру в техническом задании надо указывать имя-название владельца-пользователя,и его адрес
При этом получится довольно сложная таблица, а значит и функция которая с этим работает.
PS:мне когда-то понимание функций казалось сверхъестественным :wink:
____________________________________________________
У меня еще один вопросик, существуют ли нормативные документы описывающие "формат" адреса в технической документации?

_________________
ГрызЁм гранит науки, и внедряем осколки в массы!


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: XML против Reports
СообщениеДобавлено: 08 апр 2011 18:17 
Гуру
Гуру
Аватара пользователя

Зарегистрирован:
06 фев 2008 18:09
Сообщения: 312
Откуда: Ужгород
Раньше для ин4 я использовал такие функции:
[AllOwn(OwnerCount(PARAM('NM')))] - переменная в теле отчета

begin
if PARAM('KF')<>'' then
KFvar:='гр.' else KFvar:='';
//определение по параметру KF физ.лица
end;



function AllOwn(N:integer):string; //функция добавляющая "гр." к именам
var i: integer;
begin
Result:='';
for i:=0 to N-1 do
//все тотже перебор
begin
Result:=Result+ KFvar+FIO(GetOwner(PARAM('NM'), i));
// само действие добавления
if i<N-1 then Result:=Result+', ';
end;
end;


а это я где-то позаимствовал :roll:
function GetOwner(S:string; N:integer):string; // Виділяємо співвласника за заданим номером
var i,k:integer;
SS:string;
begin
i:=-1; SS:=S;
//i будет указывать номер текущего пользователя; чтобы не "портить" исходные данные запихиваем ее значение в другую переменную для дальнейшей "препарации"
Result:=''; // рельтат пока будет пустая строка
repeat // начинаем цикл
k:=Pos(Sym,SS); // ищем разделитель в строке
inc(i); // увеличиваем текущего пользователя на 1
if k>0 then // если нашли разделитель
begin
if i=N then Delete(SS,k,Length(SS))
// и если номер текущего пользователя тот, что нам надо, удаляем все, что за разделителем и сам разделитель - таким образом остается только пользователь
else Delete(SS,1,k); // удаляем часть строки перед ним и его самого - тогда в следующем цикле найдется следующий разделитель
end;
if i=N then
// если номер текущего пользователя тот, что нам надо
Result:=SS; // то запихиваем в результат уже "готового" пользователя
until (i=N) or (k=0); // повторяем процедуру до тех пор, пока не дойдем до требуемого пользователя или не останется разделителей
end;
___________________________
вспомнил... делал под чутким руководством Antonа Gorpynichа
___________________________
забыл про еще одну функцию:
function OwnerCount(S:string): integer; // Визначаємо кількість співвласників
var i:integer;
SS: string;
begin
Result:=0;
// Сначала их было ноль
SS:=S; // Чтобы не "портить" исходные данные запихиваем ее значение в другую переменную для дальнейшей "препарации"
repeat // так начинается цикл
i:=Pos(Sym,SS); // ищем разделитель в строке
if i>0 then Delete(SS,1,i); // если разделитель нашелся, то удаляем часть строки перед ним и его самого - тогда в следующем цикле найдется следующий разделитель
inc(Result) // увеличиваем кол-во пользователей на 1
until i=0; // повторяем цикл до тех пор, пока Pos находит разделители
end;
коменты оставил как есть.

_________________
ГрызЁм гранит науки, и внедряем осколки в массы!


Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 300 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 20  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 104


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB