В прошлых версиях MapInfo Pro при создании запроса или небольшого скрипта в окне SQL не было возможности указать входные данные, и поэтому приходилось либо изменять скрипт каждый раз, когда вам нужно, чтобы он запускался с использованием другой таблицы, либо создавать несколько версий скрипта для каждой из таблиц.
Теперь эта проблема решена в обновлении MapInfo 2019.3. Новый функционал даст вам возможность добавлять диалоговые окна, в которых конечному пользователю будет предложено ввести все переменные для вашего скрипта или запроса, сделав скрипты более гибкими и универсальными.
Чтобы лучше понять, что дают новые возможности, разберем их на конкретном примере.
В этом примере у нас есть две таблицы: одна с точками, а другая с шестиугольниками. И мы, например, хотим подсчитать количество точек внутри каждого шестиугольника, и создать тематическую карту на основе этих чисел. Конечно, мы можем сделать это с помощью функции «Обновить столбец», а затем создать свою тематическую карту с помощью инструмента «Добавить тематику». Но если у нас есть необходимость повторять данную операцию много раз, можно создать небольшой скрипт, который объединит все это в один процесс. Поскольку названия двух исходных таблиц могут изменяться, мы добавим диалоговое окно, в котором пользователю нужно будет выбрать две таблицы для использования. Вот тут в игру и вступают переменные.
Вот наша исходная карта с точками и шестиугольниками.
А тут справа вы видите окно SQL со скриптом. В нем для объединения двух таблиц использован оператор Select, а полученный запрос добавляется к карте в виде тематического слоя на основе рассчитанного количества точек внутри каждого шестиугольника.
В данном примере мы используем только две переменные, по одной на каждую таблицу. Вы можете увидеть их в выделенной строке ниже: tabHexagons и tabPoints.
Все доступные переменные можно посмотреть в раскрывающемся списке «Переменные», где также можно получить доступ к диалоговому окну «Редактировать переменные» для их создания и изменения.
Диалоговое окно «Редактировать переменные» позволяет создавать неограниченное число переменных. Тем не менее, лучше создавать только те, которые вам действительно нужны. Так как при запуске скрипта MapInfo Pro запросит ввод всех переменных в списке, даже тех, которые вы можете и не использовать в конкретном случае.
На рисунке ниже представлены все параметры переменной tabHexagons.
Тип переменной здесь - Table (Таблица). Это позволит пользователю выбирать для обработки нужную из всех открытых в данный момент таблиц. Кроме этого, мы немного поможем пользователю и сузим выбор, ограничим таблицы, показанные в списке, теми, в которых доминирующим типом объекта являются многоугольники (4). Это условие пропишем в поле «Значения», используя функцию TableInfo (). Таким образом, при запуске скрипта список таблиц будет содержать только те, которые в этом случае реально можно будет использовать. То же самое проделаем и с tabPoints, но только указав преобладающим типом объектов в таблицах точки (2).
В данном случае для переменных использовался тип Table (Таблица), но, как вы можете видеть ниже, существует множество других типов, из которых можно выбрать.
Теперь давайте перейдем к использованию скрипта и непосредственно к тому, как будут запрашиваться данные у конечного пользователя.
При запуске скрипта появится всплывающее диалоговое окно с запросом на ввод данных. Внешний вид этого диалога зависит от типов и количества переменных.
В этом примере диалоговое окно запрашивает только две таблицы с использованием двух раскрывающихся списков, ограниченных, согласно нашему условию, таблицами в основном содержащими полигоны в первом случае и точки во втором.
Пользователь выбирает две таблицы для использования и нажимает OK, чтобы продолжить. Теперь скрипт знает, какие таблицы использовать, и может выполнять фактическую работу. Результаты работы нашего скрипта представлены на рисунке ниже. Если бы нам, например понадобилось использовать таблицу с шестиугольниками меньшего размера, мы могли бы быстро выполнить обработку этим же скриптом и получить другой результат, просто указав другую входную таблицу.
В данном примере мы использовали переменные в операторе Select, но вы также можете использовать переменные в операторе Update или любом другом типе скрипта.