Temat: Zdublowane pozycje.

Witam,
Mam wydruk zrobiony na commandzie. Wyswietla on rozliczenia (w optimie w liscie zapisow k/b).
Problem polega na tym, że jak dokument był rozliczony jedno razowo to wszystko pokazuje sie ok.
Jeśli był rozliczony częsciowo i są dwie różne daty to pokazuje się podwójnie.
Marcin S.

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

Temat: Zdublowane pozycje.

Musisz poprawić zapytanie w SQL Command w ten sposób, aby zgrupować dokument rozliczany częściowo w jedną pozycję. Czyli przyda się klauzula GROUP BY.

Temat: Zdublowane pozycje.

SELECT
TrN_NumerPelny,
dbo.seria_dokumentu(trn_trnid),
CASE WHEN BRK_LDokTyp=1 AND BRK_LDokID=BZd_BZdID THEN BRK_PNumer ELSE BRK_LNumer END AS [NumerDok],
BRK_DataDok, BZd_Termin, BRK_Kwota,
CASE WHEN BRK_Waluta<>'' THEN BRK_Waluta ELSE 'PLN' END AS [Waluta],
CASE WHEN BRK_LDokTyp=1 AND BRK_LDokID=BZd_BZdID THEN BRK_PDokTyp ELSE BRK_LDokTyp END AS [DokTyp],
CASE WHEN BRK_LDokTyp=1 AND BRK_LDokID=BZd_BZdID THEN BRK_PDokID ELSE BRK_LDokID END AS [DokID] ,
BRK_BRKID,BZd_NumerPelny, BZd_DataDok,BZd_KwotaSys,
*
from
cdn.BnkZapisy bz
JOIN cdn.BnkRozRelacje brr ON brr.BRR_ZDokID = bz.BZp_BZpID AND BRR_ZDokTyp =2
left outer JOIN cdn.BnkZdarzenia bz2 ON bz2.BZd_BZdID = brr.BRR_DDokID AND brr.BRR_DDokTyp=1
-- left outer - jezeli nie ma rozliczenia
JOIN cdn.TraNag n ON n.TrN_TrNID = bz2.BZd_DokumentID
left outer join cdn.BnkRozKwoty B ON (B.BRK_LDokTyp=1 AND B.BRK_LDokID=bz2.BZd_BZdID OR B.BRK_PDokTyp=1 AND B.BRK_PDokID=bz2.BZd_BZdID)
left join cdn.PodmiotyView pod on (n.TrN_PodID = pod.Pod_PodId and pod.Pod_PodmiotTyp = 1)

-- left outer JOIN cdn.TraNag tn ON tn.TrN_TrNID = brr.BRR_DDokID AND brr.BRR_DDokTyp = 1
WHERE

BZd_DokumentTyp = 1

tak wyglada command.
Grupowanie w crystalu wyglada tak:
1.command.expr1001
2.command.expr1001
3.BRK_BRKID

Jeśli ktoś jest w stanie to poprawic, konia z rzedem mu! :)
Krzysztof Wojtal

Krzysztof Wojtal Specjalista ds
systemu ERP, PL/SQL,
Crystal rep., Power
B...

Temat: Zdublowane pozycje.

Mam nadzieję, że udało mi się pomóc w twojej kwestii.
Nie mam doczynienia z Optima, ale działanie klauzuli GROUP BY jest identyczne dla SQLa.

SELECT
TrN_NumerPelny,
dbo.seria_dokumentu(trn_trnid),
CASE WHEN BRK_LDokTyp=1 AND BRK_LDokID=BZd_BZdID THEN BRK_PNumer ELSE BRK_LNumer END AS [NumerDok],
Max(BRK_DataDok) as BRK_DataDok, /* Zwarcasz ostatnią datę */
BZd_Termin,
Sum(BRK_Kwota) as BRK_Kwota, /* Jezeli dokument jest rozliczony częściowo, to pewnie musisz posumować sobie kwoty */
CASE WHEN BRK_Waluta<>'' THEN BRK_Waluta ELSE 'PLN' END AS [Waluta],
CASE WHEN BRK_LDokTyp=1 AND BRK_LDokID=BZd_BZdID THEN BRK_PDokTyp ELSE BRK_LDokTyp END AS [DokTyp],
CASE WHEN BRK_LDokTyp=1 AND BRK_LDokID=BZd_BZdID THEN BRK_PDokID ELSE BRK_LDokID END AS [DokID] ,
BRK_BRKID,BZd_NumerPelny, BZd_DataDok,BZd_KwotaSys,
*
from
cdn.BnkZapisy bz
JOIN cdn.BnkRozRelacje brr ON brr.BRR_ZDokID = bz.BZp_BZpID AND BRR_ZDokTyp =2
left outer JOIN cdn.BnkZdarzenia bz2 ON bz2.BZd_BZdID = brr.BRR_DDokID AND brr.BRR_DDokTyp=1
-- left outer - jezeli nie ma rozliczenia
JOIN cdn.TraNag n ON n.TrN_TrNID = bz2.BZd_DokumentID
left outer join cdn.BnkRozKwoty B ON (B.BRK_LDokTyp=1 AND B.BRK_LDokID=bz2.BZd_BZdID OR B.BRK_PDokTyp=1 AND B.BRK_PDokID=bz2.BZd_BZdID)
left join cdn.PodmiotyView pod on (n.TrN_PodID = pod.Pod_PodId and pod.Pod_PodmiotTyp = 1)

-- left outer JOIN cdn.TraNag tn ON tn.TrN_TrNID = brr.BRR_DDokID AND brr.BRR_DDokTyp = 1
WHERE

BZd_DokumentTyp = 1

GROUP BY
TrN_NumerPelny,
dbo.seria_dokumentu(trn_trnid),
CASE WHEN BRK_LDokTyp=1 AND BRK_LDokID=BZd_BZdID THEN BRK_PNumer ELSE BRK_LNumer END AS [NumerDok],
BZd_Termin, /* nie ma w grupowaniu daty (zwraca maksymalną) oraz kwoty (jest sumowana) */
CASE WHEN BRK_Waluta<>'' THEN BRK_Waluta ELSE 'PLN' END AS [Waluta],
CASE WHEN BRK_LDokTyp=1 AND BRK_LDokID=BZd_BZdID THEN BRK_PDokTyp ELSE BRK_LDokTyp END AS [DokTyp],
CASE WHEN BRK_LDokTyp=1 AND BRK_LDokID=BZd_BZdID THEN BRK_PDokID ELSE BRK_LDokID END AS [DokID] ,
BRK_BRKID,BZd_NumerPelny, BZd_DataDok,BZd_KwotaSys,
* /* jeżeli chodzi o gwiazdkę, to nie wiem jakie pola są zwracane i czy przypadkiem nie musisz ich zsumować lub dać wartość max */

PS. Jeżeli udało mi się pomóc, to poniżej podaję adres: kon_z_rzedem@gmail.com, na który dostarcz tego konia :-)



Wyślij zaproszenie do