Delphi-PRAXiS
Seite 3 von 4     123 4      

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 7. Sep 2005 15:08

Re: aktuelles Mwst.-Problem [SQL]
 
SQL-Code:
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
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 :

SQL-Code:
    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);
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.

bernau 7. Sep 2005 15:29

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

Hansa 7. Sep 2005 17:10

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

Zitat von bernau
...Nur so zur Info.

1+1=2 ? Jo, das weiß ich. :mrgreen: Das Problem ist damit aber nicht gelöst !

marabu 7. Sep 2005 19:33

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

Hansa 7. Sep 2005 20:32

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)

marabu 7. Sep 2005 20:54

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

Robert_G 7. Sep 2005 21:04

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...

Hansa 7. Sep 2005 23:03

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:
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
^
Die aufrufende Prozedur ist die hier :

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:
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 ; ^
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)

Edit 2 :

Die Mwst.-Table fehlt noch :

SQL-Code:
/******************************************************************************/
/****              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 ; ^
Reicht das jetzt ? :mrgreen: Aber wie gesagt : vieles fehlt, was ich normalerweise noch brauche.

marabu 8. Sep 2005 07:53

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

alex517 8. Sep 2005 10:15

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

ich kann mich nur nochmal wiederholen.
Entferne die Doppelpunkte. Begründung siehe oben.

Zitat:

hansa
SQL-Code:
CREATE PROCEDURE KUARTSTATSP ( 
...
  VAR_UMSATZBRUTTO = :UMSATZ * (1 + VAR_MWSTWERT / 100);
...
end

alex


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 Uhr.
Seite 3 von 4     123 4      

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