Analiza rentowności kontrahenta

Problemy i pomysły związane z funkcjonowaniem modułu Sprzedaż

Moderator: mikey

Kyniu
Posty: 417
Rejestracja: 21 mar 2008, 10:10
Rola: Administrator CDN XL
Lokalizacja: Świętokrzyskie, Kielce

Analiza rentowności kontrahenta

Post autor: Kyniu »

Hej,

Spreparowałem dzisiaj taki "raporcik" więc się dzielę. Zachęcam do korzystania, udoskonalania i dzielenia się uwagami. W szczególności gdyby ktoś znalazł błędy będę wdzięczny za wskazanie.

Kod: Zaznacz cały

@PAR ?@D17|DataOd|&Data Od:REG={DateClwFirstDay('m')} @? PAR@
@PAR ?@D17|DataDo|&Data Do:REG={DateClwLastDay('m')} @? PAR@
@PAR ?@O(Nierozliczony:3,4|Rozliczony:5|Wszystkie:1,2,3,4,5)|StanDokumentu|&Stan dokumentu (tylko dokumenty zamknięte).:REG=1,2,3,4,5 @? PAR@
@PAR ?@O(Wartość netto:'Wartość netto'|Marża procent:'Marża procent')|Kol1|&Kolejność sortowania 1:REG='Wartość netto' @? PAR@
@PAR ?@O(Rosnąco:Asc|Malejąco:Desc)|K_Kol1|Kierunek sortowania kolumny:REG=Asc @? PAR@
@PAR ?@O(Wartość netto:'Wartość netto'|Marża procent:'Marża procent')|Kol2|&Kolejność sortowania 2:REG='Marża procent' @? PAR@
@PAR ?@O(Rosnąco:Asc|Malejąco:Desc)|K_Kol2|Kierunek sortowania kolumny:REG=Asc @? PAR@

SELECT
  1 AS Lp,
  (Knt_Nazwa1 + Knt_Nazwa2) AS 'Nazwa',  
  SUM(TrE_KsiegowaNetto) AS 'Wartość netto',
  SUM(TrE_KosztKsiegowy) AS 'Koszt zakupu',
  (SUM(CDN.TraElem.TrE_KsiegowaNetto) - SUM(CDN.TraElem.TrE_KosztKsiegowy)) AS 'Marża Kwota',
  CASE WHEN SUM(CDN.TraElem.TrE_KosztKsiegowy)=0 THEN 100
  ELSE CONVERT(decimal(10,2), ROUND(((SUM(CDN.TraElem.TrE_KsiegowaNetto) - SUM(CDN.TraElem.TrE_KosztKsiegowy))/SUM(CDN.TraElem.TrE_KosztKsiegowy))*100,0))       
  END AS 'Marża Procent'

FROM CDN.TraElem 
INNER JOIN CDN.KntKarty ON TrE_KntNumer=Knt_GidNumer
LEFT OUTER JOIN CDN.TraNag ON TrE_GIDNumer=TrN_GIDNumer AND TrE_GIDTyp=TrN_GIDTyp

WHERE
   TrE_GIDTyp IN (2001,2033) AND 
   TrN_Data2 >= ??DataOd AND TrN_Data2 <= ??DataDo AND
   TrN_Stan IN (??StanDokumentu) 

GROUP BY
   TrE_KntNumer,
   Knt_Nazwa1,
   Knt_Nazwa2

ORDER BY
   ??Kol1 ??K_Kol1, ??Kol2 ??K_Kol2
Raport pokazuje wartość sprzedaży, koszt na sprzedaży, marżę kwotowo i marżę procentowo dla naszych kontrahentów, w uwzględnieniem daty sprzedaży oraz ewentualnie z rozbiciem na dokumenty zapłacone i niezapłacone. Wartość sprzedaży i koszt brane są z tabeli TraElem, daty i stan płatności z TraNag.

Podpinamy na liście kontrahentów, zaznaczamy "Tylko tabela" i jazda. Acha, przy pierwszym wywołaniu może wyskoczyć komunikat i pusta tabelka - trzeba poustawiać kolumny i kolejność sortowania, kliknąć piorun i powinno zadziałać. Oczywiście próba sortowania obu kolumn po tym samym parametrze też zwróci błąd.

Kyniu

Awatar użytkownika
krystianj
Posty: 61
Rejestracja: 22 kwie 2008, 10:45
Rola: Administrator CDN XL
Wersja: 9.0 HR1
Lokalizacja: śląsk
Kontakt:

Re: Analiza rentowności kontrahenta

Post autor: krystianj »

Hej,
Super "raporcik" ;)
Nie wiem jak u innych ale u mnie działa jak należy. Na początku wywalało błędy tak jak pisałeś ... ale jak się poustawia kolumny i sortowania to wszystko działa cacy ;)

krystianj
Rób to co kochasz a nigdy nie będziesz pracować ...
ŚwierklanyMakijaż ślubnyProfile aluminiowe

Kyniu
Posty: 417
Rejestracja: 21 mar 2008, 10:10
Rola: Administrator CDN XL
Lokalizacja: Świętokrzyskie, Kielce

Re: Analiza rentowności kontrahenta

Post autor: Kyniu »

krystianj pisze: Na początku wywalało błędy tak jak pisałeś ...
Cóż, kolejny bug - mały ale upierdliwy. Mimo ustawienia domyślnej wartości początkowej parametru dynamicznego system się czepia że wartość parametru jest nieprawidłowa.

Kyniu

Awatar użytkownika
wojtini
Posty: 150
Rejestracja: 24 sty 2008, 22:41
Rola: Administrator CDN XL
Wersja: 2016
Lokalizacja: Grodków, opolskie

Re: Analiza rentowności kontrahenta

Post autor: wojtini »

No to właśnie dzięki raportowi KYNIA znalazłem wspólnie własnie z KYNIEM next BUG
dotyczący RKZ w CDNie.

CDN zle liczy marże na RKZcie. Sprawdzcie np. raportem KYNIA w jakims okresie,
który kontrahent ma największą marżę %.

Ja znalazłem np. kontrahenta który ma dokument z wart w cenach zakupu 0,81 zł i
wartością netto w cenach sprzedaży 82,00 zł i RKZ pokazuje marże % 99,01% a kwotową 81,19 zł.

A powinna być marża 10 023%

Sprawdźcie u siebie czy też tak macie ??
I jeszcze ktoś z najnowszą wersja niech looknie czy to jest poprawione.

PS.
Mam propozycję aby przykleić jakiś nowy temat w którym będziemy punktować znalezione BUGI i uciążliwości.
Łatwiej będzie to później wykorzystać i będzie w jednym miejscu.
Co wy na to ??
PoZdrawiam

Wojciech FRED Błauciak
Administrator AgroAs.pl
GG# 2913
GSM: 608 037 025
administrator@agroas.pl

marceynowa
Posty: 341
Rejestracja: 29 lut 2008, 11:27
Rola: Administrator CDN XL
Wersja: 2022
Lokalizacja: Gdynia

Re: Analiza rentowności kontrahenta

Post autor: marceynowa »

wojtini pisze:CDN zle liczy marże na RKZcie.
Wszystko jest ok - zerknij do dokumentacji modułu sprzedaż - na początku jest o konfiguracji.
Marża możey być liczona "do stu" i "od stu". W zalęzności od ustawienia XL podaje w RKZ odpowiednią wartość.

Tym razem to nie BUG

Kyniu
Posty: 417
Rejestracja: 21 mar 2008, 10:10
Rola: Administrator CDN XL
Lokalizacja: Świętokrzyskie, Kielce

Re: Analiza rentowności kontrahenta

Post autor: Kyniu »

marceynowa pisze:Wszystko jest ok - zerknij do dokumentacji modułu sprzedaż - na początku jest o konfiguracji.
Marża możey być liczona "do stu" i "od stu". W zalęzności od ustawienia XL podaje w RKZ odpowiednią wartość.
To znaczy że albo ja albo programiści Comarchu urwaliśmy się z Marsa i że tam uczą innej matematyki. A ja za Marsjanina się nie uważam i liczę "po naszemu" i nijak nie znajduje uzasadnienia dla takich "wynalazków". Tym bardziej że jak podaje dokumentacja teraz nie mogę tego zmienić "Wybór jest możliwy tylko do momentu zarejestrowania pierwszej transakcji".

Kyniu

Awatar użytkownika
mikey
Site Admin
Posty: 99
Rejestracja: 25 lis 2007, 23:42
Rola: Administrator CDN XL
Wersja: 2016
Lokalizacja: Wielkopolska

Re: Analiza rentowności kontrahenta

Post autor: mikey »

Kyniu pisze: To znaczy że albo ja albo programiści Comarchu urwaliśmy się z Marsa i że tam uczą innej matematyki. A ja za Marsjanina się nie uważam i liczę "po naszemu" i nijak nie znajduje uzasadnienia dla takich "wynalazków". Tym bardziej że jak podaje dokumentacja teraz nie mogę tego zmienić "Wybór jest możliwy tylko do momentu zarejestrowania pierwszej transakcji".
Kyniu
Pamiętam z wykładu niejakiego prof. Mruka z Poznańskiej Akademi Ekonomicznej, że istnieją dwie konwencje naliczania marży:
  • europejska - w której tak naprawdę liczy się narzut czyli rożnicę ceny sprzedaży nad cenę zakupu dzieloną przez cenę zakupu
  • amerykańska - czyli ta sama różnica co powyżej ale dzielona przez cenę sprzedaży
W Polsce na rynku FMCG stosuje się tę drugą metodę

Awatar użytkownika
wojtini
Posty: 150
Rejestracja: 24 sty 2008, 22:41
Rola: Administrator CDN XL
Wersja: 2016
Lokalizacja: Grodków, opolskie

Re: Analiza rentowności kontrahenta

Post autor: wojtini »

OK przyznaje że może i fakt, iż nie jest to błąd, ale myślę,
że już sam brak możliwości zmiany tego w trakcie pracy
z systemem to już duże utrudnienie.

Szczególnie jeżeli w trakcie wdrożenia ktoś tego jasno nie przedstawił.
PoZdrawiam

Wojciech FRED Błauciak
Administrator AgroAs.pl
GG# 2913
GSM: 608 037 025
administrator@agroas.pl

Awatar użytkownika
wojtek
Posty: 359
Rejestracja: 14 gru 2007, 12:23
Rola: Administrator CDN XL
Wersja: 9.8
Lokalizacja: pomorskie

Re: Analiza rentowności kontrahenta

Post autor: wojtek »

Dołącze się do tematu.

W związku z tym, że mamy pana w kontrolingu który bez raportów, excela i tabel przestawnych nie potrafi funkcjonować i jest to dla niego całe żecie :) (przez co żyć nie daje i życie admina staje się coraz trudniejsze :) ), przedstawiam alerantywne rozwiązanie analizy rentowności klienta w postaci widoku który możemy sobie podłączyć do excela w formie tabel przestawnych. Może komuś się przyda, być może w waszych firmach rónież analizujecie dane w tabelach przestawnych

Kod: Zaznacz cały


USE [twoja_baza]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE  VIEW [CDN].[SprzedazAnaliza]

AS
SELECT 


IsNull(Twr_Kod,'A-Vista') AS Towar_Kod, 
IsNull(Twr_Nazwa,'A-Vista') AS Towar_Nazwa,
TrE_JmZ As Towar_JmSpr,
Twr_Katalog As Towar_Symbol, 
Twr_EAN As Towar_EAN,

CASE WHEN Twr_Typ=1 THEN 'Towar'
     WHEN Twr_Typ=2 THEN 'Produkt'
     WHEN Twr_Typ=3 THEN 'Koszt'
     WHEN Twr_Typ=5 THEN 'Kaucje'
     ELSE 'Usluga' END
AS Towar_TypTowaruNazwa,
Twr_Typ As Towar_TypTowaruNumer,

TrE_TwrNazwa AS Towar_NazwaZPozycji,

Twr_Archiwalny AS Towar_CzyArch01,
CASE WHEN Twr_Archiwalny=1 THEN 'Archiwalny' ELSE 'Aktywny' END AS Towar_CzyArchiwalny,

IsNull((SELECT Knt_Akronim FROM cdn.KntKarty WHERE Knt_GidTyp=Twr_PrdTyp AND Knt_GidNumer=Twr_PrdNumer),'Inny')
AS Towar_Producent,

IsNull((SELECT Knt_Nazwa1 FROM cdn.KntKarty WHERE Knt_GidTyp=Twr_PrdTyp AND Knt_GidNumer=Twr_PrdNumer),'Inny')
AS Towar_ProducentNazwa,

'Sprzedaż' AS Dokument_TypObrotu, 
CDN.FrmPelnaStruktura (TrN_FRSId) as Dokument_Wlasciciel,
OB_Skrot AS Dokument_TypDokumentu, 
OB_Nazwa AS Dokument_NazwaDokumentu,
TrN_TrNSeria AS Dokument_Seria, 

(SELECT cdn.NumerDokumentuTRN(Trn_GidTyp, Trn_SpiTyp, TrN_TrnTyp, TrN_TrNNumer, TrN_TrNRok, TrN_TrNSeria)) 
As Dokument_Numer,

IsNull((SELECT (SELECT [CDN].[NumerDokumentu]((CDN.DokMapTypDokumentu (ZaN_GIDTyp, ZaN_ZamTyp, ZaN_Rodzaj)), Zan_GidTyp, Zan_GidTyp, ZaN_ZamNumer, ZaN_ZamRok, ZaN_ZamSeria, 1)) FROM cdn.ZamNag WHERE ZaN_GIDTyp=TrN_ZaNTyp AND ZaN_GIDNumer=TrN_ZaNNumer),'Brak') 
AS Dokument_NumerZamowienia,

IsNull((SELECT Ope_Ident FROM cdn.OpeKarty WHERE Ope_GidTyp=TrN_OpeTypW AND Ope_GidNumer=TrN_OpeNumerW),'Brak') 
AS Dokument_OperatorWystawiajacy,

IsNull((SELECT '(' + Prc_Akronim +')' + Prc_Nazwisko  FROM cdn.PrcKarty WHERE Prc_GidTyp=TraNag.TrN_AkwTyp AND Prc_GidNumer=TraNag.TrN_AkwNumer),'Brak') 
AS Akwizytor_Dokument,

IsNull((SELECT '(' + Prc_Akronim +')' + Prc_Nazwisko  FROM cdn.PrcKarty WHERE Prc_GidTyp=KntKarty.Knt_AkwTyp AND Prc_GidNumer=KntKarty.Knt_AkwNumer),'Brak') 
AS Akwizytor_Karta,

IsNull((SELECT '(' + Prc_Akronim +')' + Prc_Nazwisko FROM cdn.PrcKarty WHERE Prc_GidTyp=TraNag.TrN_OpiTyp AND Prc_GidNumer=TraNag.TrN_OpiNumer),'Brak') 
AS Opiekun_Dokument,

IsNull((SELECT '(' + Prc_Akronim +')' + Prc_Nazwisko FROM cdn.PrcKarty WHERE Prc_GidTyp=KntKarty.Knt_PrcTyp AND Prc_GidNumer=KntKarty.Knt_PrcNumer),'Brak') 
AS Opiekun_Karta,

KntKarty.Knt_Akronim AS Klient_Akronim, 
KntKarty.Knt_Nazwa1 AS Klient_Nazwa,
KntKarty.Knt_Miasto AS Klient_Miasto,
KntKarty.Knt_Kraj AS Klient_Kraj,
KntKarty.Knt_Wojewodztwo AS Klient_Wojewodztwo,

KntD.Knt_Akronim AS Klinet_DocelowyAkronim, 
KntD.Knt_Nazwa1 AS Klient_DocelowyNazwa,
KntD.Knt_Miasto AS Klient_DocelowyMiasto,

AdW.KnA_Akronim AS Klient_WysylkowyAkronim, 
AdW.KnA_Nazwa1 AS Klient_WysylkowyNazwa,
AdW.KnA_Miasto AS Klient_WysylkowyMiasto,
AdW.KnA_Miasto + ', ' + AdW.KnA_Ulica + ', ' + AdW.KnA_Adres AS Klient_WysylkowyAdres,

Year(convert(datetime,TrN_Data3-36163,105))AS Data_Rok,
DatePart(quarter,(convert(datetime,TrN_Data3-36163,105))) AS Data_Kwartal,
Month(convert(datetime,TrN_Data3-36163,105))AS Data_Miesiac,
DatePart(week,(convert(datetime,TrN_Data3-36163,105)))-1 AS Data_TydzienRoku,
DatePart(weekday,(convert(datetime,TrN_Data3-36163,105))) AS Data_DzienTyg,
convert(datetime,TrN_Data3-36163,105) Data_DataZakSpr,

TrS_Ilosc AS Ilosc, 
TrE_UpustKnt As UpustKlienta,
TrE_Rabat As Rabat,

TrE_Poczatkowa AS CenaPrzedRabatem, 
round(TrE_Poczatkowa * (TrE_KursL/TrE_KursM),4) AS CenaPrzedRabatemPLN, 

TrE_Cena AS CenaPoRabacie, 
round(TrE_Cena * (TrE_KursL/TrE_KursM),4) AS CenaPoRabaciePLN, 

TrE_KsiegowaNetto As PozycjaNetto, 
TrE_KsiegowaBrutto As PozycjaBrutto


FROM cdn.TraNag TraNag
 INNER JOIN cdn.Obiekty 
  ON (TrN_GidTyp=Ob_GidTyp)

 INNER JOIN cdn.TraElem TraElem
  ON (TraNag.TrN_GIDTyp = TraElem.TrE_GIDTyp
  AND TraNag.TrN_GIDNumer = TraElem.TrE_GIDNumer)

 INNER JOIN CDN.KntKarty KntKarty
  ON (TraNag.TrN_KntTyp=KntKarty.Knt_GIDTyp
  AND TraNag.TrN_KntNumer=KntKarty.Knt_GIDNumer)

left outer join cdn.twrkarty 
  ON (TraElem.TrE_TwrTyp = TwrKarty.Twr_GIDTyp
  AND TraElem.TrE_TwrNumer = TwrKarty.Twr_GIDNumer 
  AND TraElem.TrE_TwrLP = TwrKarty.Twr_GIDLP)

 LEFT OUTER JOIN CDN.KntKarty KntD
  ON (TraNag.TrN_KnDTyp=KntD.Knt_GIDTyp
  AND TraNag.TrN_KnDNumer=KntD.Knt_GIDNumer)

 LEFT OUTER JOIN CDN.KntAdresy AdW
  ON (TraNag.TrN_AdWTyp=AdW.KnA_GIDTyp
  AND TraNag.TrN_AdWNumer=AdW.KnA_GIDNumer)

 LEFT OUTER JOIN CDN.TraSElem TraSElem
  ON (TraElem.TrE_GIDTyp = TraSElem.TrS_GIDTyp
  AND TraElem.TrE_GIDNumer = TraSElem.TrS_GIDNumer 
  AND TraElem.TrE_GIDLP = TraSElem.TrS_GIDLP)

WHERE (TrN_GidTyp in (2001,2003,2005,2009,2013,2033,2034,2036,2037,2041,2042,2044,2045)) and Trn_KntTyp<>0-- and (TrE_Cena*TrS_Ilosc<>0 OR TrS_KosztKsiegowy<>0 OR TrE_KsiegowaNetto<>0)

wojtek

ODPOWIEDZ