Самый гибкий вариант - это использование скриптов Digitals. Скрипт можно сохранить в нужном слое DMT шаблона и заставить его активироваться по событию. Например, использовать слой участка и запускать скрипт по событию %Events.OnAdd. При этом вы сможете выполнять все необходимые действия при генерации документа на основе DMT шаблона.
Как убрали, только вчера добавили
Так бы я ее и вовсе не замеметил ![]()
Задач серьезных по этому поводу нет.
Есть кнопка для поворота @Map.Selected.Rotate 1 подумал что можно в цикле на пару с новой функциеей использовать (при нажатой кнопке - поворачивать), или я неправильно понял ее действие ?
А за идею с %Events.OnAdd спасибо, буду пробовать.
А ну значит, я просто не в курсе последних событий. Надо обновить Digitals ![]()
Нажатие на кнопку с обработчиком событий меняет состояние “нажата/не нажата”. Для них актуально проверять @ToolbarButtonState.
Обычная кнопка запускает скрипт в момент отпускания, потому @ToolbarButtonState=0 всегда для этой кнопки в скрипте.
С этим ясно, спасибо
Есть еще вопросы ![]()
Как “добыть” из XML/Місцерозташування земельної ділянки значение Urban/ или Rural/ (в межах/за межами)? @XML.XPath -запрос не дает результата, наверное из за того что Urban/ и Rural/ тоже являются тегами ![]()
Для определения наличия тега можно использовать функцию @XML.NodeCount Query Tag XMLString где в Query указывать путь к родительскому тегу, а в Tag имя искомого дочернего элемента.
Что-то у меня с дружественным XML-форматом сразу не заладилось. Напишите пожалуйта пример для Urban, заранее спасибо.
$N=@Map.SelectedObject
@If $N<=0 @Break Выделите XML участок
$XML=@Map.Object[$N].Parameter[ID7000500]
$Path=/ParcelLocationInfo/ParcelLocation
$Found=@XML.NodeCount $Path Urban $XML
@if $Found>0 then @Dialog.Message Участок в черте города
@if $Found=0 then @Dialog.Message Участок за городом
От воно, як все просто. Ще раз дякую за допомогу !
Немного “разобрался” с событиями %Events - узнал много нового и интересного
Но так и не нашел ответа на вопрос - как передать значение переменной из скрипта в заранее подготовленую таблицу местоположение, размер, “форматирование” которой определяется DMT шаблоном. Да можно использовать %Events.OnAdd - посоздавать/позаполнять параметры какого-либо слоя и создать для них подпись, но это “шаг назад” в оформлении плана.Функции FIL и SEF + обмен значений через файл txt - вполне себе рабочий вариант но только на один раз
Может разработчики согласятся их “допилить”, а именно - считывать данные из файла каждый раз при обращении, или это ломает логику их работы
Всю обработку данных из XML сегодня можно полноценно делать в скрипте и необходимость в генераторе отчета для построения кад.плана как бы отпадает…
Надо добавить команду скрипта меняющую содержимое объектов-таблиц? Сделаем
Такая команда уже есть - это @Map.Object[N].TableText [NewText]
параметром задаем текст таблицы, разделитель между строками - возврат каретки, разделитель между ячейками - табулятор
получить табулятор в скрипте можно так:
$Tab=@Calc char(9)
$Tab=@DequoteText $Tab
Пример работы @Map.Object[N].TableText:
;Скрипт меняет содержимое помеченной таблицы
$Tab=@Calc char(9)
$Tab=@DequoteText $Tab
$Col2=X
$Col3=Y
$Row=Номер п/п
$Row=$Row$Tab$Col2
$Row=$Row$Tab$Col3
@Text[1].Add $Row
$Col2=2.3
$Col3=3.5
$Row=1
$Row=$Row$Tab$Col2
$Row=$Row$Tab$Col3
@Text[1].Add $Row
$Col2=3.6
$Col3=-4.5
$Row=2
$Row=$Row$Tab$Col2
$Row=$Row$Tab$Col3
@Text[1].Add $Row
$S=@Text[1].Text
$SO=@Map.SelectedObject
@Map.Object[$SO].TableText $S
Вид | Обновить
Как раз то что надо. И за пример использования спасибо, так бы сходу не разобрался.
Здравствуйте. За выходные под собирал вопросов 
Ошибка возникает если количество строк в скрипте превышает 256, маловато
, а с текстовыми файлами
работать неудобно, ввиду отсутствия “подсветки” переменных, да еще и с большим объемом текста.
Вот бы функцию для открытия текстового файла в окне редактирования скрипта ? Такое возможно ?
Как выполнить склонение по падежам ROP и DAP в скрипте ?
Нарыл на форуме:
$SO=@Map.SelectedObject
$ROPNM=@Map.Object[$SO].CalculateFormula ROP(P[NM])
@Dialog.Message $ROPNM
Для in4 - работает. Как поступить если значение получаем из XML-файла при помощи @XML.XPath ?
Имеем:
$ADR=садівниче товариство “Енергія”
$Length=@Calc Length(“$ADR”)
@Dialog.Message $Length
Думаю проблема понятна … Можно как-то побороть или это тупик ?
Без проверки количества собственников и их типа (физособа или юрособа)
$SO=@Map.SelectedObject
$Props=@Map.Object[$SO].Parameter[ID7000520]
$LastName=@XML.XPath /Proprietors/ProprietorInfo[1]/Authentication/NaturalPerson/FullName/LastName $Props
$FirstName=@XML.XPath /Proprietors/ProprietorInfo[1]/Authentication/NaturalPerson/FullName/FirstName $Props
$MiddleName=@XML.XPath /Proprietors/ProprietorInfo[1]/Authentication/NaturalPerson/FullName/MiddleName $Props
$FullName=$LastName $FirstName $MiddleName
@Dialog.Message $FullName
$ROPNM=@Map.Object[$SO].CalculateFormula ROP($FullName)
@Dialog.Message $ROPNM
Для N-ого собственника заменить порядковый номер в …ProprietorInfo[1]…
Дякую, як завжди все просто …
$CN=@Map.XMLCadastralNumber
$KO=@Calc Copy($CN,1,8)
Як за допомогою скрипта витягти із текстового списку “RadaNM” ПІБ голови місцевої ради і записати в якусь змінну за КОАТУУ (перші 8 цифр параметра $CN), за аналогією з функцією SEF(CUT(1,8,P[ID106]),RadaNM.txt)
Как-то так
$SO=@Map.SelectedObject
$CN=@Map.XMLCadastralNumber
$RadaID=@Calc Copy($CN,1,8)
$RadaID=@DequoteText $RadaID
$RadaNM=@Map.Object[$SO].CalculateFormula SEF($RadaID,RadaNM.txt)
Помогите скриптом плс. нужно выделенный полигон перенести на другую карту(где будут другие полигоны) и в зависимости внутрь какого он полигона попадет унаследовать некоторые параметры и перенести эти параметры на первоначальную карту. (как же криво я описал). т.е. выделяем объект на открытой карте, потом открываем дмф где лежат полигоны внутрь которых он должен попасть, переносим его туда, наследуем нужные параметры и вставляем обратно спец вставкой только параметры, закрываем дмф из которого наследовались параметры.
Вот сделал пример Библиотека полезных скриптов - #16 від Bondarets_Alexander

