MisiekD, jesteś WIELKI. Dziękuję za te niezwykle cenne wskazówki. Zmodyfikowałem Twój kod do potrzeb i .... Naprawdę dziękuję. Jak wyskrobię kod do końca to wkleję.
Jak obieałem
CREATE TABLE SuspensionCase (
IDSuspensionCase INTEGER NOT NULL,
/* Podatnik */
TaxPayerID INTEGER NOT NULL,
/* Typ podatku */
TaxID INTEGER NOT NULL,
/* Księgowa */
AccountantID INTEGER NOT NULL,
/* Status sprawy: */
/* - 0 :przedawnienie */
/* - 1 :zapłacone */
/* - 2 :zaległość */
CaseStatus SMALLINT,
/* Tytuł wykonawczy */
/* - 0 :jest */
/* - 1 :nie ma */
ExecuteStatus SMALLINT,
/* Kwota zaległości zł.gr */
Amount FLOAT,
/* Okres przedawnienia w formacie MM/RRRR */
Term DATE,
/* Okres zawieszenia */
Period SMALLINT,
/* Data rozpoczęcia postępowania */
BeginDate DATE,
/* Status wykonania postępowania */
/* - 0 :w trakcie */
/* - 1 :zakończona */
Completed SMALLINT,
PRIMARY KEY (IDSuspensionCase),
FOREIGN KEY (TaxPayerID) REFERENCES TaxPayer(IDTaxPayer),
FOREIGN KEY (TaxID) REFERENCES Tax(IDTax),
FOREIGN KEY (AccountantID) REFERENCES Accountant(IDAccountant)
);
CREATE TABLE Suspension (
IDSuspension INTEGER NOT NULL,
SuspensionCaseID INTEGER,
FromDate DATE,
ToDate DATE,
PRIMARY KEY (IDSuspension),
FOREIGN KEY (SuspensionCaseID) REFERENCES SuspensionCase(IDSuspensionCase)
);
AS
DECLARE VARIABLE tmpDays INTEGER;
DECLARE VARIABLE tmpEndDate DATE;
DECLARE VARIABLE tmpFromDate DATE;
DECLARE VARIABLE tmpToDate DATE;
BEGIN
FOR SELECT
SuspensionCase.IDSuspensionCase,
SuspensionCase.TaxPayerID,
SuspensionCase.TaxID,
SuspensionCase.AccountantID,
SuspensionCase.CaseStatus,
CAST(SuspensionCase.Amount AS NUMERIC(18,2)) AS Amount,
SuspensionCase.ExecuteStatus,
SuspensionCase.Term,
SuspensionCase.Period,
SuspensionCase.BeginDate,
DATEADD(Period YEAR TO BeginDate),
SuspensionCase.Completed,
Tax.IDTax,
Tax.TaxName,
Accountant.IDAccountant,
Accountant.AccountantName
FROM SuspensionCase
INNER JOIN Tax ON Tax.IDTax = SuspensionCase.TaxID
INNER JOIN Accountant ON Accountant.IDAccountant = SuspensionCase.AccountantID
INTO
:IDSuspensionCase,
:TaxPayerID,
:TaxID,
:AccountantID,
:CaseStatus,
:Amount,
:ExecuteStatus,
:Term,
:Period,
:BeginDate,
:tmpEndDate,
:Completed,
:IDTax,
:TaxName,
:IDAccountant,
:AccountantName
DO BEGIN
tmpDays = 0;
FOR SELECT FromDate, ToDate FROM Suspension
WHERE Suspension.SuspensionCaseID = :IDSuspensionCase
INTO :tmpFromDate, :tmpToDate
DO BEGIN
IF ((EndDate < tmpFromDate) OR (BeginDate > tmpToDate)) THEN
BEGIN
tmpDays = tmpDays + 0;
END ELSE
IF (BeginDate BETWEEN tmpFromDate AND tmpToDate) THEN
BEGIN
tmpDays = tmpDays + DATEDIFF(DAY, BeginDate, tmpToDate);
END ELSE
IF (tmpEndDate BETWEEN tmpFromDate AND tmpToDate) THEN
BEGIN
tmpDays = tmpDays + DATEDIFF(DAY, tmpEndDate, tmpToDate);
END ELSE
BEGIN
tmpDays = tmpDays + DATEDIFF(DAY, tmpFromDate, tmpToDate);
END
END
EndDate = DATEADD(tmpDays+1 DAY TO tmpEndDate);
SUSPEND;
END
END
Ostatnie skompilowanie i działa. Misiek, naprawdę dziękuję.