ALTER PROCEDURE "dba"."dk_arvetas2016"(in a_skoopkood char(16),in id_skoop integer,in id_obj integer,in id_paring integer,in perlop date, in a_form integer)
begin
  declare li_paring integer;
  declare ld_now date;
  declare ls_dk_kontod char(5000);
  delete from gl_dk_arvetas2007;
  delete from gl_dk_arvetas;
  delete from gl_dk_kanne;
  delete from gl_kp_kanne;
  set ld_now = Now();
  set li_paring=set_gl_1(id_paring);
  if id_obj > 0 then
    select dk_obj.skoop into id_skoop from dk_obj where dk_obj.objnr = id_obj
  end if;
-- ravonr on skoop; doknr on objekti konto
  insert into gl_dk_arvetas2007( ravonr,doknr,asutnr,arvenr,arvekuup,taskuup,arvesumma)
    select dk_obj.skoop,
           dk_obj.djkonto,
           dk_kanne.asutnr,
           if (dk_kanne.crekuup is null or dk_kanne.crenr is null) then dk_kanne.arvenr else dk_kanne.crenr endif as dk_kanne_arvenr,
           if (dk_kanne.crekuup is null or dk_kanne.crenr is null) then dk_kanne.arvekuup else dk_kanne.crekuup endif as dk_kanne_arvekuup,
           max(dk_kanne.taskuup),
           sum((2*dk_kanne.sisse-1)*(dk_kanne.summa+dk_kanne.summa2))
      from dk_kanne left outer join gl_1 on(dk_kanne.id = gl_1.id) and(dk_kanne.kuup = gl_1.kuup) left outer join gl_selectall on dk_kanne.asutnr=gl_selectall.id1 key left outer join dk_obj, dk_obj key left outer join skoobid
      where ((dk_kanne.id=gl_1.id) and(dk_kanne.kuup=gl_1.kuup) or id_paring = 0) and
            (Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood and (dk_obj.skoop = id_skoop or id_skoop = 0)) and
            (dk_kanne.objnr = id_obj or id_obj = 0) and
            dk_obj.spank=0 and dk_obj.djkonto is not null and
            dk_kanne.asutnr>0 and dk_kanne.arvekuup is not null and Length(Trim(dk_kanne.arvenr))>0 and
            dk_kanne.taskuup<=perlop
      group by dk_obj.skoop,dk_obj.djkonto,dk_kanne.asutnr,dk_kanne_arvekuup,dk_kanne_arvenr;
  case a_form
    when 79 then
      insert into gl_dk_kanne(asutnr,arvenr,arvekuup)
            select asutnr,arvenr,arvekuup from dk_graafik where dk_graafik.akuup<=ld_now and (dk_graafik.lkuup is null or dk_graafik.lkuup>ld_now);
      delete gl_dk_arvetas2007
            from gl_dk_arvetas2007 left outer join gl_dk_kanne on gl_dk_arvetas2007.asutnr=gl_dk_kanne.asutnr and gl_dk_arvetas2007.arvenr=gl_dk_kanne.arvenr and gl_dk_arvetas2007.arvekuup=gl_dk_kanne.arvekuup
            where gl_dk_kanne.asutnr is null
    when 80 then
      insert into gl_dk_kanne(asutnr,arvenr,arvekuup)
              select asutnr,arvenr,arvekuup from dk_taitur where dk_taitur.akuup<=ld_now and (dk_taitur.lkuup is null or dk_taitur.lkuup>ld_now);
      delete gl_dk_arvetas2007
            from gl_dk_arvetas2007 left outer join gl_dk_kanne on gl_dk_arvetas2007.asutnr=gl_dk_kanne.asutnr and gl_dk_arvetas2007.arvenr=gl_dk_kanne.arvenr and gl_dk_arvetas2007.arvekuup=gl_dk_kanne.arvekuup
            where gl_dk_kanne.asutnr is null
    when 81 then
      insert into gl_dk_kanne(asutnr,arvenr,arvekuup)
            select asutnr,arvenr,arvekuup from dk_graafik where dk_graafik.akuup<=ld_now and (dk_graafik.lkuup is null or dk_graafik.lkuup>ld_now);
      insert into gl_dk_kanne(asutnr,arvenr,arvekuup)
              select asutnr,arvenr,arvekuup from dk_taitur where dk_taitur.akuup<=ld_now and (dk_taitur.lkuup is null or dk_taitur.lkuup>ld_now);
      delete gl_dk_arvetas2007
            from gl_dk_arvetas2007 left outer join gl_dk_kanne on gl_dk_arvetas2007.asutnr=gl_dk_kanne.asutnr and gl_dk_arvetas2007.arvenr=gl_dk_kanne.arvenr and gl_dk_arvetas2007.arvekuup=gl_dk_kanne.arvekuup
            where gl_dk_kanne.asutnr is not null
  end case;
  insert into gl_dk_arvetas( ravonr,doknr,asutnr,arvenr,arvekuup)
     select gl_dk_arvetas2007.ravonr,gl_dk_arvetas2007.doknr,gl_dk_arvetas2007.asutnr,gl_dk_arvetas2007.arvenr,gl_dk_arvetas2007.arvekuup
       from gl_dk_arvetas2007;
-- kassa/panga kannete vahekoond
  set ls_dk_kontod=get_dk_kontod_spank(id_skoop,0,id_obj);
  set li_paring=set_gl_1_conv_dk_kp(id_paring);
  insert into gl_kp_kanne(ravonr,doknr,asutnr,arvenr,arvekuup,summa)
    select kp_obj.skoop,
           kp_kanne.konto,
           kp_kanne.asutnr,
           if kp_kanne.arvenr is null then '' else kp_kanne.arvenr endif as kp_arvenr,
           if kp_kanne.arvekuup is null then ymd(2000,1,1) else kp_kanne.arvekuup endif as kp_arvekuup,
           sum((2*kp_kanne.sisse-1)*kp_kanne.summa)
      from kp_kanne left outer join gl_1 on(kp_kanne.id = gl_1.id) and(kp_kanne.kuup = gl_1.kuup) key left outer join kp_obj, kp_obj key left outer join skoobid
      where ((kp_kanne.id = gl_1.id) and(kp_kanne.kuup = gl_1.kuup) or id_paring = 0) and
            (Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood and (kp_obj.skoop = id_skoop or id_skoop = 0)) and
             locate(ls_dk_kontod,';'+"Left"(kp_kanne.konto+Space(7),7)+';') > 0 and
             kp_kanne.asutnr>0
      group by kp_obj.skoop,kp_kanne.konto,kp_kanne.asutnr,kp_arvenr,kp_arvekuup;
-- kassa/panga kannete select
  if a_form <> 87 then
    insert into gl_dk_arvetas2007( ravonr,doknr,asutnr,arvenr,arvekuup,makssumma)
      select gl_kp_kanne.ravonr,
             gl_kp_kanne.doknr,
             gl_kp_kanne.asutnr,
             gl_kp_kanne.arvenr,
             gl_kp_kanne.arvekuup,
             gl_kp_kanne.summa
        from gl_kp_kanne left outer join gl_dk_arvetas on gl_kp_kanne.ravonr=gl_dk_arvetas.ravonr and gl_kp_kanne.doknr=gl_dk_arvetas.doknr and gl_kp_kanne.asutnr=gl_dk_arvetas.asutnr and gl_kp_kanne.arvenr=gl_dk_arvetas.arvenr and gl_kp_kanne.arvekuup=gl_dk_arvetas.arvekuup
        where gl_dk_arvetas.asutnr is not null;
  else
    insert into gl_dk_arvetas2007( ravonr,doknr,asutnr,arvenr,arvekuup,makssumma)
      select gl_kp_kanne.ravonr,
             gl_kp_kanne.doknr,
             gl_kp_kanne.asutnr,
             gl_kp_kanne.arvenr,
             gl_kp_kanne.arvekuup,
             gl_kp_kanne.summa
        from gl_kp_kanne;
  end if;
-- koond
  delete from gl_dk_arvetas;
  insert into gl_dk_arvetas(ravonr,doknr,asutnr,arvenr,arvekuup,taskuup,arvesumma,makssumma)
    select gl_dk_arvetas2007.ravonr,gl_dk_arvetas2007.doknr,gl_dk_arvetas2007.asutnr,gl_dk_arvetas2007.arvenr,gl_dk_arvetas2007.arvekuup,max(gl_dk_arvetas2007.taskuup),sum(gl_dk_arvetas2007.arvesumma),sum(gl_dk_arvetas2007.makssumma)
      from gl_dk_arvetas2007
      group by gl_dk_arvetas2007.ravonr,gl_dk_arvetas2007.doknr,gl_dk_arvetas2007.asutnr,gl_dk_arvetas2007.arvenr,gl_dk_arvetas2007.arvekuup;
-- jaagid
  if a_form < 87 then
    delete from gl_dk_arvetas where arvesumma-makssumma<=0;
  else
    delete from gl_dk_arvetas where arvesumma-makssumma=0;
  end if;
end