PW -> FS
Moderator: mikey
-
- Posty: 7
- Rejestracja: 21 paź 2019, 11:17
- Rola: Użytkownik CDN XL
- Wersja: 8.0
PW -> FS
Witam,
Próbuję połączyć dokumenty PW z FS. Znalazłem na forum coś takiego ale dla WZ : viewtopic.php?f=17&t=6345
Czy ktoś z Was przygotowywał takie zapytanie, które wskazuje, jakie dokumenty PW składają się na daną fakturę sprzedaży? Chciałbym wiedzieć, z których magazynów towar jest sprzedawany.
W BI widzę coś takiego jak poniżej:
Rok Data Kod Rodzaj.Dokument Dostawa.Dokument Zakładający Wartosc Ilosc
2019 01.10.2019 222222 FS-2/2019 PW-4444/2019/INDEKS2 100 50
2019 01.10.2019 111111 FS-1/2019 PW-1111/2019/INDEKS1 200 100
2019 01.10.2019 111111 FS-1/2019 PW-2222/2019/INDEKS1 150 75
Próbuję połączyć dokumenty PW z FS. Znalazłem na forum coś takiego ale dla WZ : viewtopic.php?f=17&t=6345
Czy ktoś z Was przygotowywał takie zapytanie, które wskazuje, jakie dokumenty PW składają się na daną fakturę sprzedaży? Chciałbym wiedzieć, z których magazynów towar jest sprzedawany.
W BI widzę coś takiego jak poniżej:
Rok Data Kod Rodzaj.Dokument Dostawa.Dokument Zakładający Wartosc Ilosc
2019 01.10.2019 222222 FS-2/2019 PW-4444/2019/INDEKS2 100 50
2019 01.10.2019 111111 FS-1/2019 PW-1111/2019/INDEKS1 200 100
2019 01.10.2019 111111 FS-1/2019 PW-2222/2019/INDEKS1 150 75
-
- Posty: 301
- Rejestracja: 11 mar 2008, 19:08
- Rola: Administrator CDN XL
- Wersja: 9.6.1
- Lokalizacja: lubelszczyzna.
Re: PW -> FS
Nie wiem za bardzo co ma dokument przyjęca do magazynu (chyba, że to specyfika twojej firmy).
Ale wiążesz dokument handlowy przez tranag i ew do tranag (jeśli masz spinacze), potem do traelem, traselem i w traselem masz wskazanie to cdn.dostawy a tam masz już proste wskazanie do transakcji która stworzyła dostawę.
Ale wiążesz dokument handlowy przez tranag i ew do tranag (jeśli masz spinacze), potem do traelem, traselem i w traselem masz wskazanie to cdn.dostawy a tam masz już proste wskazanie do transakcji która stworzyła dostawę.
-
- Posty: 396
- Rejestracja: 19 maja 2008, 17:17
- Rola: Konsultant CDN XL
- Lokalizacja: kujawsko-pomorskie
Re: PW -> FS
Można np. w ten sposób
SELECT CDN.NazwaObiektu(CDN.TraNag.TrN_GIDTyp, CDN.TraNag.TrN_GIDNumer, 0, 2) AS [Dokumet], CDN.Magazyny.MAG_Kod, CDN.TwrKarty.Twr_Kod,
CDN.TraSElem.TrS_KosztKsiegowy, CDN.TraSElem.TrS_Ilosc, cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
FROM CDN.TraSElem INNER JOIN
CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer INNER JOIN
CDN.TraElem ON CDN.TraElem.TrE_GIDNumer = CDN.TraSElem.TrS_GIDNumer AND CDN.TraElem.TrE_GIDLp = CDN.TraSElem.TrS_GIDLp INNER JOIN
CDN.TwrKarty ON CDN.TraElem.TrE_TwrNumer = CDN.TwrKarty.Twr_GIDNumer INNER JOIN
CDN.Magazyny ON CDN.TraSElem.TrS_MagNumer = CDN.Magazyny.MAG_GIDNumer JOIN
cdn.dostawy on
Dst_GIDNumer=TrS_DstNumer
where (TrN_GIDTyp=giddokumentusprawdzanego AND TrN_GIDNumer=gidnumerdokumentusprawdzanego)
ORDER BY CDN.TraSElem.TrS_TrnTStamp, CDN.TraNag.TrN_GIDNumer
Zapytanie pokaże to co masz w zakładce dostawy np. na dokumencie FS
SELECT CDN.NazwaObiektu(CDN.TraNag.TrN_GIDTyp, CDN.TraNag.TrN_GIDNumer, 0, 2) AS [Dokumet], CDN.Magazyny.MAG_Kod, CDN.TwrKarty.Twr_Kod,
CDN.TraSElem.TrS_KosztKsiegowy, CDN.TraSElem.TrS_Ilosc, cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
FROM CDN.TraSElem INNER JOIN
CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer INNER JOIN
CDN.TraElem ON CDN.TraElem.TrE_GIDNumer = CDN.TraSElem.TrS_GIDNumer AND CDN.TraElem.TrE_GIDLp = CDN.TraSElem.TrS_GIDLp INNER JOIN
CDN.TwrKarty ON CDN.TraElem.TrE_TwrNumer = CDN.TwrKarty.Twr_GIDNumer INNER JOIN
CDN.Magazyny ON CDN.TraSElem.TrS_MagNumer = CDN.Magazyny.MAG_GIDNumer JOIN
cdn.dostawy on
Dst_GIDNumer=TrS_DstNumer
where (TrN_GIDTyp=giddokumentusprawdzanego AND TrN_GIDNumer=gidnumerdokumentusprawdzanego)
ORDER BY CDN.TraSElem.TrS_TrnTStamp, CDN.TraNag.TrN_GIDNumer
Zapytanie pokaże to co masz w zakładce dostawy np. na dokumencie FS
-
- Posty: 7
- Rejestracja: 21 paź 2019, 11:17
- Rola: Użytkownik CDN XL
- Wersja: 8.0
Re: PW -> FS
Po PW wiem, z której lokalizacji towar został sprzedany i tak mogę rozliczać sprzedaż. Stad potrzeba powołania mnóstwa elementów.
Udało się korzystając z różnych źródeł zrobić coś takiego co zwraca prawie wszystkie dane, których potrzebuję oprócz:
Operatora dokumentu ZS
Ilość i Wartość się niestety nie liczą dobrze
Nie mogę również rozgryźć jak dodać ceny detal, ceny hurt ale związane z PW (czyli różne poziomy cen nie na dany moment tylko z momentu przyjęcia towaru do magazynu).
Z kolei wartość na 7 pokazuje mi Total faktury a nie wartość poszczególnych towarów na fakturze.
Wklejałem różne zapytania i łączyłem ze sobą wiec z góry przepraszam za bałagan w zapytaniu:
DECLARE @DataOd varchar(10) , @DataDo varchar(10)
SELECT @DataOd = '2019-09-01', @DataDo = '2019-09-05'
select DISTINCT id=1
,case b.TrN_Stan
when 1 then 'Bufor'
when 2 then 'Bufor'
when 3 then 'Dokument zamknięty, nierozliczony'
when 4 then 'Dokument w trakcie rozliczania'
when 5 then 'Dokument zamknięty, rozliczony'
end 'Stan'
,LEFT(CAST(CDN.TSToDate(a.TrN_Data3,0) as DATE),4) 'Rok'
,CAST(CDN.TSToDate(a.TrN_Data3,0) as DATE) 'Data'
,Twr_Kod 'Produkt kod'
,Twr_Nazwa
,Grupa_Główna = 'Grupa Główna'
,left(cdn.TwrGrupaPelnaNazwa(tgd_gronumer),CharIndex('/',cdn.TwrGrupaPelnaNazwa(tgd_gronumer),1)-1) 'Grupa.Poziom1'
,cdn.TwrGrupaPelnaNazwa(tgd_gronumer) 'Grupa.Poziom2'
,MAG_Kod 'Magazyn.Kod'
,KG.Knt_Akronim 'Kontrahent Główny - Akronim'
,KG.Knt_Nazwa1 'Kontrahent Główny - Pełna Nazwa'
,KG.Knt_Nip 'Kontrahent Główny - NIP'
,KG.Knt_Kraj 'Kontrahent Główny - Kraj'
,KG.Knt_Miasto 'Kontrahent Główny - Miasto'
--,KG.Knt_
,KD.Knt_Akronim 'Kontrahent Docelowy - Akronim'
,KD.Knt_Nip 'Kontrahent Docelowy - NIP'
,KD.Knt_Kraj 'Kontrahent Docelowy - Kraj'
,KD.Knt_Miasto 'Kontrahent Docelowy - Miasto'
,b.TrN_OpiNumer 'Kontrahent Opiekun'
,zan_openumerm 'Kontrahent_Operator'
,b.TrN_DokumentObcy 'Faktura'
,CAST(a.TrN_TrNNumer AS VARCHAR) + '/' + CAST(a.TrN_TrNRok AS VARCHAR) + '/' + a.TrN_TrNSeria AS 'Dokument zakladajacy'
,Twr_Jm 'Jednostka miary'
,TrE_JmZ 'Produkt j.m'
,Twr_Waga * TrE_Ilosc 'Ilosc'
,TrE_Ilosc 'Ilosc j.pom'
,TrE_Ilosc 'Ilosc'
,TrE_KsiegowaNetto 'Wartosc'
,TrE_KsiegowaNetto - TrE_KosztKsiegowy 'Marza_I'
,TrE_KosztKsiegowy 'TKW'
,TrE_RzeczywistaNetto 'Test'
,TrE_KsiegowaNetto/TrE_Ilosc 'Średnia cena'
, isnull(PDT_KontoCredit,'') 'Konto księgowe - MA'
,case
when LEN(PDT_KontoCredit) > 1 then isnull(PDT_Kwota,0)
when PDT_KontoCredit is null then ''
end as 'Wartość - MA'
,TP.TrP_FormaNazwa 'Dokument/Forma'
,TP.TrP_Kwota 'Należność z płatności'
,DATEADD(day,TP.TrP_SpodziewanyTermin,CONVERT(DATETIME,'1800-12-28',120)) 'Data należności'
FROM CDN.TwrKarty
JOIN CDN.TraElem ON Twr_GIDNumer = TrE_TwrNumer
JOIN CDN.TraNag as a ON a.TrN_GIDTyp in (1489,1617) AND a.TrN_GIDNumer=TrE_GIDNumer
JOIN CDN.TraSelem ON a.TrN_GIDTyp=TrS_GIDTyp AND a.TrN_GIDNumer=TrS_GIDNumer
JOIN CDN.Dostawy ON Dst_GIDNumer=TrS_DstNumer
JOIN CDN.Atrybuty ON AtR_ObiNumer = Twr_GIDNumer AND AtR_ObiTyp = Twr_GIDTyp
JOIN CDN.AtrybutyKlasy ON AtR_AtkId = AtK_Id
JOIN CDN.TraSelem as c ON Dst_GIDNumer=c.TrS_DstNumer
JOIN CDN.TraNag as b ON b.TrN_GIDTyp in (2033,2041,2045,2037) AND b.TrN_GIDNumer=c.TrS_GIDNumer AND Dst_TwrNumer = Twr_GIDNumer
left join cdn.twrGrupyDom on tgd_gidtyp=twr_gidtyp and tgd_gidnumer=twr_gidnumer
left join cdn.KntKarty KG on KG.Knt_GIDnumer = b.TrN_KntNumer and KG.Knt_GIDTyp = b.TrN_KntTyp
left join cdn.KntKarty KD on KD.Knt_GIDnumer = b.TrN_KnDNumer and KD.Knt_GIDTyp = b.TrN_KnDTyp
left join CDN.Magazyny on CDN.TraSElem.TrS_MagNumer = MAG_GIDNumer
left join cdn.TraPlat TP on a.TrN_GIDTyp=TP.TrP_GIDTyp AND a.TrN_GIDNumer=TP.TrP_GIDNumer left join cdn.TrNOpisy as o on a.TrN_GIDNumer = TnO_TrnNumer and a.TrN_GIDLp = TnO_TrnLp
left join cdn.Predekrety on b.TrN_GIDTyp=PDT_GIDTyp AND b.TrN_GIDNumer=PDT_GIDNumer and PDT_GIDTyp IN (1489,1497,2001,2009,1520,1528,1521,1529,2033,2041,2034,2042,2035,2043,2039,2047,1616,1617,1936,1937,2008,2010)
left join CDN.ZamNag ON b.TrN_GIDNumer = CDN.ZamNag.ZaN_GIDNumer
left join cdn.twrceny c1 on twr_gidnumer = c1.twc_twrnumer and c1.twc_twrlp = 1
left join cdn.twrceny c2 on twr_gidnumer = c2.twc_twrnumer and c2.twc_twrlp = 2
left join cdn.twrceny c3 on twr_gidnumer = c3.twc_twrnumer and c3.twc_twrlp = 3
WHERE a.TrN_Data3 BETWEEN DATEDIFF(d,'1800-12-28',CAST(@DataOd AS DATE)) AND DATEDIFF(d,'1800-12-28',CAST(@DataDo AS DATE)) AND Left(PDT_KontoCredit,1) = 7
ORDER BY b.TrN_DokumentObcy, CAST(a.TrN_TrNNumer AS VARCHAR) + '/' + CAST(a.TrN_TrNRok AS VARCHAR) + '/' + a.TrN_TrNSeria,Twr_Nazwa
Udało się korzystając z różnych źródeł zrobić coś takiego co zwraca prawie wszystkie dane, których potrzebuję oprócz:
Operatora dokumentu ZS
Ilość i Wartość się niestety nie liczą dobrze
Nie mogę również rozgryźć jak dodać ceny detal, ceny hurt ale związane z PW (czyli różne poziomy cen nie na dany moment tylko z momentu przyjęcia towaru do magazynu).
Z kolei wartość na 7 pokazuje mi Total faktury a nie wartość poszczególnych towarów na fakturze.
Wklejałem różne zapytania i łączyłem ze sobą wiec z góry przepraszam za bałagan w zapytaniu:
DECLARE @DataOd varchar(10) , @DataDo varchar(10)
SELECT @DataOd = '2019-09-01', @DataDo = '2019-09-05'
select DISTINCT id=1
,case b.TrN_Stan
when 1 then 'Bufor'
when 2 then 'Bufor'
when 3 then 'Dokument zamknięty, nierozliczony'
when 4 then 'Dokument w trakcie rozliczania'
when 5 then 'Dokument zamknięty, rozliczony'
end 'Stan'
,LEFT(CAST(CDN.TSToDate(a.TrN_Data3,0) as DATE),4) 'Rok'
,CAST(CDN.TSToDate(a.TrN_Data3,0) as DATE) 'Data'
,Twr_Kod 'Produkt kod'
,Twr_Nazwa
,Grupa_Główna = 'Grupa Główna'
,left(cdn.TwrGrupaPelnaNazwa(tgd_gronumer),CharIndex('/',cdn.TwrGrupaPelnaNazwa(tgd_gronumer),1)-1) 'Grupa.Poziom1'
,cdn.TwrGrupaPelnaNazwa(tgd_gronumer) 'Grupa.Poziom2'
,MAG_Kod 'Magazyn.Kod'
,KG.Knt_Akronim 'Kontrahent Główny - Akronim'
,KG.Knt_Nazwa1 'Kontrahent Główny - Pełna Nazwa'
,KG.Knt_Nip 'Kontrahent Główny - NIP'
,KG.Knt_Kraj 'Kontrahent Główny - Kraj'
,KG.Knt_Miasto 'Kontrahent Główny - Miasto'
--,KG.Knt_
,KD.Knt_Akronim 'Kontrahent Docelowy - Akronim'
,KD.Knt_Nip 'Kontrahent Docelowy - NIP'
,KD.Knt_Kraj 'Kontrahent Docelowy - Kraj'
,KD.Knt_Miasto 'Kontrahent Docelowy - Miasto'
,b.TrN_OpiNumer 'Kontrahent Opiekun'
,zan_openumerm 'Kontrahent_Operator'
,b.TrN_DokumentObcy 'Faktura'
,CAST(a.TrN_TrNNumer AS VARCHAR) + '/' + CAST(a.TrN_TrNRok AS VARCHAR) + '/' + a.TrN_TrNSeria AS 'Dokument zakladajacy'
,Twr_Jm 'Jednostka miary'
,TrE_JmZ 'Produkt j.m'
,Twr_Waga * TrE_Ilosc 'Ilosc'
,TrE_Ilosc 'Ilosc j.pom'
,TrE_Ilosc 'Ilosc'
,TrE_KsiegowaNetto 'Wartosc'
,TrE_KsiegowaNetto - TrE_KosztKsiegowy 'Marza_I'
,TrE_KosztKsiegowy 'TKW'
,TrE_RzeczywistaNetto 'Test'
,TrE_KsiegowaNetto/TrE_Ilosc 'Średnia cena'
, isnull(PDT_KontoCredit,'') 'Konto księgowe - MA'
,case
when LEN(PDT_KontoCredit) > 1 then isnull(PDT_Kwota,0)
when PDT_KontoCredit is null then ''
end as 'Wartość - MA'
,TP.TrP_FormaNazwa 'Dokument/Forma'
,TP.TrP_Kwota 'Należność z płatności'
,DATEADD(day,TP.TrP_SpodziewanyTermin,CONVERT(DATETIME,'1800-12-28',120)) 'Data należności'
FROM CDN.TwrKarty
JOIN CDN.TraElem ON Twr_GIDNumer = TrE_TwrNumer
JOIN CDN.TraNag as a ON a.TrN_GIDTyp in (1489,1617) AND a.TrN_GIDNumer=TrE_GIDNumer
JOIN CDN.TraSelem ON a.TrN_GIDTyp=TrS_GIDTyp AND a.TrN_GIDNumer=TrS_GIDNumer
JOIN CDN.Dostawy ON Dst_GIDNumer=TrS_DstNumer
JOIN CDN.Atrybuty ON AtR_ObiNumer = Twr_GIDNumer AND AtR_ObiTyp = Twr_GIDTyp
JOIN CDN.AtrybutyKlasy ON AtR_AtkId = AtK_Id
JOIN CDN.TraSelem as c ON Dst_GIDNumer=c.TrS_DstNumer
JOIN CDN.TraNag as b ON b.TrN_GIDTyp in (2033,2041,2045,2037) AND b.TrN_GIDNumer=c.TrS_GIDNumer AND Dst_TwrNumer = Twr_GIDNumer
left join cdn.twrGrupyDom on tgd_gidtyp=twr_gidtyp and tgd_gidnumer=twr_gidnumer
left join cdn.KntKarty KG on KG.Knt_GIDnumer = b.TrN_KntNumer and KG.Knt_GIDTyp = b.TrN_KntTyp
left join cdn.KntKarty KD on KD.Knt_GIDnumer = b.TrN_KnDNumer and KD.Knt_GIDTyp = b.TrN_KnDTyp
left join CDN.Magazyny on CDN.TraSElem.TrS_MagNumer = MAG_GIDNumer
left join cdn.TraPlat TP on a.TrN_GIDTyp=TP.TrP_GIDTyp AND a.TrN_GIDNumer=TP.TrP_GIDNumer left join cdn.TrNOpisy as o on a.TrN_GIDNumer = TnO_TrnNumer and a.TrN_GIDLp = TnO_TrnLp
left join cdn.Predekrety on b.TrN_GIDTyp=PDT_GIDTyp AND b.TrN_GIDNumer=PDT_GIDNumer and PDT_GIDTyp IN (1489,1497,2001,2009,1520,1528,1521,1529,2033,2041,2034,2042,2035,2043,2039,2047,1616,1617,1936,1937,2008,2010)
left join CDN.ZamNag ON b.TrN_GIDNumer = CDN.ZamNag.ZaN_GIDNumer
left join cdn.twrceny c1 on twr_gidnumer = c1.twc_twrnumer and c1.twc_twrlp = 1
left join cdn.twrceny c2 on twr_gidnumer = c2.twc_twrnumer and c2.twc_twrlp = 2
left join cdn.twrceny c3 on twr_gidnumer = c3.twc_twrnumer and c3.twc_twrlp = 3
WHERE a.TrN_Data3 BETWEEN DATEDIFF(d,'1800-12-28',CAST(@DataOd AS DATE)) AND DATEDIFF(d,'1800-12-28',CAST(@DataDo AS DATE)) AND Left(PDT_KontoCredit,1) = 7
ORDER BY b.TrN_DokumentObcy, CAST(a.TrN_TrNNumer AS VARCHAR) + '/' + CAST(a.TrN_TrNRok AS VARCHAR) + '/' + a.TrN_TrNSeria,Twr_Nazwa
-
- Posty: 7
- Rejestracja: 21 paź 2019, 11:17
- Rola: Użytkownik CDN XL
- Wersja: 8.0
Re: PW -> FS
Coin,
Przede wszystkim bardzo dziękuję za odpowiedź i za pomoc. Twoje zapytanie jest świetne. O wiele bardziej eleganckie i ewidentnie nie robione "na pałę" jak moje. Jeżeli byłbyś w stanie jeszcze z czymś pomóc...
Chciałbym zapytać Cię jeszcze (oraz ewentualnie innych zorientowanych użytkowników):
1) Z Trs idzie koszt księgowy czyli koszt wytworzenia i jest zgodne dla każdego produktu - idzie z PW. Tak samo jak ilość. Czy jest możliwość by tak samo widzieć wartość netto/brutto sprzedaży dla każdej pozycji bym widział dla każdej FS i dla każdego PW oraz towaru jaka była wartość sprzedaży?
Analogicznie próbuję jeszcze dołączyć inne poziomy cen związane z PW: CENA 1 / CENA 2 / CENA 3 / CENA 4 / CENA 5.
2) Chciałbym mieć również połączenie z kontem 7 na które dana sprzedaż wpada. Dodałem sobie fragment kodu z zapytania, które wrzuciłem
, isnull(PDT_KontoCredit,'') 'Konto księgowe - MA'
,case
when LEN(PDT_KontoCredit) > 1 then isnull(PDT_Kwota,0)
when PDT_KontoCredit is null then ''
end as 'Wartość - MA'
i widzę konto oraz wartość ale całej faktury a nie poszczególnych jej towarów/elementów. Czy można to w jakiś sposób powiązać?
3)Dodałem sobie jeszcze kontrahenta do poszczególnych faktur oraz kod opiekuna (analizuję sprzedaż po KAM-ach). Konieczne jest jednak bym znał również dane osoby, która byłą operatorem dokumentu czyli de facto przygotowała ZS pod tę fakturę (czyli ZS->WZ->PW->FS). Może być kod, personalia już sobie jakoś zmapuję.
Finalnie mam na razie coś takiego:
DECLARE @DataOd varchar(10) , @DataDo varchar(10)
SELECT @DataOd = '2019-09-01', @DataDo = '2019-09-05'
SELECT CDN.NazwaObiektu(CDN.TraNag.TrN_GIDTyp, CDN.TraNag.TrN_GIDNumer, 0, 2) AS [Dokumet], CDN.Magazyny.MAG_Kod, CDN.TwrKarty.Twr_Kod,
CDN.TraSElem.TrS_KosztKsiegowy, CDN.TraSElem.TrS_Ilosc, CDN.TraNag.TrN_WartoscWal, TrE_RzeczywistaNetto , cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
,Twr_Nazwa
,Grupa_Główna = 'Grupa Główna'
,left(cdn.TwrGrupaPelnaNazwa(tgd_gronumer),CharIndex('/',cdn.TwrGrupaPelnaNazwa(tgd_gronumer),1)-1) 'Grupa.Poziom1'
,cdn.TwrGrupaPelnaNazwa(tgd_gronumer) 'Grupa.Poziom2'
,KG.Knt_Akronim 'Kontrahent Główny - Akronim'
,KG.Knt_Nazwa1 'Kontrahent Główny - Pełna Nazwa'
,KG.Knt_Nip 'Kontrahent Główny - NIP'
,KG.Knt_Kraj 'Kontrahent Główny - Kraj'
,KG.Knt_Miasto 'Kontrahent Główny - Miasto'
,KD.Knt_Akronim 'Kontrahent Docelowy - Akronim'
,KD.Knt_Nip 'Kontrahent Docelowy - NIP'
,KD.Knt_Kraj 'Kontrahent Docelowy - Kraj'
,KD.Knt_Miasto 'Kontrahent Docelowy - Miasto'
,TrN_OpiNumer 'Kontrahent Opiekun'
, isnull(PDT_KontoCredit,'') 'Konto księgowe - MA'
,case
when LEN(PDT_KontoCredit) > 1 then isnull(PDT_Kwota,0)
when PDT_KontoCredit is null then ''
end as 'Wartość - MA'
FROM CDN.TraSElem INNER JOIN
CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer INNER JOIN
CDN.TraElem ON CDN.TraElem.TrE_GIDNumer = CDN.TraSElem.TrS_GIDNumer AND CDN.TraElem.TrE_GIDLp = CDN.TraSElem.TrS_GIDLp INNER JOIN
CDN.TwrKarty ON CDN.TraElem.TrE_TwrNumer = CDN.TwrKarty.Twr_GIDNumer INNER JOIN
CDN.Magazyny ON CDN.TraSElem.TrS_MagNumer = CDN.Magazyny.MAG_GIDNumer JOIN cdn.dostawy on Dst_GIDNumer=TrS_DstNumer
left join cdn.twrGrupyDom on tgd_gidtyp=twr_gidtyp and tgd_gidnumer=twr_gidnumer
left join cdn.KntKarty KG on KG.Knt_GIDnumer = TrN_KntNumer and KG.Knt_GIDTyp = TrN_KntTyp
left join cdn.KntKarty KD on KD.Knt_GIDnumer = TrN_KnDNumer and KD.Knt_GIDTyp = TrN_KnDTyp
left join cdn.TraPlat TP on TrN_GIDTyp=TP.TrP_GIDTyp AND TrN_GIDNumer=TP.TrP_GIDNumer left join cdn.TrNOpisy as o on TrN_GIDNumer = TnO_TrnNumer and TrN_GIDLp = TnO_TrnLp
--left join cdn.Predekrety on a.TrN_GIDTyp=PDT_GIDTyp AND a.TrN_GIDNumer=PDT_GIDNumer and PDT_GIDTyp IN (1489,1497,2001,2009,1520,1528,1521,1529,2033,2041,2034,2042,2035,2043,2039,2047,1616,1617,1936,1937,2008,2010)
left join cdn.Predekrety on TrN_GIDTyp=PDT_GIDTyp AND TrN_GIDNumer=PDT_GIDNumer and PDT_GIDTyp IN (1489,1497,2001,2009,1520,1528,1521,1529,2033,2041,2034,2042,2035,2043,2039,2047,1616,1617,1936,1937,2008,2010)
where TrN_Data3 BETWEEN DATEDIFF(d,'1800-12-28',CAST(@DataOd AS DATE)) AND DATEDIFF(d,'1800-12-28',CAST(@DataDo AS DATE)) and TrN_GIDTyp in (2033,2041,2045,2037) AND Left(PDT_KontoCredit,1) = 7 --- AND TrN_GIDNumer=gidnumerdokumentusprawdzanego
ORDER BY CDN.TraSElem.TrS_TrnTStamp, CDN.TraNag.TrN_GIDNumer
Przede wszystkim bardzo dziękuję za odpowiedź i za pomoc. Twoje zapytanie jest świetne. O wiele bardziej eleganckie i ewidentnie nie robione "na pałę" jak moje. Jeżeli byłbyś w stanie jeszcze z czymś pomóc...
Chciałbym zapytać Cię jeszcze (oraz ewentualnie innych zorientowanych użytkowników):
1) Z Trs idzie koszt księgowy czyli koszt wytworzenia i jest zgodne dla każdego produktu - idzie z PW. Tak samo jak ilość. Czy jest możliwość by tak samo widzieć wartość netto/brutto sprzedaży dla każdej pozycji bym widział dla każdej FS i dla każdego PW oraz towaru jaka była wartość sprzedaży?
Analogicznie próbuję jeszcze dołączyć inne poziomy cen związane z PW: CENA 1 / CENA 2 / CENA 3 / CENA 4 / CENA 5.
2) Chciałbym mieć również połączenie z kontem 7 na które dana sprzedaż wpada. Dodałem sobie fragment kodu z zapytania, które wrzuciłem
, isnull(PDT_KontoCredit,'') 'Konto księgowe - MA'
,case
when LEN(PDT_KontoCredit) > 1 then isnull(PDT_Kwota,0)
when PDT_KontoCredit is null then ''
end as 'Wartość - MA'
i widzę konto oraz wartość ale całej faktury a nie poszczególnych jej towarów/elementów. Czy można to w jakiś sposób powiązać?
3)Dodałem sobie jeszcze kontrahenta do poszczególnych faktur oraz kod opiekuna (analizuję sprzedaż po KAM-ach). Konieczne jest jednak bym znał również dane osoby, która byłą operatorem dokumentu czyli de facto przygotowała ZS pod tę fakturę (czyli ZS->WZ->PW->FS). Może być kod, personalia już sobie jakoś zmapuję.
Finalnie mam na razie coś takiego:
DECLARE @DataOd varchar(10) , @DataDo varchar(10)
SELECT @DataOd = '2019-09-01', @DataDo = '2019-09-05'
SELECT CDN.NazwaObiektu(CDN.TraNag.TrN_GIDTyp, CDN.TraNag.TrN_GIDNumer, 0, 2) AS [Dokumet], CDN.Magazyny.MAG_Kod, CDN.TwrKarty.Twr_Kod,
CDN.TraSElem.TrS_KosztKsiegowy, CDN.TraSElem.TrS_Ilosc, CDN.TraNag.TrN_WartoscWal, TrE_RzeczywistaNetto , cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
,Twr_Nazwa
,Grupa_Główna = 'Grupa Główna'
,left(cdn.TwrGrupaPelnaNazwa(tgd_gronumer),CharIndex('/',cdn.TwrGrupaPelnaNazwa(tgd_gronumer),1)-1) 'Grupa.Poziom1'
,cdn.TwrGrupaPelnaNazwa(tgd_gronumer) 'Grupa.Poziom2'
,KG.Knt_Akronim 'Kontrahent Główny - Akronim'
,KG.Knt_Nazwa1 'Kontrahent Główny - Pełna Nazwa'
,KG.Knt_Nip 'Kontrahent Główny - NIP'
,KG.Knt_Kraj 'Kontrahent Główny - Kraj'
,KG.Knt_Miasto 'Kontrahent Główny - Miasto'
,KD.Knt_Akronim 'Kontrahent Docelowy - Akronim'
,KD.Knt_Nip 'Kontrahent Docelowy - NIP'
,KD.Knt_Kraj 'Kontrahent Docelowy - Kraj'
,KD.Knt_Miasto 'Kontrahent Docelowy - Miasto'
,TrN_OpiNumer 'Kontrahent Opiekun'
, isnull(PDT_KontoCredit,'') 'Konto księgowe - MA'
,case
when LEN(PDT_KontoCredit) > 1 then isnull(PDT_Kwota,0)
when PDT_KontoCredit is null then ''
end as 'Wartość - MA'
FROM CDN.TraSElem INNER JOIN
CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer INNER JOIN
CDN.TraElem ON CDN.TraElem.TrE_GIDNumer = CDN.TraSElem.TrS_GIDNumer AND CDN.TraElem.TrE_GIDLp = CDN.TraSElem.TrS_GIDLp INNER JOIN
CDN.TwrKarty ON CDN.TraElem.TrE_TwrNumer = CDN.TwrKarty.Twr_GIDNumer INNER JOIN
CDN.Magazyny ON CDN.TraSElem.TrS_MagNumer = CDN.Magazyny.MAG_GIDNumer JOIN cdn.dostawy on Dst_GIDNumer=TrS_DstNumer
left join cdn.twrGrupyDom on tgd_gidtyp=twr_gidtyp and tgd_gidnumer=twr_gidnumer
left join cdn.KntKarty KG on KG.Knt_GIDnumer = TrN_KntNumer and KG.Knt_GIDTyp = TrN_KntTyp
left join cdn.KntKarty KD on KD.Knt_GIDnumer = TrN_KnDNumer and KD.Knt_GIDTyp = TrN_KnDTyp
left join cdn.TraPlat TP on TrN_GIDTyp=TP.TrP_GIDTyp AND TrN_GIDNumer=TP.TrP_GIDNumer left join cdn.TrNOpisy as o on TrN_GIDNumer = TnO_TrnNumer and TrN_GIDLp = TnO_TrnLp
--left join cdn.Predekrety on a.TrN_GIDTyp=PDT_GIDTyp AND a.TrN_GIDNumer=PDT_GIDNumer and PDT_GIDTyp IN (1489,1497,2001,2009,1520,1528,1521,1529,2033,2041,2034,2042,2035,2043,2039,2047,1616,1617,1936,1937,2008,2010)
left join cdn.Predekrety on TrN_GIDTyp=PDT_GIDTyp AND TrN_GIDNumer=PDT_GIDNumer and PDT_GIDTyp IN (1489,1497,2001,2009,1520,1528,1521,1529,2033,2041,2034,2042,2035,2043,2039,2047,1616,1617,1936,1937,2008,2010)
where TrN_Data3 BETWEEN DATEDIFF(d,'1800-12-28',CAST(@DataOd AS DATE)) AND DATEDIFF(d,'1800-12-28',CAST(@DataDo AS DATE)) and TrN_GIDTyp in (2033,2041,2045,2037) AND Left(PDT_KontoCredit,1) = 7 --- AND TrN_GIDNumer=gidnumerdokumentusprawdzanego
ORDER BY CDN.TraSElem.TrS_TrnTStamp, CDN.TraNag.TrN_GIDNumer
Coin pisze: ↑05 lis 2019, 09:03Można np. w ten sposób
SELECT CDN.NazwaObiektu(CDN.TraNag.TrN_GIDTyp, CDN.TraNag.TrN_GIDNumer, 0, 2) AS [Dokumet], CDN.Magazyny.MAG_Kod, CDN.TwrKarty.Twr_Kod,
CDN.TraSElem.TrS_KosztKsiegowy, CDN.TraSElem.TrS_Ilosc, cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
FROM CDN.TraSElem INNER JOIN
CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer INNER JOIN
CDN.TraElem ON CDN.TraElem.TrE_GIDNumer = CDN.TraSElem.TrS_GIDNumer AND CDN.TraElem.TrE_GIDLp = CDN.TraSElem.TrS_GIDLp INNER JOIN
CDN.TwrKarty ON CDN.TraElem.TrE_TwrNumer = CDN.TwrKarty.Twr_GIDNumer INNER JOIN
CDN.Magazyny ON CDN.TraSElem.TrS_MagNumer = CDN.Magazyny.MAG_GIDNumer JOIN
cdn.dostawy on
Dst_GIDNumer=TrS_DstNumer
where (TrN_GIDTyp=giddokumentusprawdzanego AND TrN_GIDNumer=gidnumerdokumentusprawdzanego)
ORDER BY CDN.TraSElem.TrS_TrnTStamp, CDN.TraNag.TrN_GIDNumer
Zapytanie pokaże to co masz w zakładce dostawy np. na dokumencie FS
-
- Posty: 7
- Rejestracja: 21 paź 2019, 11:17
- Rola: Użytkownik CDN XL
- Wersja: 8.0
Re: PW -> FS
Witam ponownie,
Udało mi się powiązać PW z Tablicą TwrCeny, gdzie są pozostałe poziomy cen, które mnie interesują.
mam jednak kolejny problem. Pobierane ceny są najnowszymi. Jeżeli zmienia się cennik to i ceny są aktualizowane a chciałbym mieć powiązane z PW ceny aktualne dla daty wystawienia PW. Czy jest taka możliwość?
Nadal mam niestety problem z punktem 3 o którym pisałem:
3)Dodałem sobie jeszcze kontrahenta do poszczególnych faktur oraz kod opiekuna (analizuję sprzedaż po KAM-ach). Konieczne jest jednak bym znał również dane osoby, która byłą operatorem dokumentu czyli de facto przygotowała ZS pod tę fakturę (czyli ZS->WZ->PW->FS). Może być kod, personalia już sobie jakoś zmapuję.
Moje aktualne zapytanie:
DECLARE @DataOd varchar(10) , @DataDo varchar(10)
SELECT @DataOd = '2019-09-01', @DataDo = '2019-09-05'
SELECT CDN.NazwaObiektu(CDN.TraNag.TrN_GIDTyp, CDN.TraNag.TrN_GIDNumer, 0, 2) AS [Dokumet]
, CDN.Magazyny.MAG_Kod
, CDN.TwrKarty.Twr_Kod
, CDN.TraSElem.TrS_KosztKsiegowy
, CDN.TraSElem.TrS_Ilosc
, TrE_Cena
, TrE_CenaPoRabacie
, fabryczna.twc_wartosc fabryczna
, detaliczna.twc_wartosc detaliczna
, hurtowa.twc_wartosc hurtowa
, sieciowa.twc_wartosc sieciowa
, TraElem.TrE_KosztRzeczywisty
, TraElem.TrE_RzeczywistaNetto
, cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
, Twr_Nazwa
, Grupa_Główna = 'Grupa Główna'
, left(cdn.TwrGrupaPelnaNazwa(tgd_gronumer),CharIndex('/',cdn.TwrGrupaPelnaNazwa(tgd_gronumer),1)-1) 'Grupa.Poziom1'
, cdn.TwrGrupaPelnaNazwa(tgd_gronumer) 'Grupa.Poziom2'
, KG.Knt_Akronim 'Kontrahent Główny - Akronim'
, KG.Knt_Nazwa1 'Kontrahent Główny - Pełna Nazwa'
, KG.Knt_Nip 'Kontrahent Główny - NIP'
, KG.Knt_Kraj 'Kontrahent Główny - Kraj'
, KG.Knt_Miasto 'Kontrahent Główny - Miasto'
, KD.Knt_Akronim 'Kontrahent Docelowy - Akronim'
, KD.Knt_Nip 'Kontrahent Docelowy - NIP'
, KD.Knt_Kraj 'Kontrahent Docelowy - Kraj'
, KD.Knt_Miasto 'Kontrahent Docelowy - Miasto'
,TrN_OpiNumer 'Kontrahent Opiekun'
, zan_openumerm 'Kontrahent_Operator'
FROM CDN.TraSElem INNER JOIN
CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer INNER JOIN
CDN.TraElem ON CDN.TraElem.TrE_GIDNumer = CDN.TraSElem.TrS_GIDNumer AND CDN.TraElem.TrE_GIDLp = CDN.TraSElem.TrS_GIDLp INNER JOIN
CDN.TwrKarty ON CDN.TraElem.TrE_TwrNumer = CDN.TwrKarty.Twr_GIDNumer INNER JOIN
CDN.Magazyny ON CDN.TraSElem.TrS_MagNumer = CDN.Magazyny.MAG_GIDNumer JOIN CDN.Dostawy on Dst_GIDNumer=TrS_DstNumer
left join cdn.twrceny fabryczna on twr_gidnumer = fabryczna.twc_twrnumer and fabryczna.twc_twrlp = 1
left join cdn.twrceny detaliczna on twr_gidnumer = detaliczna.twc_twrnumer and detaliczna.twc_twrlp = 2
left join cdn.twrceny hurtowa on twr_gidnumer = hurtowa.twc_twrnumer and hurtowa.twc_twrlp = 3
left join cdn.twrceny sieciowa on twr_gidnumer = sieciowa.twc_twrnumer and sieciowa.twc_twrlp = 5
left join cdn.twrGrupyDom on tgd_gidtyp=twr_gidtyp and tgd_gidnumer=twr_gidnumer
left join cdn.KntKarty KG on KG.Knt_GIDnumer = TrN_KntNumer and KG.Knt_GIDTyp = TrN_KntTyp
left join cdn.KntKarty KD on KD.Knt_GIDnumer = TrN_KnDNumer and KD.Knt_GIDTyp = TrN_KnDTyp
left join cdn.TraPlat TP on TrN_GIDTyp=TP.TrP_GIDTyp AND TrN_GIDNumer=TP.TrP_GIDNumer left join cdn.TrNOpisy as o on TrN_GIDNumer = TnO_TrnNumer and TrN_GIDLp = TnO_TrnLp
--left join cdn.Predekrety on CDN.TraElem.TrE_GIDTyp=PDT_GIDTyp AND CDN.TraElem.TrE_GIDNumer=PDT_GIDNumer and PDT_GIDTyp IN (1489,1497,2001,2009,1520,1528,1521,1529,2033,2041,2034,2042,2035,2043,2039,2047,1616,1617,1936,1937,2008,2010)
left join CDN.ZamNag ON Dst_GIDNumer = CDN.ZamNag.ZaN_GIDNumer
where TrN_Data3 BETWEEN DATEDIFF(d,'1800-12-28',CAST(@DataOd AS DATE)) AND DATEDIFF(d,'1800-12-28',CAST(@DataDo AS DATE)) and TrN_GIDTyp in (2033,2041,2045,2037) --- AND Left(PDT_KontoCredit,1) = 7 --- AND TrN_GIDNumer=gidnumerdokumentusprawdzanego
ORDER BY CDN.TraSElem.TrS_TrnTStamp, CDN.TraNag.TrN_GIDNumer
Udało mi się powiązać PW z Tablicą TwrCeny, gdzie są pozostałe poziomy cen, które mnie interesują.
mam jednak kolejny problem. Pobierane ceny są najnowszymi. Jeżeli zmienia się cennik to i ceny są aktualizowane a chciałbym mieć powiązane z PW ceny aktualne dla daty wystawienia PW. Czy jest taka możliwość?
Nadal mam niestety problem z punktem 3 o którym pisałem:
3)Dodałem sobie jeszcze kontrahenta do poszczególnych faktur oraz kod opiekuna (analizuję sprzedaż po KAM-ach). Konieczne jest jednak bym znał również dane osoby, która byłą operatorem dokumentu czyli de facto przygotowała ZS pod tę fakturę (czyli ZS->WZ->PW->FS). Może być kod, personalia już sobie jakoś zmapuję.
Moje aktualne zapytanie:
DECLARE @DataOd varchar(10) , @DataDo varchar(10)
SELECT @DataOd = '2019-09-01', @DataDo = '2019-09-05'
SELECT CDN.NazwaObiektu(CDN.TraNag.TrN_GIDTyp, CDN.TraNag.TrN_GIDNumer, 0, 2) AS [Dokumet]
, CDN.Magazyny.MAG_Kod
, CDN.TwrKarty.Twr_Kod
, CDN.TraSElem.TrS_KosztKsiegowy
, CDN.TraSElem.TrS_Ilosc
, TrE_Cena
, TrE_CenaPoRabacie
, fabryczna.twc_wartosc fabryczna
, detaliczna.twc_wartosc detaliczna
, hurtowa.twc_wartosc hurtowa
, sieciowa.twc_wartosc sieciowa
, TraElem.TrE_KosztRzeczywisty
, TraElem.TrE_RzeczywistaNetto
, cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
, Twr_Nazwa
, Grupa_Główna = 'Grupa Główna'
, left(cdn.TwrGrupaPelnaNazwa(tgd_gronumer),CharIndex('/',cdn.TwrGrupaPelnaNazwa(tgd_gronumer),1)-1) 'Grupa.Poziom1'
, cdn.TwrGrupaPelnaNazwa(tgd_gronumer) 'Grupa.Poziom2'
, KG.Knt_Akronim 'Kontrahent Główny - Akronim'
, KG.Knt_Nazwa1 'Kontrahent Główny - Pełna Nazwa'
, KG.Knt_Nip 'Kontrahent Główny - NIP'
, KG.Knt_Kraj 'Kontrahent Główny - Kraj'
, KG.Knt_Miasto 'Kontrahent Główny - Miasto'
, KD.Knt_Akronim 'Kontrahent Docelowy - Akronim'
, KD.Knt_Nip 'Kontrahent Docelowy - NIP'
, KD.Knt_Kraj 'Kontrahent Docelowy - Kraj'
, KD.Knt_Miasto 'Kontrahent Docelowy - Miasto'
,TrN_OpiNumer 'Kontrahent Opiekun'
, zan_openumerm 'Kontrahent_Operator'
FROM CDN.TraSElem INNER JOIN
CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer INNER JOIN
CDN.TraElem ON CDN.TraElem.TrE_GIDNumer = CDN.TraSElem.TrS_GIDNumer AND CDN.TraElem.TrE_GIDLp = CDN.TraSElem.TrS_GIDLp INNER JOIN
CDN.TwrKarty ON CDN.TraElem.TrE_TwrNumer = CDN.TwrKarty.Twr_GIDNumer INNER JOIN
CDN.Magazyny ON CDN.TraSElem.TrS_MagNumer = CDN.Magazyny.MAG_GIDNumer JOIN CDN.Dostawy on Dst_GIDNumer=TrS_DstNumer
left join cdn.twrceny fabryczna on twr_gidnumer = fabryczna.twc_twrnumer and fabryczna.twc_twrlp = 1
left join cdn.twrceny detaliczna on twr_gidnumer = detaliczna.twc_twrnumer and detaliczna.twc_twrlp = 2
left join cdn.twrceny hurtowa on twr_gidnumer = hurtowa.twc_twrnumer and hurtowa.twc_twrlp = 3
left join cdn.twrceny sieciowa on twr_gidnumer = sieciowa.twc_twrnumer and sieciowa.twc_twrlp = 5
left join cdn.twrGrupyDom on tgd_gidtyp=twr_gidtyp and tgd_gidnumer=twr_gidnumer
left join cdn.KntKarty KG on KG.Knt_GIDnumer = TrN_KntNumer and KG.Knt_GIDTyp = TrN_KntTyp
left join cdn.KntKarty KD on KD.Knt_GIDnumer = TrN_KnDNumer and KD.Knt_GIDTyp = TrN_KnDTyp
left join cdn.TraPlat TP on TrN_GIDTyp=TP.TrP_GIDTyp AND TrN_GIDNumer=TP.TrP_GIDNumer left join cdn.TrNOpisy as o on TrN_GIDNumer = TnO_TrnNumer and TrN_GIDLp = TnO_TrnLp
--left join cdn.Predekrety on CDN.TraElem.TrE_GIDTyp=PDT_GIDTyp AND CDN.TraElem.TrE_GIDNumer=PDT_GIDNumer and PDT_GIDTyp IN (1489,1497,2001,2009,1520,1528,1521,1529,2033,2041,2034,2042,2035,2043,2039,2047,1616,1617,1936,1937,2008,2010)
left join CDN.ZamNag ON Dst_GIDNumer = CDN.ZamNag.ZaN_GIDNumer
where TrN_Data3 BETWEEN DATEDIFF(d,'1800-12-28',CAST(@DataOd AS DATE)) AND DATEDIFF(d,'1800-12-28',CAST(@DataDo AS DATE)) and TrN_GIDTyp in (2033,2041,2045,2037) --- AND Left(PDT_KontoCredit,1) = 7 --- AND TrN_GIDNumer=gidnumerdokumentusprawdzanego
ORDER BY CDN.TraSElem.TrS_TrnTStamp, CDN.TraNag.TrN_GIDNumer
-
- Posty: 7
- Rejestracja: 21 paź 2019, 11:17
- Rola: Użytkownik CDN XL
- Wersja: 8.0
Re: PW -> FS
Witam ponownie,
Udało mi się zrobić kolejny kro do przodu w kwestii zapytania.
Połączyłem zapytanie z Tabelą TwrCenyHistOdDo aby pobrać cenę historyczną towaru zgodnie z datą PW (data PW na podstawie: dateadd(second,dst_dsttstamp,'19900101') ).
Dodałem sobie warunek, który ma zwracać cenę z tabeli TwrCenyHistOdDo dla daty mniejszej lub równej dacie PW. Niestety, brakuje mi drugiego warunku czyli daty większej. Ponieważ nie mam dolnej granicy otrzymuję wszystkie ceny dla danego produktu z datą mniejszą lub równą dacie PW.
Pokombinowałem z funkcją First_Value ale nie do końca działa. Co prawda teraz faktycznie otrzymuję ceny z datą spełniającą ten warunek ale mam kilkaset tysięcy razy powtorzone.
Wydaje mi się, że dobrze kombinuję tzn. stosując warunek na datę ceny <= data PW oraz Maksimum z tego (w sensie z daty by była zwrócona pierwsza data spełniająca ten warunek) ale coś mi nie działa.
Być może ktoś jest w stanie podpowiedzieć co zmienić w zapytaniu:
DECLARE @DataOd varchar(10) , @DataDo varchar(10)
SELECT @DataOd = '2019-11-01', @DataDo = '2019-11-02'
SELECT CDN.NazwaObiektu(CDN.TraNag.TrN_GIDTyp, CDN.TraNag.TrN_GIDNumer, 0, 2) AS [Dokumet]
, dateadd(second,dst_dsttstamp,'19900101') 'Data wystawienia PW'
, CDN.TSToDate(CDN.TraNag.TrN_Data3, 0) 'Data sprzedazy'
, CDN.Magazyny.MAG_Kod
, CDN.TwrKarty.Twr_Kod
, CDN.TraSElem.TrS_KosztKsiegowy
, CDN.TraSElem.TrS_Ilosc
, TrE_Cena
, TrE_CenaPoRabacie
, dateadd(second,TKW.DO,'19900101')
, dateadd(second,CMS.DO, '19900101')
, dateadd(second,CKW.DO, '19900101')
, FIRST_VALUE (TKW.Wartosc) OVER (ORDER BY TKW.DO DESC) 'TKW'
, FIRST_VALUE (CMS.Wartosc) OVER (ORDER BY CMS.DO DESC) 'CMS'
, FIRST_VALUE (CKW.Wartosc) OVER (ORDER BY CKW.DO DESC) 'CKW'
, TraElem.TrE_KosztRzeczywisty
, TraElem.TrE_RzeczywistaNetto
, cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
, Twr_Nazwa
, Grupa_Główna = 'Grupa Główna'
, left(cdn.TwrGrupaPelnaNazwa(tgd_gronumer),CharIndex('/',cdn.TwrGrupaPelnaNazwa(tgd_gronumer),1)-1) 'Grupa.Poziom1'
, cdn.TwrGrupaPelnaNazwa(tgd_gronumer) 'Grupa.Poziom2'
, KG.Knt_Akronim 'Kontrahent Główny - Akronim'
, KG.Knt_Nazwa1 'Kontrahent Główny - Pełna Nazwa'
, KG.Knt_Nip 'Kontrahent Główny - NIP'
, KG.Knt_Kraj 'Kontrahent Główny - Kraj'
, KG.Knt_Miasto 'Kontrahent Główny - Miasto'
, KD.Knt_Akronim 'Kontrahent Docelowy - Akronim'
, KD.Knt_Nip 'Kontrahent Docelowy - NIP'
, KD.Knt_Kraj 'Kontrahent Docelowy - Kraj'
, KD.Knt_Miasto 'Kontrahent Docelowy - Miasto'
, TrN_OpiNumer 'Kontrahent Opiekun'
, zan_openumerm 'Kontrahent_Operator'
FROM CDN.TraSElem INNER JOIN
CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer INNER JOIN
CDN.TraElem ON CDN.TraElem.TrE_GIDNumer = CDN.TraSElem.TrS_GIDNumer AND CDN.TraElem.TrE_GIDLp = CDN.TraSElem.TrS_GIDLp INNER JOIN
CDN.TwrKarty ON CDN.TraElem.TrE_TwrNumer = CDN.TwrKarty.Twr_GIDNumer INNER JOIN
CDN.Magazyny ON CDN.TraSElem.TrS_MagNumer = CDN.Magazyny.MAG_GIDNumer JOIN CDN.Dostawy on Dst_GIDNumer=TrS_DstNumer
inner join CDN.TwrCenyHistOdDo TKW on twr_gidnumer = TKW.TwrNumer and TKW.TwrLp = 1 and TKW.DO <= Dst_DstTStamp
inner join CDN.TwrCenyHistOdDo CMS on twr_gidnumer = CMS.TwrNumer and CMS.TwrLp = 2
inner join CDN.TwrCenyHistOdDo CKW on twr_gidnumer = CKW.TwrNumer and CKW.TwrLp = 3
left join cdn.twrGrupyDom on tgd_gidtyp=twr_gidtyp and tgd_gidnumer=twr_gidnumer
left join cdn.KntKarty KG on KG.Knt_GIDnumer = TrN_KntNumer and KG.Knt_GIDTyp = TrN_KntTyp
left join cdn.KntKarty KD on KD.Knt_GIDnumer = TrN_KnDNumer and KD.Knt_GIDTyp = TrN_KnDTyp
left join cdn.TraPlat TP on TrN_GIDTyp=TP.TrP_GIDTyp AND TrN_GIDNumer=TP.TrP_GIDNumer left join cdn.TrNOpisy as o on TrN_GIDNumer = TnO_TrnNumer and TrN_GIDLp = TnO_TrnLp
left join CDN.ZamNag ON Dst_GIDNumer = CDN.ZamNag.ZaN_GIDNumer
where TrN_Data3 BETWEEN DATEDIFF(d,'1800-12-28',CAST(@DataOd AS DATE)) AND DATEDIFF(d,'1800-12-28',CAST(@DataDo AS DATE)) and TrN_GIDTyp in (2033,2041,2045,2037)
ORDER BY CDN.TraSElem.TrS_TrnTStamp, CDN.TraNag.TrN_GIDNumer
Udało mi się zrobić kolejny kro do przodu w kwestii zapytania.
Połączyłem zapytanie z Tabelą TwrCenyHistOdDo aby pobrać cenę historyczną towaru zgodnie z datą PW (data PW na podstawie: dateadd(second,dst_dsttstamp,'19900101') ).
Dodałem sobie warunek, który ma zwracać cenę z tabeli TwrCenyHistOdDo dla daty mniejszej lub równej dacie PW. Niestety, brakuje mi drugiego warunku czyli daty większej. Ponieważ nie mam dolnej granicy otrzymuję wszystkie ceny dla danego produktu z datą mniejszą lub równą dacie PW.
Pokombinowałem z funkcją First_Value ale nie do końca działa. Co prawda teraz faktycznie otrzymuję ceny z datą spełniającą ten warunek ale mam kilkaset tysięcy razy powtorzone.
Wydaje mi się, że dobrze kombinuję tzn. stosując warunek na datę ceny <= data PW oraz Maksimum z tego (w sensie z daty by była zwrócona pierwsza data spełniająca ten warunek) ale coś mi nie działa.
Być może ktoś jest w stanie podpowiedzieć co zmienić w zapytaniu:
DECLARE @DataOd varchar(10) , @DataDo varchar(10)
SELECT @DataOd = '2019-11-01', @DataDo = '2019-11-02'
SELECT CDN.NazwaObiektu(CDN.TraNag.TrN_GIDTyp, CDN.TraNag.TrN_GIDNumer, 0, 2) AS [Dokumet]
, dateadd(second,dst_dsttstamp,'19900101') 'Data wystawienia PW'
, CDN.TSToDate(CDN.TraNag.TrN_Data3, 0) 'Data sprzedazy'
, CDN.Magazyny.MAG_Kod
, CDN.TwrKarty.Twr_Kod
, CDN.TraSElem.TrS_KosztKsiegowy
, CDN.TraSElem.TrS_Ilosc
, TrE_Cena
, TrE_CenaPoRabacie
, dateadd(second,TKW.DO,'19900101')
, dateadd(second,CMS.DO, '19900101')
, dateadd(second,CKW.DO, '19900101')
, FIRST_VALUE (TKW.Wartosc) OVER (ORDER BY TKW.DO DESC) 'TKW'
, FIRST_VALUE (CMS.Wartosc) OVER (ORDER BY CMS.DO DESC) 'CMS'
, FIRST_VALUE (CKW.Wartosc) OVER (ORDER BY CKW.DO DESC) 'CKW'
, TraElem.TrE_KosztRzeczywisty
, TraElem.TrE_RzeczywistaNetto
, cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
, Twr_Nazwa
, Grupa_Główna = 'Grupa Główna'
, left(cdn.TwrGrupaPelnaNazwa(tgd_gronumer),CharIndex('/',cdn.TwrGrupaPelnaNazwa(tgd_gronumer),1)-1) 'Grupa.Poziom1'
, cdn.TwrGrupaPelnaNazwa(tgd_gronumer) 'Grupa.Poziom2'
, KG.Knt_Akronim 'Kontrahent Główny - Akronim'
, KG.Knt_Nazwa1 'Kontrahent Główny - Pełna Nazwa'
, KG.Knt_Nip 'Kontrahent Główny - NIP'
, KG.Knt_Kraj 'Kontrahent Główny - Kraj'
, KG.Knt_Miasto 'Kontrahent Główny - Miasto'
, KD.Knt_Akronim 'Kontrahent Docelowy - Akronim'
, KD.Knt_Nip 'Kontrahent Docelowy - NIP'
, KD.Knt_Kraj 'Kontrahent Docelowy - Kraj'
, KD.Knt_Miasto 'Kontrahent Docelowy - Miasto'
, TrN_OpiNumer 'Kontrahent Opiekun'
, zan_openumerm 'Kontrahent_Operator'
FROM CDN.TraSElem INNER JOIN
CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer INNER JOIN
CDN.TraElem ON CDN.TraElem.TrE_GIDNumer = CDN.TraSElem.TrS_GIDNumer AND CDN.TraElem.TrE_GIDLp = CDN.TraSElem.TrS_GIDLp INNER JOIN
CDN.TwrKarty ON CDN.TraElem.TrE_TwrNumer = CDN.TwrKarty.Twr_GIDNumer INNER JOIN
CDN.Magazyny ON CDN.TraSElem.TrS_MagNumer = CDN.Magazyny.MAG_GIDNumer JOIN CDN.Dostawy on Dst_GIDNumer=TrS_DstNumer
inner join CDN.TwrCenyHistOdDo TKW on twr_gidnumer = TKW.TwrNumer and TKW.TwrLp = 1 and TKW.DO <= Dst_DstTStamp
inner join CDN.TwrCenyHistOdDo CMS on twr_gidnumer = CMS.TwrNumer and CMS.TwrLp = 2
inner join CDN.TwrCenyHistOdDo CKW on twr_gidnumer = CKW.TwrNumer and CKW.TwrLp = 3
left join cdn.twrGrupyDom on tgd_gidtyp=twr_gidtyp and tgd_gidnumer=twr_gidnumer
left join cdn.KntKarty KG on KG.Knt_GIDnumer = TrN_KntNumer and KG.Knt_GIDTyp = TrN_KntTyp
left join cdn.KntKarty KD on KD.Knt_GIDnumer = TrN_KnDNumer and KD.Knt_GIDTyp = TrN_KnDTyp
left join cdn.TraPlat TP on TrN_GIDTyp=TP.TrP_GIDTyp AND TrN_GIDNumer=TP.TrP_GIDNumer left join cdn.TrNOpisy as o on TrN_GIDNumer = TnO_TrnNumer and TrN_GIDLp = TnO_TrnLp
left join CDN.ZamNag ON Dst_GIDNumer = CDN.ZamNag.ZaN_GIDNumer
where TrN_Data3 BETWEEN DATEDIFF(d,'1800-12-28',CAST(@DataOd AS DATE)) AND DATEDIFF(d,'1800-12-28',CAST(@DataDo AS DATE)) and TrN_GIDTyp in (2033,2041,2045,2037)
ORDER BY CDN.TraSElem.TrS_TrnTStamp, CDN.TraNag.TrN_GIDNumer
Re: PW -> FS
W sytuacji gdy wyciągasz jedną wartość z tabeli o wielu rekordach dla danego identyfikatora(czyli cenę z TwrCenyHistOdDo dla danego towaru), sugeruję użyć podzapytania - po pierwsze wydajniej, po drugie łatwiej, po trzecie nie musisz się martwić o powielanie rekordów poprzez wiązanie bez odpowiednich warunków. Funkcja analityczna First_Value której używasz, nie ma tutaj większego sensu, choćby dlatego, że wydajnościowo i tak będzie tragicznie dla takiej ilości rekordów - sam pomysł nie był zły. Spróbuj wyjść jeszcze raz od tego co podpowiedział Ci kolega Coin - w swoim zapytaniu masz takie kwiatki jak , które tak naprawdę niewiele mają wspólnego z rzeczywistym dokumentem dostawy.
Pozdrawiam,
Mateusz
Kod: Zaznacz cały
cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
Pozdrawiam,
Mateusz
-
- Posty: 7
- Rejestracja: 21 paź 2019, 11:17
- Rola: Użytkownik CDN XL
- Wersja: 8.0
Re: PW -> FS
Cześć,
Przede wszystkim dziękuję za odpowiedź.
Akurat ta część działa i na próbnym zrzucie dobrze mapuje PW do dokumentów sprzedażowych więc nie bardzo rozumiem co jest nie tak. Tak jest zresztą napisane w kodzie podanym przez użytkownika Coin.
Czy mógłbym prosić Cię o pomoc w przygotowaniu tego podzapytania?
Z mojej strony mogę dodać, że wpadł mi do głowy pewien pomysł jak to powiązać ale nie bardzo wiem jak go zrealizować i jaka byłaby jego wydajność (chyba nie za dobra ).
Mój pomysł jest taki:
Cennik jest aktualizowany np. co tydzień. Przykładowo aktualizacja miała miejsce 4 listopada oraz 11 listopada.
Mam więc ceny historyczne:
Data---------------------------------------------------------Cena-------------CenaLP --------------------TwrNumer
04.11.2019 10:30:00:000---------------------------------10------------------1---------------------------123456
04.11.2019 10:30:00:000--------------------------------- 20------------------2---------------------------123456
04.11.2019 10:30:00:000--------------------------------- 30------------------3---------------------------123456
11.11.2019 12:15:21:000--------------------------------- 40------------------1---------------------------123456
11.11.2019 12:15:21:000--------------------------------- 50------------------2---------------------------123456
11.11.2019 12:15:21:000--------------------------------- 60------------------3----------------------------123456
Do Tabeli TwrCenyHistOdDo dokładam kolumnę, w której będę miał daty od 2017 r. w układzie: 01.01.2017 00:00:01:000
więc będę miał co do sekundy kalendarz od 2017 roku. Połączenie to spowoduje, że tam gdzie mam cenę historyczną będzie wartość ponieważ Data z ceny będzie równa dacie z kalendarza. Dla tych dni, gdzie nie było nowego cennika będę miał NULL.
Data--------------------------------------Cena-----------------CenaLP--------------TwrNumer------------ Data Kalendarz
04.11.2019 10:30:00:000--------------10----------------------1-------------------123456----------------04.11.2019 10:30:00:000
04.11.2019 10:30:00:000--------------20----------------------2-------------------123456----------------04.11.2019 10:30:00:000
04.11.2019 10:30:00:000--------------30----------------------3-------------------123456----------------04.11.2019 10:30:00:000
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------04.11.2019 10:30:01:000
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------04.11.2019 10:30:01:000
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------04.11.2019 10:30:01:000
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------04.11.2019 10:30:02:000
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------04.11.2019 10:30:02:000
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------04.11.2019 10:30:02:000
...
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------11.11.2019 12:15:19:000
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------11.11.2019 12:15:19:000
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------11.11.2019 12:15:19:000
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------11.11.2019 12:15:20:000
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------11.11.2019 12:15:20:000
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------11.11.2019 12:15:20:000
11.11.2019 12:15:21:000--------------40----------------------1-------------------123456----------------11.11.2019 12:15:21:000
11.11.2019 12:15:21:000--------------50----------------------2-------------------123456----------------11.11.2019 12:15:21:000
11.11.2019 12:15:21:000--------------60----------------------3-------------------123456----------------11.11.2019 12:15:21:000
Następnie dokładam kolumnę z funkcją (analogicznie do Excel): jeżeli jest wartość to weź wartość, w pozostałym przypadku weź wartość z komórki powyżej. Eliminuję w ten sposób NULL i mam układ:
Data--------------------------------------Cena-----------------CenaLP--------------TwrNumer------------ Data Kalendarz--------------------------Cennik
04.11.2019 10:30:00:000--------------10----------------------1-------------------123456----------------04.11.2019 10:30:00:000---------------10
04.11.2019 10:30:00:000--------------20----------------------2-------------------123456----------------04.11.2019 10:30:00:000---------------20
04.11.2019 10:30:00:000--------------30----------------------3-------------------123456----------------04.11.2019 10:30:00:000---------------30
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------04.11.2019 10:30:01:000---------------10
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------04.11.2019 10:30:01:000---------------20
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------04.11.2019 10:30:01:000---------------30
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------04.11.2019 10:30:02:000---------------10
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------04.11.2019 10:30:02:000---------------20
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------04.11.2019 10:30:02:000---------------30
...
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------11.11.2019 12:15:19:000---------------10
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------11.11.2019 12:15:19:000---------------20
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------11.11.2019 12:15:19:000---------------30
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------11.11.2019 12:15:20:000---------------10
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------11.11.2019 12:15:20:000---------------20
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------11.11.2019 12:15:20:000---------------30
11.11.2019 12:15:21:000--------------40----------------------1-------------------123456----------------11.11.2019 12:15:21:000---------------40
11.11.2019 12:15:21:000--------------50----------------------2-------------------123456----------------11.11.2019 12:15:21:000---------------50
11.11.2019 12:15:21:000--------------60----------------------3-------------------123456----------------11.11.2019 12:15:21:000---------------60
Mając cenę dla każdej sekundy w okresie mogę już zrobić połączenie wprost w głównym zapytaniu do opisanej powyżej tabeli i wyciągać te ceny, których daty są równe dacie PW.
Taki mi pomysł przyszedł ale nie wiem jak go zrealizować. Niestety więcej pomysłów brak więc będę bardzo zobowiązany za wszelką pomoc w napisaniu tego selecta.
Jeżeli jest jakiś inny sposób, to proszę Cię Mateusz o pomoc. Bardziej szczegółową jeżeli można. Tak jak wspomniałem, bez zaplecza merytrycznego i wsparcia błądzę jak dziecko we mgle.
Pozdrawiam i z góry dziękuję.
Przede wszystkim dziękuję za odpowiedź.
Akurat ta część
Kod: Zaznacz cały
cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
Jeżeli chodzi o Twoją odpowiedź to byłbym wdzięczny za dalszą pomoc. Jestem początkującym użytkownikiem, który chciałbym zastąpić średniej wydajności BI na zapytania SQL i jest to moje pierwsze podejście do tematu. Nie mam niestety wsparcia wewnątrz ani jakiejkolwiek dokumentacji i posiłkuję się wyłącznie tym, co uda mi się znaleźć w internecie.elmiq pisze: ↑13 lis 2019, 22:07W sytuacji gdy wyciągasz jedną wartość z tabeli o wielu rekordach dla danego identyfikatora(czyli cenę z TwrCenyHistOdDo dla danego towaru), sugeruję użyć podzapytania - po pierwsze wydajniej, po drugie łatwiej, po trzecie nie musisz się martwić o powielanie rekordów poprzez wiązanie bez odpowiednich warunków. Funkcja analityczna First_Value której używasz, nie ma tutaj większego sensu, choćby dlatego, że wydajnościowo i tak będzie tragicznie dla takiej ilości rekordów - sam pomysł nie był zły. Spróbuj wyjść jeszcze raz od tego co podpowiedział Ci kolega Coin - w swoim zapytaniu masz takie kwiatki jak, które tak naprawdę niewiele mają wspólnego z rzeczywistym dokumentem dostawy.Kod: Zaznacz cały
cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
Pozdrawiam,
Mateusz
Czy mógłbym prosić Cię o pomoc w przygotowaniu tego podzapytania?
Z mojej strony mogę dodać, że wpadł mi do głowy pewien pomysł jak to powiązać ale nie bardzo wiem jak go zrealizować i jaka byłaby jego wydajność (chyba nie za dobra ).
Mój pomysł jest taki:
Cennik jest aktualizowany np. co tydzień. Przykładowo aktualizacja miała miejsce 4 listopada oraz 11 listopada.
Mam więc ceny historyczne:
Data---------------------------------------------------------Cena-------------CenaLP --------------------TwrNumer
04.11.2019 10:30:00:000---------------------------------10------------------1---------------------------123456
04.11.2019 10:30:00:000--------------------------------- 20------------------2---------------------------123456
04.11.2019 10:30:00:000--------------------------------- 30------------------3---------------------------123456
11.11.2019 12:15:21:000--------------------------------- 40------------------1---------------------------123456
11.11.2019 12:15:21:000--------------------------------- 50------------------2---------------------------123456
11.11.2019 12:15:21:000--------------------------------- 60------------------3----------------------------123456
Do Tabeli TwrCenyHistOdDo dokładam kolumnę, w której będę miał daty od 2017 r. w układzie: 01.01.2017 00:00:01:000
więc będę miał co do sekundy kalendarz od 2017 roku. Połączenie to spowoduje, że tam gdzie mam cenę historyczną będzie wartość ponieważ Data z ceny będzie równa dacie z kalendarza. Dla tych dni, gdzie nie było nowego cennika będę miał NULL.
Data--------------------------------------Cena-----------------CenaLP--------------TwrNumer------------ Data Kalendarz
04.11.2019 10:30:00:000--------------10----------------------1-------------------123456----------------04.11.2019 10:30:00:000
04.11.2019 10:30:00:000--------------20----------------------2-------------------123456----------------04.11.2019 10:30:00:000
04.11.2019 10:30:00:000--------------30----------------------3-------------------123456----------------04.11.2019 10:30:00:000
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------04.11.2019 10:30:01:000
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------04.11.2019 10:30:01:000
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------04.11.2019 10:30:01:000
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------04.11.2019 10:30:02:000
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------04.11.2019 10:30:02:000
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------04.11.2019 10:30:02:000
...
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------11.11.2019 12:15:19:000
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------11.11.2019 12:15:19:000
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------11.11.2019 12:15:19:000
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------11.11.2019 12:15:20:000
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------11.11.2019 12:15:20:000
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------11.11.2019 12:15:20:000
11.11.2019 12:15:21:000--------------40----------------------1-------------------123456----------------11.11.2019 12:15:21:000
11.11.2019 12:15:21:000--------------50----------------------2-------------------123456----------------11.11.2019 12:15:21:000
11.11.2019 12:15:21:000--------------60----------------------3-------------------123456----------------11.11.2019 12:15:21:000
Następnie dokładam kolumnę z funkcją (analogicznie do Excel): jeżeli jest wartość to weź wartość, w pozostałym przypadku weź wartość z komórki powyżej. Eliminuję w ten sposób NULL i mam układ:
Data--------------------------------------Cena-----------------CenaLP--------------TwrNumer------------ Data Kalendarz--------------------------Cennik
04.11.2019 10:30:00:000--------------10----------------------1-------------------123456----------------04.11.2019 10:30:00:000---------------10
04.11.2019 10:30:00:000--------------20----------------------2-------------------123456----------------04.11.2019 10:30:00:000---------------20
04.11.2019 10:30:00:000--------------30----------------------3-------------------123456----------------04.11.2019 10:30:00:000---------------30
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------04.11.2019 10:30:01:000---------------10
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------04.11.2019 10:30:01:000---------------20
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------04.11.2019 10:30:01:000---------------30
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------04.11.2019 10:30:02:000---------------10
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------04.11.2019 10:30:02:000---------------20
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------04.11.2019 10:30:02:000---------------30
...
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------11.11.2019 12:15:19:000---------------10
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------11.11.2019 12:15:19:000---------------20
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------11.11.2019 12:15:19:000---------------30
NULL--------------------------------------NULL-------------------1--------------------NULL-----------------11.11.2019 12:15:20:000---------------10
NULL--------------------------------------NULL-------------------2--------------------NULL-----------------11.11.2019 12:15:20:000---------------20
NULL--------------------------------------NULL-------------------3--------------------NULL-----------------11.11.2019 12:15:20:000---------------30
11.11.2019 12:15:21:000--------------40----------------------1-------------------123456----------------11.11.2019 12:15:21:000---------------40
11.11.2019 12:15:21:000--------------50----------------------2-------------------123456----------------11.11.2019 12:15:21:000---------------50
11.11.2019 12:15:21:000--------------60----------------------3-------------------123456----------------11.11.2019 12:15:21:000---------------60
Mając cenę dla każdej sekundy w okresie mogę już zrobić połączenie wprost w głównym zapytaniu do opisanej powyżej tabeli i wyciągać te ceny, których daty są równe dacie PW.
Taki mi pomysł przyszedł ale nie wiem jak go zrealizować. Niestety więcej pomysłów brak więc będę bardzo zobowiązany za wszelką pomoc w napisaniu tego selecta.
Jeżeli jest jakiś inny sposób, to proszę Cię Mateusz o pomoc. Bardziej szczegółową jeżeli można. Tak jak wspomniałem, bez zaplecza merytrycznego i wsparcia błądzę jak dziecko we mgle.
Pozdrawiam i z góry dziękuję.
Re: PW -> FS
Nawet nie wiedziałem, że Comarch ma w funkcji CDN.NazwaObiektu warunek na typ 160, czyli dostawę, co nie zmienia faktu, że pisał to chyba jakiś student łobuz, który zrobił tam wiązanie do Tranag po samym GIDNumer (zapominając o typie), nie wiedząc, że dostawa może być założona również tak przez PM jak i FAI, co czyni ten kod błędnym. Ale może zostawmy ten temat, bo to już trochę inna bajka.aleksanderanderson pisze: ↑15 lis 2019, 12:07Cześć,
Przede wszystkim dziękuję za odpowiedź.
Akurat ta częśćdziała i na próbnym zrzucie dobrze mapuje PW do dokumentów sprzedażowych więc nie bardzo rozumiem co jest nie tak. Tak jest zresztą napisane w kodzie podanym przez użytkownika Coin.Kod: Zaznacz cały
cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
Jeżeli chodzi o Twoją odpowiedź to byłbym wdzięczny za dalszą pomoc. Jestem początkującym użytkownikiem, który chciałbym zastąpić średniej wydajności BI na zapytania SQL i jest to moje pierwsze podejście do tematu. Nie mam niestety wsparcia wewnątrz ani jakiejkolwiek dokumentacji i posiłkuję się wyłącznie tym, co uda mi się znaleźć w internecie.elmiq pisze: ↑13 lis 2019, 22:07W sytuacji gdy wyciągasz jedną wartość z tabeli o wielu rekordach dla danego identyfikatora(czyli cenę z TwrCenyHistOdDo dla danego towaru), sugeruję użyć podzapytania - po pierwsze wydajniej, po drugie łatwiej, po trzecie nie musisz się martwić o powielanie rekordów poprzez wiązanie bez odpowiednich warunków. Funkcja analityczna First_Value której używasz, nie ma tutaj większego sensu, choćby dlatego, że wydajnościowo i tak będzie tragicznie dla takiej ilości rekordów - sam pomysł nie był zły. Spróbuj wyjść jeszcze raz od tego co podpowiedział Ci kolega Coin - w swoim zapytaniu masz takie kwiatki jak, które tak naprawdę niewiele mają wspólnego z rzeczywistym dokumentem dostawy.Kod: Zaznacz cały
cdn.nazwaobiektu(dst_gidtyp, dst_gidnumer,0,2) as [Dokumnet dostawy]
Pozdrawiam,
Mateusz
Czy mógłbym prosić Cię o pomoc w przygotowaniu tego podzapytania?
Z mojej strony mogę dodać, że wpadł mi do głowy pewien pomysł jak to powiązać ale nie bardzo wiem jak go zrealizować i jaka byłaby jego wydajność (chyba nie za dobra ).
...
Pozdrawiam i z góry dziękuję.
To co proponujesz, o ile zdołasz to napisać, wydajnościowo będzie powalać w kierunku odwrotnym do pożądanego
Poprzez podzapytanie rozumiem sytuację w której masz to co podał Ci Coin i dodajesz sobie kolumnę z ceną historyczną, np. tak (zmieniając to co sam napisałeś):
Kod: Zaznacz cały
ISNULL((SELECT TOP 1 TKW.Wartosc FROM CDN.TwrCenyHistOdDo TKW WHERE twr_gidnumer = TKW.TwrNumer and TKW.TwrLp = 1 and TKW.DO <= Dst_DstTStamp ORDER BY TKW.DO DESC),0)
Pozdrawiam,
Mateusz