Все про скрипти

@Map.SelectAll
$S=@Map.Selected.GetMinMax
$X1=@StringPart 1 $S
$Y1=@StringPart 2 $S
$X2=@StringPart 4 $S
$Y2=@StringPart 2 $S
$X3=@StringPart 4 $S
$Y3=@StringPart 5 $S
$X4=@StringPart 1 $S
$Y4=@StringPart 5 $S
$FrameObj=@Map.NewObject ID70000
@Map.Object[$FrameObj].Point[1] $X1 $Y1
@Map.Object[$FrameObj].AddPoint $X2 $Y2
@Map.Object[$FrameObj].AddPoint $X3 $Y3
@Map.Object[$FrameObj].AddPoint $X4 $Y4
@Map.Object[$FrameObj].AddPoint $X1 $Y1
@Map.RefreshObject $FrameObj
@Map.DeselectAll
@Map.SelectObject $FrameObj
@SendChars 5
[ Операції з об’єктами.Розширити/стиснути ]
@Map.DeselectAll
@Map.SelectObject $FrameObj
@Map.Selected.Delete

Щоб передати значення параметрів в ексель
можна використовувати меню Сервіс - Звіт. Але там буде експортуватися разом з тегами.
можна використовувати спец. скрипт-модуль “Документація” (див. відео Модуль Документація та MS Word)

Доброго дня. Чи не можна зробити так, щоб функція @Map.GetPublicMapQuarterInfo $X $Y, коли відсутній доступ до інтернету, не працює Публічна кадастрова карта чи просто ділянка виходить за межі України, не виводила помилку, а повертала значення “0”?

Чи інший варіант - додати функцію, яка б перевіряла наявність доступу до ПКК

Як варіант - обробка помилки:@CheckErrors 0 $Res=@Map.GetPublicMapQuarterInfo $X $Y @CheckErrors 1 ;;перевірка, чи отримані дані з сервіса ПКК $YesError=@Calc Pos("<ERROR>","$Res") @If $YesError=0 then @Goto %BeingLoadedInfo ;;інформація про кадквартал не отримана з сервісу ПКК @Break Відсутнє з'єднання з мережею Internet або сервіс ПКК не працює ;;отримана інформація з ПКК %BeingLoadedInfo

Дякую, voha. Це дійсно варіант!

Переробили функції так, щоб вони повертали не помилку а пусту строку.

Приємно, коли підтримка в живому режимі. Чемно дякуємо за підтримку.

Очередной вопрос. Необходимо установить в скрипте условие - “если датум in4 - msk 73, то …” Какой командой это можно сделать?

$D=@Map.Datum
@if $D=SK63 then …
@if $D=MSK-73 then …

Благодарю.

Добрый день. Можно ли с помощью скрипта делать подписи длин сторон полигона, только те которые отвечают какому-либо условию? например выводить только те длины которые больше 1 м. В командах связанных с caption вроде бы ничего подобного нет.

Можна, але iз застосуванням всiх вiдомих менi можливостей програми :slight_smile: В даному випадку лiнiї L < 20 не пiдписуються.

$Sel=@Map.SelCount
@if $Sel=0 then @break Виберiть елементи
$Obj=@Map.NextSelected
$C1=@Calc Char(1)
$C2=@Calc Char(2)
$C3=@Calc Char(3)
$C1=@DequoteText $C1
$C2=@DequoteText $C2
$C3=@DequoteText $C3
;
$Buf=@Map.GetObjectParamBuf $Obj
; пошук шару для довжин лiнiй -10
$Pos=@Calc Pos($C1-10$C3,"$Buf")
@If $Pos=0 Then @Goto %ErrCaptionShow
$BufS=@Calc Copy("$Buf",1,$Pos-1)
$Buf=@Calc Delete("$Buf",1,$Pos-1)
$BufS=@DequoteText $BufS
$Buf=@DequoteText $Buf
;
$Pos=@Calc Pos("L257","$Buf")
$Pos=@DequoteText $Pos
@If $Pos=0 Then @Goto %ErrCaptionShow
$Pos=$Pos+1
;
$Count=@Map.Object[$Obj].Count
$I=1
%Cycle
$LineLen=@Map.Object[$Obj].LineLength[$I]
;-------------------------------------------------------------------------------
;                   умова(и) 
;-------------------------------------------------------------------------------
@If ($LineLen>20) Then @Goto %Next
;-------------------------------------------------------------------------------
$Buf=@Calc Insert(Delete("$Buf",$Pos,3),"385",$Pos)
$Buf=@DequoteText $Buf
%Next
$Pos=$Pos+4
;
$I=$I+1
@If $I<$Count Then @Goto %Cycle
$Buf=@Calc <addword>$BufS$Buf$C2
$Buf=@Calc Replace("$Buf","<addword>","$C1")
;
$Buf=@DequoteText $Buf
;
@Map.SetObjectParamBuf $Obj|$Buf
@Map.RefreshObject $Obj
@Goto %End
;
%ErrCaptionShow
@Dialog.Message Створiть пiдписи довжин лiнiй для об'єкту
%End

Вот спасибо огромное за труд, но не работает :smiley: может версия у меня старая (от 15.06.2016 г.). Зато мне такие возможности программы были не известны, сам бы я такое не написал!

Це як варіант, але потребує додаткових перевірок, бо зачіпає структуру документу і при неправильних діях може пошкодити документ. Працює, коли немає в параметрах слів з лапками, що також можна перевірити перед застосуванням. Попробуйте з пустим об’єктом, застосувавши відображення довжин ліній.

Доброго дня!
//-----------------
@Map.AddNodes ID70001 1
Добавляет пикеты в узлы помеченных объектов. Mode соответствует выбору в окне Добавить узлы (1-7).

Было бы не плохо, если бы была возможность добавить только отсутствующие пикеты в слое (допустим в ID70001) [@Map.SelectLayer ID70001 (1-8) (0/1)].

Как, с помощью скрипта разбить линию?

Подібне вже було в попередніх повідомленнях. Користуйтеся пошуком

Доброго дня. Можливо хтось вже зробив подібний скрипт, то поділіться будь-ласка) якщо ні то допоможіть його створити.
Завдання в наступному: є база(точка), необхідно скриптом сформувати таблицю з її координатами у трьох системах (СК-63,УСК-2000 та МСК-…)

Доброго дня
;id точки
$IDPoint=10
;id таблиці
$IDTable=51
@Map.DeselectAll
@Map.SelectLayer id$IDPoint
$PointObj=@Map.SelectedObject
$Coordinates=@Map.Object[$PointObj].Point[1]
@Text[1].Add $Coordinates
@ExecuteMenu RegistryToUSK
$Coordinates=@Map.Object[$PointObj].Point[1]
@Text[1].Add $Coordinates
@ExecuteMenu RegistryToMSK
$Coordinates=@Map.Object[$PointObj].Point[1]
@Text[1].Add $Coordinates
$Text=@Text[1].Text
@Map.DeselectAll
@Map.SelectLayer id$IDTable
$TableObj=@Map.SelectedObject
@Map.Object[$TableObj].TableText $Text
@Window.Refresh

Також прикріпив файл-зразок, щоб було краще зрозуміло, як має виглядати карта з точкою і таблицею, яку оброблятиме скрипт.

fendak Дуже дякую! Далі буду розбиратися як присвоїти назву колонкам таблиці)

Прошу
Просто на початку коду додайте рядок
@Text[1].Add Х У Z
регулюючи відступи та центрування пробілами

можна було, звичайно, і через знак табуляції, але тоді на початку додайте:
$Tab=@Calc char(9)
$Tab=@DequoteText $Tab

а в коді замість
$Coordinates=@Map.Object[$PointObj].Point[1]
@Text[1].Add $Coordinates

напишіть:
$Coordinates=@Map.Object[$PointObj].Point[1]
$X=@StringPart 1 $Coordinates
$Y=@StringPart 2 $Coordinates
$Z=@StringPart 3 $Coordinates
@Text[1].Add $X$Tab $Y$Tab $Z