Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
Delphi XE5 Enterprise
|
Re: aktuelles Mwst.-Problem [SQL]
12. Aug 2005, 12:57
ich hab mal ein kleines Beispiel erstellt (IBExpert sein Dank).
Es wird in der Verkaufsdatei nur das aktuelle MWSt-Kennzeichen mit geführt.
NICHT die ID des MWSt-Datensatzes. In der MWSt-Datei können mehrere
Sätze mit dem gleichen Kennzeichen aber mit jeweils verschiedenen
Gültigkeitsdaten existieren. Die SP_GET_MWST gibt dann den jeweils
zum Verkaufstag gültigen MWSt-Satz passend zum Kz zurück.
alex
SQL-Code:
SET SQL DIALECT 3;
SET NAMES ISO8859_1;
CONNECT ' D:\TestDB\test_datenbank.fdb' USER ' SYSDBA' PASSWORD ' masterkey';
CREATE GENERATOR GEN_MWST_ID;
SET GENERATOR GEN_MWST_ID TO 5;
CREATE GENERATOR GEN_VERKAUF_ID;
SET GENERATOR GEN_VERKAUF_ID TO 0;
SET TERM ^ ;
CREATE PROCEDURE SP_GET_MWST (
KZ SMALLINT,
VK_DATUM DATE)
RETURNS (
MWSTSATZ DECIMAL(15,2))
AS
BEGIN
EXIT;
END^
SET TERM ; ^
CREATE TABLE MWST (
ID INTEGER NOT NULL,
KZ SMALLINT DEFAULT 0 NOT NULL,
ABDATUM DATE,
MWSTSATZ DECIMAL(15,2),
ANGELEGT TIMESTAMP,
LETZTEAENDERUNG TIMESTAMP
);
CREATE TABLE VERKAUF (
ID INTEGER NOT NULL,
ARTIKEL_ID INTEGER,
BEZ VARCHAR(50),
MWST_KZ SMALLINT,
VK_NETTO DECIMAL(15,2),
VK_DATUM DATE
);
INSERT INTO MWST (ID, KZ, ABDATUM, MWSTSATZ, ANGELEGT, LETZTEAENDERUNG) VALUES (1, 0, ' 1900-01-01', 0, NULL, NULL);
REINSERT (3, 2, ' 1900-01-01', 0.14, NULL, NULL);
REINSERT (2, 1, ' 1900-01-01', 0.07, NULL, NULL);
REINSERT (4, 2, ' 1998-04-01', 0.16, NULL, NULL);
COMMIT WORK;
INSERT INTO VERKAUF (ID, ARTIKEL_ID, BEZ, MWST_KZ, VK_NETTO, VK_DATUM) VALUES (1, 1, ' Teil1', 2, 40, ' 1996-05-25');
REINSERT (2, 333, ' Teil1', 2, 40, ' 2005-05-25');
REINSERT (3, 444, ' Teil2', 1, 100, ' 1996-05-25');
REINSERT (4, 44, ' Teil2', 1, 100, ' 1996-05-25');
COMMIT WORK;
ALTER TABLE MWST ADD CONSTRAINT PK_MWST PRIMARY KEY (ID);
ALTER TABLE VERKAUF ADD CONSTRAINT PK_VERKAUF PRIMARY KEY (ID);
SET TERM ^ ;
CREATE TRIGGER MWST_BI FOR MWST
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(GEN_MWST_ID,1);
END
^
CREATE TRIGGER VERKAUF_BI FOR VERKAUF
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(GEN_VERKAUF_ID,1);
END
^
SET TERM ; ^
SET TERM ^ ;
ALTER PROCEDURE SP_GET_MWST (
KZ SMALLINT,
VK_DATUM DATE)
RETURNS (
MWSTSATZ DECIMAL(15,2))
AS
BEGIN
SELECT FIRST 1
MWSTSATZ
FROM
MWST
WHERE
(KZ=:KZ) AND (ABDATUM <= :VK_DATUM)
ORDER BY
ABDATUM DESC
INTO
:MWSTSATZ;
IF (MWSTSATZ is null) then MWSTSATZ = 0;
SUSPEND;
END
^
SET TERM ; ^
Abfrage:
SQL-Code:
select V.*, M.MWSTSATZ, V.VK_NETTO*(1+M.MWSTSATZ) as Brutto
from
VERKAUF V
left JOIN SP_GET_MWST(V.MWST_KZ, V.VK_DATUM) M on (1=1)
Alexander
|