![]() |
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
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:
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 ?
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... P.S.: das Ergebnis soll der Brutto-Umsatz sein ! Und zwar unabhängig von der gerade in dem Monat gültigen Mwst. |
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 ;). |
Re: aktuelles Mwst.-Problem [SQL]
Schau' dir einmal die Union-Option bei SQL an.
;-) thomas |
Re: aktuelles Mwst.-Problem [SQL]
Zitat:
|
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. |
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 |
Re: aktuelles Mwst.-Problem [SQL]
Uff, rege Beteiligung. :mrgreen: Eine Mwst.-Tabelle ist natürlich vorhanden:
SQL-Code:
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 ?
CREATE TABLE MWST (
ID INTEGER NOT NULL, ABDATUM DATE, MWSTSATZ DECIMAL(15,2), ANGELEGT TIMESTAMP, LETZTEAENDERUNG TIMESTAMP ); |
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:
Aufruf: (korrigiert)
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
SQL-Code:
SELECT P.NETTO,GetBrutto(P.Rechnungsdatum, P.Netto, P.ID_Steuersatz) AS [Brutto] FROM Postitionen P
|
Re: aktuelles Mwst.-Problem [SQL]
Zitat:
|
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. |
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