Einzelnen Beitrag anzeigen

Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#28

Re: aktuelles Mwst.-Problem [SQL]

  Alt 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
  Mit Zitat antworten Zitat