Код: Выделить всё
REATE PROCEDURE GET_ALL_DATE_SUM (
FIRM INTEGER,
SOME_CUR NUMERIC(16,4))
RETURNS (
DOC_ID INTEGER,
DOC_TO_ID INTEGER,
DOC_USER_ID INTEGER,
DOC_TYPE INTEGER,
DOC_SUM NUMERIC(16,4),
OT_SUM NUMERIC(16,4),
OT_DATE DATE,
OPL_SUM NUMERIC(16,4),
OPL_DATE DATE,
END_DATE DATE,
DOC_AGENT VARCHAR(100),
DOC_NO VARCHAR(32),
THE_DATE DATE,
DOC_CUR_ID INTEGER,
DOC_CUR_VAL NUMERIC(16,4),
OLD_END_DATE DATE)
AS
begin
FOR SELECT DISTINCT i.id, i.TO_ID, i.USER_ID, i.DOC_TYPE, cast((i.doc_sum*i.currency_value) as numeric(16,2)) r_sum, cast(ot.DOC_SUM as numeric(16,2)), ot.THE_DATE, cast(opl.DOC_SUM as numeric(16,2)), opl.THE_DATE, i.DOC_NO, i.THE_DATE, i.CURRENCY_ID, i.CURRENCY_VALUE,i.END_date
FROM invoices i, pid p, GET_DOC_SUM_SEB ot, GET_DOC_SUM_SEB_OPL opl
WHERE i.interval_id <> 9000
AND i.doc_type in (1, 5, 11)
AND ot.PARENT_ID=i.id
AND i.CURRENCY_ID = 1
AND opl.PARENT_ID=i.id
AND p.pid=i.id
AND i.from_id in (SELECT id FROM customer WHERE type_id=1 AND firm = :firm)
UNION ALL
SELECT DISTINCT i.id, i.TO_ID, i.USER_ID, i.DOC_TYPE, cast((i.doc_sum*:SOME_CUR) as numeric(16,2)) r_sum, cast(ot.DOC_SUM as numeric(16,2)), ot.THE_DATE, cast(opl.DOC_SUM as numeric(16,2)), opl.THE_DATE, i.DOC_NO, i.THE_DATE, i.CURRENCY_ID, i.CURRENCY_VALUE,i.END_date
FROM invoices i, pid p, GET_DOC_SUM_SEB ot, GET_DOC_SUM_SEB_OPL opl
WHERE i.interval_id <> 9000
AND i.doc_type in (1, 5, 11)
AND ot.PARENT_ID=i.id
AND i.CURRENCY_ID <> 1
AND opl.PARENT_ID=i.id
AND p.pid=i.id
AND i.from_id in (SELECT id FROM customer WHERE type_id=1 AND firm = :firm)
INTO :DOC_ID, :DOC_TO_ID, :DOC_USER_ID, :DOC_TYPE, :DOC_SUM, :OT_SUM, :OT_DATE, :OPL_SUM, :OPL_DATE, :DOC_NO, :THE_DATE, :DOC_CUR_ID, :DOC_CUR_VAL,:OLD_END_DATE
DO BEGIN
END_DATE=null ;
if ((OT_SUM = OPL_SUM) AND (OT_SUM = DOC_SUM) AND (DOC_SUM = OPL_SUM)) then
begin
if(OT_DATE > OPL_DATE) then END_DATE = OT_DATE;
else END_DATE = OPL_DATE;
end
suspend;
END
/* Procedure Text */
end