Strona 1 z 3
Kolumny w module Zamówienia
: 20 paź 2021, 11:57
autor: plejaz
Dzień dobry.
Mam dwa tematy, które próbuję uruchomić w instalacji XL'a w wersji 2020.2.1.
Czy próbował ktoś wdrożyć rozwiązanie wyświetlania wartości zamówienia w dodatkowej kolumnie w module ZAMÓWIENIA w miejscu:
ZAMÓWIENIA > Sprzedaż > kolumna - Wartość ?
Domyślnie XL wyświetla podstawowe dane dotyczące napisanego zamówienia, ale czy jest możliwość wyświetlenia wartości np. netto ?
Dodatkowo, chciałbym wyświetlić w drugiej kolumnie akwizytora jaki został przypisany do konkretnego kontrahenta dla którego jest napisane zamówienie, napisałem zapytanie, ale wyrzuca mi błąd:
Kod: Zaznacz cały
SELECT
TOP 1 PRC_Akronim Akwizytor
FROM CDN.PrcKarty
JOIN CDN.KntKarty ON Knt_AkwTyp = PRc_GIDTyp
AND Knt_AkwNumer = PRc_GIDNumer
WHERE {filtrsql}
UNION ALL
SELECT TOP 1 Knt_Nazwa1
FROM CDN.KntKarty WHERE Knt_GIDNumer =
(SELECT TOP 1 Knt_AkwNumer FROM CDN.KntKarty
WHERE Knt_AkwTyp = 32 AND
{filtrsql})
Czy mógłby ktoś podpowiedzieć rozwiązanie ?
Re: Kolumny w module Zamówienia
: 20 paź 2021, 12:15
autor: viesiek1
Wartość ZS mam zrobioną, więc mogę się podzielić. Mam dwa rozwiązania do wyboru.
1. Wartosc netto PLN
Kod: Zaznacz cały
SELECT
CASE WHEN SUM(ISNULL(ZaN_KursM, 0)) != 0 THEN SUM(ZaE_WartoscPoRabacie * ZaN_KursL / ZaN_KursM) ELSE 0 END
AS '#XLFORMAT#50R@n18.2@|*~Wartość netto PLN~#/XLFORMAT#',
-1 AS '#XLFORMAT##/XLFORMAT#',
-1 AS '#XLFORMAT##/XLFORMAT#',
-1 AS '#XLFORMAT##/XLFORMAT#',
-1 AS '#XLFORMAT##/XLFORMAT#'
-- CAST(CASE WHEN SUM(ISNULL(ZaN_KursM, 0)) != 0 THEN SUM(ZaE_WartoscPoRabacie * ZaN_KursL / ZaN_KursM) ELSE 0 END AS DECIMAL(18, 2)) AS 'Wartość netto PLN'
-- CASE WHEN SUM(ISNULL(ZaN_KursM, 0)) != 0 THEN REPLACE(REPLACE(CONVERT(VARCHAR, CAST(ISNULL(SUM(ZaE_WartoscPoRabacie * ZaN_KursL / ZaN_KursM), 0) AS MONEY), 1), ',', ' '), '.', ',') ELSE '' END AS 'Wartość netto PLN'
FROM CDN.ZamNag
INNER JOIN CDN.ZamElem ON ZaN_GIDNumer = ZaE_GIDNumer AND ZaN_GIDTyp = ZaE_GIDTyp
WHERE {filtrSQL} AND ISNULL(ZaN_KursM, 0) != 0
2. Wartosc netto PLN wg Vat
Kod: Zaznacz cały
SELECT 0
AS '#XLFORMAT#50R@n18.2@|*~Wartość netto PLN~#/XLFORMAT#',
-1 AS '#XLFORMAT##/XLFORMAT#',
-1 AS '#XLFORMAT##/XLFORMAT#',
-1 AS '#XLFORMAT##/XLFORMAT#',
-1 AS '#XLFORMAT##/XLFORMAT#'
UNION
SELECT
CASE
WHEN ZaN_FlagaNB = 'N' THEN CASE WHEN SUM(ISNULL(ZaV_KursM, 0)) != 0 THEN SUM(ZaV_Netto * ZaV_KursL / ZaV_KursM) ELSE 0 END
ELSE CASE WHEN SUM(ISNULL(ZaV_KursM, 0)) != 0 THEN SUM(ISNULL(ZaV_Brutto, 0) - ISNULL(ZaV_Vat, 0) * ZaV_KursL / ZaV_KursM) ELSE 0 END
END
AS '#XLFORMAT#50R@n18.2@|*~Wartość netto PLN~#/XLFORMAT#',
-1 AS '#XLFORMAT##/XLFORMAT#',
-1 AS '#XLFORMAT##/XLFORMAT#',
-1 AS '#XLFORMAT##/XLFORMAT#',
-1 AS '#XLFORMAT##/XLFORMAT#'
FROM CDN.ZamNag
INNER JOIN CDN.ZamVat ON ZaN_GIDNumer = ZaV_GIDNumer AND ZaN_GIDTyp = ZaV_GIDTyp
WHERE
{filtrSQL}
AND ISNULL(ZaV_KursM, 0) != 0
GROUP BY ZaN_FlagaNB
ORDER BY 1 DESC
Re: Kolumny w module Zamówienia
: 20 paź 2021, 12:34
autor: praiser
Akwizytor można tak (w tym przypadku akronim)
Kod: Zaznacz cały
select Akwizytor.Knt_Akronim as Akwizytor
from CDN.KntKarty Knt
join cdn.KntKarty as Akwizytor on Knt.Knt_AkwNumer = Akwizytor.Knt_GIDNumer and Knt.Knt_AkwTyp = Akwizytor.Knt_GIDTyp
join CDN.ZamNag on Zan_KntNumer = Knt.Knt_GidNumer and Zan_KntTyp = Knt.Knt_GidTyp
WHERE {FiltrSQL}
Re: Kolumny w module Zamówienia
: 20 paź 2021, 14:13
autor: plejaz
Kolego @viesiek1, bardzo dziękuję za podsunięcie gotowego rozwiązania, faktycznie działa bez problemu (rozwiązanie wartości netto), ale mam kilka pytań co formy wykonania jak i wydajności.
Czy u Ciebie również po kliknięciu w nagłówek kolumny XL sortuje wartości około 2 minut (około 350 zamówień) ?
Widzę, że odnosisz się do kilku tabel zawartych w XL'u, czy to znaczy, że nie ma jednej tabeli wskazującej wartość NETTO zamówienia, która wyświetla się w szczegółach zamówienia w zakładce OGÓLNE (Netto Brutto) ?
W kwestii wyświetlania akronimu w kolumnie nie wyświetla błędu, ale też nie okazuje przypisanego akwizytora.
Re: Kolumny w module Zamówienia
: 20 paź 2021, 14:25
autor: viesiek1
Co do wydajności sortowania, to niestety u nas też się tak długo sortuje. Nie walczyłem z tym.
Dane można wziąć z pozycji ZS albo z tabelki VAT. Te wartości czasem się różnią groszami. Na zakładce OGÓLNE są chyba dane z tabelki VAT.
Re: Kolumny w module Zamówienia
: 20 paź 2021, 14:47
autor: praiser
plejaz pisze: 20 paź 2021, 14:13
W kwestii wyświetlania akronimu w kolumnie nie wyświetla błędu, ale też nie okazuje przypisanego akwizytora.
sprawdziłem u siebie co prawda na bazie 2019.3.5 ale to się chyba nie zmieniło
akronim akwizytora czytany jest z karty kontrahenta tak jak pisałeś a nie z zamówienia
Clipboard01.jpg
z zamówienia to by wyglądało mniej więcej tak
Kod: Zaznacz cały
select Akwizytor.Knt_Akronim as Akw_z_karty, Akwizytor2.Knt_Akronim as Akw_z_zamowienia
from CDN.KntKarty Knt
LEFT join cdn.KntKarty as Akwizytor on Knt.Knt_AkwNumer = Akwizytor.Knt_GIDNumer and Knt.Knt_AkwTyp = Akwizytor.Knt_GIDTyp
LEFT join CDN.ZamNag on Zan_KntNumer = Knt.Knt_GidNumer and Zan_KntTyp = Knt.Knt_GidTyp
LEFT join cdn.KntKarty as Akwizytor2 on Zan_AkwNumer = Akwizytor2.Knt_GIDNumer and Zan_AkwTyp = Akwizytor2.Knt_GIDTyp
WHERE {FiltrSQL}
Re: Kolumny w module Zamówienia
: 20 paź 2021, 17:44
autor: plejaz
Zapytanie przedstawione przez Ciebie również nie zwraca wartości, a jedynie puste wiersze w kolumnach.
Próbowałem jeszcze ograć temat w ten sposób:
Kod: Zaznacz cały
SELECT
TOP 1 PRC_Akronim Akwizytor
FROM CDN.PrcKarty
JOIN CDN.KntKarty ON Knt_AkwTyp = PRc_GIDTyp
INNER JOIN CDN.KntGrupy ON Knt_GIDTyp = KnG_GIDTyp AND Knt_GIDNumer = KnG_GIDNumer
AND Knt_AkwNumer = PRc_GIDNumer
WHERE {filtrsql}
UNION ALL
SELECT TOP 1 Knt_Nazwa1
FROM CDN.KntKarty
WHERE Knt_GIDNumer =
(SELECT TOP 1 Knt_AkwNumer
FROM CDN.KntKarty
INNER JOIN CDN.KntGrupy ON Knt_GIDTyp = KnG_GIDTyp AND Knt_GIDNumer = KnG_GIDNumer
WHERE Knt_AkwTyp = 32
AND {filtrsql})
Ale tutaj wyrzuca błędy.
Nie wiem czy to nie jest kwestia wdrożenia, które robił Nasz partner, przypisując kontrahentów do akwizytorów.
W firmie mamy zrobione to w ten sposób, że w module:
KONTRAHENCI > zakładka INNE > Akwizytor
i tutaj przypisany jest akwizytor.
Dziwne jest to, że wyciągnąłem sobie kolumnę AKWIZYTOR w module KONTRAHENCI > Wg. Akronimu, taką kwerendą:
Kod: Zaznacz cały
SELECT
TOP 1 PRC_Akronim Akwizytor
FROM CDN.PrcKarty
JOIN CDN.KntKarty ON Knt_AkwTyp = PRc_GIDTyp
AND Knt_AkwNumer = PRc_GIDNumer
WHERE {filtrsql}
UNION ALL
SELECT TOP 1 Knt_Nazwa1
FROM CDN.KntKarty WHERE Knt_GIDNumer =
(SELECT TOP 1 Knt_AkwNumer FROM CDN.KntKarty
WHERE Knt_AkwTyp = 32 AND
{filtrsql})
i tutaj działa bez problemu.
Nie jestem tego w stanie przenieść na moduł ZAMÓWIEŃ > LISTA ZAMÓWIEŃ SPRZEDAŻY > ZAMÓWIENIA > Sprzedaż, które z logicznego punktu widzenia korzystają z tych samych formatek.
Re: Kolumny w module Zamówienia
: 20 paź 2021, 17:54
autor: praiser
teraz jasne, masz akwizytorów pod kontrahentami z listy pracowników a nie z listy kontrahentów oznaczonych jako akwizytorzy
Clipboard01.jpg
kwerendę masz gotową i działającą tylko musisz polinkować ZamNag z PrcKarty
chyba jako Prc_GIDNumer=ZaN_AkwNumer
i powinno hulać.
Kod: Zaznacz cały
select Akwizytor.Knt_Akronim as Akw_z_karty, Akwizytor2.Knt_Akronim as Akw_z_zamowienia, Akwizytor3.Prc_Akronim as Akw_z_prac
from CDN.KntKarty Knt
LEFT join cdn.KntKarty as Akwizytor on Knt.Knt_AkwNumer = Akwizytor.Knt_GIDNumer and Knt.Knt_AkwTyp = Akwizytor.Knt_GIDTyp
LEFT join CDN.ZamNag on Zan_KntNumer = Knt.Knt_GidNumer and Zan_KntTyp = Knt.Knt_GidTyp
LEFT join cdn.KntKarty as Akwizytor2 on Zan_AkwNumer = Akwizytor2.Knt_GIDNumer and Zan_AkwTyp = Akwizytor2.Knt_GIDTyp
LEFT join cdn.Prckarty Akwizytor3 on Akwizytor3.Prc_GIDNumer=ZaN_AkwNumer and Akwizytor3.Prc_GidTyp = Zan_AkwTyp
WHERE {FiltrSQL}
Re: Kolumny w module Zamówienia
: 22 paź 2021, 11:56
autor: Lukas
@viesiek1
super kolumna z wartością zamówienia, ale jeszcze mam pytanie, czy jest opcja by pokazywało wartość niezrealizowanego zamówienia?
edit: swoją drogą, po co autorowi postu taka kolumna, skoro wystarczy nacisnąć przycisk "sumy" by pokazało wartości z zamówienia?
Re: Kolumny w module Zamówienia
: 22 paź 2021, 12:10
autor: viesiek1
Zakładam, że chodzi ci o wartość tylko tych pozycji, które nie są jeszcze zrealizowane. Nie mam takiego gotowca, ale mam zapytanie, które zwraca pozycje niezrealizowane. Może uda ci się je przerobić do własnych potrzeb?
Pozycja zamówienia jest zrealizowana wg mnie wtedy, gdy w całości znajduje się na powiązanej fakturze lub paragonie.
Kod: Zaznacz cały
SELECT 1 AS Lp,
CDN.NumerDokumentuTRN(9472, ZN1.ZaN_GIDTyp, ZN1.ZaN_GIDTyp, ZN1.ZaN_ZamNumer, ZN1.ZaN_ZamRok, ZN1.ZaN_ZamSeria) AS Nr_zamowienia,
DATEADD(dd, ZaN_DataWystawienia, '18001228') AS Data,
ZE1.ZaE_TwrKod AS Kod, ZE1.ZaE_TwrNazwa AS Nazwa, ZE1.ZaE_Ilosc AS Ilosc,
(ZE1.ZaE_Ilosc -
(SELECT ISNULL(SUM(Ilosc), 0) AS Zrealizowane FROM
(
SELECT SUM(TSE2.TrS_Ilosc) AS Ilosc
FROM CDN.ZamNag AS ZN2
LEFT JOIN CDN.ZamElem AS ZE2 ON ZE2.ZaE_GIDNumer = ZN2.ZaN_GIDNumer AND ZE2.ZaE_GIDTyp = ZN2.ZaN_GIDTyp
LEFT JOIN CDN.TraSElem TSE2 ON TSE2.TrS_ZlcNumer = ZE2.ZaE_GIDNumer and TSE2.TrS_ZlcTyp = ZE2.ZaE_GIDTyp AND TSE2.TrS_ZlcLp = ZE2.ZaE_GIDLp
WHERE TSE2.TrS_GIDTyp IN (2033, 2034, 2037) AND ZN2.ZaN_GIDNumer = ZN1.ZaN_GIDNumer AND ZE2.ZaE_TwrNumer = ZE1.ZaE_TwrNumer AND ZE2.ZaE_GIDLp = ZE1.ZaE_GIDLp
) AS Zam)
) AS Niezrealizowane,
ZE1.ZaE_JmZ AS Jm
FROM CDN.ZamNag AS ZN1
LEFT JOIN CDN.ZamElem AS ZE1 ON ZE1.ZaE_GIDNumer = ZN1.ZaN_GIDNumer AND ZE1.ZaE_GIDTyp = ZN1.ZaN_GIDTyp
WHERE
(
(ZE1.ZaE_Ilosc -
(SELECT ISNULL(SUM(Ilosc), 0) AS Zrealizowane FROM
(
SELECT SUM(TSE2.TrS_Ilosc) AS Ilosc
FROM CDN.ZamNag AS ZN2
LEFT JOIN CDN.ZamElem AS ZE2 ON ZE2.ZaE_GIDNumer = ZN2.ZaN_GIDNumer AND ZE2.ZaE_GIDTyp = ZN2.ZaN_GIDTyp
LEFT JOIN CDN.TraSElem TSE2 ON TSE2.TrS_ZlcNumer = ZE2.ZaE_GIDNumer and TSE2.TrS_ZlcTyp = ZE2.ZaE_GIDTyp AND TSE2.TrS_ZlcLp = ZE2.ZaE_GIDLp
WHERE TSE2.TrS_GIDTyp IN (2033, 2034, 2037) AND ZN2.ZaN_GIDNumer = ZN1.ZaN_GIDNumer AND ZE2.ZaE_TwrNumer = ZE1.ZaE_TwrNumer AND ZE2.ZaE_GIDLp = ZE1.ZaE_GIDLp
) AS Zam)
)
) > 0
AND {filtrSQL}
ORDER BY ZE1.ZaE_Pozycja