Входные параметры
Параметр  | Тип  | Описание  | 
|---|---|---|
OWNERID  | 
    INTEGER  | 
    
  | 
  
STORINGID  | 
    INTEGER  | 
    
  | 
  
CONTRACTID  | 
    INTEGER  | 
    
  | 
  
STORAGEID  | 
    INTEGER  | 
    
  | 
  
CLASSID  | 
    INTEGER  | 
    
  | 
  
DATE1  | 
    DATE  | 
    
  | 
  
SILAGEID  | 
    INTEGER  | 
    
  | 
  
PARTY_ID  | 
    INTEGER  | 
    
  | 
  
PARTYDATE  | 
    DATE  | 
    
  | 
  
DOCROP  | 
    SMALLINT  | 
    
  | 
  
Выходные параметры
Параметр  | Тип  | Описание  | 
|---|---|---|
RESULT  | 
    NUMERIC(18,0)  | 
    
  | 
  
INCOMEDAY  | 
    NUMERIC(18,0)  | 
    
  | 
  
OUTCOMEDAY  | 
    NUMERIC(18,0)  | 
    
  | 
  
REMINDER  | 
    NUMERIC(18,0)  | 
    
  | 
  
Описание
Хранящийся остаток для формы 36 по клинету
Определение
CREATE PROCEDURE COMMONSTORINGREMINDERWEIGHT(
    OWNERID INTEGER,
    STORINGID INTEGER,
    CONTRACTID INTEGER,
    STORAGEID INTEGER,
    CLASSID INTEGER,
    DATE1 DATE,
    SILAGEID INTEGER,
    PARTY_ID INTEGER,
    PARTYDATE DATE,
    DOCROP SMALLINT)
RETURNS (
    RESULT NUMERIC(18,0),
    INCOMEDAY NUMERIC(18,0),
    OUTCOMEDAY NUMERIC(18,0),
    REMINDER NUMERIC(18,0))
AS
DECLARE VARIABLE STARTDATE DATE;
DECLARE VARIABLE INCOME NUMERIC(18,0);
DECLARE VARIABLE OUTCOME NUMERIC(18,0);
DECLARE VARIABLE WEIGHT NUMERIC(18,0);
DECLARE VARIABLE INCOMEBEFORE NUMERIC(18,0);
DECLARE VARIABLE OUTCOMEBEFORE NUMERIC(18,0);
DECLARE VARIABLE CROPID INTEGER;
BEGIN
  income = 0 ;
  outcome = 0;
  result = 0;
  if (:docrop = 0) then
  begin
    select cropid from class where class.classid = :CLASSID into
    :CROPID;
  end
  else
    cropid = :classid;
  select parties.begindate
  from parties
  where parties.partyid =  (select partyid from getworkparties(:PARTY_ID,:PARTYDATE, :cropid, :classid, :storageid))
  into :startdate;
    SELECT coalesce(SUM(IT.weight),0)
    FROM IT
     join GetWorkParties(:PARTY_ID,:PARTYDATE, :cropid, :classid, :storageid)
       on (IT.PartyID = GetWorkParties.PartyID)
      LEFT JOIN OPERATION ON (IT.OPERATIONID = OPERATION.OPERATIONID)
      left join quality on (IT.LABQUALITYID = QUALITY.QUALITYID)
    WHERE
      ((quality.classid = :classid and :docrop = 0) or (quality.cropid = :classid and :docrop = 1))
      and (IT.Storingid = :storingid or :storingid=0)
      and IT.Ownerid = :ownerid
      and (IT.storageid = :storageid or :storageid = 0)
      and it.state >= 0
      and it.parentid >= 0
      and (IT.contractid = :contractid or :contractid=0)
      and operation.operationsubtype = 3
      and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
    INTO :result;
    if (:result is null) then result = 0;
    SELECT coalesce(SUM(IT.weight),0)
    FROM IT
      join GetWorkParties(:PARTY_ID,:PARTYDATE, :cropid, :classid, :storageid)
        on (IT.PartyID = GetWorkParties.PartyID)
      LEFT JOIN OPERATION ON (IT.OPERATIONID = OPERATION.OPERATIONID)
      left join quality on (IT.LABQUALITYID = QUALITY.QUALITYID)
    WHERE  IT.RegDATE = :date1 and
      ((quality.classid = :classid and :docrop = 0) or (quality.cropid = :classid and :docrop = 1))
      and (IT.Storingid = :storingid or :storingid=0)
      and IT.Ownerid = :ownerid
      and (IT.storageid = :storageid or :storageid = 0)
      and it.parentid >= 0
      and it.state >= 0
      and (IT.contractid = :contractid or :contractid=0)
      and operation.operationsubtype = 0
      and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
    INTO :incomeday;
    SELECT coalesce(SUM(IT.weight),0)
    FROM IT
     join GetWorkParties(:PARTY_ID,:PARTYDATE, :cropid, :classid, :storageid)
       on (IT.PartyID = GetWorkParties.PartyID)
    left join quality on (IT.LABQUALITYID = QUALITY.QUALITYID)
    LEFT JOIN OPERATION ON (IT.OPERATIONID = OPERATION.OPERATIONID)
    WHERE  IT.RegDATE = :date1 and
      ((quality.classid = :classid and :docrop = 0) or (quality.cropid = :classid and :docrop = 1))
      and (IT.Storingid = :storingid or :storingid=0)
      and IT.Ownerid = :ownerid
      and (IT.storageid = :storageid or :storageid = 0)
      and it.parentid >= 0
      and it.state >= 0
      and (IT.contractid = :contractid or :contractid=0)
      and operation.operationsubtype = 1
      and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
    INTO :outcomeday;
    SELECT coalesce(SUM(IT.weight),0)
    FROM IT
     join GetWorkParties(:PARTY_ID,:PARTYDATE, :cropid, :classid, :storageid)
       on (IT.PartyID = GetWorkParties.PartyID)
      left join quality on (IT.LABQUALITYID = QUALITY.QUALITYID)
      LEFT JOIN OPERATION ON (IT.OPERATIONID = OPERATION.OPERATIONID)
    WHERE  IT.RegDATE = :startdate and
      ((quality.classid = :classid and :docrop = 0) or (quality.cropid = :classid and :docrop = 1))
      and (IT.Storingid = :storingid or :storingid=0)
      and IT.Ownerid = :ownerid
      and (IT.storageid = :storageid or :storageid = 0)
      and it.parentid >= 0
      and it.state >= 0
      and (IT.contractid = :contractid or :contractid=0)
      and operation.operationsubtype = 0
      and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
    INTO :incomebefore;
    SELECT coalesce(SUM(IT.weight),0)
    FROM IT
     join GetWorkParties(:PARTY_ID,:PARTYDATE, :cropid, :classid, :storageid)
       on (IT.PartyID = GetWorkParties.PartyID)
      left join quality on (IT.LABQUALITYID = QUALITY.QUALITYID)
      LEFT JOIN OPERATION ON (IT.OPERATIONID = OPERATION.OPERATIONID)
    WHERE  IT.RegDATE = :startdate and
      ((quality.classid = :classid and :docrop = 0) or (quality.cropid = :classid and :docrop = 1))
      and (IT.Storingid = :storingid or :storingid=0)
      and IT.Ownerid = :ownerid
      and (IT.storageid = :storageid or :storageid = 0)
      and it.parentid >= 0
      and it.state >= 0
      and (IT.contractid = :contractid or :contractid=0)
      and operation.operationsubtype = 1
      and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
    INTO :outcomebefore;
   while (:startdate <= :date1) do begin
    SELECT coalesce(SUM(IT.weight),0)
    FROM IT
     join GetWorkParties(:PARTY_ID,:PARTYDATE, :cropid, :classid, :storageid)
       on (IT.PartyID = GetWorkParties.PartyID)
      left join quality on (IT.LABQUALITYID = QUALITY.QUALITYID)
      LEFT JOIN OPERATION ON (IT.OPERATIONID = OPERATION.OPERATIONID)
    WHERE  IT.RegDATE = :startdate and
      ((quality.classid = :classid and :docrop = 0) or (quality.cropid = :classid and :docrop = 1))
      and (IT.Storingid = :storingid or :storingid=0)
      and IT.Ownerid = :ownerid
      and it.parentid >= 0
      and (IT.storageid = :storageid or :storageid = 0)
      and it.state >= 0
      and (IT.contractid = :contractid or :contractid=0)
      and operation.operationsubtype = 0
      and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
    INTO :weight;
    income = :income + :weight;
    SELECT coalesce(SUM(weight),0)
    FROM IT
     join GetWorkParties(:PARTY_ID,:PARTYDATE, :cropid, :classid, :storageid)
       on (IT.PartyID = GetWorkParties.PartyID)
      LEFT JOIN OPERATION ON (IT.OPERATIONID = OPERATION.OPERATIONID)
      left join quality on (IT.LABQUALITYID = QUALITY.QUALITYID)
    WHERE  IT.RegDATE = :startdate and
      ((quality.classid = :classid and :docrop = 0) or (quality.cropid = :classid and :docrop = 1))
      and (IT.Storingid = :storingid or :storingid=0)
      and it.parentid >= 0
      and it.state >= 0
      and IT.Ownerid = :ownerid
      and (IT.storageid = :storageid or :storageid = 0)
      and (IT.contractid = :contractid or :contractid=0)
      and operation.operationsubtype = 1 and operation.operationtype <> 2
      and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
    INTO :weight;
    outcome = :outcome + :weight;
    SELECT coalesce(SUM(-weight),0)
    FROM IT
     join GetWorkParties(:PARTY_ID,:PARTYDATE, :cropid, :classid, :storageid)
       on (IT.PartyID = GetWorkParties.PartyID)
      LEFT JOIN OPERATION ON (IT.OPERATIONID = OPERATION.OPERATIONID)
      left join quality on (IT.LABQUALITYID = QUALITY.QUALITYID)
    WHERE  iT.RegDATE = :startdate and
      ((quality.classid = :classid and :docrop = 0) or (quality.cropid = :classid and :docrop = 1))
      and (IT.Storingid = :storingid or :storingid=0)
      and it.parentid >= 0
      and it.state >= 0
      and IT.Ownerid = :ownerid
      and (IT.storageid = :storageid or :storageid = 0)
      and (IT.contractid = :contractid or :contractid=0)
      and operation.operationtype = 2
      and ((it.silageid = :SILAGEID) or (:SILAGEID = 0))
    INTO :weight;
    outcome = :outcome + :weight;
    startdate = :startdate + 1;
    result = result + (:income - :outcome);
  end
   result = :result - (:incomebefore - :outcomebefore);
   reminder = :income - :outcome;
  SUSPEND;
END
         
         
         
       |