Raport z formularza z ustawionymi parametrami

Użytkowanie programu bazodanowego
wilq
Posty: 8
Rejestracja: wt cze 16, 2009 4:47 pm

Raport z formularza z ustawionymi parametrami

Post autor: wilq »

Potrzebuję pomocy w uruchamianiu raportu z poziomu formularza. Używam LibreOffice. Chciałbym zrobić raport dla klienta z wykazem kontaktów. W formularzu mam tabelę z klientami i chciałbym stworzyć przycisk do wywołania raportu dla wybranego w danej chwili klienta. Umiem otworzyć sam raport poprzez ThisDatabaseDocument.ReportDocuments.getByName(RptName).open lecz nie potrafię dalej spowodować aby wyselekcjonować dane dla wybranego klienta z poziomu makra. Obecnie robię to tak, że w raporrcie wykorzytsuję kwerendę parametryczną i po otwarciu z poziomu makra trzeba i tak wpisać ID klienta. Czy da się jakoś wrzucić do wywołania raportu automatyczne ustawianie tej zmiennej paranetrycznej lub jakoś inaczej?
LO 4.0.5/MySQL/Win7x64
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Raport z formularza z ustawionymi parametrami

Post autor: belstar »

Pod tymi adresami: tu i tu znajdziesz przykładowe dwa pliki z przykładami rozwiązań dokładnie takimi o jakie pytasz. Jedno bazuje na makrach , drugie stosuje rozwiązanie bez makr. W formularzu Recall, wybierz dane i naciśnij przycisk print, wywołujący raport z określonymi danymi.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
wilq
Posty: 8
Rejestracja: wt cze 16, 2009 4:47 pm

Re: Raport z formularza z ustawionymi parametrami

Post autor: wilq »

Dzięki za szybką odpowiedź! hmm... Pierwszy przykład drukuje po prostu formularz i jest dla mnie niewystarczający. Drugi produkuje te same wyniki niezależnie od ustawienia. Tzn. nic nie jest przefiltrowywane. W każdym razie macro otwiera tylko raport o nazwie zgodnej z nazwą formularza i wstawia rekord do tabeli. Chodzi mi o to w jaki sposób wykonać taki raport (jak w przykładzie z macrami) ale tylko dla jednego wybranego rekordu z pierwszej tabeli na formularzu np. tylko dla terence reader gdy jest wybrany (a teraz zawsze się drukują trzy strony).
LO 4.0.5/MySQL/Win7x64
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Raport z formularza z ustawionymi parametrami

Post autor: belstar »

Ok, pomyliłem się, Sorry.
Ale,znajdziesz tam procedurę uruchamiającą raport w której jest instrukcja SQL

Kod: Zaznacz cały

SUB ReportStart(oEvent AS OBJECT)
	DIM stTag AS String
	stTag = oEvent.Source.Model.Tag 'Input of the tag in "Additional information" of the control
	IF stTag = "Recall" THEN	
		oDataSource = ThisComponent.Parent.CurrentController
		If NOT (oDataSource.isConnected()) Then
			oDataSource.connect()
		End If
		oConnection = oDataSource.ActiveConnection()
		oSQL_Command = oConnection.createStatement()
		stSql = "INSERT INTO ""Recall"" (""Loan_ID"",""Date"") SELECT ""ID"",""Today"" FROM ""View_Reminder"""
		oSQL_Command.executeUpdate(stSql)
	END IF
	ThisDatabaseDocument.ReportDocuments.getByName( stTag ).open
END SUB
W formularzu wstaw przycisk i przypisz mu procedurę z poniższymi liniami (lub wstaw do swojej procedury, zwracając uwagę na argument procedury oEvent)

Kod: Zaznacz cały

oForm = oEvent.source.model.parent ' The current form
dim nCustomerID ' The current customer identifier must be a number
nCustomerID= oform.getstring(oForm.findColumn("IDKlienta")) ' Take the current customer id
Potem zmień instrukcje SQL żeby zawierała zmienną z pobranym IDKlienta lub innymi danymi - w przykładzie "nCustomerID".
Instrukcje SQL pobierz z widoku SQL twojej kwerendy parametrycznej, w miejsce gdzie masz wpisane polecenie uruchamiające okienko z pytaniem, wstaw nazwę zmiennej.
Wiem że trochę namieszałem, ale po analizie dojdziesz do tego.
Uwagi:
1 formularz powinien zawierać formant tabeli:

Kod: Zaznacz cały

oForm.findColumn("IDKlienta"))
Jak sobie nie dasz rady wstaw przykładowy plik, postaram się pomóc.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
wilq
Posty: 8
Rejestracja: wt cze 16, 2009 4:47 pm

Re: Raport z formularza z ustawionymi parametrami

Post autor: wilq »

Wychodzi na to, że nie wiem jak wykorzystać zmienną w raporcie. W załączeniu przykład z najprostszym możliwym kodem. Na sztywno ustawiam IDPracownika na "2", lecz raport nie łyka tej nazwy zmiennej. Może trzeba jakoś specjalnie ją oznaczyć?
Załączniki
test_raportow_selekcja.odb
(22.42 KiB) Pobrany 337 razy
LO 4.0.5/MySQL/Win7x64
wilq
Posty: 8
Rejestracja: wt cze 16, 2009 4:47 pm

Re: Raport z formularza z ustawionymi parametrami

Post autor: wilq »

Aby zdefiniować dokładnie cel zmieniłem lekko zapytanie. Uruchamiasz formularz "zadania pracowników" i naciskasz przycisk "otwórz raport". Formularz pyta o parametr "IDKlienta". Wpisując np. "2" dostajemy raport dla pracownika o ID=2. Chciałbym prosić o taki kod, który by automatycznie ustawiał IDKlienta jako "2". Może być na sztywno - z resztą sobie poradzę.
Załączniki
test_raportow_selekcja2.odb
(22.51 KiB) Pobrany 321 razy
LO 4.0.5/MySQL/Win7x64
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Raport z formularza z ustawionymi parametrami

Post autor: belstar »

Myślę że załącznik wyczerpuje temat.
Załączniki
test_raportow_selekcja2_SOLVED.odb
(39.6 KiB) Pobrany 533 razy
LibreOffice 5.1.2.2 Ubuntu 16 LTS
PablooN
Posty: 3
Rejestracja: pn paź 20, 2014 8:32 am

Re: Raport z formularza z ustawionymi parametrami

Post autor: PablooN »

Witam, mógłby ktoś wytłumaczyć kod macra udostępnionego przez użytkownika belstar linijka po linijce?
Libre office 4.2 , Win 8.1
mihmih2
Posty: 1
Rejestracja: ndz sie 16, 2015 2:51 pm

Re: Raport z formularza z ustawionymi parametrami

Post autor: mihmih2 »

witam,

przepraszam że wracam do starego tematu. Kolega belstar podał tu super rozwiązanie, dzięki któremu można otworzyć raport bezpośrednio z formularza wykorzystując zaznaczoną wartość w formancie tabeli. W jednym formularzu jest to dla mnie idealne rozwiązanie. Ale w drugim formularzu chciałbym otrzymać to samo, ale pobierając wartość nie z wybranej kolumny tabeli, lecz z pola tekstowego formularza. Chodzi o zmianę (prawdopodobnie) jednej linijki kodu. Chyba tej: oAktualnyRek = oAktualnaKontrolka.getbyindex(oAktualnaKontrolka.CurrentColumnPosition)

Czy kolega belstar albo ktokolwiek inny mógłby pomóc i podpowiedzieć jak trzeba zmienić tą linijkę (lub więcej linijek kodu)? Poniżej całe makro.


Sub ReportStart(oEvent As Object)
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)

oAktualnaKontrolka = oFormController.CurrentControl
'poniżej występuje wyjątek
oAktualnyRek = oAktualnaKontrolka.getbyindex(oAktualnaKontrolka.CurrentColumnPosition)
oPolaczenie = oFormModel.Activeconnection
oRaport = oPolaczenie.parent.DatabaseDocument.ReportDocuments

If oRaport.hasByHierarchicalName("R_Zadania_pracownika") Then
'Wywołanie funkcji z parametrami
openReport(oPolaczenie, oRaport, "R_Zadania_pracownika" , ( "Pracownicy.ID =" & "'" & oAktualnyRek.text & "'" ))
Else
print "Nie ma takiego raportu"
End If
End SUB


Function openReport(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
openReport = oReportsDocuments.loadComponentFromURL(aReportName ,"", 23, aProp())
End function
libreoffice 4.4 na windows7
Ran
Posty: 16
Rejestracja: pn sty 18, 2016 7:40 pm

Re: Raport z formularza z ustawionymi parametrami

Post autor: Ran »

Witam
jak zrobić wydruk pojedyńczego rekordu z podformularza?
OpenOffice 4.1.2 na windows 7
ODPOWIEDZ