RUS  ENG 

Автоматическая смена режима объекта

Страницы: 1 2 След.
RSS
Автоматическая смена режима объекта, Требуются советы по созданию алгоритма по смене режима
 
Добрый вечер!
Поршу уточнить имеющиеся возможности по внедрению алгоритма автоматической смены режима объекта в зависимости от даты в поле БД.
То есть в БД допустим сегодня стоит режим № 0, завтра 18.05.2023 он должен смениться на режим № 1, 01.06.2023 должен смениться на режим
№ 2..
(данные по датам в базе данных в разных столбцах объекта есть, осталось алгоритм понять, как их превратить в смену режима) спасибо.
 
Здравствуйте!

Технически такая возможность есть, ZuluGIS предоставляет различные средства для расширения своей функциональности.
Система позволяет создавать, редактировать и выполнять макросы на языках VBScript и JScript. Можно подключать дополнительные модули расширения (plug-ins).Данными вопросами пользователи занимаются самостоятельно.
Руководство программиста: https://www.politerm.com/zuludoc/zuluax/index.html
 
Добрый день.
Как раз сегодня решал эту задачу:

Собственно пример кода на vbscript
Код
ChangeMode
Sub ChangeMode
Set L = CreateObject("ZuluLib.Layer")
L.open "zulu://Login:password@localhost:6473/2023/vash_sloy.zl"
Set elemetsResult= L.ExecSQL("SELECT sys where typeid = 1 and (modeid = 1 or modeid = 2) and Progress = 'Выполнено'")
   Set elementsList= elemetsResult.DataSet
   elementsList.MoveFirst
   Do
   If elementsList.eof = true then exit do  
     
   element = elementsList.FieldValue(0)
        L.Elements.Item(element).Mode = 3
   elementsList.MoveNext
   Loop
End Sub


Код выше вы можете переделать под себя.
Он запускается с помощью бат файла:
Код
rem For 32-bit OS
 Set "SystemPath=%SystemRoot%\System32"
  
 rem If 64-bit OS
 if exist %SystemRoot%\SysWOW64 set "SystemPath=%SystemRoot%\SysWow64"

c:\windows\System32\cscript.exe D:\Zulu\SQL_VBS_BAT\ChangeMode.vbs


бат файл запускается каждую ночь с помощью планировщика задач

Совет: я бы сначала перевел бы даты в некоторый счетчик (18.05.2023= 1, 19.05.2023=2, 25.06.2023 = 3), так будет проще писать скрипт (это делается либо с помощью сторонней БД (рекомендую), или же создать справочник)
 
Супер! Спасибо, то что надо, буду разбираться!
 
Цитата
написал:
Добрый день.
Как раз сегодня решал эту задачу:

Собственно пример кода на vbscript
Лучше из скрипта обращаться к серверу по возможности реже. Если таких объектов тысячи, сервер будет сильно атакован.

Режимы можно менять одной командой SetModesByElemsStates (https://politerm.com/zuludoc/zuluax/index.html#Layer_SetModesByElemsStates.html)

Создаем объект https://politerm.com/zuludoc/zuluax/index.html#ZElemsStates_cls.html

накапливаем изменения режима через метод https://politerm.com/zuludoc/zuluax/index.html#ZElemsStates_AddItem.html


Код
ChangeMode
Sub ChangeMode
Set L = CreateObject("ZuluLib.Layer")

Set States = CreateObject("zululib.ZElemsStates")

L.open "zulu://Login:password@localhost:6473/2023/vash_sloy.zl"
Set elemetsResult= L.ExecSQL("SELECT sys where typeid = 1 and (modeid = 1 or modeid = 2) and Progress = 'Выполнено'")
   Set elementsList= elemetsResult.DataSet
   elementsList.MoveFirst
   Do
   If elementsList.eof = true then exit do  
     
   element = elementsList.FieldValue(0)
        
      States.AddItem element, 3

   elementsList.MoveNext
   Loop

   L.SetModesByElemsStates States

End Sub

В этом случае на сервер уйдет одна команда, независимо от числа элементов. И отработает быстрей
Изменено: Алексей Аширов - 18.05.2023 21:44:31
 
Добрый день!

Скрипт похожий написал, отлично все вручную работает, все режимы меняет как надо! Спасибо!
Но запнулся на бат-файле, все время пишет ошибку в 1 символе 1 строки при запуске бат-файла, то есть windows не понимает скрипт, возможно надо через Зулу его запускать?
PS И скрипт и бат файл запускаю с сервера.
 
Сергей, добрый день!
Попробуйте пересохранить файл скрипта в кодировке UNICODE или ANSI, чтобы их можно было запускать из командной строки. ZuluGIS сохраняет эти файлы в кодировке UTF-8, и Windows похоже не понимает.
 
Добрый вечер!
Да, именно в кодировке дело было, вроде все работает, поставили на ежедневку ночью, протестим недельку, все хорошо будет на постоянку уже запустим, спасибо за помощь!
 
Добрый день!

В продолжение темы, все предыдущие скрипты работают, обновляются, сейчас написал похожий скрипт, но с обращением к 2 слоям через карту, прошу помочь понять, что упустил, так как скрипт работает из самой программы, но при загрузке с сервера ничего не обновляет.., все скрипты основанные на Ваших примерах, с обращением непосредственно к слою работают, скрипт прилагаю:

statgi
Sub statgi
Set map = CreateObject("ZuluLib.MapDoc")
map.Open "zulu://zulu.адрес_сервера:6473/ZuluGIS/Map.zmp"
map.ExecSQL "UPD ATE [Статистика] SE T [Дата обновления] = SEL ECT GETDATE()"
map.ExecSQL "UPD ATE [Статистика] SE T [Всего запланировано] = (SELECT COUNT(*) FR OM [ГИ])"
map.ExecSQL "UPD ATE [Статистика] SE T [В работе] = (SEL ECT COUNT(*) FR OM [ГИ] WHERE typeid = 1 AND modeid = 4)"
map.ExecSQL "UPD ATE [Статистика] SE T [Завершено] = (SEL ECT COUNT(*) FR OM [ГИ] WHERE typeid = 1 AND modeid = 2)"
map.ExecSQL "UPD ATE [Статистика] SE T [Аварий] = (SEL ECT COUNT(*) FR OM [ГИ] WHERE typeid = 1 AND modeid = 3)"
End Sub
Изменено: Сергей Коваленко - 06.06.2023 16:31:12
 
Сергей,
метод ExecSQL возвращает объект IZSqlResult. Свойства RetCode и ErrorString позволят понять, что не так.
Изменено: Дмитрий Озеров - 07.06.2023 14:30:11
 
У меня тоже так часто бывает.
надо убедится что сам vbs запускается.
зачастую когда один и тот же код работают из зулу, но не работает через bat+vbs, то проблема именно в том, что сам vbs просто не запускается, при этом не давая ошибку. Просто cmd быстро открывается и закрывается
 
Спасибо, вопрос решен, сам код рабочий, ошибка в самой ссылке, которую я не указал: map.Open "zulu://zulu.адрес_сервера:6473/ZuluGIS/Map.zmp" - упустил @
 
Добрый день!

При развитии темы встретился со следующими проблемами:

1. Данные скрипты отлично работают в одной папке, но в рамках возникшей необходимости реализовать разные права доступа сотрудникам, все слои разбил по разным папкам, оставив карту в главной папке (слои в подпапках), при таком раскладе скрипты не работают, то есть карта не находит свои слои, может опыт был, как мне проще реализовать VBS через SQL, где прописаны адреса к каждому слою?

2. Так как многие сотрудники привыкли в Excеl работать, и сложно новому учиться, а данные в Зулу нужны актуальные, возможно-ли реализовать, через описанный способ выше, чтобы из определенного столбца Таблицы Excel на сервере посредством VBS через SQL, данные подтягивались в определенный столбец в таблице Зулу?
 
Цитата
Сергей Коваленко написал:
Добрый день!

При развитии темы встретился со следующими проблемами:

1. Данные скрипты отлично работают в одной папке, но в рамках возникшей необходимости реализовать разные права доступа сотрудникам, все слои разбил по разным папкам, оставив карту в главной папке (слои в подпапках), при таком раскладе скрипты не работают, то есть карта не находит свои слои, может опыт был, как мне проще реализовать VBS через SQL, где прописаны адреса к каждому слою?

2. Так как многие сотрудники привыкли в Excеl работать, и сложно новому учиться, а данные в Зулу нужны актуальные, возможно-ли реализовать, через описанный способ выше, чтобы из определенного столбца Таблицы Excel на сервере посредством VBS через SQL, данные подтягивались в определенный столбец в таблице Зулу?

1. Вопрос:
Код
street_simf
Sub street_simf
   Set Map = CreateObject("ZuluLib.MapDoc")

   Map.AddLayer("zulu://login:password@localhost:6472/2021/Симферополь/Граница/street.zl")

   Map.AddLayer("zulu://login:password@localhost:6472/2021/Симферополь/For ing/Notes.zl")
       
    
   Map.ExecSQL("upd ate L1 se t L1.[street] = L2.[street] fr om [Поручения] as L1 , [Улицы] as L2 wh ere L1.typeid = 2 and L1.geometry.stwithin(L2.geometry) ") 
End Sub


2. Вопрос:
https://youtu.be/xn2__bZbD94?t=1839 Думаю это вам и надо

Но! если импорт данных будете делать часто, то лучше это автоматизировать, к тому же, можно написать алгоритм, который будет проверять вносимые данные до самой загрузки в зулу. Это можно сделать на многих языках. Я использую python и с#
 
Спасибо!
1. Код изменил по логике, но пока в доступе какая-то проблема, завтра буду решать, хотел-бы уточнить, то есть, если я в таком случае добавляю 5 слоев, то они автоматом получают имена L1, L2..L5 верно?

2. Да, именно автоматизированную, как тут, допустим в SQL код создает временную таблицу из 2 столбцов, загруженных из Excel или CSV и значения присваивает уже столбцам в таблице в Зулу.
 
Цитата
Сергей Коваленко написал:
Спасибо!
1. Код изменил по логике, но пока в доступе какая-то проблема, завтра буду решать, хотел-бы уточнить, то есть, если я в таком случае добавляю 5 слоев, то они автоматом получают имена L1, L2..L5 верно?

2. Да, именно автоматизированную, как тут, допустим в SQL код создает временную таблицу из 2 столбцов, загруженных из Excel или CSV и значения присваивает уже столбцам в таблице в Зулу.

1. Нет. L1, L2 я задаю как псевдонимы, то есть меняю название слоя на более удобное для написание название через "as". В SQL коде можете посмотреть.

2. Если вы используете стороннюю БД, то тут и без zulu можно, сразу на прямую данные вносить. Не сильно понял зачем временную таблицу делать
 
1. Первый вопрос закрыт, спасибо! Все переписал, все отлично работает.
2. По второму не понял, то есть как-то в БД слоя Зулу сразу прописывать информацию из Excel? Мне посоветовали через Python сделать, но еще не прорабатывал данный вопрос в этом ракурсе.
 
Цитата
Сергей Коваленко написал:
1. Первый вопрос закрыт, спасибо! Все переписал, все отлично работает.
2. По второму не понял, то есть как-то в БД слоя Зулу сразу прописывать информацию из Excel? Мне посоветовали через Python сделать, но еще не прорабатывал данный вопрос в этом ракурсе.

Вот я использую MSSQL как источник данных и импортирую данные не через зулу, а на прямую в базу.

Ниже будет пример кода по импорту данных в БД.
Код
import pyodbc
import openpyxl
import os
import shutil

wb = openpyxl.load_workbook(r'D:\1\temp.xlsx')
wb.active = 0
sheet = wb.active

con = pyodbc.connect(
    "Driver={SQL Server Native Client 11.0};"
    "Server=ip;"
    "Database=database;"
    "UID=login;"
    "PWD=password;"
    "Trusted_connection=no;"
)

cur = con.cursor()

i = 2

while i <= sheet.max_row:
    cur.execute(f"upd ate opora se t marka = {sheet['B' + str(i)].value} fr om opora wh ere [sys] = {sheet['A' + str(i)].value}")
    con.commit()
    
    i += 1
    
print("Done")
 
Добрый вечер!
Спасибо за материал, изучал, несколько заходов было, пока не вышло, код идентичный:

import pyodbc
import openpyxl
import os
import shutil

wb = openpyxl.load_workbook(r'C:\!geo\ZuluTest.xlsx')
wb.active = 0
sheet = wb.active

con = pyodbc.connect(
"Driver={SQL Server Native Client 11.0};"
"Server= IP, 6473;"
"Database=ZuluGIS/DB/UI/Thermo.zl?dbid=6;"
"UID=Login;"
"PWD=Parol;"
"Trusted_connection=no;"
)

cur = con.cursor()

i = 2

while i <= sheet.max_row:
cur.execute(f"UPD ATE [Объекты теплоэнергетики] SE T [Статус процесса] = {sheet['Статус процесса' + str(i)].value} FR OM [Объекты теплоэнергетики] WH ERE [Sys] = {sheet['Sys' + str(i)].value}")
con.commit()

i += 1

print("Успешно!")

Но, почему-то не обновляются ячейки, мое предположение, может Database как-то не правильно записал, в другом формате нужно?
Библиотеки, совпадение полей, логины, пароли драйверы IP, дорога к ексель и порт, точно все ок, перепроверил несколько раз, вот с базами не уверен..
 
Пошел построчно:
Не могу подключится к серверу, выдает ошибку 08001, проверку осуществил кодом:
try:
connection = pyodbc.connect(connection_string)
print("Подключение к базе данных успешно установлено.")
connection.close()
except Exception as e:
print("Ошибка подключения к базе данных:", e)

Здесь пока догадок нет, что не так.. разрешение есть, перегруженности нет..
 
Сергей, добрый день!
Как писал Сергей Мечев, в примере кода он использует соединение с MSSQL напрямую.
Если Вы так же хотите соединяться со своим SQL Server, то в параметре Database нужно указывать имя базы данных SQL Server.
Строка "ZuluGIS/DB/UI/Thermo.zl?dbid=6" является частью URI объекта ZuluServer и понятна только ему.
 
Тогда так получается:

"DATABASE=Участки;"

Буза у меня стандартная, название не менял, но ошибка не ушла, возможно мне эту базу дополнительно настроить нужно, по источнику может, чтобы связь прошла, или напрямую все должно работать?
 
Цитата
Сергей Коваленко написал:
Тогда так получается:

"DATABASE=Участки;"

Буза у меня стандартная, название не менял, но ошибка не ушла, возможно мне эту базу дополнительно настроить нужно, по источнику может, чтобы связь прошла, или напрямую все должно работать?
Скорее всего вы используете источник данных localDB, с ним тоже можно работать, но через объектную модель.
Что касается ВНЕШНЕЙ базы данных, то ее надо скачать(если нет), настроить и связать с зулу, через источник данных (если с зулу смотреть) или же через монитор -> сервер -> конфигурации
Изменено: Сергей Мечев - 23.07.2023 12:03:57
 
У меня что-то все перемешалось, что имею сейчас:

1. Установил SQL Server Managment Studio, но ни к какому серверу подключится не смог, да и не вижу их, то есть нужно ли мне создавать новый сервер SQL, или он снесет текущие базы? Хотя среди файлов есть какой-то кривой сервер MS SQL Zulu, но не виден при подключении..

2. В Источниках смог с типом подключения SQL Server LocalBD подключить базу данных Термо, в которую и хочу вносить изменения из файла Excel, но сам файл Excel как прописать в источниках, через создание локальной папки?

3. Настроить MS SQL Server как в инструкции Политерма тоже не смог, так как нужно первоначально создать базу данных на SQL Server, но этого сделать не могу из-за пункта 1.. + какой сервер прописывать непонятно.

4. Есть в целом рабочий Python файл, который подтягивает значения из Excel файла в таблицу "Термо", но не может подключится к базе данных, к серверу Зулу соединение успешно протестировано, возможно мне нужно использовать стандартный порт SQL 1433?

Буду благодарен любой информации.. то прям в дебри залез.
 
Помню свой первый раз установки sql server, это заняло часа 2. В общем танцы с бубном получились
Из того что помню:
1. Помимо самого management studio надо еще и сам сервер установить.
2. Надо открыть порт 1433 (если не меняли). Через роутер и файрвол, точно не помню. *** и не уверен что его вообще обязательно открывать***
3. Далее по идее можно с помощью management studio подключится к серверу И в настройках разрешить доступ извне *** тоже не уверен что это прям маст хев.

* 2 и 3 нужны чтоб к sql серверу можно было достучатся из любого места, не только локально.

Что касается переноса таблиц из localdb в mssql, то тут сложного ничего нет. В структуре слоя, там где таблицы, правый клик - задачи - мигрировать данные и выбираем нужную базу. При этом зулу и и скл надо связать.
Страницы: 1 2 След.