Входные параметры
Параметр | Тип | Описание |
---|---|---|
DATE1 |
DATE |
|
STORAGEID |
INTEGER |
|
CROPID |
INTEGER |
|
STORINGID |
INTEGER |
|
SILAGEID |
INTEGER |
|
PARTY_ID |
INTEGER |
|
Выходные параметры
Параметр | Тип | Описание |
---|---|---|
RESULT |
NUMERIC(18,0) |
|
INCOMEDAY |
NUMERIC(18,0) |
|
OUTCOMEDAY |
NUMERIC(18,0) |
|
REMINDER |
NUMERIC(18,0) |
|
Описание
пока не используется
Определение
CREATE PROCEDURE CROPSTORINGREMINDER(
DATE1 DATE,
STORAGEID INTEGER,
CROPID INTEGER,
STORINGID INTEGER,
SILAGEID INTEGER,
PARTY_ID INTEGER)
RETURNS (
RESULT NUMERIC(18,0),
INCOMEDAY NUMERIC(18,0),
OUTCOMEDAY NUMERIC(18,0),
REMINDER NUMERIC(18,0))
AS
DECLARE VARIABLE WEIGHT NUMERIC(18,0);
DECLARE VARIABLE INCOME NUMERIC(18,0);
DECLARE VARIABLE STARTDATE DATE;
DECLARE VARIABLE OUTCOME NUMERIC(18,0);
DECLARE VARIABLE INCOMEBEFORE NUMERIC(18,0);
DECLARE VARIABLE OUTCOMEBEFORE NUMERIC(18,0);
BEGIN
if (:PARTY_ID = 0) then
begin
select parties.partyid from parties where parties.state = 1 and parties.storageid = :STORAGEID
into
:PARTY_ID;
end
income = 0 ;
outcome = 0;
select parties.begindate from parties where parties.partyid = :party_id
into :startdate;
SELECT SUM( IT.NET ) FROM IT
Left join operation on (it.operationid = operation.operationid)
WHERE operation.operationsubtype = 3
and IT.LabQualityid in (select qualityid from quality where cropid = :cropid)
and IT.Partyid = :party_id
and IT.storageid = :storageid
and ((it.storingid = :storingid) or (:storingid = 0))
and IT.State >= 0
and it.parentid >= 0
and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
INTO :Result;
if (:Result is null) then Result = 0;
SELECT SUM( IT.NET ) FROM IT
Left join operation on (it.operationid = operation.operationid)
WHERE operation.operationsubtype = 0
and IT.RegDATE = :startdate
and IT.LabQualityid in (select qualityid from quality where cropid = :cropid)
and IT.Partyid = :party_id
and ((it.storingid = :storingid) or (:storingid = 0))
and IT.storageid = :storageid
and IT.State >= 0
and it.parentid >= 0
and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
INTO :incomebefore;
if (:incomebefore is null) then
incomebefore = 0;
SELECT SUM( IT.NET ) FROM IT
Left join operation on (it.operationid = operation.operationid)
WHERE operation.operationsubtype = 0
and IT.RegDATE = :date1
and IT.LabQualityid in (select qualityid from quality where cropid = :cropid)
and IT.Partyid = :party_id
and IT.storageid = :storageid
and ((it.storingid = :storingid) or (:storingid = 0))
and IT.State >= 0
and it.parentid >= 0
and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
INTO :incomeday;
SELECT SUM( IT.NET ) FROM IT
Left join operation on (it.operationid = operation.operationid)
WHERE operation.operationsubtype = 1
and IT.RegDATE = :date1
and IT.LabQualityid in (select qualityid from quality where cropid = :cropid)
and IT.Partyid = :party_id
and IT.storageid = :storageid
and ((it.storingid = :storingid) or (:storingid = 0))
and IT.State >= 0
and it.parentid >= 0
and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
INTO :outcomeday;
SELECT SUM( IT.NET ) FROM IT
Left join operation on (it.operationid = operation.operationid)
WHERE operation.operationsubtype = 1
and IT.RegDATE = :startdate
and IT.LabQualityid in (select qualityid from quality where cropid = :cropid)
and IT.Partyid = :party_id
and it.regdate = :startdate
and IT.storageid = :storageid
and ((it.storingid = :storingid) or (:storingid = 0))
and it.state >= 0
and it.parentid >= 0
and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
INTO :outcomebefore;
if (:outcomebefore is null) then
outcomebefore = 0;
while ((:startdate <= :date1)) do begin
SELECT SUM( IT.NET ) FROM IT
Left join operation on (it.operationid = operation.operationid)
WHERE operation.operationsubtype = 0
and IT.RegDATE = :startdate
and IT.LabQualityid in (select qualityid from quality where cropid = :cropid)
and IT.Partyid = :party_id
and IT.storageid = :storageid
and ((it.storingid = :storingid) or (:storingid = 0))
and IT.State >= 0
and it.parentid >= 0
and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
INTO :weight;
if (not :weight is null) then
income = :income + :weight;
SELECT SUM( IT.NET ) FROM IT
Left join operation on (it.operationid = operation.operationid)
WHERE operation.operationsubtype = 1
and IT.RegDATE = :startdate
and IT.LabQualityid in (select qualityid from quality where cropid = :cropid)
and IT.Partyid = :party_id
and IT.storageid = :storageid
and ((it.storingid = :storingid) or (:storingid = 0))
and it.state >= 0
and it.parentid >= 0
and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
INTO :weight;
if (not :weight is null) then
outcome = :outcome + :weight;
result = :result + (:income - :outcome);
startdate = :startdate + 1;
end
result = :result - (:incomebefore - :outcomebefore);
reminder = :income - :outcome;
SUSPEND;
END