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

А если нужно создать не только параметр а и слой что тогда по аналогии сделал то же для слоя и что получил

$L=@Map.Layers.Get ID70005
@Dialog.Message $L
$S=@Map.Parameters.Get ID7000513
@Dialog.Message $s

диалоги для того что бы видеть что получаем, на чистой карте для параметра получаем пустое значение тогда работает
@if $S= then @Map.Parameters.Add 7000513

а вот для слоя если он отсутствует получаем значение -1 слоя со всеми его описаниями и создание работать не будет так как ответ не пустой
@if $L= then @Map.Parameters.Add 70005

это ошибка или это так и должно быть какой из вариантов правильный для слоя или для параметра, при его отсутствии получать млм пустое значение или хотя бы ноль, что бы при создании можна было с чем то сравнивать но никак не значения -1 слоя

@Map.Layers.FindOrCreate ID [CopyFromID] “Ищет слой с заданным ID или добавляет новый, возвращая его номер. Если задан CopyFromID, то за основу берется существующий слой.”

да но он создает слой с тем же названием что и айд, а это критично и как задать [CopyFromID]

Наприклад:
$NumShar=@Map.Layers.FindOrCreate ID6 ID11330000; Пошук шару ID6, якщо немає - створює шар ID6 на основі шару ID11330000, в змінній $NumShar - порядковий номер створеного шару
@Map.Layers.Set $NumShar 6 5 Точка захоплення найблищої точки полігона; Змінює ID шару з порядковим номером $NumShar на ID6, встановлює тип шару (5-точковий об’єкт), називає шар (Точка захоплення найблищої точки полігона)

так понятно , но все таки хотелось бы что и это работало коректно @Map.Layers.Get так же как и @Map.Parameters.Get то ест если слой или параметр есть то возвращает все про него ели же нет тогда пустое значени и потом проверяй и создавай @Map.Layers.Add или редактируй @Map.Layers.Set

Может пишу не в ту тему поправьте если что @Map.Parameters.LoadFromFile Загружает список параметров карты с текстового файла (см. также @Map.Parameters.SaveToFile), а почему не написано что она также очищает список уже существующих параметров. И если есть такая функция которая добавляет параметры из файла, список порядка 30 параметров и это не единичный случай, ТО как все добавленные параметры сделать доступными определенному слою или часть параметров одному слою а часть другому @Map.Parameters.List выводит список айди и наименование слоев а @Map.Layers.SetValidParameters принимает только порядковые номера этих слоев, нигде не нашел как вывести порядковые номера вновь созданных слоев

а как же это?
;добавляем параметр ID7000580 в список доступных слою XML : Земельна ділянка
$S=@Map.Layers.GetValidParameters ID70005
@Map.Layers.SetValidParameters ID70005 $S ID7000580

в данном случае $S=@Map.Layers.GetValidParameters ID70005 как раз $S и принимает значение номера параметра а потом его вставляет @Map.Layers.SetValidParameters ID70005 $S ID7000580 @Map.Layers.SetValidParameters LayerIndex NumberList
Изменяет список доступных слою параметров, например @Map.Layers.SetValidParameters 1 3 7 11

$PresentParam=@Map.Parameters.FindByID ID7000580; Перевіряєм наявність параметра
@If $PresentParam=0 then $PresentParam=@Map.Parameters.Add 7000580 5 Проба; Якщо параметра немає - створюєм, змінна $PresentParam буде мати значення номера створеного параметра

Далі дивіться Як взнати, чи доступний параметр для шару, а потім, якщо параметр не доступний:
@Map.Layers.SetValidParameters ID70005 $S $PresentParam; Додаєм до списку номерів доступних для шару параметрів номер праметра

Підкажіть, будь-ласка, хто знає:
чи існує в Digitals зарезервована змінна, значення якої присвоюється у скрипті та зберігається в пам’яті на протязі однієї сесії роботи з Digitals?
Десь на форумі я таке зустрічав, але тепер не можу знайти :unamused:

Вкрай треба в різних скриптах проводити аналіз: в якому “користувацькому” режимі працює Digitals.
Задум наступний:

  • на кнопку посаджений скрипт з автозапуском, який виводить діалог з вибором “включити користувацький режим - 1, чи включити користувацький режим - 2”
  • залежно від вибору, скрипт з автозапуском включає режимну кнопку-1 чи режимну кнопку-2.

Ну і тут, по-ходу питання ще одне: може якось присвоїти автозапуск скрипту з бібліотеки (файлу *.dsf) - на заміну функції %Events.OnStartup, що зараз не працює?

Дякую.

Есть участки с данными. Создаю каталог координат в ворде с помощью vba. Вопрос: После выброса в буфер обмена (РепортГенератор 0), данные находятся в хаотичном порядке, т.е. каждый раз в разном неотсортированном порядке (допустим уч.1 и его координаты, уч.3 и его координаты, уч.2 и его координаты). Можно ли, или как сделать чтобы репортсгенератор выбросил участки в отсортированном виде (по номеру участка)?

Дизайнер-настройки-Сортировка-Сортировать обьекты- по параметру …

@Map.TempInteger та @Map.TempString
Ще можна використати виклик змінних з констант @GetConstant, якщо однієї текстової та числової змінної буде замало або необхідно використовувати ці змінні й в інших сесіях Дігіталса, але, тоді, запис змінних в константи, краще, робити не через @SetConstant (яка міняє значення константи, тільки на час роботи даної сесії Дігіталса), а вручну.

Немного не понял, или плохо искал. Т.е. брать данные с ХМЛ - присутствует, а внести данные в тэг можно?

В отдельный тег внести значение нельзя, можно изменить параметр целиком.

т.е. как текст? <тэг><тэг><тэг>Данные</тэг></тэг></тэг> ?

И еще такой вопрос, принимает ли НКС “петлю”, или можно ли в диджиталсе все это преобразовывать в вкрапленные элементы, как это делает ин42хмл?

Или как узнать что объект “петля”? (и потом преобразовать в сложный полигон)

Є цикл. Кожного циклу генерується вираз-формула $A
Треба щоциклу дописувати до змінної отриманий вираз:
$s=
$s=$s$A
але вираз не додається як текст а перераховується, і виходить число.
А треба вираз.
Дякую.

$S=@Concat $S,$A

Скрипт розраховує дані. Як вивести ці дані в Excel, чи в іншій програмі? Або в якій програмі ці дані можна вивести в структурованому вигляді?
Дякую.

@ReportsGenerator 0 - Выбрасывает данные в буфер обмена

В Excel через макросы vba обрабатываем буфер обмена (извлекаем нужные данные из определенных ячеек памяти) и строим структурированную таблицу. Чтобы посмотреть что выбрасывается в буфер обмена, достаточно пометить участки и сделать @ReportsGenerator 0. Потом на чистом листе в Экселе вставить данные (т.е. Вы увидите в каком виде Диджиталс Вам преподносит информацию. Наперед скажу что это массив данных, данные разделены через табуляцию)

То что рассчитал скрипт, изначально перед выбросом в буфер обмена, внести в какой-то дэскриптор (например CM, FL и т.д., т.е. те которые редко используются). Данные дэскриптора окажутся в буфере обмена.

Еще как вариант: записать результаты расчетов в дэскрипторы и сделать Диджиталовскими средствами отчет. Или же писать свой ДМТ-шаблон.

В общем если разработчики Диджиталса не будут против, и если это кому-то будет интересно, то в свободное время опишу как работать с буфером обмена с помощью макросов. Т.е. таким способом 98% работы делается обходя Репортс. Также в ВБА можно работать и с ХМЛ-ем.