Входные параметры
Параметр  | Тип  | Описание  | 
|---|---|---|
DATE1  | 
    DATE  | 
    
  | 
  
DATE2  | 
    DATE  | 
    
  | 
  
STORING  | 
    SMALLINT  | 
    
  | 
  
STORAGEID  | 
    INTEGER  | 
    
  | 
  
ISSTORAGENULL  | 
    INTEGER  | 
    
  | 
  
PARTYID  | 
    INTEGER  | 
    
  | 
  
Выходные параметры
Параметр  | Тип  | Описание  | 
|---|---|---|
OTHEROUTCOME  | 
    NUMERIC(15,3)  | 
    
  | 
  
CROPNAME  | 
    VARCHAR(10)  | 
    
  | 
  
OUTCOME  | 
    NUMERIC(15,3)  | 
    
  | 
  
OUTCOME_WEIGHT  | 
    NUMERIC(15,3)  | 
    
  | 
  
OUTCOMEOUT  | 
    NUMERIC(15,3)  | 
    
  | 
  
OUTCOMEKZ  | 
    NUMERIC(15,3)  | 
    
  | 
  
OUTCOMEM3  | 
    NUMERIC(15,3)  | 
    
  | 
  
OUTCOMEM2  | 
    NUMERIC(15,3)  | 
    
  | 
  
OUTCOMEM1  | 
    NUMERIC(15,3)  | 
    
  | 
  
OUTCOMEBEFORE  | 
    NUMERIC(15,3)  | 
    
  | 
  
OUTCOMEBEFORE_WEIGHT  | 
    NUMERIC(15,3)  | 
    
  | 
  
INCOMEBEFORE  | 
    NUMERIC(15,3)  | 
    
  | 
  
INCOMEBEFORE_WEIGHT  | 
    NUMERIC(15,3)  | 
    
  | 
  
OTHERINCOME  | 
    NUMERIC(15,3)  | 
    
  | 
  
OTHERINCOME_WEIGHT  | 
    NUMERIC(15,3)  | 
    
  | 
  
ZDINCOME  | 
    NUMERIC(15,3)  | 
    
  | 
  
ZDINCOME_WEIGHT  | 
    NUMERIC(15,3)  | 
    
  | 
  
AVTOINCOME  | 
    NUMERIC(15,3)  | 
    
  | 
  
AVTOINCOME_WEIGHT  | 
    NUMERIC(15,3)  | 
    
  | 
  
CROPCLASS  | 
    VARCHAR(41)  | 
    
  | 
  
SORTNAME  | 
    VARCHAR(30)  | 
    
  | 
  
Описание
Движение зерна на элеваторе
Определение
CREATE PROCEDURE GRAINMOVEMENT(
    DATE1 DATE,
    DATE2 DATE,
    STORING SMALLINT,
    STORAGEID INTEGER,
    ISSTORAGENULL INTEGER,
    PARTYID INTEGER)
RETURNS (
    OTHEROUTCOME NUMERIC(15,3),
    CROPNAME VARCHAR(10),
    OUTCOME NUMERIC(15,3),
    OUTCOME_WEIGHT NUMERIC(15,3),
    OUTCOMEOUT NUMERIC(15,3),
    OUTCOMEKZ NUMERIC(15,3),
    OUTCOMEM3 NUMERIC(15,3),
    OUTCOMEM2 NUMERIC(15,3),
    OUTCOMEM1 NUMERIC(15,3),
    OUTCOMEBEFORE NUMERIC(15,3),
    OUTCOMEBEFORE_WEIGHT NUMERIC(15,3),
    INCOMEBEFORE NUMERIC(15,3),
    INCOMEBEFORE_WEIGHT NUMERIC(15,3),
    OTHERINCOME NUMERIC(15,3),
    OTHERINCOME_WEIGHT NUMERIC(15,3),
    ZDINCOME NUMERIC(15,3),
    ZDINCOME_WEIGHT NUMERIC(15,3),
    AVTOINCOME NUMERIC(15,3),
    AVTOINCOME_WEIGHT NUMERIC(15,3),
    CROPCLASS VARCHAR(41),
    SORTNAME VARCHAR(30))
AS
DECLARE VARIABLE WEIGHT INTEGER;
DECLARE VARIABLE OPERATIONID SMALLINT;
DECLARE VARIABLE PROVIDERID INTEGER;
DECLARE VARIABLE OPERATIONSUBTYPE SMALLINT;
DECLARE VARIABLE NET INTEGER;
DECLARE VARIABLE REGDATE DATE;
DECLARE VARIABLE TRANSPORTTYPEID SMALLINT;
DECLARE VARIABLE CLASSID SMALLINT;
DECLARE VARIABLE SORTID INTEGER;
begin
/* if (:isstoragenull = 0) then storageid = null;
 for
   select  crop.cropname|| ' ' || class.classname, class.classid, crop.cropname, quality.sortid, cropsort.sortname
   from it
     left join quality on (it.samplerqualityid = quality.qualityid)
     left join class on (quality.classid = class.classid)
     left join operation on (it.operationid = operation.operationid)
     left join cropsort on (quality.sortid = cropsort.sortid)
     left join crop on (quality.cropid = crop.cropid)
     left join storage on (it.storageid = storage.storageid)
   where crop.croptypeid = 1
     and It.partyid = :partyid
     and (it.storageid = :storageid or (:storageid is null and storage.storagetypeid = 1))
     and it.state >= 0
     and it.parentid >= 0
     and ((it.storingid <> 1 or it.storingid is null) or (:storing = 1))
     and it.net is not null
     and operation.operationsubtype IN (0,1)
   group by crop.cropname, class.classname, class.classid, quality.sortid, cropsort.sortname
   into
    :cropclass,
    :classid,
    :cropname,
    :sortid,
    :sortname
  do begin
    OUTCOME = 0;
    OUTCOME_WEIGHT = 0;
    OUTCOMEOUT = 0;
    OUTCOMEKZ = 0;
    OUTCOMEM3 = 0;
    OUTCOMEM2 = 0;
    OUTCOMEM1 = 0;
    OUTCOMEBEFORE = 0;
    Outcomebefore_Weight = 0;
    INCOMEBEFORE = 0;
    INCOMEBEFORE_Weight = 0;
    OTHERINCOME = 0;
    OTHERINCOME_Weight = 0;
    ZDINCOME = 0;
    ZDINCOME_Weight = 0;
    AVTOINCOME = 0;
    AVTOINCOME_Weight = 0;
    otheroutcome = 0;
    for
      select  it.net, ittransport.transporttypeid, it.operationid, it.regdate, operation.operationsubtype,
        clients.storageid as providerid, it.weight
      from IT
        left join quality on (it.samplerqualityid = quality.qualityid)
        left join operation on (it.operationid = operation.operationid)
        inner join crop on (quality.cropid = crop.cropid)
        left join clients on (it.providerid = clients.clientid)
        left join storage on (it.storageid = storage.storageid)
        left join ittransport on (it.inventoryid = ittransport.inventoryid)
      where crop.croptypeid = 1
        and it.partyid = :partyid
        and (it.storageid = :storageid or (:storageid is null and storage.storagetypeid = 1))
        and quality.classid = :classid
        and IT.State >= 0
        and ((quality.sortid = :sortid) or ((:sortid is null) and (quality.sortid is null)))
        and ((it.storingid <> 1 or it.storingid is null) or (:storing = 1))
        and it.net is not null
        and it.parentid >= 0
        and operation.operationsubtype in (0,1)
      into
        :net,
        :transporttypeid,
        :operationid,
        :regdate,
        :operationsubtype,
        :providerid,
        :weight
    do begin
      if (:regdate between :date1 and :date2 and :transporttypeid in (0,1) and :operationsubtype = 0) then begin
        avtoincome = :avtoincome + :net;
        AVTOINCOME_Weight = :AVTOINCOME_Weight + :weight;
      end
      if (:regdate between :date1 and :date2 and :transporttypeid = 2 and :operationsubtype = 0) then begin
        zdincome = :zdincome + :net;
        ZDINCOME_Weight = :ZDINCOME_Weight + :weight;
      end
      if (:regdate between :date1 and :date2  and :operationid in (4,17,32)) then begin
        otherincome = :otherincome + :net;
        otherincome_weight = :otherincome_weight + :weight;
      end
      if (:regdate < :date1 and :operationsubtype = 0) then begin
        incomebefore = :incomebefore + :net;
        incomebefore_Weight = :incomebefore_Weight + :weight;
      end
      if (:regdate < :date1 and :operationsubtype = 1) then begin
        outcomebefore = :outcomebefore + :net;
       if (:operationid in (9, 13)) then begin
         if (:weight > 0) then Outcomebefore_Weight = :Outcomebefore_Weight + :weight;
         else Outcomebefore_Weight = :Outcomebefore_Weight - :weight;
       end
       else begin
         Outcomebefore_Weight = :Outcomebefore_Weight + :weight;
       end
      end
      if (:providerid = 3 and :operationsubtype = 1 and :regdate between :date1 and :date2) then
        outcomeM1 = :outcomem1 + :net;
      if (:providerid = 4 and :operationsubtype = 1 and :regdate between :date1 and :date2) then
        outcomeM2 = :outcomem2 + :net;
      if (:providerid = 5 and :operationsubtype = 1 and :regdate between :date1 and :date2) then
        outcomeM3 = :outcomem3 + :net;
      if (:operationid = 30 and :regdate between :date1 and :date2) then
        outcomekz = :outcomekz + :net;
      if (:operationid = 5  and :regdate between :date1 and :date2) then
        Outcomeout = :Outcomeout + :net;
      if (:operationsubtype = 1  and :regdate between :date1 and :date2) then begin
       Outcome = :Outcome + :net;
       if (:operationid in (9,13)) then begin
         if (:weight > 0) then Outcome_Weight = :Outcome_Weight + :weight;
         else Outcome_Weight = :Outcome_Weight - :weight;
       end
       else begin
         Outcome_Weight = :Outcome_Weight + :weight;
       end
      end
      if (:operationid in (22,23,24,25,9,13,46)  and :regdate between :date1 and :date2) then
      begin
        if (:operationid in (13,22,23,24,25,46)) then
          otherOutcome = :otherOutcome + :net;
        else
          otherOutcome = :otherOutcome + :weight * -1;
      end
    end
    OUTCOME = :OUTCOME/1000;
    outcome_weight = :outcome_weight/1000;
    OUTCOMEOUT = :OUTCOMEOUT/1000;
    OUTCOMEKZ = :OUTCOMEKZ/1000;
    OUTCOMEM3 = :OUTCOMEM3/1000;
    OUTCOMEM2 = :OUTCOMEM2/1000;
    OUTCOMEM1 = :OUTCOMEM1/1000;
    OUTCOMEBEFORE = :OUTCOMEBEFORE/1000;
    Outcomebefore_Weight = :Outcomebefore_Weight / 1000;
    INCOMEBEFORE = :INCOMEBEFORE/1000;
    INCOMEBEFORE_Weight = :INCOMEBEFORE_Weight/1000;
    OTHERINCOME = :OTHERINCOME/1000;
    otherincome_weight = :otherincome_weight/1000;
    ZDINCOME = :ZDINCOME/1000;
    ZDINCOME_Weight = :ZDINCOME_Weight/1000;
    AVTOINCOME = :AVTOINCOME/1000;
    AVTOINCOME_Weight = :AVTOINCOME_Weight / 1000;
    otheroutcome = :otheroutcome /1000;
    suspend;
  end*/
END
         
         
         
       |