Библиотека полезных скриптов

Скрипт заполняет значение параметра ID7000580 (при отсутствии такого параметра скрипт его создает и делает доступным слою XML:Земельна ділянка) списком собственников земельных участков в картах на основе XMLNormal.dmf. Разделитель в списке - запятая.

$MON=0
$MC=@Map.Count
@if $MC<1 then @Goto %Exit
;создаем параметр ID7000580 при отсутствии
$S=@Map.Parameters.Get ID7000580
@if $S= then @Map.Parameters.Add 7000580 5 Список владельцев
;добавляем параметр ID7000580 в список доступных слою XML : Земельна ділянка
$S=@Map.Layers.GetValidParameters ID70005
@Map.Layers.SetValidParameters ID70005 $S ID7000580
;цикл для всех объектов в карте
%NextObject
$MON=$MON+1
;проверка слоя объекта
$LID=@Map.Object[$MON].LayerID
@if $LID<>70005 then @Goto %IgnoreObject
;получаем значение параметра, содержащего информацию о собственниках
$PP=@Map.Object[$MON].Parameter[ID7000520]
;определяем кол-во собственников
$PC=@XML.NodeCount /Proprietors ProprietorInfo $PP
;пропускаем незаполненные
@if $PC<1 then @Goto %IgnoreObject
;для каждого собственника
$I=0
$Res=
%Loop
$I=$I+1
;определяем тип (юр. или физ. лицо)
$IsLE=@XML.NodeCount ProprietorInfo[$I]/Authentication LegalEntity $PP
@if $IsLE=1 then @Goto %LegalEntity
;для физлиц получаем
;фамилию
$LN=@XML.XPath ProprietorInfo[$I]/Authentication/NaturalPerson/FullName/LastName $PP
;имя
$FN=@XML.XPath ProprietorInfo[$I]/Authentication/NaturalPerson/FullName/FirstName $PP
;отчество
$MN=@XML.XPath ProprietorInfo[$I]/Authentication/NaturalPerson/FullName/MiddleName $PP
;игнорируем физлиц без фамилии
@if $LN= then @Goto %Continue
;добавляем разделитель списка для не первых по порядку собственников
@if $Res<> then $Res=$Res,
;добавляем ФИО в Список
$Res=$Res$LN $FN $MN
@Goto %Continue
;для юрлиц
%LegalEntity
;получаем название
$N=@XML.XPath ProprietorInfo[$I]/Authentication/LegalEntity/Name $PP
;игнорируем незаполненные
@if $N= then @Goto %Continue
;добавляем разделитель списка для не первых по порядку собственников
@if $Res<> then $Res=$Res,
;добавляем название в Список
$Res=$Res$N
%Continue
@if $I<$PC then @Goto %Loop
@if $Res= then @Goto %IgnoreObject
;вносим список в параметр ID7000580
@Map.Object[$MON].Parameter[ID7000580] $Res
%IgnoreObject
@if $MON<$MC then @Goto %NextObject
%Exit

P.S. Ged.exe лучше обновить, исправлена ошибка при работе функции XPT, возникающая при наличии в XML-параметрах символов “(”,“)”,“|”.