Raport z formularza z ustawionymi parametrami

Użytkowanie programu bazodanowego

Raport z formularza z ustawionymi parametrami

Postprzez wilq » Wt paź 08, 2013 9:24 pm

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
wilq
 
Posty: 8
Dołączył(a): Wt cze 16, 2009 4:47 pm

Re: Raport z formularza z ustawionymi parametrami

Postprzez belstar » Wt paź 08, 2013 10:06 pm

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
belstar
 
Posty: 648
Dołączył(a): Cz mar 17, 2011 9:08 am

Re: Raport z formularza z ustawionymi parametrami

Postprzez wilq » Wt paź 08, 2013 11:07 pm

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
wilq
 
Posty: 8
Dołączył(a): Wt cze 16, 2009 4:47 pm

Re: Raport z formularza z ustawionymi parametrami

Postprzez belstar » Śr paź 09, 2013 12:40 am

Ok, pomyliłem się, Sorry.
Ale,znajdziesz tam procedurę uruchamiającą raport w której jest instrukcja SQL
Kod: Zaznacz cały   Rozszerz widokZwiń widok
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   Rozszerz widokZwiń widok
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   Rozszerz widokZwiń widok
oForm.findColumn("IDKlienta"))


Jak sobie nie dasz rady wstaw przykładowy plik, postaram się pomóc.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
 
Posty: 648
Dołączył(a): Cz mar 17, 2011 9:08 am

Re: Raport z formularza z ustawionymi parametrami

Postprzez wilq » Cz paź 10, 2013 10:12 pm

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) Pobrane 144 razy
LO 4.0.5/MySQL/Win7x64
wilq
 
Posty: 8
Dołączył(a): Wt cze 16, 2009 4:47 pm

Re: Raport z formularza z ustawionymi parametrami

Postprzez wilq » Pt paź 11, 2013 9:27 pm

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) Pobrane 147 razy
LO 4.0.5/MySQL/Win7x64
wilq
 
Posty: 8
Dołączył(a): Wt cze 16, 2009 4:47 pm

Re: Raport z formularza z ustawionymi parametrami

Postprzez belstar » So paź 12, 2013 1:37 pm

Myślę że załącznik wyczerpuje temat.
Załączniki
test_raportow_selekcja2_SOLVED.odb
(39.6 KiB) Pobrane 347 razy
LibreOffice 5.1.2.2 Ubuntu 16 LTS
belstar
 
Posty: 648
Dołączył(a): Cz mar 17, 2011 9:08 am

Re: Raport z formularza z ustawionymi parametrami

Postprzez PablooN » Pn paź 20, 2014 11:26 am

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
PablooN
 
Posty: 3
Dołączył(a): Pn paź 20, 2014 8:32 am

Re: Raport z formularza z ustawionymi parametrami

Postprzez mihmih2 » N sie 16, 2015 3:06 pm

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
mihmih2
 
Posty: 1
Dołączył(a): N sie 16, 2015 2:51 pm

Re: Raport z formularza z ustawionymi parametrami

Postprzez Ran » Wt maja 23, 2017 3:59 pm

Witam
jak zrobić wydruk pojedyńczego rekordu z podformularza?
OpenOffice 4.1.2 na windows 7
Ran
 
Posty: 16
Dołączył(a): Pn sty 18, 2016 7:40 pm


Powrót do Base

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość