Zasoby dostępne

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

darek002
Posty: 88
Rejestracja: 10 gru 2011, 16:07
Rola: Użytkownik CDN XL
Wersja: 10

Zasoby dostępne

Post autor: darek002 »

Dzień dobry,
Karta towaru, zakładka zasoby. Jest kilka zasobów i są na nich rezerwacje częściowe, na dolnej części formatki mam:

Wyświetl ilości
Stany Dostępne
Rezerwacje

jeśli zaznaczę Rezerwacje to pokazuje się dodatkowa kolumna z ilościami zarezerwowanymi (rezerwacje są robione zasobowo) i jest ok ale jeśli zaznaczę dostępne to powinna się pokazać dodatkowa kolumna z ilościami dostępnymi, czyli stan minus rezerwacje ale nic się nie zmienia.
cze tak to powinno wyglądać czy jestem w błędzie?
Chciałbym ten problem rozwiązać dodając na stałe kolumnę z ilościami jakie zostały dostępne po odjęciu rezerwacji, pomoże ktoś aby mnie naprowadzić jakich tabel użyć?
pozdrawiam
Darek

Awatar użytkownika
praiser
Posty: 1091
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Zasoby dostępne

Post autor: praiser »

wydaje mi się , że dostępne to stany magazynowe. jeżeli stan magazynowy i sprzedażowy masz ten sam to faktycznie nic się nie zmieni a jeżeli te wartości są różne to stan sprzedaży dla opcji dostępne się zmieni.

Stany:
sprze mag
50 20
Dostępne:
sprze mag
20 20
--------------------------------
Pozdrawiam
WW

darek002
Posty: 88
Rejestracja: 10 gru 2011, 16:07
Rola: Użytkownik CDN XL
Wersja: 10

Re: Zasoby dostępne

Post autor: darek002 »

Tak masz rację.
pomoże ktoś jakie tabela połączyć aby zrobić takie zapytanie i dodać kolumnę?
twr_zasoby
twr_karty
magazyn
rezerwacje

co jeszcze potrzebuję żeby to zadziałało?

Awatar użytkownika
praiser
Posty: 1091
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Zasoby dostępne

Post autor: praiser »

Jest właściwie funkcja skalarna do tego, trochę rozbudowana ale powinna ci zwrócić co potrzeba w ciągu oddzielanym dwukropkiem.

-- Funkcja zwraca sume stanow danego towaru i jego cenę oraz wartosc stanu
--
-- Format wyniku:
-- ilosc_do_sprzedazy:ilosc_magazynowa:ilosc_rezerwacji:Cena:waluta:wartosc_stanu:jest_zamienik:rodzaj_towaru:kategoria_ABCXYZ:ilosc_rzeczywista

W moim przykładzie wywołane są tylko podstawowe dane indeksu typ, gid indeksu, gid firmy oraz typ indeksu=1 czyli towar i to powinno wystarczyć

Wartości które cię interesują masz w pierwszych trzech kolumnach splitowych

Kod: Zaznacz cały

SELECT 
    MAX(CASE WHEN rownr = 1 THEN value END) as Pierwsza_wartosc_ciagu
    -- albo jakieś działanie na splitach jak różnica 2 i 3
    --MAX(CAST(CASE WHEN rownr = 2 THEN value END as decimal(18,4))) - MAX(CAST(CASE WHEN rownr = 3 THEN value END as decimal(18,4))) as Roznica_2_3
FROM CDN.TwrKarty
CROSS APPLY (
    SELECT 
        value,
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) as rownr
    FROM STRING_SPLIT(
        CDN.DokSumaStanowTowaru(Twr_GidTyp,Twr_GIDFirma,Twr_GidNumer,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), 
        ':'
    )
) as wartosci_splitow
WHERE {filtrsql}
--------------------------------
Pozdrawiam
WW

darek002
Posty: 88
Rejestracja: 10 gru 2011, 16:07
Rola: Użytkownik CDN XL
Wersja: 10

Re: Zasoby dostępne

Post autor: darek002 »

Ok, tylko to daje sumę ale jak mam kilka zasobów to nie pomoże, chcę uzyskać coś takiego

do sprzedaży | zarezerwowana | nowa kolumna ilość dostępna (wolna) |
200 | 50 | 150 |
300 | 100 | 200 |
150 | 30 | 120 |

Awatar użytkownika
praiser
Posty: 1091
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Zasoby dostępne

Post autor: praiser »

Wszystkie dane są w wyniku tej funkcji. Do sprzedaży to pierwszy element ciągu, rezerwacje to trzeci a dostępne to pierwszy minus trzeci.

Pozostaje tylko wyświetlić na liście indeksów jako trzy kolumny lub jedną kolumnę oddzielaną rurą

Jeżeli to pierwsze, to robisz trzy kolumny a w każdej odpowiednio wartość

Ilość do sprzedaży
MAX(CASE WHEN rownr = 1 THEN value END)
Ilość zarezerwowana
MAX(CASE WHEN rownr = 3 THEN value END)
Różnica
CAST(MAX(CAST(CASE WHEN rownr = 1 THEN value END as decimal(18,4))) -
MAX(CAST(CASE WHEN rownr = 3 THEN value END as decimal(18,4))) as varchar)

albo w jednej

CONCAT(
MAX(CASE WHEN rownr = 1 THEN value END),
'|',
MAX(CASE WHEN rownr = 3 THEN value END),
'|',
CAST(MAX(CAST(CASE WHEN rownr = 1 THEN value END as decimal(18,4))) -
MAX(CAST(CASE WHEN rownr = 3 THEN value END as decimal(18,4))) as varchar)
) as Nazwa_kolumny
--------------------------------
Pozdrawiam
WW

darek002
Posty: 88
Rejestracja: 10 gru 2011, 16:07
Rola: Użytkownik CDN XL
Wersja: 10

Re: Zasoby dostępne

Post autor: darek002 »

Źle tę funkcję zrozumiałem ale teraz jest ok tylko że w dalszym ciągu robi sumę wszystkich zasobów, a jak to podzielić na każdy zasób osobno.
Musiałem też się odwołać do tabeli TwrZasoby bo zwracało błąd.

Kod: Zaznacz cały

SELECT 
MAX(CAST(CASE WHEN rownr = 1 THEN value END as decimal(18,4))) - MAX(CAST(CASE WHEN rownr = 3 THEN value END as decimal(18,4))) as Roznica_2_3
FROM CDN.TwrKarty
LEFT OUTER JOIN CDN.TwrZasoby TwrZasoby ON Twr_GIDNumer=TwZ_TwrNumer
CROSS APPLY (
    SELECT 
        value,
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) as rownr
    FROM STRING_SPLIT(
        CDN.DokSumaStanowTowaru(Twr_GidTyp,Twr_GIDFirma,Twr_GidNumer,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), 
        ':'
    )
) as wartosci_splitow
WHERE {filtrsql}

do sprzedaży | zarezerwowana | nowa kolumna ilość dostępna (wolna) |
200 | 50 | 150 |
1000 | 0 | 1000 |
500 | 0 | 500 |
powinno być jak powyżej a jest

do sprzedaży | zarezerwowana | nowa kolumna ilość dostępna (wolna) |
200 | 50 | 1650 |
1000 | 0 | 1650 |
500 | 0 | 1650 |

Awatar użytkownika
praiser
Posty: 1091
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Zasoby dostępne

Post autor: praiser »

Ta kolumna jest do wyświetlenia na liście indeksów bo zakładałem, że o to chodzi, żeby widzieć wolne zasoby bez wchodzenia w indeks.
Ty wywołujesz to na karcie , na zakładce zasoby dlatego masz zawsze tą samą wartość iloczynu.
--------------------------------
Pozdrawiam
WW

darek002
Posty: 88
Rejestracja: 10 gru 2011, 16:07
Rola: Użytkownik CDN XL
Wersja: 10

Re: Zasoby dostępne

Post autor: darek002 »

to jest jak podnoszę kartę do edycji i zakładka zasoby | Wg dokumentów, jak jest jeden zasób to jest ok ale jak kilka to nie.

Awatar użytkownika
praiser
Posty: 1091
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Zasoby dostępne

Post autor: praiser »

spróbuj dodać numer dostawy do funkcji

CDN.DokSumaStanowTowaru(Twr_GidTyp,Twr_GIDFirma,Twr_GidNumer,1,0,0,0,0,0,0,0,TwZ_DstNumer,0,0,0,0,0,0,0,0,0,0,0),
a jeśli to ma być ze stanów magazynowych to jeszcze wartość nr 10 funkcji

CDN.DokSumaStanowTowaru(Twr_GidTyp,Twr_GIDFirma,Twr_GidNumer,1,0,0,0,0,0,1,0,TwZ_DstNumer,0,0,0,0,0,0,0,0,0,0,0),

@p_TypIlosci Sposób uwzględniania rezerwacji z zasobami (istotne tylko gdy @p_DstNumer<>0)
-- 0 - wyliczenia dla ilości handlowych
-- 1 - wyliczenia dla ilosci magazynowcyh
-- 2 - działanie jak w wersji 3.2 - sprawdza istnienie rezerwacji dla danego zasobu (bez dodatkowego sprawdznia dla magazynu)
--------------------------------
Pozdrawiam
WW

ODPOWIEDZ