Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
Delphi 8 Professional
|
Re: aktuelles Mwst.-Problem [SQL]
8. Sep 2005, 00:03
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 ? Aber wie gesagt : vieles fehlt, was ich normalerweise noch brauche.
Gruß
Hansa
|