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

тут є скрипт, який робить контроль довжин ліній, щоб були не більше 200 метрів, а додати ці точки легко через меню Правка - Додати точки (крок 200 метрів, наскрізне додавання)

Дякую, виручив! я й не знав про цю функцію)

Знаю що можна, але не пам’ятаю як…
Є файл exel з списком номерів та відповідних їм прізвищ. Необхідно автоматично перенести прізвище у параметр “ділянки”, якщо номер в ділянці вже забитий.
Можливо для цього навіть скрипт не треба писати, десь у программі була така фунція. Або підкажіть скрипт якщо такий вже написаний. Дякую

Можна без скрипта.

  1. Список параметрів об’єктів на карті, повинен бути в такій самій черговості як і колонки з інформацією в ексель, і обов’язкова умова: перший рядок у списку параметрів обєкта і перша колонка в ексель повинні мати однакові значення (у вашому варіанті це список номерів)
  2. виділити в екселі всі дані що потрібно вставити на карту, та скопіювати їх в буфер обміну.
  3. Виділити на карті всі об’єкти, в які потрібно вставити значення.
  4. Викликати команду Правка - Спеціальна вставка - Тільки параметри.
    У підсумку будуть вставлені всі значення з таблиці ексель на карту які співпадуть по першому пункті.
    Ще в цій темі останній пост
    Связать Digitals и Excel - #5 від Winter

Спасибо!

Доброго дня.
Черговий раз взявся до теми взаємодії Digitals із застосуванням користувача (MS Excel) по протоколу TCP з наступною метою:

  • запустити скрипт Digitals з макроса Excel;
  • дочекатись в макросі поки скрипт відпрацює;
  • продовжити роботу макроса з даними, отриманими від скрипта.

Так от, коли сокет в блокованому режимі, посилка на сокет однієї скриптової команди повертає результат її виконання. Digitals, як сервер, виконує команду і посилає на сокет відповідь - значення, повернуте скриптовою функцією. Це працює добре :smiley: .

Якщо на сокет дати скриптову команду: виконати скрипт - сервер повертає “OK” :confused: Добре те, що макрос буде “в курсі”, коли скрипт завершить роботу і продовжить своє виконання, але…

Таке у мене питання до розробників: чи можна в скрипті якось присвоїти результат службовій змінній (типу $Result), щоб її вміст передавався на сокет від сервера Digitals замість (а може краще - разом з) “OK” :question:

Доброго дня. Дуже прошу розробників: відпишіть, будь-ласка, чи реально таке зробити. Чи варто сподіватися? Просто технологія Exchange не дуже підходить, якщо обмін між програмами треба часто-густо виконувати.

Доброго дня!
Вибачаюсь за те що можливо до кінця не зрозумів.
Якщо відправити на сервер команду $Result, то повернеться вміст змінної $Result, це потрібно?

Трохи не так. Змінній $Result значення присвоюється у скрипті, який запускається командою %Script.ScriptName, що посилається клієнтом (додатком користувача) на сервер Digitals.

Мається на увазі, що Digitals - сервер, додаток користувача - клієнт.
Зараз так:

  • клієнт відправляє серверу команду %Script.ScriptName або %Library.ScriptFile і чекає на відповідь від сервера;
  • скрипт відпрацьовує і сервер посилає клієнту відповідь “OK”;
  • клієнт продовжує свою роботу лише після отримання відповіді, а там - “OK”.
    Хочеться: щоб замість “OK” клієнту приходило те, що в скрипті %Script.ScriptName або %Library.ScriptFile було присвоєне змінній $Result.

Один нюанс: якщо скрипт-1 запускає скрипт-2 а останній присвоюватиме значення змінній $Result значення. Чи не буде це значення помилково передане на сокет по завершенню скрипта-1? Наскільки я розумію, змінні “живуть” окремо, кожна у своєму скрипті. Якщо на сокет, як відповідь зі скрипта-1 буде посилатись вміст $Result, присвоєний лише у скрипті-1, то все правильно. А що повертатиметься сервером клієнту, якщо $Result не присвоїти? “OK”?

відправляйте якось так:
$Res1=%Script.ScriptName
$Res2=%Library.ScriptFile
тоді в любий момент можна повернутись до результатів, які містяться у змінних

Ага. Добре. А хіба при вичитуванні відповіді з сервера функція Recv не поверне той самий “OK”? Мабуть же, сервер Digitals після виконання скрипта посилає клієнту ці два символи “OK”, інакше звідки вони беруться у вхідному буфері на сокеті клієнта?

Скрипт ScriptName виконується сервером (Digitals) будучи запущеним з Excel, шляхом посилання (функція Send) на сервер Digitals команди %Script.ScriptName. Чи повернеться значення змінної $Res1 або $Res2 до клієнта (Excel)? Ні.

То ж краще, щоб замість OK, після виконання останньої команди скрипта ScriptName, сервер Digitals посилав клієнту вміст змінної $Result, значення якій присвоєно скриптом ScriptName. Зараз я зроблю файл Excel.

Доброго всім дня. Хочу подякувати розробникам: починаючи зі збирання 20.12.19 вміст змінної $Result посилається як відповідь сервера Digitals клієнту (Excel) :exclamation: Дуже дякую Дмитру Бондарцю за оперативну підтримку :smiley: . Все працює дуже добре.

Добрий день! Підкажіть, за яким сценарієм чи критеріями працює функція @XML.Valid XMLStringOrFileName?
Є файл xml, в якому тільки дві строки:

<?xml version="1.0" encoding="utf-8"?> А функція видає, що файл валідний. І взагалі я не знайшов жодного файлу при скануванні бази, по якому б видало, що файл не валідний, хоч файлів, які в Digitals не відкриваються, є з десяток.

Ця функція перевіряє чи є строка-аргумент іменем існуючого файлу, якщо так, то перевіряє цей файл на валідність, якщо ні то перевіряє цю строку-аргумент на валідність. Валідність - відповідність синтаксису XML.
Ця функція потрібна для перевірки валідності деяких параметрів(адреса, власники та інш.) після їх редагування скриптом, наприклад.

Тобто, якщо в строку-аргумент записано ім’я (повна назва з шляхом) файлу, то тоді функція перевіряє кожний параметр в структурі обмінника чи відкриті і закриті всі теги і чи наявні усі обов’язкові теги? Чи тільки щось основне?
Щойно спробував із тим самим файлом, в якому тільки дві строки - уже працює (показує, що невалідний). Минулого разу, виходить, був якийсь глюк. Може через те, що програма обробляла десятки тисяч обмінників і кожний перевіряла на валідність.

Ця функція перевіряє правильність синтаксису XML, ніяких перевірок по схемі(ам). Під час масового відкриття файлів є сенс ці файли перевірити щоб не натискати на кнопки в діалогах (“Похибка відкриття…”) на кожному невалідному, яких раніше було багато.

Доброго дня. Допоможіть будь-ласка зі скриптом. Працював нормально, а сьогодні наче сказився - не працює. В 29 рядку пише помилку, я його пробував видаляти, скрипт виконується, але так криво, що краще б не виконувався. $NumberParam=ID40042 $Tab=@Calc char(9) $Tab=@DequoteText $Tab $SC=@Map.SelCount @if $SC<1 then @Break @Text[1].Clear $I=0 $MC=@Map.Count %LoopObject $I=$I+1 $Sel=@Map.Object[$I].Selected @if $Sel=0 then @Goto %IgnoreObject $N=@Map.Object[$I].Parameter[$NumberParam] $X=@Map.Object[$I].Parameter[-4] $Y=@Map.Object[$I].Parameter[-3] ;$XYZ=@Map.Object[$I].Point[1] ;$X=@StringPart 1 $XYZ ;$Y=@StringPart 2 $XYZ $Line=$N$Tab$X $Line=$Line$Tab$Y @Text[1].Add $Line %IgnoreObject @if $I<$MC then @Goto %LoopObject $FN=@Map.ClearFilename $FN2=_ПольовийЖурнал.dmf $NFN=$FN$FN2 @FileNew $NFN=файл C:\Digitals\ПольовийЖурнал.dmt @Map.DeselectAll ;@Map.SelectObject $I $TL=@Map.Layers.Add 888777000 6 Text table $NO=@Map.NewObject $TL $NewText=@Text[1].Text @Map.Object[$NO].TableText $NewText @Map.RefreshObject $NO @Map.SelectAll @Map.FrameSelected 210 297 0 @ExecuteMenu ViewShowAllShowAll

$NumberParam=ID40042 $Tab=@Calc char(9) $Tab=@DequoteText $Tab $SC=@Map.SelCount @if $SC<1 then @Break @Text[1].Clear $I=0 $MC=@Map.Count %LoopObject $I=$I+1 $Sel=@Map.Object[$I].Selected @if $Sel=0 then @Goto %IgnoreObject $N=@Map.Object[$I].Parameter[$NumberParam] $X=@Map.Object[$I].Parameter[-4] $Y=@Map.Object[$I].Parameter[-3] $Line=$N$Tab$X $Line=$Line$Tab$Y @Text[1].Add $Line %IgnoreObject @if $I<$MC then @Goto %LoopObject $FN=@Map.ClearFilename $FN2=_ПольовийЖурнал.dmf $NFN=$FN$FN2 @FileNew $NFN @Map.DeselectAll $TL=@Map.Layers.Add 888777000 6 Text table $NO=@Map.NewObject $TL $NewText=@Text[1].Text @Map.Object[$NO].TableText $NewText @Map.RefreshObject $NO @Map.SelectAll @Map.FrameSelected 210 297 0 @ExecuteMenu ViewShowAll

Нажаль не працює. Просто створює пустий dmf і все

Поміняйте строку

@if $SC<1 then @Break

на

@if $SC<1 then @Break Помітьте точкові об'єкти з номерами в параметрі $NumberParam