Входные параметры
Параметр  | Тип  | Описание  | 
|---|---|---|
CROPID  | 
    INTEGER  | 
    *Культура  | 
  
STORAGESTORINGTYPEID  | 
    INTEGER  | 
    *Тип хранения склада  | 
  
DAYS  | 
    INTEGER  | 
    Количество дней хранения  | 
  
Выходные параметры
Параметр  | Тип  | Описание  | 
|---|---|---|
LOSSRATE  | 
    NUMERIC(5,3)  | 
    % убыли при хранении  | 
  
Описание
(Нет описания для процедуры STORAGELOSS_GETRATE)
Определение
CREATE PROCEDURE STORAGELOSS_GETRATE(
    CROPID INTEGER,
    STORAGESTORINGTYPEID INTEGER,
    DAYS INTEGER)
RETURNS (
    LOSSRATE NUMERIC(5,3))
AS
declare variable DAYMIN integer;
declare variable RATEMIN numeric(5,3);
declare variable DAYMAX integer;
declare variable RATEMAX numeric(5,3);
declare variable LOSSSETID integer;
begin
  select STORAGELOSSES.STORAGELOSSCROPID
      from STORAGELOSSES
    where (STORAGELOSSES.CROPID = :CROPID) and (STORAGELOSSES.STORAGESTORINGTYPEID = :STORAGESTORINGTYPEID)
  into :LOSSSETID;
  if (:LOSSSETID is not null) then begin
    select first 1 STORAGELOSSETS.STORINGDAYS, STORAGELOSSETS.LOSSRATE
        from STORAGELOSSETS
      where (STORAGELOSSETS.STORAGELOSSID = :LOSSSETID) and (STORAGELOSSETS.STORINGDAYS >= :DAYS)
      order by STORAGELOSSETS.STORINGDAYS
    into :DAYMAX, :RATEMAX;
    select first 1 STORAGELOSSETS.STORINGDAYS, STORAGELOSSETS.LOSSRATE
        from STORAGELOSSETS
      where (STORAGELOSSETS.STORAGELOSSID = :LOSSSETID) and (STORAGELOSSETS.STORINGDAYS < :DAYS)
      order by STORINGDAYS desc
    into :DAYMIN, :RATEMIN;
    if (:DAYMAX is null) then begin
      DAYMAX = :DAYMIN;
      RATEMAX = :RATEMIN;
    end
    else
      if (:DAYMIN is null) then begin
        DAYMIN = :DAYMAX;
        RATEMIN = :RATEMAX;
      end
    if ((DAYMAX - DAYS) < (DAYS - DAYMIN)) then
      LOSSRATE = :RATEMAX;
    else LOSSRATE = :RATEMIN;
  end
  suspend;
end
         
         
         
       |