![]() |
Re: aktuelles Mwst.-Problem [SQL]
SQL-Code:
Das ist jetzt stark verkürzt, aber der Hund ist da begraben. 8) Seltsamerweise ist noch folgender Effekt zu bemerken, wenn ich das Insert durch ein Update ersetze :
CREATE PROCEDURE KUARTSTATSP (
ID_KUNDE INTEGER, ID_ART INTEGER, MONAT SMALLINT, JAHR SMALLINT, MWSTSATZ SMALLINT, UMSATZ DECIMAL(15,2) AS DECLARE VARIABLE VAR_MWSTWERT DECIMAL(15,2); DECLARE VARIABLE VAR_UMSATZBRUTTO DECIMAL(15,2); begin SELECT MWSTWERT FROM MWSTWERTSP8 (:MWSTSATZ,:MONAT,:JAHR) INTO :VAR_MWSTWERT; VAR_UMSATZBRUTTO = :UMSATZ * (1 + VAR_MWSTWERT / 100); insert into KUARTSTAT8 (MONAT,JAHR,MWSTSATZ,ID_KUNDE,ID_ART,UMSATZ,UMSATZBRUTTO) values (:MONAT,:JAHR,:MWSTSATZ,:ID_KUNDE,:ID_ART,:UMSATZ,:VAR_UMSATZBRUTTO); end suspend; end
SQL-Code:
Sofern ich im Insert einen festen Wert einsetze, dann steht der drin. Nach dem Update ist er aber trotz BI-Trigger NULL. An dem Wert ist trotz (zwar vorhandenem) AU-Trigger nichts geändert worden.
update KUARTSTAT set UMSATZ=UMSATZ+ :UMSATZ,
UMSATZBRUTTO=UMSATZBRUTTO + :VAR_UMSATZBRUTTO, where (MONAT= :MONAT) and (JAHR= :JAHR) and (ID_ART= :ID_ART) and (ID_KUNDE= :ID_KUNDE); |
Re: aktuelles Mwst.-Problem [SQL]
Und noch ein kleiner Tipp zu Rundungsfehlern, die man immer berücksichtigen sollte:
Ein bestimmter Artikel kostet 3,33 EUR zzgl. 16%MwSt (0,53EUR MwSt) = 3,86 EUR Brutto Im Monat werden 100 Rechnungen mit diesem Artikel geschrieben. 100 * 3,86EUR = 386.00 EUR Wenn aber für alle 100 Artikel zuerst der Gesamt-Netto-Betrag berechnet wird ( = 333 EUR) und daraus die MwSt ( 53,28 EUR) berechnet wird, erhält man 386,28 EUR Da hat man also für 0,28 EUR weniger auf dem Konto, als man denkt ;-) Nur so zur Info. Gerd |
Re: aktuelles Mwst.-Problem [SQL]
Zitat:
|
Re: aktuelles Mwst.-Problem [SQL]
Hallo hansa,
der von dir gepostete code für die stored procedure KUARTSTATSP compiliert nicht und kann also nicht der bei dir funktionierende code sein. Aber das weißt du sicher und willst nur mal abwarten, ob es jemand merkt - stimmt's? Grüße vom marabu |
Re: aktuelles Mwst.-Problem [SQL]
Was soll das ? Ich poste absichtlich keinen Code der sich nicht mal compilieren läßt. Allerdings ist er ja verkürzt und da ist ganz klar zu sehen, daß hinter dem UMSATZ DECIMAL (15,2) eine ) fehlt !! Die vom Create. Habe das nicht gesehen, aber für DB-Profis dürfte das kein Hindernis sein. In der Fehlermeldung wird sogar auf das fehlende ) hingewiesen. 8)
|
Re: aktuelles Mwst.-Problem [SQL]
Hansa, das ist sehr nett von dir, dass du den Code um eine schließende Klammer kürzt, damit mein download schmaler wird. Hast auch gleich noch ein begin und ein paar weitere Zeilen weggelöscht. Das letzte mal, als du Hilfe gesucht hast, da lag der Fehler in dem Teil des codes, den wir nicht sehen konnten. Ich vermute, das du in den weggekürzten Zeilen die Variable Umsatz auf 0 setzt.
marabu |
Re: aktuelles Mwst.-Problem [SQL]
Hallo marabu,
ich würde es schade finden, wenn du dich durch Hansas arrogante Ansichten[1] hier fehl am Platz fühlen würdest. Mache es wie ich und ignoriere das einfach, du hast dich ja schon oft genug über ihn geärgert. ;) [1]Er denkt wirklich, dass seine 20 Zeilen PSQL so komplex sind, dass er ihn schützen muss :wall: Und er denkt wirklich, dass er sich proffessionell verhält... |
Re: aktuelles Mwst.-Problem [SQL]
Hi Robert. 8) Ignorieren ist für mich was anderes als hier rumzustänkern ! Damit meine ich jetzt Dich, sonst keinen !
Ich teste mit folgender Table :
SQL-Code:
Die aufrufende Prozedur ist die hier :
SET SQL DIALECT 3;
SET NAMES ISO8859_1; /******************************************************************************/ /**** Tables ****/ /******************************************************************************/ CREATE GENERATOR GEN_KUARTSTAT_ID; CREATE TABLE KUARTSTAT ( ID INTEGER NOT NULL, ID_KUNDE INTEGER NOT NULL, ID_ART INTEGER NOT NULL, MONAT SMALLINT NOT NULL, JAHR SMALLINT NOT NULL, MWSTSATZ SMALLINT, UMSATZ DECIMAL(15,2), UMSATZBRUTTO DECIMAL(15,2) ); /******************************************************************************/ /**** Unique Constraints ****/ /******************************************************************************/ ALTER TABLE KUARTSTAT ADD CONSTRAINT UNQ_KUARTSTAT UNIQUE (ID_KUNDE, ID_ART, MONAT, JAHR); /******************************************************************************/ /**** Primary Keys ****/ /******************************************************************************/ ALTER TABLE KUARTSTAT ADD CONSTRAINT PK_KUARTSTAT PRIMARY KEY (ID); /******************************************************************************/ /**** Foreign Keys ****/ /******************************************************************************/ ALTER TABLE KUARTSTAT ADD CONSTRAINT FK_ART_KUARTSTAT FOREIGN KEY (ID_ART) REFERENCES ART8 (ID) ON DELETE CASCADE; ALTER TABLE KUARTSTAT ADD CONSTRAINT FK_KUNDE_KUARTSTAT FOREIGN KEY (ID_KUNDE) REFERENCES KUNDE8 (ID) ON DELETE CASCADE; /******************************************************************************/ /**** Triggers ****/ /******************************************************************************/ SET TERM ^ ; /******************************************************************************/ /**** Triggers for tables ****/ /******************************************************************************/ /* Trigger: KUARTSTAT_BI0 */ CREATE TRIGGER KUARTSTAT_BI0 FOR KUARTSTAT ACTIVE BEFORE INSERT POSITION 0 as begin if (new.ID is null) then new.ID = gen_id(GEN_KUARTSTAT_ID, 1); if (NEW.UMSATZ IS NULL) then NEW.UMSATZ = 0; end ^
SQL-Code:
SET TERM ^ ;
CREATE PROCEDURE KUARTSTATSP ( ID_KUNDE INTEGER, ID_ART INTEGER, MONAT SMALLINT, JAHR SMALLINT, MWSTSATZ SMALLINT, UMSATZ DECIMAL(15,2)) AS DECLARE VARIABLE VAR_MWSTWERT DECIMAL(15,2); DECLARE VARIABLE VAR_UMSATZBRUTTO DECIMAL(15,2); begin SELECT MWSTWERT FROM MWSTWERTSP8 (:MWSTSATZ,:MONAT,:JAHR) INTO :VAR_MWSTWERT; VAR_UMSATZBRUTTO = :UMSATZ * (1 + VAR_MWSTWERT / 100); insert into KUARTSTAT (MONAT,JAHR,MWSTSATZ,ID_KUNDE,ID_ART,UMSATZ,UMSATZBRUTTO) values (:MONAT,:JAHR,:MWSTSATZ,:ID_KUNDE,:ID_ART,:UMSATZ,:VAR_UMSATZBRUTTO); suspend; end ^ SET TERM ; ^ Die Proc. innerhalb der SP ist die hier:
SQL-Code:
Thx an Alex, daß die tatsächlich geht. Die ermittelt die Mwst. abhängig vom Datum. Wer sieht jetzt da den Fehler ? Rumlamentieren hilft da jetzt eben nichts. 8)
SET TERM ^ ;
CREATE PROCEDURE MWSTWERTSP8 ( MONAT SMALLINT, JAHR SMALLINT, MWSTSATZ SMALLINT) RETURNS ( MWSTWERT NUMERIC(9,2)) AS DECLARE VARIABLE DATUM DATE; BEGIN DATUM = CAST('01.'|| MONAT || '.' || JAHR AS DATE); SELECT FIRST 1 MWSTWERT FROM MWST8 WHERE (MWSTSATZ=:MWSTSATZ) AND (ABDATUM <= :DATUM) ORDER BY ABDATUM DESC INTO :MWSTWERT; IF (MWSTSATZ is null) THEN MWSTSATZ = 0; SUSPEND; END ^ SET TERM ; ^ Edit 2 : Die Mwst.-Table fehlt noch :
SQL-Code:
Reicht das jetzt ? :mrgreen: Aber wie gesagt : vieles fehlt, was ich normalerweise noch brauche.
/******************************************************************************/
/**** Generated by IBExpert 08.09.2005 00:10:40 ****/ /******************************************************************************/ SET SQL DIALECT 3; SET NAMES ISO8859_1; /******************************************************************************/ /**** Tables ****/ /******************************************************************************/ CREATE GENERATOR GEN_MWST8_ID; CREATE TABLE MWST8 ( ID INTEGER NOT NULL, ABDATUM DATE, MWSTSATZ SMALLINT, MWSTWERT DECIMAL(15,2), ANGELEGT TIMESTAMP, LETZTEAENDERUNG TIMESTAMP ); /******************************************************************************/ /**** Triggers ****/ /******************************************************************************/ SET TERM ^ ; /******************************************************************************/ /**** Triggers for tables ****/ /******************************************************************************/ /* Trigger: MWST8_AUO */ CREATE TRIGGER MWST8_AUO FOR MWST8 ACTIVE AFTER UPDATE POSITION 0 as begin update MWST8 set LETZTEAENDERUNG = current_timestamp where (ID = old.ID) and ((LETZTEAENDERUNG is null) or (LETZTEAENDERUNG <> current_timestamp)); end ^ /* Trigger: MWST8_BI0 */ CREATE TRIGGER MWST8_BI0 FOR MWST8 ACTIVE BEFORE INSERT POSITION 0 as begin if (new.ID is null) then new.ID = gen_id(GEN_MWST8_ID, 1); if (new.angelegt is null) then new.ANGELEGT = current_timestamp; end ^ SET TERM ; ^ |
Re: aktuelles Mwst.-Problem [SQL]
Hallo Hansa,
relevant für deinen Fehler "VAR_UMSATZBRUTTO ist immer 0" ist von deinem Riesen-Posting nur die Prozedur KUARTSTATSP. Offensichtlich veränderst du die Variable Umsatz in dieser Prozedur nicht, so dass ich meinen Hinweis von weiter oben abändere und behaupte, dass dieser Parameter schon beim Aufruf mit 0 belegt ist. Wie sonst sollte die Berechnung innerhalb der Prozedur zum Ergebnis 0 kommen? marabu |
Re: aktuelles Mwst.-Problem [SQL]
Hallo Hansa,
ich kann mich nur nochmal wiederholen. Entferne die Doppelpunkte. Begründung siehe oben. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 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