Входные параметры
Параметр  | Тип  | Описание  | 
|---|---|---|
DATE1  | 
    DATE  | 
    
  | 
  
DATE2  | 
    DATE  | 
    
  | 
  
PARTYID  | 
    INTEGER  | 
    
  | 
  
Выходные параметры
Параметр  | Тип  | Описание  | 
|---|---|---|
OUTCOMEWOWASTE  | 
    INTEGER  | 
    
  | 
  
OUTCOME  | 
    INTEGER  | 
    
  | 
  
INCOME  | 
    INTEGER  | 
    
  | 
  
CLASSNAME  | 
    VARCHAR(20)  | 
    
  | 
  
CROPNAME  | 
    VARCHAR(20)  | 
    
  | 
  
INCOMEAFTER  | 
    INTEGER  | 
    
  | 
  
OUTCOMEAFTER  | 
    INTEGER  | 
    
  | 
  
STORAGENAME  | 
    VARCHAR(100)  | 
    
  | 
  
Описание
(Нет описания для процедуры OBOROTSTORAGE)
Определение
CREATE PROCEDURE OBOROTSTORAGE(
    DATE1 DATE,
    DATE2 DATE,
    PARTYID INTEGER)
RETURNS (
    OUTCOMEWOWASTE INTEGER,
    OUTCOME INTEGER,
    INCOME INTEGER,
    CLASSNAME VARCHAR(20),
    CROPNAME VARCHAR(20),
    INCOMEAFTER INTEGER,
    OUTCOMEAFTER INTEGER,
    STORAGENAME VARCHAR(100))
AS
DECLARE VARIABLE OPERATIONID INTEGER;
DECLARE VARIABLE OPERATIONSUBTYPE INTEGER;
DECLARE VARIABLE REGDATE DATE;
DECLARE VARIABLE NET INTEGER;
DECLARE VARIABLE CLASSID INTEGER;
DECLARE VARIABLE STORAGEID INTEGER;
begin
for
SELECT Storage.Storagename, Crop.cropname, Class.Classname, Quality.classid, it.storageid
FROM IT
   LEFT OUTER JOIN QUALITY ON (IT.LABQUALITYID = Quality.QUALITYID)
   LEFT OUTER JOIN Operation ON (IT.operationid = operation.operationid)
   INNER JOIN CLASS ON (QUALITY.CLASSID = CLASS.CLASSID)
   INNER JOIN CROP ON (QUALITY.CROPID = CROP.CROPID)
   LEFT OUTER JOIN STORAGE ON (IT.STORAGEID = storage.STORAGEID)
   where Storage.storagetypeid = 1
   and IT.partyid = :partyid
   and it.state >= 0
   and it.net is not null and operation.operationsubtype IN (0,1)
   AND IT.REGDATE <= :DATE2 AND IT.NET <> 0
   and it.parentid >= 0
group by   storage.storagename, CROP.CROPNAME, CLASS.CLASSNAME, Quality.classid, it.storageid
into
  :storagename,
  :cropname,
  :classname,
  :classid,
  :storageid
  do
 begin
  income = 0;
  outcome =0;
  incomeafter = 0;
  outcomeafter =0;
  outcomeWOWaste = 0;
 for
  SELECT it.net, iT.regdate, operationsubtype, it.operationid
   FROM IT
   LEFT OUTER JOIN QUALITY ON (IT.LABQUALITYID = Quality.QUALITYID)
   LEFT OUTER JOIN STORAGE ON (IT.STORAGEID = storage.STORAGEID)
   LEFT OUTER JOIN Operation ON (IT.operationid = operation.operationid)
   where Storage.storagetypeid = 1 and IT.partyid = :partyid and it.state >= 0
   and  quality.classid = :classid and it.storageid = :storageid
   and it.net is not null and operation.operationsubtype IN (0,1)
   and it.parentid >= 0
   into
   :net,
   :regdate,
   :operationsubtype,
   :operationid
 do
 begin
  if (:regdate between :date1 and :date2 and :operationsubtype = 0) then income = :income + :net;
  if (:regdate between :date1 and :date2 and :operationsubtype = 1) then outcome = :outcome + :net;
  if (:REGDATE <= :date2 and :operationsubtype = 1) then outcomeafter = :outcomeafter + :net;
  if (:REGDATE <= :date2 and :operationsubtype = 0) then incomeafter = :incomeafter + :net;
  if (:REGDATE <= :date2 and :operationsubtype = 1 and :operationid <> 13) then outcomeWOWaste = :outcomeWOWaste + :net;
 end
  suspend;
 end
end
         
         
         
       |