Skocz do zawartości


Close Open
Close Open
Zdjęcie

Subiekt zestawieni sprzedaży z kosztami


  • Please log in to reply
49 replies to this topic

#1 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 12 kwiecień 2010 - 21:07

Witam,
Proszę o pomoc w dokończeniu zestawienia sql:
SELECT dok_Typ,
SUM([dok_WartTwNetto]+[dok_WartUsNetto]) AS [OBRÓT NETTO],
Sum(dok_WartMag) AS KOSZT,
Sum([dok_WartTwNetto]+[dok_WartUsNetto]-[dok_WartMag]) AS ZYSK,
sum([dok_WartTwNetto]+[dok_WartUsNetto]-[dok_WartMag])/sum((dok_WartUsNetto +dok_WartTwNetto))*100 AS Marza
FROM dok__Dokument
WHERE (dok__Dokument.dok_Typ IN (2, 6)) AND (dok__Dokument. dok_MagId IN ({DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn:Magazyn})) AND
(dok_DataWyst BETWEEN {DR:Data:2010-03-01:2010-03-31})
GROUP BY dok_Typ WITH ROLLUP

Chodzi mi o to aby zapytanie pobierało do ''(dok_WartMag)'' koszt zakupu usług z dok_typ 1 ( faktura zakupu )

#2 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 13 kwiecień 2010 - 06:23

Pomijając to, że powyższe zestawienie dla towarów w koszcie nie uwzględnia korekt zakupu to imho z usługami się nie da tak zrobić. Usługi nie posiadają kosztu. Nie ma powiązania z zakupem. Zauważ, że np mając usługę "Transport pudełek" możesz na fakturze zakupu wprowadzić raz z ceną 500, drugi raz z ceną 1000 a następnie na fakturze sprzedaży sprzedać 10 usług " Transport pudełek. Jaki jest koszt tej sprzedaży ?

Jeżeli chcesz rozliczać sobie usługi w ten sposób to traktuj je jak zwykłe towary. Zakupiłeś usługę "na magazyn" (czysto wirtualnie) i sprzedajesz ją z tego "magazynu".



Sławek
Sławek

#3 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 13 kwiecień 2010 - 17:01

To prawda źle napisałem.
Konkretnie chodzi o zapytanie które pokaże mi marże (zysk ze sprzedaży - wartość zakupu usługi) / wartość sprzedaży usługi i towaru.
Czy możesz mi podpowiedzieć jak stworzyć takie zapytanie.

Ten post był edytowany przez waglik_22 dnia: 13 kwiecień 2010 - 17:10
Usunąłem niepotrzebny cytat.


#4 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 13 kwiecień 2010 - 17:25

Chyba nie bardzo mnie rozumiesz.

Nie znamy wartości zakupu usługi umieszczonej na fakturze sprzedaży
Sławek

#5 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 13 kwiecień 2010 - 22:14

Staram się ,może inaczej żebym miał pewność:
SELECT dok_Typ,
SUM([dok_WartTwNetto]+[dok_WartUsNetto]) AS [OBRÓT NETTO],
Sum(dok_WartMag) AS KOSZT,
Sum([dok_WartTwNetto]+[dok_WartUsNetto]-[dok_WartMag]) AS ZYSK,
sum([dok_WartTwNetto]+[dok_WartUsNetto]-[dok_WartMag])/sum((dok_WartUsNetto +dok_WartTwNetto))*100 AS Marza
FROM dok__Dokument
WHERE (dok__Dokument.dok_Typ IN (1,2, 6)) AND (dok__Dokument. dok_MagId IN ({DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn:Magazyn})) AND
(dok_DataWyst BETWEEN {DR:Data:2010-03-01:2010-03-31})
GROUP BY dok_Typ WITH ROLLUP

Wynik jaki otrzymuje z tego zapytania w wierszu: 1 otrzymuje wartość obrót netto z faktur zakupu jeżeli z SUM([dok_WartTwNetto]+[dok_WartUsNetto]) AS [OBRÓT NETTO] zrobię SUM[dok_WartUsNetto] AS [OBRÓT NETTO] to otrzymam wynik wartości usługi z faktury zakupowej
Mi zależy na wyniku:
obrót netto = SUM([dok_WartTwNetto]+[dok_WartUsNetto]) z faktury sprzedaży i korekty sprzedaży ( typy 2 i 6)
koszt = Sum(dok_WartMag)faktury sprzedaży i korekty sprzedaży ( typy 2 i 6) + SUM[dok_WartUsNetto] z faktury zakupu ( typ 1)
zysk = obrót netto - koszt
marża = (zysk / obrót) nett *100

Czy jest to możliwe?

Ten post był edytowany przez Willow dnia: 14 kwiecień 2010 - 00:02
złe cytowanie


#6 AroMazur

AroMazur

    Początkujący

  • Forumowicze
  • PipPipPip
  • 61 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Wrocław, Polska

Napisany 14 kwiecień 2010 - 10:48

Czy jest możliwe, to zaraz sam ocenisz, ale najpierw trochę teorii, bo chyba dalej nie rozumiesz co bird22 chce Ci powiedzieć.

Subiekt GT NIE magazynuje usług.
Dokument FZ przyjmuje towar na stan magazynowy (podkreślam TOWAR). Jeśli masz kilka dostaw z różnymi cenami, to to tworzy się kolejka tychże dostaw.
Jeśli na FS masz pozycję typu towar, to po zapisaniu mamy dokładnie wiedzę o tym z jakiej dostawy/dostaw (FZ) jest ten towar pobrany, a co za tym idzie o jego koszcie.
W przypadku usług nie ma stanu, a co za tym idzie nie ma kolejki dostaw. Masz rację, że dokumenty przyjęcia posiadające w swej zawartości usługi są dostępne, ale nie z poziomu pozycji dokumentów sprzedażowych.

A wyręczając Cię już z odpowiedzi to: Tak, da się to zrobić...

... ale jest to trochę trudniejsze. Mówiąc krótko należy to zestawienie poprawić tak by przetwarzać pozycje dokumentów (dok_Pozycja, vwZbiorcza_Pozycja) a nie ich nagłówki oraz dla pozycji typu towar do sumy był pobierany koszt, a dla pozycji typu usługa była pobierana cena z dokumentu zakupu (którego dokumentu? sam decyduj) (CASE WHEN usługa THEN SELECT TOP 1 cena_zakupu FROM Pozycje ... DESC ELSE koszt END).

Pzdr AM

#7 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 15 kwiecień 2010 - 13:54

Dziękuje za zainteresowanie moim problemem.
Próbowałem jeszcze z inna formą :
SELECT


Sum(dok_Pozycja.ob_WartNetto) AS Netto,
Sum(dok_Pozycja.ob_WartBrutto) AS Brutto,
Sum(dok_Pozycja.ob_WartMag) AS Koszt,
Sum([ob_WartNetto]-[ob_WartMag]) AS Zysk,
sum([ob_WartNetto]-[ob_WartMag])/sum(ob_WartNetto)*100


FROM dok__Dokument INNER JOIN
dok_Pozycja ON dok_Pozycja.ob_DokHanId = dok__Dokument.dok_Id INNER JOIN
tw__Towar ON dok_Pozycja.ob_TowId = tw__Towar.tw_Id
WHERE (dok__Dokument.dok_Typ IN (2, 6)) and
(dok_DataWyst BETWEEN {DR:Data:2010-03-01:2010-03-31}) and
(dok__Dokument. dok_MagId IN ({DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn:Magazyn}))

Wiem ,że wskazałeś m i kierunek , ale czy mógłbyś mi dokończyć , przerobić te zestawienie , abym uzyskał wynik końcowy , który jest mi potrzebny.

Pozdrawiam,
MB

Ten post był edytowany przez Alutka dnia: 19 kwiecień 2010 - 20:01
złe cytowanie - Alutka


#8 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 15 kwiecień 2010 - 19:11

Takie małe pytanko:

Czy usługi o których piszesz mają tylko jeden zakup i jedną sprzedaż, czy też dana usługa może być kupiona wiele razy i wiele razy sprzedana ?
Sławek

#9 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 15 kwiecień 2010 - 19:52

Są to usługi typu ( usługa transportowa wpisane do kartoteki) , tak są kupowane wile razy i sprzedawane niezależnie.

Ten post był edytowany przez Alutka dnia: 19 kwiecień 2010 - 20:01
złe cytowanie - Alutka


#10 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 15 kwiecień 2010 - 20:03

No to drążmy dalej:

Mamy usługę transportową o symbolu US_T1

Faktury zakupu:

01.01.2010 - szt 1 cena netto zakupu 1000,-
02.01.2010 - szt 1 cena netto zakupu 1200,-
03.01.2010 - szt 1 cena netto zakupu 1300,-

Sprzedajemy

10.01.2010 = szt 1 cena netto sprzedaży 2000,-

Skąd mam się dowiedzieć, którą usługę sprzedaję ?
Czy to działa jak FIFO - pierwsze zakupione to pierwsze sprzedane ?


BTW:
Nie cytuj niepotrzebnych rzeczy, bo wątek robi się długi i nieczytelny
Sławek

#11 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 15 kwiecień 2010 - 20:23

Nie jest to dla mnie nie istotne interesuje mnie suma na danym magazynie, przy sprzedaży usługa daje mi 100% zysku, a te zakupione usługi chce odjąć od całego zysku danego magazynu.

chodzi mi o coś takiego:
nr dokumentu wartość netto koszt zysk marża %
fs 1 10000 8000 2000 20%
fs 2 20000 18000 2000 10%
suma 30000 26000 4000 13,33%

suma zakupu usług 1000
z faktur zakupowych
z wskazanego magazynu
wynik 30000 27000 3000 10%

Ten post był edytowany przez Alutka dnia: 19 kwiecień 2010 - 20:01
złe cytowanie - Alutka


#12 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 15 kwiecień 2010 - 21:52

Jeżeli interesuje Cię tylko suma to zobacz co robi taki dziwoląg:

select 
n.netto,
n.koszt,
n.netto - n.koszt as zysk,
(n.netto-n.koszt)/n.netto *100 as marża
from
(
SELECT
SUM(case when dok_typ in (2,6) then [dok_WartTwNetto]+[dok_WartUsNetto] else 0 end) AS netto,
Sum(case when dok_typ in (2,6) then dok_WartMag else dok_WartUsNetto end) AS koszt

FROM dok__Dokument
WHERE (dok__Dokument.dok_Typ IN (1,2, 6)) AND (dok__Dokument. dok_MagId IN ({DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn:Magazyn})) AND
(dok_DataWyst BETWEEN {DR:Data:2010-03-01:2010-03-31})
) as n

Sławek

#13 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 16 kwiecień 2010 - 12:44

Faktycznie dziwoląg, ale daje efekt , bardzo dziękuje za pomoc w rozwiązaniu tematu. Mam jeszcze jeden problem, teraz się zorientowałem ,że nie wspomniałem o wartościach z korekty do dokumentu nieistniejącego.
Obecnie zapytanie bierze pod uwagę te dane , czy można to jakoś wykluczyć?

Ten post był edytowany przez Alutka dnia: 19 kwiecień 2010 - 20:00
złe cytowanie - Alutka


#14 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 16 kwiecień 2010 - 22:26


SELECT n.netto,

 	n.koszt,

 	n.netto - n.koszt 	AS zysk,

 	( n.netto - n.koszt ) / n.netto * 100 AS marza

FROM (SELECT 

		SUM(CASE WHEN dok_typ IN ( 2, 6 ) 

				 THEN [dok_WartTwNetto] + [dok_WartUsNetto]

 	ELSE 0

				 END) AS netto,

 	SUM(CASE WHEN dok_typ IN ( 2, 6 ) 

				 THEN dok_wartmag

 	ELSE dok_wartusnetto

 	END) AS koszt

 	FROM dok__dokument

 	WHERE ( dok__dokument.dok_typ IN ( 1, 2 )

 	OR ( dok__dokument.dok_typ = 6 AND dok__dokument.dok_podtyp <> 1 ) )

				AND (dok__Dokument. dok_MagId IN ({DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn:Magazyn})) 

				AND (dok_DataWyst BETWEEN {DR:Data:2010-03-01:2010-03-31})

		) AS n 


Sławek

#15 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 19 kwiecień 2010 - 13:11

Jeszcze raz wielkie podziękowania.
Czy możemy przebudować w jakiś sposób element odpowiedzialny za wybór magazynu , tak żeby użytkownik mógł wybrać tylko magazyn który ma ustawiony jako domyślny?

Ten post był edytowany przez Alutka dnia: 19 kwiecień 2010 - 19:59
złe cytowanie - Alutka


#16 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 19 kwiecień 2010 - 14:59

Duża wędka:

Odczytaj id magazynu z tabeli pd_uzytkownik dla aktualnie zalogowanego użytkownika. Id aktualnego zalogowanego użytkownika pobierzesz ze zmiennej globalnej ID_UZYTKOWNIKA
Sławek

#17 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 19 kwiecień 2010 - 19:32

Coś mi to nie wychodzi , czy mógłbyś mi to napisać w formie elementu zapytania?

Ten post był edytowany przez Alutka dnia: 19 kwiecień 2010 - 19:59
Nie cytuj posta, który jest bezpośrednio nad Twoim - Alutka


#18 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 19 kwiecień 2010 - 19:49

Pokaż jak wygląda Twoje zapytanie zwracające id magazynu to zobaczymy gdzie jest błąd (Nie pokazuj całego poprzedniego zapytania bo w tym momencie nie jest potrzebne)
Sławek

#19 loginmarcin

loginmarcin

    Kandydat

  • Forumowicze
  • PipPip
  • 41 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Katowice, Polska

Napisany 19 kwiecień 2010 - 20:18

AND
(dok__Dokument. dok_MagId IN ({DB:SELECT uz_IdMagazynu FROM pd_Uzytkownik.uz_Id}))

Ten post był edytowany przez Alutka dnia: 19 kwiecień 2010 - 21:04
złe cytowanie - Alutka


#20 birds22

birds22

    Entuzjasta

  • Forumowicze
  • PipPipPipPipPipPipPip
  • 1332 Postów:
  • Płeć:Mężczyzna
  • Lokalizacja:Zduńska Wola

Napisany 19 kwiecień 2010 - 20:31

1. Przede wszystkim nie IN bo będzie tam tylko jedna wartość a nie zbiór wartości. Czyli zastępujemy IN znakiem '='
2. Nie stosuj kontrolki DB bo skoro użytkownik może wybrać tylko jedną wartość to 'de facto' nie ma wyboru :). Tam ma być zwykły select
3. Zapytanie : z jakiej tabeli ma pobrać dane ? Chyba raczej z pd_Uzytkownik. A dalej zapytanie rozbuduj o klauzulę WHERE uz_Id=......
4. Przeczytałeś w helpie dotyczącym zestawień sql o zmiennych globalnych ?

Ten post był edytowany przez Alutka dnia: 19 kwiecień 2010 - 21:05
złe cytowanie - Alutka

Sławek




0 Użytkowników czyta ten temat

0 użytkowników, 0 gości, 0 anonimowych użytkowników