automatyczna nazwa raportu

Użytkowanie programu bazodanowego
mih
Posty: 53
Rejestracja: sob gru 20, 2014 12:42 pm

automatyczna nazwa raportu

Post autor: mih »

witam,

korzystam z poniższego makra, zresztą zapożyczonego chyba z jednej z przykładowych baz kolegi belstar. Makro pobiera z formularza konkretne dane i tworzy raport o konkretnym rekordzie. Makro działa super, ale zamarzyło mi się żeby robiło troszkę więcej. Chciałbym aby generowany raport (plik writera) przyjmował nazwę taką samą jak pobiera aby przefiltrować raport, czyli w poniższym przykładzie "txtnumer_zamowienia"

Kod: Zaznacz cały

Sub ReportStart4(oEvent As Object)
        On Error Goto ErrorHandler   
Dim oPrzycisk As Object
Dim oPolaczenie As Object
Dim oRaport As Object
Dim oFormModel  As Object
Dim FormController As Object
Dim oAktualnaKontrolka As Object
Dim oAktualnyRek As Object
oPrzycisk = oEvent.source.model
If  oPrzycisk.FocusOnClick = true Then
oPrzycisk.FocusOnClick = false
End If
oFormModel = oPrzycisk.parent
oFormController = thiscomponent.currentcontroller.getFormController(oFormModel)
frm = ThisComponent.Drawpage.Forms.Formularz
oAktualnaKontrolka = frm.getbyname("subform")


oAktualnyRek = oAktualnaKontrolka.getByName("txtnumer_zamowienia")
oPolaczenie = oFormModel.Activeconnection
oRaport = oPolaczenie.parent.DatabaseDocument.ReportDocuments


      If oRaport.hasByHierarchicalName("wz_ogolne") Then
         openReport4(oPolaczenie, oRaport, "wz_ogolne" , ( "zamowienia.numer_zamowienia =" & "'" & oAktualnyRek.text & "'" ))
      Else
      print "Nie ma takiego raportu"
      End If
   ErrorHandler:
End SUB




Function openReport4(oConnection, oReportsDocuments, aReportName, sFilter) As Object
   Dim aProp(2) as new com.sun.star.beans.PropertyValue
   Dim oReportDesign
   aProp(1).Name = "ActiveConnection"
   aProp(1).Value = oConnection
   aProp(0).Name = "Hidden"
   aProp(0).Value = true  
   aProp(2).Name = "OpenMode"
   aProp(2).Value = "openDesign"
   'Otwarcie raportu w widoku projektu
   oReportDesign = oReportsDocuments.loadComponentFromURL(aReportName ,"", 0, aProp())
   'Wpisanie nowego filtra
   oReportDesign.filter = sFilter
  
   aProp(0).Value = false
   aProp(2).Value = "open"
   'Przełączenie raportu z widoku project na normalny
   'poniżej występuje wyjątek
   openReport4 = oReportsDocuments.loadComponentFromURL(aReportName ,"", 23, aProp())
End function

znam BASICa jedynie na tyle aby "pożyczyć" jakieś makro i zmodyfikować je pod siebie. Próbowałem pytać na forum angielskim openoffica, dowiedziałem się jedynie że trzeba tu coś kombinować z funkcją SetTitle. Wątek skończył się:

The function openreport returns an object to the report just generated. This is an object and can be used for other things in this case: set the name of a frame.


openReport("Place here the parameters for the function").currentcontroller.frame.settitle("raport_name")
Szukam w internecie czegoś o SetTitle, próbuje wykorzystać podaną wskazówkę, ale nic nie wychodzi. Czy ktoś może ma taką wiedzę, aby coś więcej podpowiedzieć? Może ktoś kiedyś zrobił podobną rzecz i się udało?
OpenOffice 4.1 na Windows 7
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: automatyczna nazwa raportu

Post autor: belstar »

mih pisze:Wątek skończył się
Podano ci właściwe rozwiązanie, i oto powód.

Kod: Zaznacz cały

openReport4(oPolaczenie, oRaport, "wz_ogolne" , ( "zamowienia.numer_zamowienia =" & "'" & oAktualnyRek.text & "'" ))
na końcu tej linii jak dodasz to co ci zasugerowano:

Kod: Zaznacz cały

.currentcontroller.frame.settitle("raport_name")
to otrzymasz to co chcesz, całość powinna wyglądać tak:

Kod: Zaznacz cały

openReport4(oPolaczenie, oRaport, "wz_ogolne" , ( "zamowienia.numer_zamowienia =" & "'" & oAktualnyRek.text & "'" )).currentcontroller.frame.settitle("Twoja nazwa")
Oczywiście musisz wstawić do metody setTitle swoje dane czyli:

Kod: Zaznacz cały

oAktualnyRek.text
bo to tam masz to co znajduje się w "txtnumer_zamowienia".
LibreOffice 5.1.2.2 Ubuntu 16 LTS
mih
Posty: 53
Rejestracja: sob gru 20, 2014 12:42 pm

Re: automatyczna nazwa raportu

Post autor: mih »

Wielkie dzięki za pomoc.

Zrobiłem tak jak mi podpowiedziałeś i działa...ale nie do końca tak jak chciałem:)

Numer zamówienia wskakuje ładnie na górny pasek writera. Już chciałem otwierać szampana, ale kliknąłem na "eksportuj do pdf" i w proponowanej nazwie jest dalej nazwa raportu z Base:(. A o to mi chodziło: aby wygenerowane raporty zapisywać jako pdfy i chciałem aby ręcznie nie trzeba było wpisywać nazwy pliku pdf. Myślałem że writer tak działa że to uzyskam.

Jest sposób żeby te moje marzenia się spełniły czy jest to niemożliwe?
OpenOffice 4.1 na Windows 7
ODPOWIEDZ