Добрый день! Вы могли бы сделать иначе. 1. Выбираем инструмент линейка. 2. Ставим точку на карте. 3. Нажимаем на кнопку макроса. 4. Выводится сообщение с координатами точки (лучше выводить в окно сообщений зулу а не в msgBOX)
Добрый день! У меня реализована связь двух таблиц (множество к одному). Хочу обратиться в родительскую таблицу и добавить новую запись не обращаясь к геометрии. Как я понял из вашего ответа, при помощи встроенного SQL запроса реализовать добавление строки в таблицу базы данных слоя нельзя. Можно ли через макрос VBS как-то иначе добавить новую строку в таблицу?
Вот еще полезный ресурс где Вы можете посмотреть различные методы работы с LibreOffice Calc для написания макросов на VBScript - [URL=https://help.72to.ru/attachments/download/129/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81%D0%BE%D0%B2.pdf]https://help.72to.ru/attachments/download/129/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2...[/URL]
При помощи инструмента "линейка" расставил на карте три точки. Как программно получить координаты этих точек (я вижу их в окне "Свойства", но как их оттуда вытащить в макрос VBs)?
[QUOTE] написал: [URL=/forums/?PAGE_NAME=profile_view&UID=1425]Reidenschi[/URL], не работает т. к. значение даты в тексте запроса должно быть заключено в кавычки, у Вас в первом сообщении так и сделано. Без кавычек только числовые константы или имена (переменных и т.п.), заданные латиницей, без спецсимволов, пробелов и т.п.[/QUOTE] Спасибо.
Спасибо! Всё заработало как надо! Только я не понял, почему когда задается переменная d в виде 07.12.2023 то без апострофов с каждой стороны скрипт не работает. Пришлось еще добавить переменную m=" ' ".
Выложу здесь рабочий скрипт.
Суть скрипта: "Вывести в окно "сообщение" количество шт. нарисованных на карте объектов каждым исполнителем начиная с даты, заданной при помощи окна ввода строки, а также вывести общее количество выполненных объектов". [CODE]Sub otchetAll Set Ls = Zulu.ActiveMapDoc.Layers.Active If Ls.UserName <> "GAS_СЕТИ" Then MsgBox "Активируйте слой GAS_СЕТИ и повторите попытку" Exit Sub End If Dim d,m,dd d=InputBox("Введите дату в указаном формате: ДД.ММ.ГГГГ") If d="" Then MsgBox "Поле ""дата"" не заполнено" Exit Sub End if If IsDate(d) = True then Else MsgBox "ОШИБКА: Дата введена не корректно!" Exit Sub End If m="'" dd=Date Set Lss = Application.ActiveDocument.NativeDoc.Layers.Active text_sql = "SEL ECT [Объект добавил], COUNT(DISTINCT [Номер газопровода]) FR OM [GAS_СЕТИ] WHERE [Дата внесения объекта]>= " + CStr(m) + CStr(d)+ CStr(m) + " And typeid=2 GROUP BY [Объект добавил]" otv_sql = "SEL ECT COUNT(DISTINCT [Номер газопровода]) FR OM [GAS_СЕТИ] WHERE [Дата внесения объекта]>= " + CStr(m) + CStr(d)+ CStr(m) + " And typeid=2" Set Result1 = Lss.ExecSQL(text_sql) Set Result2 = Lss.ExecSQL(otv_sql) Set Out = OpenOutputChannel ("Сообщения") Out.Clear OUT.Put "{\B}Количество выполненных объектов в период с " + CStr(d)+ " г." + " по " + CStr(dd) + " г." + CHR(10) OUT.Put "Исполнитель" + " " + "Кол-во объектов" + CHR(10) + CHR(10) Set t = Result1.DataSet t.MoveFirst Do If t.Eof = True Then Exit Do OUT.Put t.FieldValue(0) + Space(20-Len(t.FieldValue(0))) + t.FieldValue(1) +CHR(10) t.MoveNext Loop Set tt = Result2.DataSet OUT.Put CHR(10) + "{\B}Общее кол-во, шт.:" + " " + tt.FieldValue(0) +CHR(10) MsgBOX "Выполнено" End Sub
Sub otchetAll Dim d [COLOR=#0000ff][FONT=Arial Black, Gadget]d[/FONT][/COLOR]=InputBox("Введите дату") Set Lss = Application.ActiveDocument.NativeDoc.Layers.Active
Set Result1 = Lss.ExecSQL("SEL ECT [Объект добавил], COUNT(DISTINCT [Номер газопровода]) FR OM [GAS_СЕТИ] WHERE [Дата внесения объекта]>=[COLOR=#0000ff][FONT=Arial Black, Gadget]'07.12.2023'[/FONT][/COLOR] And typeid=2 GROUP BY [Объект добавил]")
Подскажите пожалуйста, как заданную переменную [COLOR=#0000ff][FONT=Arial Black, Gadget]d[/FONT] [/COLOR]подставить вместо надписи [COLOR=#0000ff][FONT=Arial Black, Gadget]'07.12.2023'.[/FONT] [/COLOR]
Решил задачу через макрос. Вывод запроса в LibreOffice Calc
Sub Libre Set L1=Zulu.ActiveMapDoc.Layers.Active Set Res12=L1.ExecSQL("SELECT DISTINCT[ty_FIO],[ty_Q],[eks_no] WHERE typeid=2 AND [ty_FIO] IS NOT NULL")
Set oSM = CreateObject("com.sun.star.ServiceManager") Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
Dim arg() Set wb = oDesk.loadComponentFromURL("private:factory/scalc","_blank", 0, arg) Set oSheet = wb.CurrentController.ActiveSheet
Set objRecordSet=Res12.DataSetrow=3 Do Until objRecordSet.EOF For i = 1 To objRecordSet.FieldCount 'objWorksheet.Cells(row, i+1).Value = objRecordSet.FieldDisplayValue(i - 1) oSheet.getCellByPosition(i+1,row).String=objRecordSet.FieldDisplayValue(i-1) Next row = row + 1 objRecordSet.MoveNext Loop
[QUOTE] написал: [QUOTE] написал: Как экспортировать ответ SQL запроса в LibreOffice Calc? Версия Zulu 10.0.0.8483u.[/QUOTE] Если программно, то сейчас только в csv или dbf. Текст потом можно в офисе открыть[/QUOTE] Спасибо. Открыть текстовой файл в офисе можно, но хотелось бы, чтобы конечный пользователь не морочил себе голову лишними действиями (пускай даже такими простыми). Из основного запроса можно экспортировать в .ods, будет ли это реализовано из SQL в будущем?