Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi aktuelles Mwst.-Problem [SQL] (https://www.delphipraxis.net/51419-aktuelles-mwst-problem-%5Bsql%5D.html)

Hansa 12. Aug 2005 01:59

Datenbank: FB 1.5 • Zugriff über: egal

aktuelles Mwst.-Problem [SQL]
 
Hi,

die Mwst. wird wohl erhöht (egal von wem) und das ergibt bei mir ein Problem. Und zwar speichere ich die Umsätze aus verschiedenen Gründen netto. Die zugehörige Mwst. wird im Atikel hinterlegt (0,7,16% aktuell). Die Netto-Umsätze werden hierbei in einer separaten Tabelle gespeichert (netto). Nun muß ich eine Auswertung über mehrere Monate erstellen. Das bedeutet
  • für jeden Artikel seine Mwst. aufaddieren.
  • den Änderungszeitraum der Mwst. berücksichtigen.

Hierbei ist das Problem aufgetaucht, daß der Zeitraum mitten im Jahr liegen kann. 1998 wurde so was ähnliches zum 1.4. durchgeführt. Dies bedeutet, daß selbst bei Einschränkung auf ein Kalenderjahr das hier nicht möglich ist :

SQL-Code:
SELECT A.ID, A.NR, A.BEZ,
A.MWSTSATZ,');
SUM(K.UMSATZ) AS MONATSUMSATZ,
FROM ART A RIGHT JOIN KUARTSTAT K ON (A.ID = K.ID_ART)');
WHERE (MONAT >= :VONMONAT) AND (MONAT <= :BISMONAT) AND (JAHR = :JAHR)
GROUP BY A.ID, A.Nr, A.BEZ, A.MWSTSATZ...
Das ist jetzt stark verkürzt. Wie kann ich nun da in Abhängigkeit vom Artikel und dem Zeitraum die korrekte (sich ändernde) Mwst. ermitteln ? Programmseitig könnte ich Monat für Monat genau ausrechnen, aber das müßte doch auch die DB packen ?

P.S.: das Ergebnis soll der Brutto-Umsatz sein ! Und zwar unabhängig von der gerade in dem Monat gültigen Mwst.

dizzy 12. Aug 2005 03:50

Re: aktuelles Mwst.-Problem [SQL]
 
Was mir auf die Schnelle einfiele:
- Eine separate Tabelle die die Mehrwertssteuersätze auflistet incl. ihrem Gültigkeitszeitraum (z.B. 2 Date-Werte)
- Programmseitig für jeden Umsatz prüfen in welchen Raum er gehört, und mit dem entspr. Satz verrechnet in eine temp. Tabelle scheiben
- Einträge der temp. Tabelle summieren

Das ist allerdings ab einer größeren Menge an Umsatzdaten nicht mehr allzu performant :?. Mir ist aber auch keine built-in Funktion bekannt die das leisten kann. U.U. wäre hier der Einsatz einer Stored Procedure möglich/hilfreich, damit kenne ich mich aber leider nicht aus. Es würde, wenn möglich, aber die Zahl der Zugriffe auf die DB immens senken im Vergleich zu oben genanntem.

Gruss,
Fabian

\\edit: Oder mit der o.g. Mwst.-Tabelle den SELECT aufteilen, so dass du für jeden in der Tabelle befindlichen Zeitraum einen eigenen SELECT machst, der die Daten gleich mit dem zugehörigen Satz verrechnet. Das alles dann in eine Zieltabelle, und fertig.
Ist nur im Anfang etwas mehr Arbeit, da du erst die Anzahl der existierenden Zeiträume aus der DB ermitteln, und dann mit einer Schleife die SELECTs schön variabel raushauen musst.
Das wäre aber weit besser als die erste Idee, und (zumindest für jemanden wie mich der davon keine Ahnung hat) einfacher als eine Stored Procedure ;).

merlin17 12. Aug 2005 06:17

Re: aktuelles Mwst.-Problem [SQL]
 
Schau' dir einmal die Union-Option bei SQL an.


;-) thomas

r_kerber 12. Aug 2005 06:45

Re: aktuelles Mwst.-Problem [SQL]
 
Zitat:

Zitat von Hansa
Hi,

die Mwst. wird wohl erhöht (egal von wem) und das ergibt bei mir ein Problem. Und zwar speichere ich die Umsätze aus verschiedenen Gründen netto. Die zugehörige Mwst. wird im Atikel hinterlegt (0,7,16% aktuell). Die Netto-Umsätze werden hierbei in einer separaten Tabelle gespeichert (netto).

Ist zwar jetzt eventuell zu spät, aber denke mal drüber nach, ob Du den Mehrwert-Steuersatz zusätzlich bei den Positionen sprich Umsätzen speicherst. Ich weiß, das ist eine etwas höhere Redundanz aber bei MwSt-Änderungen sehr hilfreich.

muenster 12. Aug 2005 07:24

Re: aktuelles Mwst.-Problem [SQL]
 
Hi Hansa,
da ich sehr oft mit dieser Problematik zu tun habe kann ich den Tip von r_kerber bestätigen.
Da Du aber in Deinen Tabellen auch mit Umsätzen arbeitest denke auch an Gutschriften. Diese können auch später (manchmal Jahre) mit einem alten Steuersatz abzurechnen sein. Oder - als Beispiel - Lieferung am letzten vor Änderung, Rechnungsschreibung am ersten Tag danach = der alte Satz ist anzuwenden.
Wenn Änderung dann aber richtig. Also Datenbank aufbohren und die entsprechenden Felder ergänzen.

alex517 12. Aug 2005 07:27

Re: aktuelles Mwst.-Problem [SQL]
 
Hallo,

ich würde eine MWSt-Tabelle mit den folgenden Felder

ID, Kz, Steuersatz, Gueltig_ab

erstellen.

Werte im Kz zB:
0 - keine Mwst
1 - volle Mwst
2 - halbe Mwst

Im Artikel wird nur das Kz gespeichert.
Die tatsächliche MWSt kann man dann über eine Stored Procedure
berechnen der man als Parameter das Kz und das Datum des
realisierten Umsatzes übergibt.

alex

Hansa 12. Aug 2005 10:14

Re: aktuelles Mwst.-Problem [SQL]
 
Uff, rege Beteiligung. :mrgreen: Eine Mwst.-Tabelle ist natürlich vorhanden:

SQL-Code:
CREATE TABLE MWST (
    ID              INTEGER NOT NULL,
    ABDATUM         DATE,
    MWSTSATZ        DECIMAL(15,2),
    ANGELEGT        TIMESTAMP,
    LETZTEAENDERUNG TIMESTAMP
);
Den Mwst.-Satz gleich mitschleppen ? Gut, das ginge mit Sicherheit. Meine Überlegungen gehen allerdings mehr in die Richtung, eine SP sagen wir mal "BRUTTO" zu benutzen, um diesen Wert auszurechnen. Dann bräuchte ich den Rückgabewert aber in der Ergebnismenge. Würde das gehen ? Bzw. wie ? Ist da nicht das JOIN hinderlich ?

jensw_2000 12. Aug 2005 10:35

Re: aktuelles Mwst.-Problem [SQL]
 
Kennt Firebird UDF's ?
Ich kann dir leider nur ein kleines Beispiel in MSSQL Syntax geben. Das bekommst du ja schnell angepasst ..

SQL-Code:
CREATE FUNCTION GetBrutto (
   @Vorgangsdatum DATE = NULL,
   @Netto NUMERIC = 0,
   @ID_STEUERSATZ INT = NULL )
RETURNS NUMERIC
BEGIN
  DECLARE @Steuersatz NUMERIC
  DECLARE @Brutto NUMERIC

 
  IF @Vorgangsdatum < 2006-01-01 
  BEGIN
    SELECT @Steuersatz = Steuersatz FROM MWST_BIS_2006 WHERE ID = @ID_STEUERSATZ
  END
  ELSE BEGIN
    SELECT @Steuersatz = Steuersatz FROM MWST_AB_2006 WHERE ID = @ID_STEUERSATZ
  END

  SELECT @BRUTTO = @Netto + (@Netto *@Steuersatz / 100)

  RETURN @BRUTTO
END
Aufruf: (korrigiert)
SQL-Code:
SELECT P.NETTO,GetBrutto(P.Rechnungsdatum, P.Netto, P.ID_Steuersatz) AS [Brutto] FROM Postitionen P

Kompon Ente 12. Aug 2005 10:37

Re: aktuelles Mwst.-Problem [SQL]
 
Zitat:

Zitat von merlin17
Schau' dir einmal die Union-Option bei SQL an.


;-) thomas

Extra von der CDU entworfen oder was? :D

Jelly 12. Aug 2005 10:46

Re: aktuelles Mwst.-Problem [SQL]
 
Genau wie Jens wollt ich irgendwas in Richtung UDF vorschlagen. Und um die Frage gleich zu beantworten,ja Firebird versteht UDFs.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz