Входные параметры
| Параметр | Тип | Описание | 
|---|---|---|
| DATE1 | DATE | 
 | 
| DATE2 | DATE | 
 | 
| PARTYID | INTEGER | 
 | 
| PARTYDATE | DATE | 
 | 
| CLASSID | INTEGER | 
 | 
| STORINGID | INTEGER | 
 | 
| FORMTYPE | INTEGER | 
 | 
| HARVDIV | INTEGER | 
 | 
| STORAGEID | INTEGER | 
 | 
| SORTID | INTEGER | 
 | 
Выходные параметры
| Параметр | Тип | Описание | 
|---|---|---|
| CLIENTFULLNAME | VARCHAR(100) | 
 | 
| INITIALREM | INTEGER | 
 | 
| CROPNAME | VARCHAR(100) | 
 | 
| CLASSNAME | VARCHAR(50) | 
 | 
| SORTNAME | VARCHAR(30) | 
 | 
| HARVESTYEAR | SMALLINT | 
 | 
| INCOME | INTEGER | 
 | 
| OUTCOME | INTEGER | 
 | 
| REB_INCOME | INTEGER | 
 | 
| REB_OUTCOME | INTEGER | 
 | 
| AVAILABILE | INTEGER | 
 | 
| WASTE | INTEGER | 
 | 
| WASTE3K | INTEGER | 
 | 
Описание
(Нет описания для процедуры NIK_ACC_DIR_REPORT)
Определение
CREATE PROCEDURE NIK_ACC_DIR_REPORT(
    DATE1 DATE,
    DATE2 DATE,
    PARTYID INTEGER,
    PARTYDATE DATE,
    CLASSID INTEGER,
    STORINGID INTEGER,
    FORMTYPE INTEGER,
    HARVDIV INTEGER,
    STORAGEID INTEGER,
    SORTID INTEGER)
RETURNS (
    CLIENTFULLNAME VARCHAR(100),
    INITIALREM INTEGER,
    CROPNAME VARCHAR(100),
    CLASSNAME VARCHAR(50),
    SORTNAME VARCHAR(30),
    HARVESTYEAR SMALLINT,
    INCOME INTEGER,
    OUTCOME INTEGER,
    REB_INCOME INTEGER,
    REB_OUTCOME INTEGER,
    AVAILABILE INTEGER,
    WASTE INTEGER,
    WASTE3K INTEGER)
AS
DECLARE VARIABLE clientid INTEGER;
DECLARE VARIABLE tempcropid INTEGER;
DECLARE VARIABLE tempclassid INTEGER;
DECLARE VARIABLE tempsortid INTEGER;
DECLARE VARIABLE temp INTEGER;
DECLARE VARIABLE operationsubtype INTEGER;
DECLARE VARIABLE dailywaste INTEGER;
DECLARE VARIABLE croptype SMALLINT;
BEGIN
   reb_income = 0;
   reb_outcome = 0;
   initialrem = 0;
   income = 0;
   outcome = 0;
   waste = 0;
   temp = 0;
  FOR
    select clients.clientfullname,
      clients.clientid, quality.cropid, crop.cropname,
      class.classname,
      cropsort.sortname,
      quality.classid,
      quality.sortid,
      case :harvdiv when 1 then coalesce(harvestyear.qualityvalue, 0) else 0 end harvestyear,
      crop.croptypeid
    from  it
      join getworkparties(:partyid,:partydate, null,null,null)
       on (it.partyid = getworkparties.partyid)
     join clients on (it.ownerid = clients.clientid)
     left join operation on (it.operationid = operation.operationid)
     inner join quality on (it.samplerqualityid = quality.qualityid)
     left join quality_cropfullname(quality.cropid, quality.classid, null, 1) qn on 0 = 0
     left join crop on (quality.cropid = crop.cropid)
     left join class on (quality.classid = class.classid)
     left join cropsort on (quality.sortid = cropsort.sortid)
     left join qualitydata harvestyear on (it.labqualityid = harvestyear.qualityid and harvestyear.qualitytypeid = 6)
     left join storage on (it.storageid = storage.storageid)
   where operation.operationsubtype in (0,1)
    and storage.storagetypeid = 1
    and it.regdate <= :date2
    and (quality.classid = :classid or (:classid is null) or (:classid  = -1))
    and ((quality.sortid = :sortid) or (:sortid = 0) or (:sortid is null) or (quality.sortid is null))
    and it.parentid >=0
    and it.weight is not null
    and (((crop.croptypeid <> 3) and ((:classid = -1) or (:classid is null))) or (:classid <> -1))
    and (it.weight <> 0 or operation.operationtype = 5)
    and ((it.storingid = :storingid) or (:storingid is null) or (:storingid = 0) )
    and it.state >=0
    and ((it.storageid = :storageid) or ((:storageid = 0) or (:storageid is null) ))
    group by clients.clientfullname, quality.sortid,
      clients.clientid, quality.cropid, crop.cropname,
      class.classname, quality.classid, cropsort.sortname,
      harvestyear,
       crop.croptypeid
    order by crop.cropname, cropsort.sortname, class.classname, case :harvdiv when 1 then coalesce(harvestyear.qualityvalue, 0) else 0 end, clients.clientfullname
       INTO
         :clientfullname,
         :clientid,
         :tempcropid,
         :cropname,
         :classname,
         :sortname,
         :tempclassid,
         :tempsortid,
         :harvestyear,
         :croptype
  do
  begin
    for
      select coalesce(sum(case operation.operationtype when 5 then it.net else it.weight end), 0), operation.operationsubtype  from  it
      join getworkparties(:partyid,:partydate, null,null,null)
       on (it.partyid = getworkparties.partyid)
       left join operation on (it.operationid = operation.operationid)
        inner join quality on (it.samplerqualityid = quality.qualityid)
        left join storage on (it.storageid = storage.storageid)
        left join qualitydata harvestyear on (it.labqualityid = harvestyear.qualityid and harvestyear.qualitytypeid = 6)
        left join crop on (quality.cropid = crop.cropid)
      where
        storage.storagetypeid = 1
        and it.ownerid = :clientid
        and crop.croptypeid <> 3
        and it.operationid not in (64, 65)
        and quality.classid = :tempclassid
        and ((quality.sortid = :tempsortid) or ((:tempsortid is null) and (quality.sortid is null)) )
        and ((coalesce(harvestyear.qualityvalue, 0) = :harvestyear) or (:harvdiv <> 1))
        and it.regdate < :date1
        and it.parentid >=0
        and it.weight is not null
        and (it.weight <> 0 or operation.operationtype = 5 and net <> 0)
        and ((it.storingid = :storingid) or (:storingid is null) or (:storingid = 0) )
        and it.state >=0
        and ((it.storageid = :storageid) or ((:storageid = 0) or (:storageid is null) ))
      group by quality.cropid, it.ownerid, operation.operationsubtype
      into
      :temp,
      :operationsubtype
      do
      begin
       if (:operationsubtype = 0) then
        initialrem = :initialrem + :temp;
       else if (:operationsubtype = 1) then
        initialrem = :initialrem - :temp;
      end
    select coalesce(sum(it.weight),0)
    from  it
     join getworkparties(:partyid,:partydate, null,null,null)
       on (it.partyid = getworkparties.partyid)
    left join operation on (it.operationid = operation.operationid)
    inner join quality on (it.samplerqualityid = quality.qualityid)
    left join storage on (it.storageid = storage.storageid)
    left join qualitydata harvestyear on (it.labqualityid = harvestyear.qualityid and harvestyear.qualitytypeid = 6)
    left join crop on (:tempcropid = crop.cropid)
  where ((operation.operationsubtype = 0) or ((crop.croptypeid = 3) and operation.operationsubtype in (0,1)))
    and it.operationid <> 17
    and storage.storagetypeid = 1
    and it.ownerid = :clientid
    and quality.classid = :tempclassid
    and ((quality.sortid = :tempsortid) or ((:tempsortid is null) and (quality.sortid is null)) )
    and ((coalesce(harvestyear.qualityvalue, 0) = :harvestyear) or (:harvdiv <> 1))
    and it.regdate between :date1 and :date2
    and it.parentid >=0
    and it.weight is not null
    and ((it.storingid = :storingid) or (:storingid is null) or (:storingid = 0) )
    and it.weight <> 0
    and it.state >=0
    and ((it.storageid = :storageid) or ((:storageid = 0) or (:storageid is null) ))
   group by quality.cropid, it.ownerid
      INTO :income;
    for
    select coalesce((it.weight),0)
    from  it
     join getworkparties(:partyid,:partydate, null,null,null)
       on (it.partyid = getworkparties.partyid)
    left join operation on (it.operationid = operation.operationid)
    inner join quality on (it.samplerqualityid = quality.qualityid)
    left join storage on (it.storageid = storage.storageid)
    left join qualitydata harvestyear on (it.labqualityid = harvestyear.qualityid and harvestyear.qualitytypeid = 6)
   where it.operationid = 17
    and storage.storagetypeid = 1
    and it.ownerid = :clientid
    and quality.classid = :tempclassid
    and ((quality.sortid = :tempsortid) or ((:tempsortid is null) and (quality.sortid is null)) )
    and ((coalesce(harvestyear.qualityvalue, 0) = :harvestyear) or (:harvdiv <> 1))
    and it.regdate between :date1 and :date2
    and it.parentid >=0
    and it.weight is not null
    and it.weight <> 0
    and it.state >=0
    and ((it.storingid = :storingid) or (:storingid is null) or (:storingid = 0) )
    and ((it.storageid = :storageid) or ((:storageid = 0) or (:storageid is null) ))
   INTO :temp
    do
    begin
     if (:temp >= 0) then
       reb_income = :reb_income + :temp;
     else
       reb_outcome = :reb_outcome + (:temp*-1);
    end
   select coalesce(sum(it.net),0) from  it
     join getworkparties(:partyid,:partydate, null,null,null)
       on (it.partyid = getworkparties.partyid)
   left join operation on (it.operationid = operation.operationid)
   inner join quality on (it.samplerqualityid = quality.qualityid)
   left join storage on (it.storageid = storage.storageid)
   left join qualitydata harvestyear on (it.labqualityid = harvestyear.qualityid and harvestyear.qualitytypeid = 6)
  where
   ((operation.operationsubtype = 1) and (it.operationid not in (64, 65)))
   and it.regdate between :date1 and :date2
   and storage.storagetypeid = 1
   and it.ownerid = :clientid
   and quality.classid = :tempclassid
   and ((quality.sortid = :tempsortid) or ((:tempsortid is null) and (quality.sortid is null)) )
   and ((coalesce(harvestyear.qualityvalue, 0) = :harvestyear) or (:harvdiv <> 1))
   and it.parentid >=0
   and ((it.storingid = :storingid) or (:storingid is null) or (:storingid = 0) )
   and it.state >=0
   and it.net is not null  and it.net <> 0
   and ((it.storageid = :storageid) or ((:storageid = 0) or (:storageid is null) ))
  INTO :outcome;
  select coalesce(sum(it.weight * -1),0) from  it
     join getworkparties(:partyid,:partydate, null,null,null)
       on (it.partyid = getworkparties.partyid)
   left join operation on (it.operationid = operation.operationid)
   inner join quality on (it.samplerqualityid = quality.qualityid)
   left join storage on (it.storageid = storage.storageid)
   left join qualitydata harvestyear on (it.labqualityid = harvestyear.qualityid and harvestyear.qualitytypeid = 6)
  where it.operationid in (64, 65)
   and it.regdate <= :date2
   and storage.storagetypeid = 1
   and it.ownerid = :clientid
   and quality.classid = :tempclassid
   and ((quality.sortid = :tempsortid) or ((:tempsortid is null) and (quality.sortid is null)) )
   and ((coalesce(harvestyear.qualityvalue, 0) = :harvestyear) or (:harvdiv <> 1))
   and it.parentid >=0
   and ((it.storingid = :storingid) or (:storingid is null) or (:storingid = 0) )
   and it.state >=0
   and ((it.storageid = :storageid) or ((:storageid = 0) or (:storageid is null) ))
  INTO :waste;
   select coalesce(sum(it.weight * -1),0) from  it
     join getworkparties(:partyid,:partydate, null,null,null)
       on (it.partyid = getworkparties.partyid)
   left join operation on (it.operationid = operation.operationid)
   inner join quality on (it.samplerqualityid = quality.qualityid)
   left join storage on (it.storageid = storage.storageid)
   left join qualitydata harvestyear on (it.labqualityid = harvestyear.qualityid and harvestyear.qualitytypeid = 6)
  where it.operationid in (64, 65)
   and it.regdate between :date1 and :date2
   and storage.storagetypeid = 1
   and it.ownerid = :clientid
   and quality.classid = :tempclassid
   and ((quality.sortid = :tempsortid) or ((:tempsortid is null) and (quality.sortid is null)) )
   and ((coalesce(harvestyear.qualityvalue, 0) = :harvestyear) or (:harvdiv <> 1))
   and it.parentid >=0
   and ((it.storingid = :storingid) or (:storingid is null) or (:storingid = 0) )
   and it.state >=0
   and ((it.storageid = :storageid) or ((:storageid = 0) or (:storageid is null) ))
  INTO :dailywaste;
   select coalesce(sum(it.net),0) from  it
     join getworkparties(:partyid,:partydate, null,null,null)
       on (it.partyid = getworkparties.partyid)
   left join operation on (it.operationid = operation.operationid)
   inner join quality sq on (it.samplerqualityid = sq.qualityid)
   left join storage on (it.storageid = storage.storageid)
   left join qualitydata harvestyear on (it.labqualityid = harvestyear.qualityid and harvestyear.qualitytypeid = 6)
   left join quality wq on (it.operationparam = wq.qualityid)
  where operation.operationtype = 5
   and wq.classid in (41,141) --!!!
   and it.regdate <= :date2
   and storage.storagetypeid = 1
   and it.ownerid = :clientid
   and sq.classid = :tempclassid
   and ((sq.sortid = :tempsortid) or ((:tempsortid is null) and (wq.sortid is null)) )
   and ((coalesce(harvestyear.qualityvalue, 0) = :harvestyear) or (:harvdiv <> 1))
   and ((it.storingid = :storingid) or (:storingid is null) or (:storingid = 0) )
   and it.state = -10
   and ((it.storageid = :storageid) or ((:storageid = 0) or (:storageid is null) ))
  INTO :waste3k;
  if (:formtype = 1) then
    initialrem = :initialrem  - :waste  + :dailywaste;
  if (:croptype <> 3) then
  begin
    availabile = :initialrem + :income - :outcome + :reb_income - :reb_outcome;
    if (:formtype = 1) then
      availabile = :availabile  - :dailywaste;
  end
   if ((:initialrem <> 0) or (:income <> 0) or (:reb_income <> 0) or (:reb_outcome <> 0)
      or (:outcome <> 0) or (:waste <> 0) and (:formtype = 0)) then
    SUSPEND;
   reb_income = 0;
   reb_outcome = 0;
   initialrem = 0;
   income = 0;
   outcome = 0;
   waste = 0;
   temp = 0;
  END
END
|       |