Входные параметры
Параметр  | Тип  | Описание  | 
|---|---|---|
DATE1  | 
    DATE  | 
    
  | 
  
DATE2  | 
    DATE  | 
    
  | 
  
STORAGEID  | 
    INTEGER  | 
    
  | 
  
CLASS  | 
    INTEGER  | 
    
  | 
  
OWNERID  | 
    INTEGER  | 
    
  | 
  
CONTRACTID  | 
    INTEGER  | 
    
  | 
  
STORINGID  | 
    INTEGER  | 
    
  | 
  
SILAGEID  | 
    INTEGER  | 
    
  | 
  
PARTYID  | 
    INTEGER  | 
    
  | 
  
USEAFTERQUALTY  | 
    INTEGER  | 
    
  | 
  
PARTYDATE  | 
    DATE  | 
    
  | 
  
DOCROP  | 
    SMALLINT  | 
    
  | 
  
DONET  | 
    SMALLINT  | 
    
  | 
  
Выходные параметры
Параметр  | Тип  | Описание  | 
|---|---|---|
REGDATE  | 
    DATE  | 
    
  | 
  
CLASSNAME  | 
    VARCHAR(20)  | 
    
  | 
  
CROPNAME  | 
    VARCHAR(20)  | 
    
  | 
  
QUALITYNUMBER  | 
    INTEGER  | 
    
  | 
  
DIRTIN  | 
    NUMERIC(9,2)  | 
    
  | 
  
HUMIN  | 
    NUMERIC(9,2)  | 
    
  | 
  
HUMOUT  | 
    NUMERIC(9,2)  | 
    
  | 
  
DIRTOUT  | 
    NUMERIC(9,2)  | 
    
  | 
  
PROVIDER  | 
    VARCHAR(100)  | 
    
  | 
  
OWNER  | 
    VARCHAR(100)  | 
    
  | 
  
INCOME  | 
    INTEGER  | 
    
  | 
  
OPERATIONSUBTYPE  | 
    INTEGER  | 
    
  | 
  
REGISTERID  | 
    VARCHAR(31)  | 
    
  | 
  
OPERATIONID  | 
    INTEGER  | 
    
  | 
  
STATIONNAME  | 
    VARCHAR(30)  | 
    
  | 
  
OUTCOME  | 
    INTEGER  | 
    
  | 
  
INCOME_DIN  | 
    NUMERIC(9,2)  | 
    
  | 
  
INCOME_HIN  | 
    NUMERIC(9,2)  | 
    
  | 
  
OUTCOME_DIN  | 
    NUMERIC(9,2)  | 
    
  | 
  
OUTCOME_HIN  | 
    NUMERIC(9,2)  | 
    
  | 
  
ISLASTRECORD  | 
    SMALLINT  | 
    
  | 
  
Описание
Форма 36 по клиенту
Определение
CREATE PROCEDURE FORM36CLIENT(
    DATE1 DATE,
    DATE2 DATE,
    STORAGEID INTEGER,
    CLASS INTEGER,
    OWNERID INTEGER,
    CONTRACTID INTEGER,
    STORINGID INTEGER,
    SILAGEID INTEGER,
    PARTYID INTEGER,
    USEAFTERQUALTY INTEGER,
    PARTYDATE DATE,
    DOCROP SMALLINT,
    DONET SMALLINT)
RETURNS (
    REGDATE DATE,
    CLASSNAME VARCHAR(20),
    CROPNAME VARCHAR(20),
    QUALITYNUMBER INTEGER,
    DIRTIN NUMERIC(9,2),
    HUMIN NUMERIC(9,2),
    HUMOUT NUMERIC(9,2),
    DIRTOUT NUMERIC(9,2),
    PROVIDER VARCHAR(100),
    OWNER VARCHAR(100),
    INCOME INTEGER,
    OPERATIONSUBTYPE INTEGER,
    REGISTERID VARCHAR(31),
    OPERATIONID INTEGER,
    STATIONNAME VARCHAR(30),
    OUTCOME INTEGER,
    INCOME_DIN NUMERIC(9,2),
    INCOME_HIN NUMERIC(9,2),
    OUTCOME_DIN NUMERIC(9,2),
    OUTCOME_HIN NUMERIC(9,2),
    ISLASTRECORD SMALLINT)
AS
declare variable net integer;
declare variable dirt numeric(9,2);
declare variable humidity numeric(9,2);
declare variable weight integer;
declare variable operationtype integer;
declare variable maxdate date;
begin
  select max(it.regdate)
    from it
      join getworkparties(:partyid,:partydate,null,null,:storageid)
        on (it.partyid = getworkparties.partyid)
     left join operation on (it.operationid = operation.operationid)
     left join quality_select(it.BuhQualityid) quality on (0 = 0)
    where it.regdate between :date1 and :date2
     and it.storageid= :storageid
     and operation.operationsubtype  in (0,1)
    and operation.operationtype <> 2
     and it.state >= 0
     and it.parentid >= 0
     and ((quality.classid = :class and :docrop = 0) or (quality.cropid = :class and :docrop = 1))
     and it.ownerid= :ownerid
     and ((it.storingid = :storingid) or (:storingid = 0))
     and ((it.contractid = :contractid) or (:contractid = 0))
     and ((it.silageid = :silageid) or (:silageid = 0))
  into :maxdate;
  for
  select
    stations.stationname,
    it.operationid,
    it.regdate,
    class.classname,
    crop.cropname,
    lquality.qualitynumber,
    case
      when (:useafterqualty = 1  and it.operationid = 7) then
        afterq.dirt
      else
       lquality.dirt end dirt1,
    case
      when (:useafterqualty = 1  and it.operationid = 7) then
        afterq.humidity
      else
       lquality.humidity end humidity1,
    case
      when ((operation.operationtype in (1,2,3,4,5))) then
        cast (operation.operationname as varchar(100))
      else
        suplier2.clientname end provider,
    suplier1.clientname owner,
    coalesce(cast(sum(abs.result) as integer),0) absweight,
    case :donet
    when 0 then coalesce(cast(sum(it.weight) as integer),0)
    when 1 then coalesce(cast(sum(it.net) as integer),0) end,
    operation.operationsubtype,
    operation.operationtype,
    case
      when ((((operation.operationsubtype  = 1) or (it.operationid = 17))
       and (ittransport.transporttypeid <> 2))
       or (operation.operationtype = 3) ) then
        cast(invoices.invoicenumber as varchar(31))
      when ((ittransport.transporttypeid = 2)) then
        cast(ittransport.transportnumber as varchar(31))
      else
        cast(invoiceregisters.registernumber as varchar(31))
     end  registerid
    from it
      join getworkparties(:partyid,:partydate,null,null,:storageid)
       on (it.partyid = getworkparties.partyid)
     left join invoices on (it.invoiceid = invoices.invoiceid)
     left join invoiceregisters on (it.registerid = invoiceregisters.invoiceregisterid)
     left join stations on (invoices.stationid = stations.stationid)
     left join operation on (it.operationid = operation.operationid)
     left join uwoutacts on (it.invoiceid = uwoutacts.invoiceid)
     left join quality_select(uwoutacts.afterqualityid) afterq on (0 = 0)
     left join quality_select(it.BuhQualityid) lquality on (0 = 0)
     left join class on (lquality.classid = class.classid)
     left join crop on (lquality.cropid = crop.cropid)
     left join clients suplier1 on (it.ownerid = suplier1.clientid)
     left join clients suplier2 on (it.providerid = suplier2.clientid)
     left join contracts on (it.contractid = contracts.contractid)
     left join abs(it.weight) on (0=0)
     left join ittransport on (it.inventoryid = ittransport.inventoryid)
    where it.regdate between :date1 and :date2
     and it.storageid= :storageid
     and operation.operationsubtype  in (0,1)
     and operation.operationtype <> 2
     and it.state >= 0
     and it.parentid >= 0
     and ((lquality.classid = :class and :docrop = 0) or (lquality.cropid = :class and :docrop = 1))
     and it.ownerid= :ownerid
     and ((it.storingid = :storingid) or (:storingid = 0))
     and ((it.contractid = :contractid) or (:contractid = 0))
     and ((it.silageid = :silageid) or (:silageid = 0))
    group by
    stations.stationname,
    it.operationid,
    it.regdate,
    class.classname,
    crop.cropname,
    lquality.qualitynumber,
    dirt1,
    humidity1,
    provider,
    owner,
    operation.operationsubtype, operation.operationtype,  registerid
  into :stationname,
         :operationid,
         :regdate,
         :classname,
         :cropname,
         :qualitynumber,
         :dirt,
         :humidity,
         :provider,
         :owner,
         :weight,
         :net,
         :operationsubtype,
         :operationtype,
         :registerid
  do
  begin
  if (:operationsubtype = 0) then
    begin
      outcome =0;
      outcome_din = 0;
      outcome_hin = 0;
      dirtout = 0;
      humout = 0;
      dirtin = :dirt;
      humin = :humidity;
--      income_din = :income * :dirtin / 100;
--      income_hin = :income * :humin / 100;
      if (:operationtype in (1,2,4,5)) then
        income = :weight;
      else
        income = :net;
      income_din = (cast(:dirtin as numeric(9,2)) * :income)/100;
      income_hin = (cast(:humin as numeric(9,2)) * :income)/100;
    end
  if ((:operationsubtype = 1)  or ((:operationid = 17) and (:net < 0))) then
    begin
      income = 0;
      income_din = 0;
      income_hin = 0;
      dirtin = 0;
      humin = 0;
      dirtout = :dirt;
--      outcome_din = :outcome * :dirtout / 100;
--      outcome_hin = :outcome * :humout / 100;
      humout = :humidity;
      if ((:operationid = 17) or (:operationtype in (1,2,4,5))) then
        outcome = :weight;
      else
        outcome = :net;
      outcome_din  = (cast(:dirtout as numeric(9,2)) * :outcome)/100;
      outcome_hin = (cast(:humout as numeric(9,2)) * :outcome)/100;
    end
   if ((coalesce(:income, 0) <> 0) or (coalesce(:dirtin, 0) <> 0) or (coalesce(:humin,0) <> 0) and
      (coalesce(:dirtout,0 ) <> 0) or (coalesce(:humout, 0) <> 0) or (coalesce(:outcome, 0) <> 0)) then
   begin
    if (:maxdate = :regdate) then
      islastrecord = 1;
    else
      islastrecord = 0;
    if (:operationid = 17) then
      provider = 'переоф.'||' '||:provider;
    suspend;
   end
  end
end
         
         
         
       |