ALTER PROCEDURE "DBA"."dk_kannetas"(in a_skoop integer,in a_objnr integer,in a_paring integer,in a_asutnr integer,in a_peralg date,in a_perlop date,in a_valver smallint default 1)
begin
  declare li_i integer;
  declare li_sisse integer;
  declare ld_kuup date;
  declare ldc_summa decimal(15,2);
  declare ls_doknr char(20);
  declare ls_info char(250);
  declare ld_arvekuup date;
  declare ls_arvenr char(20);
  declare li_asutnr integer;
  declare li_saajanr integer;
  declare li_paring integer;
  declare ls_dk_kontod char(5000);
  declare err_notfound exception for sqlstate value '02000';
  declare c_dk_kanne dynamic scroll cursor for select dk_kanne.sisse,dk_kanne.kuup,dk_kanne.summa+dk_kanne.summa2,dk_kanne.doknr,dk_kanne.asutnr,dk_kanne.saajanr,dk_kanne.arvenr,dk_kanne.arvekuup,left(trim(trim(dk_alus.nimi)+' '+dk_kanne.info),200) from
      dk_kanne left outer join gl_1 on(dk_kanne.id = gl_1.id) and(dk_kanne.kuup = gl_1.kuup) key left outer join dk_obj,dk_kanne key left outer join dk_alus where ((dk_kanne.id = gl_1.id) and(dk_kanne.kuup = gl_1.kuup) or a_paring = 0) and (dk_kanne.objnr = a_objnr or a_objnr = 0) and(dk_obj.skoop = a_skoop or a_skoop = 0) and(dk_kanne.asutnr = a_asutnr or a_asutnr = 0) and dk_kanne.kuup <= a_perlop;
  declare c_kp_kanne dynamic scroll cursor for select if kp_kanne.sisse = 1 then 0 else 1 endif,kp_kanne.kuup,kp_kanne.summa,kp_kanne.doknr,kp_kanne.asutnr,kp_kanne.saajanr,kp_kanne.arvenr,kp_kanne.arvekuup,left(trim(trim(kp_alus.nimi)+' '+kp_kanne.info),200) 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_kanne key left outer join kp_alus where ((kp_kanne.id = gl_1.id) and(kp_kanne.kuup = gl_1.kuup) or a_paring = 0) and locate(ls_dk_kontod,';'+"Left"(kp_kanne.konto+Space(7),7)+';') > 0 and(kp_obj.skoop = a_skoop or a_skoop = 0) and(kp_kanne.asutnr = a_asutnr or a_asutnr = 0) and kp_kanne.kuup <= a_perlop;
  delete from gl_dk_kanne;
  if a_objnr > 0 then
    select dk_obj.skoop into a_skoop from dk_obj where dk_obj.objnr = a_objnr
  end if;
  set li_paring=set_gl_1(a_paring);
  set li_i=0;
  set ls_dk_kontod=get_dk_kontod_koond(a_skoop,a_objnr);
  insert into gl_dk_kanne( id,objnr,sisse,kuup,summa,summa2,doknr,asutnr,saajanr,arvenr,arvekuup,info) values( li_i,1,1,a_peralg,0,0,'',a_asutnr,null,'',a_peralg,'Algjääk') ;
  open c_dk_kanne;
  dk_kanne_loop: loop
    fetch next c_dk_kanne into li_sisse,ld_kuup,ldc_summa,ls_doknr,li_asutnr,li_saajanr,ls_arvenr,ld_arvekuup,ls_info;
    if sqlstate = err_notfound then
      leave dk_kanne_loop
    end if;
    if ld_kuup < a_peralg then
      update gl_dk_kanne set summa = summa+if li_sisse = 1 then ldc_summa else-1*ldc_summa endif where gl_dk_kanne.id = 0
    else
      set li_i=li_i+1;
      insert into gl_dk_kanne( id,objnr,sisse,kuup,summa,summa2,doknr,asutnr,saajanr,arvenr,arvekuup,info) values( li_i,1,li_sisse,ld_kuup,ldc_summa,0,ls_doknr,li_asutnr,li_saajanr,ls_arvenr,ld_arvekuup,ls_info) 
    end if
  end loop dk_kanne_loop;
  close c_dk_kanne;
  set li_paring=set_gl_1_conv_dk_kp(a_paring);
  open c_kp_kanne;
  kp_kanne_loop: loop
    fetch next c_kp_kanne into li_sisse,ld_kuup,ldc_summa,ls_doknr,li_asutnr,li_saajanr,ls_arvenr,ld_arvekuup,ls_info;
    if sqlstate = err_notfound then
      leave kp_kanne_loop
    end if;
    if ld_kuup < a_peralg then
      update gl_dk_kanne set summa = summa+if li_sisse = 1 then ldc_summa else-1*ldc_summa endif where gl_dk_kanne.id = 0
    else
      set li_i=li_i+1;
      insert into gl_dk_kanne( id,objnr,sisse,kuup,summa,summa2,doknr,asutnr,saajanr,arvenr,arvekuup,info) values( li_i,1,li_sisse,ld_kuup,ldc_summa,0,ls_doknr,li_asutnr,li_saajanr,ls_arvenr,ld_arvekuup,ls_info) 
    end if
  end loop kp_kanne_loop;
  close c_kp_kanne;
  delete from gl_dk_kanne where summa = 0;
  update gl_dk_kanne set sisse = 0,summa = -1*summa where summa < 0 and id = 0
end