Marcin S.

Marcin S. BI Consultant, ETL
developer

Temat: Sprawdzenie odczytanch rekordow w podraporcie

Witam,

mam raport na Commandzie z 4-ma parametrami. Dwa z nich sa obowiazkowe (pSet, pProjekt), dwa pozostale sa opcjonalne z przypisanymi domyslnymi wartosciami 'ALL' (pT_Name - string) i 99999 (pT_ID - number). Parametry obsluzone w SQLu. Wszystkie parametry jako single value.

Raport glowny ma podraport w sekcji Footer. Podraport rowniez na Commandzie, do ktorego przekazuje 3 parametry pSet, pProjekt i pT_ID. Parametru pT_Name nie moge przekazac, poniewaz nie mam pola w tabeli, po ktorym moge zmapowac z raportu glownego do podraportu.
Ponadto w podraporcie pole przyrownane do pT_ID jest typu varchar2, w raporcie glownym number (w obu przypadkach rozne tabele)
Parametry w podraporcie rowniez obsluzone w Commandzie.

Obsluga parametrow pT_Name i pT_ID w raprocie glownym:

... WHERE...
AND
( case
when 99999 = {?pT_ID} then 1 else
(case when Pole_id = {?pT_ID} then 1 else 0 end)
end ) = 1
AND
(case
when upper('ALL') = upper('{?pT_Name}') then 1 else
(case when upper(Pole_name) like upper('{?pT_Name}%') then 1 else 0 end)
end) = 1

Obsluga pT_ID w podraporcie:
...WHERE...
AND
(case
when 99999 = to_char({?pT_ID}) then 1 else
(case when Pole_id_var = to_char({?pT_ID}) then 1 else 0 end)
end ) = 1

Raport dziala poprawnie w sytuacji kiedy, parametry opcjonalne zachowaja domyslne wartoci, user wybiera wartosci dla parametrow obowiazkowych LUB
jesli user wprowadzi wartosc dla parametru pT_ID, wowczas podraport wyswietli rekordy odpowiadjace rekordom w raporcie glowynm - dla wprowadzonych parametrow.
Natomiast jesli user wprowadzi wartosc dla parametru pT_Name a pT_ID zostawi z domyslna wartoscia, wowczas podraport wyswietli (za duzo) rekordy odpowiadjace tylko dwom obowiazkowym parametrom.

W raporcie glownym jest grupowanie po Pole_id i jezeli umieszcze podraport w GroupFooterze, wowczas wyswietla on prawidlowo rekordy odpowiadajace polu Pole_id z raportu glownego. Niestety dane z podraportu musza byc na koncu raportu.

Pytanie jak sprawdzic i przekazac do podraportu informacje o rzeczywiscie odczytanych/pobranych rekordach w raporcie glownym w pzrypadku uzycia parametru pT_Name ?

Bede wdzieczny za sugestie, zastosowalem kiedys rozwiazanie z przekazywaniem zmiennych shared, ale raportu nie mam a z glowy wylecialo :/
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Sprawdzenie odczytanch rekordow w podraporcie

Przykład zastosowania zmiennych typu shared jest tutaj:
http://www.goldenline.pl/forum/3095102/przekazywanie-d...

Ale wydaje mi się, że w twoim przypadku wystarczy zastosować przekazywanie danych z raportu głównego do podraportu za pomocą parametrów. Tworzysz w podraporcie własny parametr i na podraporcie w opcji subreport links możesz skojarzyć ten parametr z inną parametrem lub formułą.
Marcin S.

Marcin S. BI Consultant, ETL
developer

Temat: Sprawdzenie odczytanch rekordow w podraporcie

Marcin S.:
Ale wydaje mi się, że w twoim przypadku wystarczy zastosować przekazywanie danych z raportu głównego do podraportu za pomocą parametrów.
Tworzysz w podraporcie własny parametr i na podraporcie w opcji subreport links możesz skojarzyć ten parametr z inną parametrem lub formułą.
Parametr pT_ID w podraporcie jest obsluzony w Commandzie i w raporcie glownym jest skojarzony z parametrem pT_ID - dziala jesli user wprowadzi wartosc dla tego parametru, natomiast nie dziala (za duzo rekordow w podraporcie) jesli wartosc domylsna 99999 pozostanie bez zmian i user wprowadzi wartosc dla parametru pT_Name. Parametru pT_Name z raportu glownego nie mam z czym skojarzyc w podraporcie.pTest.

Natomiast skojarzenie pola Command.PoleID z raportu glownego do pola Command.PoleID (formula ToNumber(Command.PoleID) ) w podraporcie, powoduje, ze podraport wyswietla rekordy np. dla jednego pola Command.PoleID, ktore niekoniecznie jest na raporcie glownym, np. raport glowny wyswietla Command.PoleID = 10, 12, 72, 80 a podraport wyswietla dane tylko dla Command.PoleID = 36 lub wiecej niz jeden PoleID 1, 3, 4, 5, 6, 72, 79, 83. Co oznacza, ze podraport zacohwuje sie zupelnie losowo.
Podobny efekt daje usuniecie w podraporcie z Commanda obslugi parametru pT_ID i przyrownanie w Selection Formula {@PoleID_ToNumber} = {?Pm-Polecenie.PoleID} (formula ToNumber(Command.PoleID) ).

Dlatego uznalem, ze jedyne wyjscie to zmienne shared.
Przykład zastosowania zmiennych typu shared jest tutaj:
http://www.goldenline.pl/forum/3095102/przekazywanie-d...
Przy probie ze zmiennymi mam obsluge parametru pT_ID w Commandzie podraportu i skojarzenie go z parametrem z raportu glownego

Zadeklarowalem zmienna w raporcie glownym i wrzucilem do ReportHeadera
shared numbervar Show_TestID;
true;

W ReportFooterze wrzucilem formule
shared numbervar Show_TestID;
Show_TestID;

W podraporcie wrzucam formule (GroupHedaer lub ReportHeader)
shared numbervar Show_TestID:=tonumber({Command.PoleID}); // Command.PoleID w podraporcie jest typu varchar2
Show_TestID;

Nie dziala - podraport wyswietla za duzo rekordow.
Dodam, ze w podraporcie mam grupowanie
WhileReadingRecords;
true;Ten post został edytowany przez Autora dnia 03.02.14 o godzinie 13:37
Jadwiga Nowak

Jadwiga Nowak Programista Baz
Danych/Analityk

Temat: Sprawdzenie odczytanch rekordow w podraporcie

Przyznam, że całego twojego tekstu nie analizowałam, ale jedno co mi się rzuca w oczy, to umieszczenie podraportu w sekcji ReportHeader. Pamiętam, że ja kiedyś też miałam problem z podraportem umieszczonym w tej sekcji. Nie zadziałało tak jakbym chciała. Tutaj nigdy nie umieszczam podraportów. Podraporty najlepiej czują się w sekcji detali lub nagłówkach i stopkach grup. Tam bowiem wiedzą dokładnie z czym się wiązać. Sam zresztą napisałeś, że raport umieszczony w sekcji GroupFooter działa, a przesunięty na dół, czyli jak się domyślam do sekcji stopka raportu już nie działa. W stopce raportu nie możesz umieszczać podraportów, które wiążesz z poszczególnymi rekordami z raportu głównego, bo w tej sekcji on „widzi” tylko ostatni rekord. Tak więc moja konkluzja jest taka, że podraport masz dobrze zbudowany tylko trzeba go w dobrej sekcji umieścić. Zmienne shared tutaj nic nie pomogą. One służą do przekazywania wartości pomiędzy raportem głównym i podrpoartami a nie do samego linkowania.

Następna dyskusja:

Podraport w podraporcie




Wyślij zaproszenie do