Cześć,
mam napisaną funkcję, która wyświetla tabelę pod szybkim wykresem, w której mam wyszczególnione dokumenty z konkretnego zakresu. Jak najlepiej ogarnąć wynik tej funkcji na filtr? Przykładowo: jestem na FS i funkcja zwraca mi 5 dokumentów FS, zamykam wykres oraz wybieram filtr, który filtruje mi tylko te dokumenty, które były na wykresie. Otwierając wykres dokumenty zawsze będą inne (uwarunkowane od tego czy na dokumencie jest atrybut czy go nie ma). Jak to najszybciej i najkorzystniej ogarnąć?
Funkcja - parametr
Moderator: mikey
Re: Funkcja - parametr
najprościej chyba to zrobić na odwrót. wywołać funkcję w filtrze zawężając do Trn_GidNumer a potem wywołać wykres warunkując przez {filtrsql}
--------------------------------
Pozdrawiam
WW
Pozdrawiam
WW
Re: Funkcja - parametr
Najkorzystniej to zrobić filtr z parametrem, gdzie wskazujesz nr dokumentu faktury do której wchodzisz. Skoro to funkcja tabelaryczna możesz użyć cross apply i w ten sposób zawężać wyniki. W sumie to nie widzę innej rozsądnej drogi i szybszej. Można zapisywać wyniki wykresu do jakiejś technicznej tabeli, kasować je przy każdym wywołaniu wykresu, a w filtrze się do tej tabeli odwoływać. Ale to musisz pamiętać o zapisywaniu operatora i potem w filtrze się do niego odwoływać. Choć myślę, że cross apply jest zdecydowanie lepszym rozwiązaniem 
Re: Funkcja - parametr
faktycznie brzmi to wszystko logicznie (również co StabiL napisał) natomiast pytanie, jak to przekazać przez {filtrsql}, w wykresie dać where {filtrsql} czy w funkcji dać zmienną? od strony sqla sobie szybciej radzę niż łączenie tego w tym systemie
edit:
no i jeszcze jest kwestia zawężenia dokumentów, w XLu jest przecież na dole do wyboru miesiąc/rok za który mają się wyświetlić dokumenty, ja tego na wykresie nie warunkuję, bo nie opieram się o datę - zadziała ten filtr?
Dzięki z góry Panowie za przybliżenie tematu!
Re: Funkcja - parametr
Można to skonstruować tak: (parametry dat w XL muszą zostać wyłączone na czas używania filtru w takim rozwiązaniu chyba, że daty zawierają się w obrębie tego samego okresu)
Przykładowa funkcja zwracająca Gid faktur wystawionych między dwoma datami:
W ERP XL konstruujesz filtr odwołujący się do funkcji, który pokaże faktury z pomiędzy dwóch dat
W Efekcie w {filtrsql} masz co co jest ustawione na oknach plus twój filtr np:
Zatem w wykresie nie wywołujesz funkcji z parametrami bo przeniesione są do filtra a jedynie warunkujesz dla {filtrsql}.
Czyli np. wyświetl numery tych faktur
Powinno zadziałać.
Przykładowa funkcja zwracająca Gid faktur wystawionych między dwoma datami:
Kod: Zaznacz cały
CREATE FUNCTION [CDN].[jakasfunkcja]
(
@dataod int,
@datado int
)
RETURNS
@kolumn table (
[TrnGid] int
)
AS
BEGIN
insert into @kolumn
SELECT DISTINCT Trn_GidNumer
FROM CDN.TraNag
WHERE Trn_Data2 between @dataod and @datado
RETURN
ENDKod: Zaznacz cały
@PAR ?@D17|DataOd|&Data od:REG=77752 @? PAR@
@PAR ?@D17|DataDo|&Data do:REG=77752 @? PAR@
Trn_GidNumer IN (
select W.TrnGid
from cdn.TraNag
outer apply [CDN].[jakasfunkcja] (??DataOd,??DataDo) as W
)Kod: Zaznacz cały
(TrN_TrNTyp=3) AND (( Trn_GidNumer IN ( select W.TrnGid from cdn.TraNag outer apply [CDN].[jakasfunkcja] (81866,81866) as W ))) AND TrN_RokMiesiac=202502
Czyli np. wyświetl numery tych faktur
Kod: Zaznacz cały
select 1 as ID,
cdn.nazwaobiektu(Trn_GidTyp,Trn_GidNumer,0,2) as GID
from CDN.TraNag
left join CDN.KntAdresy ON TrN_KnATyp = KntAdresy.KnA_GIDTyp
AND TrN_KnANumer = KntAdresy.KnA_GIDNumer
left join CDN.KsefDokumenty ON TrN_GIDTyp = KSF_DokTyp
AND TrN_GIDNumer = KSF_DokNumer
where {filtrsql}--------------------------------
Pozdrawiam
WW
Pozdrawiam
WW