Головна » 2016 » Січень » 1 » Скриптові функції - Кермування скриптом
21:03
Скриптові функції - Кермування скриптом

Всі скриптові функції Digitals для зручності можна поділити на категорії, в залежності від того, які операції та над якими об'єктами виконує та чи інша функція.

В даному розділі наведені функції, які є скелетом самого процесу як написання так і виконання скрипту, дозволяючи ним керувати.


Прості повідомлення

@Dialog.Message Text - виводить вікно з текстовим повідомленням

@Dialog.Information Text - виводить повідомлення з інформацією

@Dialog.Error Text - виводить вікно з повідомленням про момилку (з червоним хрестиком і відповідним звуком)

@Dialog.Warning Text - те саме, що в попередньому пункті

@Break Text - зупиняє роботу скрипту та виводить текстове повідомлення Text (замінити на своє)

@Dialog.InfoBox DelayMS Text - виводить вікно з текстовим повідомленням і закриває його через задане число мілісекунд

@Beep - подає звуковий сигнал

@Dialog.ShowImage URL - виводить вікно із зображенням, отриманим із вказаного URL

Діалогові вікна

@Dialog.Ask Text [Default=Value Size=WidthInPixels] - виводить вікно з полем для введення тексту і повертає введений користувачем текст. Ключ Default дозволяє задати початкове значення тексту, а ключ Size  - ширину вікна в пікселях

@Dialog.Memo Header|Text > Text - виводить діалогове вікно для введення тексту (багаторядковий варіант), де Header - його заголовок

@Dialog.Confirm Text - виводить діалог запиту підтвердження кнопками ОК і Відміна. Якщо ОК - повертає 1, якщо Отмена - 0.

@Dialog.ListSelect Title|Text1|Text2|... - виводить вікно у вигляді списку з можливістю вибрати значення

@Dialog.Select Title|Text1|Text2|... - виводить вікно з можливістю вибрати значення

@Dialog.CheckList Text - виводить діалогове вікно з можливістю позначати декілька пунктів із списку

@Dialog.EditFields Var1=Value:Name,... - виводить діалогове вікно для заповнення/редагування іменованих значень

@Dialog.WaitBox Text - виводить немодальне вікно з повідомленням і призупиняє виконання скрипту. Повертає 1 - якщо натиснута клавіша "Продовжити" і 0 - якщо "Перервати".

@Dialog.EditRoute Name - виводить спеціальне діалогове вікно для заповнення даних з теодоліта

@SingleClickDialogs [1/0]

Умовні оператори та мітки

@Goto %Label - передає виконання скрипту на рядок, який йде за вказаною міткою

@If  Умова then Результат чи дія else Інший результат чи дія - перевіряє чи виконується певна умова, і, якщо вона виконується, то виводить відповідний результат чи робить потрібну дію. 

@IterateObjects Scriptname - повторює скрипт для кожного об'єкта карти, передаючи його номер, як параметр

@IterateSelectedObjects Scriptname - повторює скрипт для кожного виділеного об'єкта карти, передаючи його номер, як параметр

@While - виконує в циклі блок команд до вказаної мітки, поки умова істинна

$i=1
@While $i<5 %loop
@Dialog.Message $i
$i=$i+1
%loop:
@Dialog.Message Цикл завершено!

@BreakIf Condition - зупиняє роботу скрипту, якщо умова істинна (або пуста)

@Return ResultValue - звершує роботу скрипту і виводить значення результату

Прогрес виконання скрипту

@Progress.Start Count Title - виводить вікно з індикатором прогресу виконання скрипту. Count - кількість частин прогресу. Title - назва

@Progress.StepBy Increment - пересуває повзунок прогресу на величину Increment (по-замовчуванню = 1)

@Progress.Canceled - повертає 1, якщо користувач перервав процес кнопкою Відмінити

@Progress.Stop - закриває вікно з індикатором прогресу

Пауза

@Wait IntervalMS - призупиняє виконання скрипту на заданий в мілісекундах інтервал часу

Перевірка скрипту

@OpenLog - починає запис протоколу процедури виконання скрипту (лог-файл)

@CloseLog [Filename] - завершує запис протоколу процедури виконання скрипту, зберігаючи протокол у файл

@CheckErrors 0/1 - включає/відключає інтегрований обробник помилок (по-замовчуванню включений). Коли обробник помилок включений, то виконання скрипту буде перервано, як тільки в ньому буде знайдено помилку вхідних параметрів.

Спосіб передачі інформації

@Map.TempInteger [Value] - цілочислова перемінна, в яку можна записувати будь-яке, пов'язане з картою значення, для обміну між скриптами

@Map.TempString [Text] - текстова перемінна, в яку можна записувати будь-яке, пов'язане з картою значення, для обміну між скриптами

@ReportGenerator 0/1 - готує дані для Геренарота звітів і копіює в буфер (0 - не запускати генератор)

Операції Undo

@Map.Undo.StartOperationGroup - починає групу операцій Undo (@Map.Undo.Undo скасує всі операції з моменту початку групи)

@Map.Undo.SaveObject Number - запам'ятовує поточну конфігурацію об'єкта в буфер Undo (виклик @Map.Undo.Undo поверне початковий стан після змін)

@Map.Undo.SaveSelected - запам'ятовує поточну конфігурацію об'єктів, які виділені і повертає її після змін командою @Map.Undo

@Map.Undo.SaveObjectParameters Number - запам'ятовує значення всіх параметрів об'єкта в буфер Undo (виклик @Map.Undo.Undo поверне початковий стан після змін)

@Map.Undo.ContinueOperationGroup - продовжує групу операцій Undo (@Map.Undo.Undo скасує всі операції з моменту початку групи)

@Map.Undo.Undo - скасовує останні зміни і повертає карту до стану останнього виклику @Map.Undo.StartOperationGroup

Запуск у скрипті інших унікальних видів команд

@SendChars Text<CR> - посилає текст і спеціальні символи наступному викликаному вікну діалогу

SendChars 0.1 <CR>

@Map.Object[N].CalculateFormula Formula - дозволяє використовувати в скрипті функції обробки параметрів, як в dmt-шаблонах, без їх створення.

;виводиться повідомлення з іменем власника виділеної ділянки в родовому відмінку.
$SO=@Map.SelectedObject
$ROPNM=@Map.Object[$SO].CalculateFormula ROP(P[NM])
@Dialog.Message $ROPNM

@ExecuteMenu InternalName - виконує будь-який пункт меню чи команду по їх внутрішньому імені. Внутрішнє ім'я команди можна дізнатися, вибравши її у скриптовому вікні зліва. Наприклад, якщо вибрати Шаблон | Лінія, то в самому низу зліва побачимо ім'я цієї команди - TemplateLine. Перевагою використання цієї функції над просто командами є збереження команди для різних мов інтерфейсу програми.

@ExecuteMenu MapCheckPurgeDeleted - знищити видалені об'єкти
@ExecuteMenu ShowAll1 - показати всі
@ExecuteMenu EditSelectInsideselected - вибрати усередині позначеного
@ExecuteMenu Objectswithbreak1 - вибрати об'єкти з розривом
@ExecuteMenu SpbCombine - операції з об'єктами/складний полігон
@ExecuteMenu SpbExpand - операції з об'єктами/розширити/стиснути
@ExecuteMenu spbSubtract - операції з об'єктами/віднімання
@ExecuteMenu spbSplit - операції з об'єктами/Розділити
@ExecuteMenu FileExtracttoIn4 - витягнути ділянку в IN4
@ExecuteMenu TransformComplexPolygonToLoop - перетворити складний полігон в петлю
@ExecuteMenu TransformLoopToComplexPolygon - перетворити петлю в складний полігон
@ExecuteMenu EditPasteToCurrentPosition - спеціальна вставка/в центр екрану

@ExecuteDocument DMTTemplateName - формує звіт по DMT-шаблоні (аналогічно меню Сервіс/Документи). DMTTemplateName - назва шаблону в папці Digitals

@SourceMap - повертає номер поточної карти для Сервіс/Документи

@ExecuteDocumentFromFile DMTTemplateName - формує звіт по DMT-шаблоні з можливістю викликати шаблон, який знаходиться за межами самої програми. DMTTemplateName - повний шлях до розміщення шаблону

@DocumentFromTemplate TemplateName|DocName|Options|Key1=Value1|... - створює документ за шаблоном та замінює змінні в ньому на потрібні значення

@Run ExeFilename - запускає зовнішню програму (exe-файл)

@RunControlScript Filename [/HIDE] [/SHOW] - запускає контроль карти (Карта - Контроль), використовуючи сценарій із файлу

%Library.Name - виконує скрипт, який збережений у файл Name.dsf у папці Library. 

@DLLExec DLLPath.DLLFunction [Parameters] - виконує функцію користувача, яка може бути написана на будь-якій мові програмування, але повинна бути оголошена в бібліотеці як: 

F(S: PAnsiChar): PAnsiChar; stdcall;

Всі параметри передаються в вигляді показчика на ANSI строку, результат роботи функції - також покажчик на строку однобайтних символів.

$S=@DLLExec d:\TestDLL.AddNumbers 44,55
@Dialog.Message $S

В даному прикладі із бібліотеки TestDLL викликається функція AddNumbers, яка сумує цілі чи дробові числа. При сумуванні дробових чисел, розділювач цілої і дробової частини повинен бути вказаний в системі Windows як точка. Для першого прикладу потрібно скачати програму, створену у Delphi і розпакувати на диск d.

В динамічних бібліотеках можуть зберігатися форми. Це додаткова можливість створення вікон з необхідними елементами управління, які можуть бути викликані сприптами.

$Params=це заголовок вікна
$S=@DLLExec D:\TestFormDLL.CreateInputForm $Params
@Dialog.Message $S

Для цього прикладу потрібно скачати програму, створену у Delphi і розпакувати на диск d.

 

SQL

@SQLConnect ConnectionString - cтворює нове підключення на основі переданих параметрів і робить його активним. Повертає номер створеного підключення

@SQLGetActiveConnection - повертає номер активного підключення

@SQLExec Statement - виконує SQL-команду

@SQLQuery Statement - виконує SQL запит (наприклад Select) використовуючи активне з'єднання

@SQLForest [Parameters] - викликає діалог із SQLWod.dll

@SQLGetConnectionCount - повертає кількість підключень

@SQLSetActiveConnection ConnectionNum - встановлює активним задане підключення, використовуючи 0 для SQL підключення карти

@SQLUsername - повертає назву користувача SQL-сервера

@SQL.Table.Extract Tablename(field1,...) Condition - видобуває таблицю через SQL
@SQL.Table.Insert Tablename(field1=...) - вставляє таблицю через SQL
@SQL.Table.Select Tablename(field1,...) Condition - виділяє таблицю через SQL
@SQL.Table.Update Tablename(field1=...) Condition - оновлює таблицю через SQL
@SQL.Table.Delete Tablename Condition - видаляє таблицю через SQL
@SQLTab Query - виконує запит по таблиці SQL
@SQLAlterTable Table(field1,field2,...) - після таблиці SQL
@SQLCreateTable Table(field1,field2,...) - створює таблицю через SQL
@SQLDequoteText - видаляє одинарні лапки на початку і в кінці текстового рядка в SQL
@SQLEditTable Query - редагує таблицю через SQL
@SQLViewTable Query - показує таблицю через SQL

Інші функції

@HELP - повертає список всіх доступних скриптових функцій

@Thread ScriptCommand - запускає скрипт в одному з потоків процесора

@ThreadActive Handle - активний потік процесора ПК

@WaitForThread - чекає на активний потік процесора

 

Додаткова зовнішня інформація для скрипту

@Computer.Name - повертає мережне ім'я комп'ютера

@Computer.UserName - повертає поточне ім'я користувача Windows

@Date - повертає поточну дату, встановлену на комп'ютері

@DayOfWeek - повертає поточний номер дня тижня, починаючи від неділі

@DecimalSeparator - повертає десятковий розділювач (крапка чи кома) із налаштувань Windows

@ProgramFolder - повертає шлях до папки, де встановлена програма Digitals

$ProgPapka=@ProgramFolder
@Dialog.Message $ProgPapka


Примітка: жирним шрифтом (напр.@ActivateMap) виділена назва функції, похилим шрифтом (напр.Number) перемінна функції, у квадратних скобках (напр.[MapNumber]) необов'язкова перемінна, яка може вказуватися, а може і не вказуватися.

 

Переглядів: 9939 | Додав: Микола | Рейтинг: 0.0/0
Всього коментарів: 29
avatar
28 elisium11 • 23:52, 04.01.2022
Добрий вечір!
Підскажіть будь ласка, чи можливо додати деякісвої змінні до ваших шаблонів "Панель інструментів для теодоліта?
Дякую.
avatar
0
29 Микола • 20:13, 05.01.2022
Добрий вечір! Напишіть які потрібно, додам.
Додавати змінні у скрипт tlc можуть тільки розробники скрипту. Для кожної змінної потрібно прописати відпоовідні умови зчитування і обробки і інформації.
avatar
26 SerjN • 11:44, 28.12.2021
Доброго дня.
Виникла необхідність розбивки на аркуші через скрипт, але виникла така проблема:
При першому застосуванні скрипту все розбивається нормально, а при другому та інших запусках скрипту щось йде не так. Таке враження, що скрипт починає відлік місця установки даних у діалоговому вікні "Розбивка на аркуші..." з останнього місця попередньої установки. Як правильно застосувати цей скрипт, щоб він завжди спрацьовував однаково?
Зараз у мене так:
@SendChars <TAB><TAB><TAB><TAB>297<TAB>210<TAB>0<CR>
@ExecuteMenu InsertSheetLayout
avatar
0
27 Микола • 21:14, 28.12.2021
Добрий вечір!
Так і є. Програма продовжує з того місця, на який ви табами перевели в попередньому сеансі. Тобто, окрім того, що табами знайшли потрібні ячейки для введеення інформації, ще треба ними ж потім повернути стан вікна у попередню позицію.
Спробуйте так:
@SendChars 297<TAB>210<TAB>0<CR><TAB><TAB><TAB><TAB><TAB><TAB><TAB><TAB><TAB><TAB>
@ExecuteMenu InsertSheetLayout

Два рази працює. Але на третій щось йде не так. І не знаю що. Пробуйте додавати і віднімати таби, може вловите. На початку табів не треба, оскільки вікно зразу автоматично стає активним при перезапуску програми в місці введення висоти листа (але на старих програмах було по-іншому).
avatar
24 matskows • 15:36, 22.06.2021
Доброго дня!
Хочу запитати чи можливе автонумерування кількох обєктів з однаковим Id!
наприклад:
Автонумерування ін4 ділянок  параметр НД у форматі 0001,0002,0003....
avatar
0
25 Микола • 21:39, 22.06.2021
А чому ні? Можливо, що з однаковими, що з різними id шарів, в яких вони знаходяться. Це можна зробити не тільки скриптами, а навіть просто через калькулятор на закладці Інфо.
Відповідь: Якщо ви про те, як перевести у формат з нулями попереду точки межових знаків, то це можна зробити скриптом:

@Map.DeselectAll
@Map.SelectLayer id70001
$NextSMZ=0
$NPP=0
%StartSelMZ
$NextSMZ=@Map.NextSelected $NextSMZ
@if $NextSMZ=0 then @Goto %EndRuchNum
$NPP=$NPP+1
$RealN=@Map.Object[$NextSMZ].Parameter[id7000100]
;$RealN=$NPP
$LNZP=@Calc Length("$RealN")
$LNZP0=$LNZP
@if $LNZP>5 then @Goto %RealN
@if $LNZP=0 then $RealN=$NPP
$LNZP=@Calc Length("$RealN")
@if $LNZP=1 then $RealN=0000$RealN
@if $LNZP=2 then $RealN=000$RealN
@if $LNZP=3 then $RealN=00$RealN
@if $LNZP=4 then $RealN=0$RealN
@Map.Object[$NextSMZ].Parameter[ID7000100]=$RealN
%RealN
@Goto %StartSelMZ
%EndRuchNum

Якщо ж потрібно, щоб скрипт сам нумерував точки по порядку, то заберіть крапку з комою перед рядком:
;$RealN=$NPP
avatar
22 kolkasslupo • 10:53, 27.01.2021
Добрий день. Підкажіть як в існуючий параметр задати маску.

Дякую.
avatar
0
23 Микола • 13:40, 27.01.2021
Добрий день! Якщо ви запитуєте про скриптову функцію, то це розділ Параметри, функція @Map.Parameters.Mask Number   [Value]- повертає чи змінює маску параметра
avatar
20 lvivsurveyer • 12:47, 28.12.2020
Підкажіть як вирішити питання насущне:
маю старий планшет і є потреба цифрувати комунікації. і власне коли цифрую колодязі потрібно вписувати позначку кільця люка (параметр 132) та позначку дна колодязя (параметр 134) в даному нормалі.
На основі відеоуроків Миколи та ще одного скрипта з підписами висот Z http://digitals.at.ua/load/vstanovlennja_visoti_z_piketiv_zrazu_pislja_jikh_stvorennja/1-1-0-51 я пробував реалізувати це чудо.

логіка скрипту:
тиснемо на кнопку, скрипт переходить на вкладку збір і вибирає потрібний шар (колодязь на певній комунікації); в даному місці все працює добре.
ми в потрібному місці тиснемо на карту і у нас малюється умовний знак колодязя. Далі скрипт питає нас в діалоговому вікні "Позначка кільця люка" і ми вписуємо її і тиснемо ОК.
Далі скрипт питає нас в діалоговому вікні "Позначка дна люка" і ми вписуємо її і тиснемо ОК.
Після чого скрипт виводить на карту ці два підписи.

Наразі я не розумію саму логіку скрипта, що і в якому місці я не правильно відредагував для коректної роботи.

Не можу зрозуміти що прописати для того, щоб скрипт записав інформацію з діалогового вікна в необхідний параметр.
https://drive.google.com/drive/folders/18UxMhQ2emt18tApSRiZ4Nc927T9aa7ng?usp=sharing

avatar
0
21 Микола • 14:00, 28.12.2020
Зверніть увагу на такий розділ скриптових функцій, як функції для обробки строкових параметрів - Параметри. Там є функція @Map.Object[N].Parameter[N] - повертає/змінює значення параметра об'єкта. У вашому випадку вона виглядатиме: @Map.Object[$EO].Parameter[132]=$132

avatar
0
19 Микола • 14:18, 08.04.2020
Оновлено на сайті списки доступних скриптових функцій програми Digitals та краще структуровано функції по розділах. Додано опис нових функцій - ДИВИТИСЯ СПИСОК.

За майже 4 роки (від створення переліку функцій на сайті) в програму додано майже 80 нових функцій. Загало в програмі на даний момент нараховується 529 скриптових функцій.
avatar
17 vladimirart08 • 16:08, 04.08.2019
Микола підскажіть будь-ласка яким чинов в скріпті поставити щоб при діалоге видавалась інфо в стовпчик а не в строчку.
Дякую
avatar
0
18 Микола • 17:09, 04.08.2019
Якщо ви маєте на увазі діалогове вікно з декільками полями, то нижче є коментар від 22.11.2017 01:14, де викладений такий скрипт.
avatar
15 kolkass • 18:40, 26.07.2018
Трішки пошаманив параметр добавляє, але є помилка, прошу допомоги.

$V=@Calc Char(124)
$V=@DequoteText $V
@Map.DeselectAll
$N=@Map.SelectLayer ID70005
@SelectTab 3
;створюємо параметр ID70040000 при його відсутності
$Par=@Map.Parameters.Get ID70040000
@if $Par= then @Map.Parameters.Add 70040000 5 Додаткова інформація
;добавляємо параметр в список доступних шару XML Земельна ділянка
$ParDil=@Map.Layers.GetValidParameters ID70005
@Map.Layers.SetValidParameters ID70005 $ParDil ID70040000
@Map.Parameters.Mask ID70040000 *=Лісостепова Правобережна,*=,*=001.01 Рілля,*=багатокутник,*=рівнинний,*=комунальної власності@Агрогрунтове районування України (провінція):007_.txt$V Шифр та назва агровиробничої групи грунтів:006_Grunt.txt$V Код та назва угіддя:008_.txt$V Конфігурація земельної ділянки:scrDocKonfig.txt$V Рельєф$V Під'їзд до земельної ділянки:scrDocPidyizd.txt
@Dialog.EditParameter ID70040000
$AVse=@Map.Object[ID70005].Parameter[ID70040000]
$Z1=@StringPart 1,$AVse
$Z2=@StringPart 2,$AVse
$Z3=@StringPart 3,$AVse
$Z4=@StringPart 4,$AVse
$Z5=@StringPart 5,$AVse
$Z6=@StringPart 6,$AVse
@Dialog.Message $Z1|$Z2|$Z3|$Z4|$Z5|$Z6

Дякую.
avatar
0
16 Микола • 19:40, 26.07.2018
а яка помилка?
avatar
12 kolkass • 16:55, 26.07.2018
Добрий день!

Підкажіть що прописати щоб параметр добавлявся в ішуючий шар.

Дякую.
avatar
0
13 Микола • 18:11, 26.07.2018
Добрий день!
Цитата
;створюємо параметр ID50094 при його відсутності
$Par94=@Map.Parameters.Get ID50094
@if $Par94= then @Map.Parameters.Add 50094 5 Назва параметра
;добавляємо параметр ID50094 в список доступних шару XML Земельна ділянка
$ParDil=@Map.Layers.GetValidParameters ID70005
@Map.Layers.SetValidParameters ID70005 $ParDil ID50094
avatar
14 kolkass • 18:18, 26.07.2018
Щось в мене не так...

;створюємо параметр ID70040000 при його відсутності
$Par=@Map.Parameters.Get ID70040000
@if $Par= then @Map.Parameters.Add 70040000 5 Додаткова інформація
;добавляємо параметр в список доступних шару XML Земельна ділянка
$ParDil=@Map.Layers.GetValidParameters ID70005
@Map.Layers.SetValidParameters ID70005 $ParDil ID70040000
@Map.Parameters.Mask ID70040000 *=Лісостепова Правобережна,*=,*=001.01 Рілля,*=багатокутник,*=рівнинний,*=комунальної власності@Агрогрунтове районування України (провінція):007_.txt$V Шифр та назва агровиробничої групи грунтів:006_Grunt.txt$V Код та назва угіддя:008_.txt$V Конфігурація земельної ділянки:scrDocKonfig.txt$V Рельєф$V Під'їзд до земельної ділянки:scrDocPidyizd.txt
@Dialog.EditParameter ID70040000
$AVse=@Map.Object[$N].Parameter[ID70040000]
$Z1=@StringPart 1,$AVse
$Z2=@StringPart 2,$AVse
$Z3=@StringPart 3,$AVse
$Z4=@StringPart 4,$AVse
$Z5=@StringPart 5,$AVse
$Z6=@StringPart 6,$AVse
@Dialog.Message $Z1|$Z2|$Z3|$Z4|$Z5|$Z6

Дякую.
avatar
1
11 Микола • 01:14, 22.11.2017
Для тих, хто самостійно створює скрипти і кому не вистачає діалогового вікна з декількома полями для вводу значень:
$V=@Calc Char(124)
$V=@DequoteText $V
@Map.DeselectAll
$N=@Map.NewObject ID10000
@Map.Object[$N].Point[1] 100 100
@Map.RefreshObject $N
@Map.SelectObject $N
@SelectTab 3
;створюємо параметр ID12345 при його відсутності
$Par=@Map.Parameters.Get ID12345
@if $Par= then @Map.Parameters.Add 12345 5 Вибір чогось
;добавляємо параметр ID12345 в список доступних шару ІН4 Квартал
$ParDil=@Map.Layers.GetValidParameters ID12345
@Map.Layers.SetValidParameters ID10000 $ParDil ID12345
@Map.Parameters.Mask ID12345 *=Значення1,*=Значення2,*=ще щось@ Пункт1$V Пункт2$V Ще щось
@Dialog.EditParameter ID12345
$AVse=@Map.Object[$N].Parameter[ID12345]
$Z1=@StringPart 1,$AVse
$Z2=@StringPart 2,$AVse
$Z3=@StringPart 3,$AVse
@Dialog.Message $Z1|$Z2|$Z3


Суть цього коду в тому, що створюється новий об'єкт ІН4 Квартал, в ньому створюється новий параметр, задається його маска і викликається редагування цього параметра. Маскою задається кількість і значення окремих полів.
avatar
0
8 Микола • 18:52, 25.08.2016
Пробуйте:
Код
$Krok=10
$SO=@Map.SelectedObject
@if "$SO"="0" then @Break Виділіть прямокутну область(полігон), в межах якої шукати ділянки на Публічній карті
$KN=
@Text[1].Add $KN
$Range=@Map.Object[$SO].GetMinMax
$MinX=@StringPart 1 $Range
$MinX=@Calc replace("$MinX",",",".")
$MinX=@DequoteText $MinX
$MaxX=@StringPart 4 $Range
$MaxX=@Calc replace("$MaxX",",",".")
$MaxX=@DequoteText $MaxX
$MinY=@StringPart 2 $Range
$MinY=@Calc replace("$MinY",",",".")
$MinY=@DequoteText $MinY
$MaxY=@StringPart 5 $Range
$MaxY=@Calc replace("$MaxY",",",".")
$MaxY=@DequoteText $MaxY
$FC1=$MaxX-$MinX
$FC2=$MaxY-$MinY
$FC1=$FC1/$Krok
$FC2=$FC2/$Krok
$FC=$FC1*$FC2
@Progress.Start $FC Хід виконання
$X=$MinX
%StartX
$X=$X+$Krok
@Progress.StepBy
$rogress=@Progress.Canceled
@if $rogress=1 then @Goto %End
$Y=$MinY
%StartY
$Y=$Y+$Krok
@Progress.StepBy
$rogress=@Progress.Canceled
@if $rogress=1 then @Goto %End
$Res=@Map.GetPublicMapParcelInfo $X $Y
@Text.Text $Res
$KN=@Text.Line[1]
@if "$KN"="0" then @Goto %Next2
$MC=@Text[1].Count
@If $MC=1 then @Goto %Next2
$N=0
%Pochatok
$N=$N+1
$LN=@Text[1].Line[$N]
@If "$KN"<>"$LN" then @Goto %Next
$YesKN=1
%Next
@if $N<$MC then @Goto %Pochatok
%Next2
@if "$KN"="0" then @Goto %Next3
@if $YesKN<>1 then @Text[1].Add $KN
%Next3
$YesKN=0
@if $Y<=$MaxY then @Goto %StartY
@if $X<=$MaxX then @Goto %StartX
%End
@Progress.Stop
$Result=@Text[1].Text
@Text[1].Copy
$MC=@Text[1].Count
$MC=$MC-1
@if "$MC"="0" then @Break У виділеній області не знайдено ділянок
@Break Знайдено $MC ділянок. Список кадастрових номерів скопійовано в буфер обміну|$Result
Тільки зверніть увагу, що виділений полігон має бути прямокутним і орієнтований строго по вертикалі чи горизонталі.  В іншому випадку, скрипт скануватиме не конкретний полігон, а прямокутну область, яка описує полігон.
avatar
9 tanya_savchyk • 09:16, 26.08.2016
а можна щоб сканувало іменонно описаний полігон/зону полігон а не прямокутну область що описує полігон?
avatar
0
10 Микола • 20:48, 26.08.2016
можна
Код
$Krok=10
$SO=@Map.SelectedObject
@if "$SO"="0" then @Break Виділіть полігон, в межах якого шукати ділянки на Публічній карті
@SendChars $Krok<CR>
@ExecuteMenu InsertPointstoPolygon
$SO=@Map.Count
@Map.DeselectAll
@Map.SelectObject $SO
$PCount=@Map.Object[$SO].Count
@Progress.Start $PCount Хід виконання
$P=1
$KN=
@Text[1].Add $KN
%NextPoint
$Koord=@Map.Object[$SO].Point[$P]
$KN=
@Progress.StepBy
$rogress=@Progress.Canceled
@if $rogress=1 then @Goto %End
$Res=@Map.GetPublicMapParcelInfo $Koord
@Text.Text $Res
$KN=@Text.Line[1]
@if "$KN"="0" then @Goto %Next2   
$MC=@Text[1].Count
@If $MC=1 then @Goto %Next2
$N=0
%Pochatok
$N=$N+1
$LN=@Text[1].Line[$N]
@If "$KN"<>"$LN" then @Goto %Next
$YesKN=1
%Next
@if $N<$MC then @Goto %Pochatok
%Next2
@if "$KN"="0" then @Goto %Next3   
@if $YesKN<>1 then @Text[1].Add $KN
%Next3
$YesKN=0
$P=$P+1
@if $P<=$PCount then @Goto %NextPoint
%End
@Progress.Stop
$Result=@Text[1].Text
@Text[1].Copy
$MC=@Text[1].Count
$MC=$MC-1
@Map.Selected.Delete
@if "$MC"="0" then @Break У виділеній області не знайдено ділянок
@Break Знайдено $MC ділянок. Список кадастрових номерів скопійовано в буфер обміну|$Result

Щоб змінити крок пошуку, виділіть будь-який контур і запустіть команду меню Вставка-Точки в полігон. Поставте відповідне значення (бажано 10), по горизонталі і по вертикалі. Порядок - шахи. Натисніть ОК. Дальше при усіх наступних запусках скрипту крок в скрипті буде той, який виставлений ось таким методом.
avatar
6 tanya_savchyk • 09:35, 25.08.2016
добрий день. підкажіть скрип запису кадастрових номерів з публічної кадастрової карти вибраної області, тобто не кожної ділянки коли клацаєш окремо кожну а вибавши якесь окремо поле щоб записувало дані в файл чи як... Дякую.
avatar
0
7 Микола • 17:28, 25.08.2016
Реалізувати це скриптом можна, але воно буде не дуже практично.
Для цього потрібно сканувати весь квадрат на карті з кроком, скажімо 10 метрів, перевіряючи, є там ділянка чи немає. І якщо є - додавати її кадастровий номер в список. При цьому ще сканувати список, чи в ньому вже раніше не добавлений був даний кадастровий номер.

Не практично тому, що це по часу буде дуже довго виконуватися. Якщо область велика - то кілька годин як мінімум.
Допустим, якщо область 1000х1000 метрів, то скрипту буде потрібно перевірити 10000 точок десь по секунді на кожну - 2,5 години разом.
Якщо давати кроки рідше, то можна пропустити ділянку.
А функції, яка б вміла сканувати тільки в місцях, де є ділянки - нема.

Влаштовує такий варіант?
avatar
1 sergio2009 • 08:38, 19.07.2016
Як записати дату (не сьогоднішню) в діалоговому вікні?
...
$t1=@Dialog.Ask Початок оренди Default=(тут має бути дата) Size=250
$result=$t1
$R2=<LeaseTerm><StartDate>$result</StartDate>
...
avatar
0
2 Микола • 15:12, 19.07.2016
$T1=@Dialog.Ask Початок оренди Default=01.01.2001 Size=250
$chyslo=@StringPart 1.$T1
$misyac=@StringPart 2.$T1
$rik=@StringPart 3.$T1
$T1="$rik-$misyac-$chyslo"
$T1=@DequoteText $T1
$R2=<LeaseTerm><StartDate>$T1</StartDate>
avatar
3 sergio2009 • 15:22, 19.07.2016
Щось не получилось. числоє, місяць є, а року не має
Скидаю скрипт


avatar
1
4 Микола • 20:57, 19.07.2016
я пів години сидів і не міг зрозуміти, в чому справа, чому у вас дату розкидує окремо рік і місяць та число. Виявляється, ви після кожного рядка понаставляли пробілів. От вони і заважали з'єднювати до купи числа. Коли створюєте скрипти, дивіться за тим, щоб не було ніде зайвих пробілів.
Ось виправлений скрипт:

Код
;площа
@Map.DeselectAll
@Map.SelectLayer ID70005
$SelectedObject=@map.SelectedObject
$Area=@Map.Object[$SelectedObject].Parameter[ID7000516]
$Area=@Calc replace("$Area",",",".")
$Area=@DequoteText $Area
@Map.DeselectAll
;
;Перевірка, чи є Оренда
@Map.SelectLayer ID70006
$N=@Map.SelCount
@If $N>1 @Break Скрипт обробляє тільки файли по одній оренді
@If $N=1 @Goto %YesShar
@Map.DeselectAll
@Map.SelectLayer ID70005
@Map.Selected.Copy
@Map.Paste
@Map.ChangeSelectedLayer 10
%YesShar
@Map.CalculateRange
@Map.DeselectAll
@Map.SelectLayer ID70006
$N=@Map.SelectedObject
;
;інфо про орендаря
$R1=<LeaseAgreement><Leasees><Leasee><LegalEntity><Name>Приватне сільськогосподарське підприємство "Слобода"</Name><EDRPOU>03755242</EDRPOU><Address><Country>804</Country><ZIP>09800</ZIP><Region>Київська область</Region><District>Тетіївський район</District><Settlement>м. Тетіїв</Settlement><Street>вул. Карла Маркса</Street><Building>105</Building></Address></LegalEntity></Leasee></Leasees><Area>$Area</Area>
;  
;Початок оренди  
$t1=@Dialog.Ask Початок оренди Default=01.01.2001 Size=250
$chyslo=@StringPart 1.$t1
$misyac=@StringPart 2.$t1
$rik=@StringPart 3.$t1
$t1="$rik-$misyac-$chyslo"
$t1=@DequoteText $t1
$R2=<LeaseTerm><StartDate>$t1</StartDate>  
;  
;Кінець оренди  
$t2=@Dialog.Ask Кінець оренди Default=01.01.2001 Size=250
$chyslo=@StringPart 1.$t2
$misyac=@StringPart 2.$t2
$rik=@StringPart 3.$t2
$t2="$rik-$misyac-$chyslo"
$t2=@DequoteText $t2
$R3=<ExpirationDate>$t2</ExpirationDate></LeaseTerm>
;  
;Орендна плата  
;  
$result=@Dialog.Ask Орендна плата Default=1581.70 Size=250
$R4=<Rent><MoneyRent>$result</MoneyRent></Rent>
;  
;Реєстраційний номер державної реєстрації  
;  
$result=@Dialog.Ask Реєстраційний номер державної реєстрації Default=32246000 Size=290
$R5=<RegistrationNumber>$result</RegistrationNumber>  
;  
;Дата державної реєстрації договору оренди  
;  
$t5=@Dialog.Ask Дата державної реєстрації договору оренди Default=01.01.2001 Size=250
$chyslo=@StringPart 1.$t5
$misyac=@StringPart 2.$t5
$rik=@StringPart 3.$t5
$t5="$rik-$misyac-$chyslo"
$t5=@DequoteText $t5
$R6=<RegistrationDate>$t5</RegistrationDate></LeaseAgreement>
;  
;Підсумовуемо результати  
;  
$result=$R1$R2$R3$R4$R5$R6
@Map.Selected.SetParameter ID7000613 $result
;  
@Map.Selected.Refresh
avatar
5 sergio2009 • 08:24, 20.07.2016
ДЯКУЮ!!!!!!!
працює!!! Передивився свій скрипт і він також запрацював. Ох це програмування.
avatar