Создать форме кнопку отвечающую за открытие ранее созданного отчета

Автор Dja, 26 января 2023, 16:14

0 Пользователи и 1 гость просматривают эту тему.

Dja

Здравствуйте. Подскажите пожалуйста как можно создать в форме кнопку отвечающую за открытие ранее созданного отчета. Допустим нажал кнопку, а он открыл мне отчеты записей за 3 дня.

sokol92

Результатом создания отчета в LO является текстовый документ. Вы этот документ можете сохранить. Насколько я понимаю, файл базы данных не ведет истории выдачи отчетов. Соответственно, Вы самостоятельно организуете хранилище выданных отчетов (если необходимо). Или я не так понял вопрос?
Владимир.

Dja

Цитата: sokol92 от 26 января 2023, 17:30Результатом создания отчета в LO является текстовый документ. Вы этот документ можете сохранить. Насколько я понимаю, файл базы данных не ведет истории выдачи отчетов. Соответственно, Вы самостоятельно организуете хранилище выданных отчетов (если необходимо). Или я не так понял вопрос?
Не правильно поняли. В меню отчёты я создаю отчёт, который будет отвечать за введенные записи за три дня, так сказать шаблон, при нажатии которого которого открывается текстовый документ с моим отчётом за три дня. Если я конечно правильно понимаю как работают отчёты в Libre office.
Я хочу этот процесс сделать более дружелюбным для конечного пользователя, установив кнопку в форму, при нажатии на которую выполняются эти действия.
Я же ведь правильно понимаю, данный шаблон отчётов автоматизированный, и при открытии он выдаёт обновлённую информацию?

sokol92

Обычный путь - создаем соответствующий отчет (до этого, скорее всего, понадобится создать и запрос) и называем его (примерно) "Ввод за три дня". Пользователь открывает файл базы данных (.odb), переходит на вкладку "Отчеты" и получает наш отчет двойным щелчком мыши.
A Вы хотите, чтобы этот же самый отчет можно было бы вызвать еще и по щелчку кнопки в некоторой форме?
Владимир.

Dja

Цитата: sokol92 от 26 января 2023, 18:21Обычный путь - создаем соответствующий отчет (до этого, скорее всего, понадобится создать и запрос) и называем его (примерно) "Ввод за три дня". Пользователь открывает файл базы данных (.odb), переходит на вкладку "Отчеты" и получает наш отчет двойным щелчком мыши.
A Вы хотите, чтобы этот же самый отчет можно было бы вызвать еще и по щелчку кнопки в некоторой форме?
Да верно

sokol92

Если форма встроена в документ базы данных (.odb), то отчет можно открыть так:

ThisDatabaseDocument.ReportDocuments.getbyname("Имя отчета").open()
Создайте макрос с таким содержанием (имя макроса - на Ваш выбор) и повесьте его на нажатие кнопки.
Владимир.

Dja

Цитата: sokol92 от 26 января 2023, 18:37Если форма встроена в документ базы данных (.odb), то отчет можно открыть так:

ThisDatabaseDocument.ReportDocuments.getbyname("Имя отчета").open()
Создайте макрос с таким содержанием (имя макроса - на Ваш выбор) и повесьте его на нажатие кнопки.
А если форму и базу данных я собираюсь разделить и использовать данный макрос, работоспособность  упадёт?

Dja

Я так понимаю в запросе надо это « ThisDatabaseDocument» поменять на что-то другое?

Dja

Цитата: sokol92 от 26 января 2023, 18:37Если форма встроена в документ базы данных (.odb), то отчет можно открыть так:

ThisDatabaseDocument.ReportDocuments.getbyname("Имя отчета").open()
Создайте макрос с таким содержанием (имя макроса - на Ваш выбор) и повесьте его на нажатие кнопки.
Подскажите пожалуйста, как c помощью макроса открыть мне нужный(внешний, не в том в котором я работаю) документ БД.odb?

sokol92

Открываем документ .odb обычным образом, затем запускаем отчет.
Есть одна техническая тонкость, связанная с открытием соединения.
Пример макроса:

Sub OpenReport2
  Dim oDBDoc
  oDBDoc = StarDesktop.LoadComponentFromUrl(ConvertToUrl("C:\temp\Celsius.odb"), "_blank", 0, Array())
  With oDBDoc.currentcontroller
    If  Not .isConnected Then .connect
  End With
  ODBDoc.ReportDocuments.getbyname("Temperature").open()   
End Sub
Владимир.

Dja

Спасибо все получилось, а как можно этот .odb документ закрыть макросом, чтобы после того как мы его открыли и вытянули отчет, .odb файл, на который мы ссылались в коде, закрылся?
надеюсь я смог правильно объяснить

sokol92

Владимир.

sokol92

Если документ базы данных не нужен, можем вообще его не показывать.
Sub OpenReport3
  Dim oDBDoc
  Dim props(0) As New com.sun.star.beans.PropertyValue
  props(0).Name="Hidden": props(0).Value=True
  oDBDoc = StarDesktop.LoadComponentFromUrl(ConvertToUrl("C:\temp\Celsius.odb"), "_blank", 0, props)
  With oDBDoc.CurrentController
    If  Not .isConnected Then .connect
  End With
  ODBDoc.ReportDocuments.getbyname("Temperature").open()   
  ODBDoc.Close False
End Sub
Владимир.

Dja


Dja

Цитата: sokol92 от 27 января 2023, 14:04Открываем документ .odb обычным образом, затем запускаем отчет.
Есть одна техническая тонкость, связанная с открытием соединения.
Пример макроса:

Sub OpenReport2
  Dim oDBDoc
  oDBDoc = StarDesktop.LoadComponentFromUrl(ConvertToUrl("C:\temp\Celsius.odb"), "_blank", 0, Array())
  With oDBDoc.currentcontroller
    If  Not .isConnected Then .connect
  End With
  ODBDoc.ReportDocuments.getbyname("Temperature").open()   
End Sub


Приветствую, появился такой вопрос. Можно ли вместо полного пути, прописать текущую директорию с файлом? Программное обеспечение стоит Линукс