ALTER PROCEDURE "dba"."pr_koond_kuu"(in a_skoopkood char(16),in a_skoop integer,in id_paring integer,in peralg date,in perlop date,in a_id_user integer default 32767)
begin
  declare ll_id integer;
  declare ldc_summa numeric(20,6);
  declare ls_konto char(7);
  declare ls_saldod_konto char(7);
  declare li_paring integer;
  declare li_saldod smallint;
  declare li_saldod_9 smallint;
  declare li_pikkus smallint;
  declare err_notfound exception for sqlstate value '02000';
  declare c_pr_aadeeb dynamic scroll cursor for select pr_kanne.summa,if li_saldod = 1 and Length(ls_saldod_konto)>0 and locate('345678',"left"(pr_kanne.deeb,1)) > 0 then ls_saldod_konto else trim(pr_kanne.deeb) endif from
      pr_kanne left outer join gl_1 on(pr_kanne.id = gl_1.id) and(pr_kanne.kuup = gl_1.kuup) left outer join skoobid on pr_kanne.skoop=skoobid.skoop where((pr_kanne.id = gl_1.id) and(pr_kanne.kuup = gl_1.kuup) or id_paring = 0) and ((a_skoop>0 and pr_kanne.skoop=a_skoop) or (a_skoop=0 and li_pikkus>0 and Left(skoobid.kood,li_pikkus)=a_skoopkood) or (a_skoop=0 and li_pikkus=0)) and pr_kanne.deeb is not null and years(pr_kanne.kuup) < years(peralg) and (Length(ls_saldod_konto)>0 or not(li_saldod = 1 and locate('345678',"left"(pr_kanne.deeb,1)) > 0)) and not(li_saldod_9 = 1 and "left"(pr_kanne.deeb,1) = '9');
  declare c_pr_adeeb dynamic scroll cursor for select pr_kanne.summa,trim(pr_kanne.deeb) from
      pr_kanne left outer join gl_1 on(pr_kanne.id = gl_1.id) and(pr_kanne.kuup = gl_1.kuup) left outer join skoobid on pr_kanne.skoop=skoobid.skoop where((pr_kanne.id = gl_1.id) and(pr_kanne.kuup = gl_1.kuup) or id_paring = 0) and ((a_skoop>0 and pr_kanne.skoop=a_skoop) or (a_skoop=0 and li_pikkus>0 and Left(skoobid.kood,li_pikkus)=a_skoopkood) or (a_skoop=0 and li_pikkus=0)) and pr_kanne.deeb is not null and pr_kanne.kuup < peralg and years(pr_kanne.kuup) >= years(peralg);
  declare c_pr_deeb dynamic scroll cursor for select Years(pr_kanne.kuup)*100+Month(pr_kanne.kuup),pr_kanne.summa,trim(pr_kanne.deeb) from
      pr_kanne left outer join gl_1 on(pr_kanne.id = gl_1.id) and(pr_kanne.kuup = gl_1.kuup) left outer join skoobid on pr_kanne.skoop=skoobid.skoop where((pr_kanne.id = gl_1.id) and(pr_kanne.kuup = gl_1.kuup) or id_paring = 0) and ((a_skoop>0 and pr_kanne.skoop=a_skoop) or (a_skoop=0 and li_pikkus>0 and Left(skoobid.kood,li_pikkus)=a_skoopkood) or (a_skoop=0 and li_pikkus=0)) and pr_kanne.deeb is not null and pr_kanne.kuup >= peralg and pr_kanne.kuup <= perlop;
  declare c_pr_aakree dynamic scroll cursor for select pr_kanne.summa,if li_saldod = 1 and Length(ls_saldod_konto)>0 and locate('345678',"left"(pr_kanne.kree,1)) > 0 then ls_saldod_konto else trim(pr_kanne.kree) endif from
      pr_kanne left outer join gl_1 on(pr_kanne.id = gl_1.id) and(pr_kanne.kuup = gl_1.kuup) left outer join skoobid on pr_kanne.skoop=skoobid.skoop where((pr_kanne.id = gl_1.id) and(pr_kanne.kuup = gl_1.kuup) or id_paring = 0) and ((a_skoop>0 and pr_kanne.skoop=a_skoop) or (a_skoop=0 and li_pikkus>0 and Left(skoobid.kood,li_pikkus)=a_skoopkood) or (a_skoop=0 and li_pikkus=0)) and pr_kanne.kree is not null and years(pr_kanne.kuup) < years(peralg) and (Length(ls_saldod_konto)>0 or not(li_saldod = 1 and locate('345678',"left"(pr_kanne.kree,1)) > 0)) and not(li_saldod_9 = 1 and "left"(pr_kanne.kree,1) = '9');
  declare c_pr_akree dynamic scroll cursor for select pr_kanne.summa,trim(pr_kanne.kree) from
      pr_kanne left outer join gl_1 on(pr_kanne.id = gl_1.id) and(pr_kanne.kuup = gl_1.kuup) left outer join skoobid on pr_kanne.skoop=skoobid.skoop where((pr_kanne.id = gl_1.id) and(pr_kanne.kuup = gl_1.kuup) or id_paring = 0) and ((a_skoop>0 and pr_kanne.skoop=a_skoop) or (a_skoop=0 and li_pikkus>0 and Left(skoobid.kood,li_pikkus)=a_skoopkood) or (a_skoop=0 and li_pikkus=0)) and pr_kanne.kree is not null and pr_kanne.kuup < peralg and years(pr_kanne.kuup) >= years(peralg);
  declare c_pr_kree dynamic scroll cursor for select Years(pr_kanne.kuup)*100+Month(pr_kanne.kuup),pr_kanne.summa,trim(pr_kanne.kree) from
      pr_kanne left outer join gl_1 on(pr_kanne.id = gl_1.id) and(pr_kanne.kuup = gl_1.kuup) left outer join skoobid on pr_kanne.skoop=skoobid.skoop where((pr_kanne.id = gl_1.id) and(pr_kanne.kuup = gl_1.kuup) or id_paring = 0) and ((a_skoop>0 and pr_kanne.skoop=a_skoop) or (a_skoop=0 and li_pikkus>0 and Left(skoobid.kood,li_pikkus)=a_skoopkood) or (a_skoop=0 and li_pikkus=0)) and pr_kanne.kree is not null and pr_kanne.kuup >= peralg and pr_kanne.kuup <= perlop;
  delete from gl_id_konto;
  set li_pikkus=Length(a_skoopkood);
  if li_pikkus is null then
    set li_pikkus=0
  end if;
  set li_paring=set_gl_1(id_paring);
  set ls_saldod_konto=get_pr_saldod_konto(a_skoop);
  select pr_konfm.yld_saldod,pr_konfm.yld_saldod_9 into li_saldod,li_saldod_9 from pr_konfm where pr_konfm.id = 1;
  if Month(peralg) = 1 then
    set ll_id = (Years(peralg) - 1)*100 + 12
  else
    set ll_id = Years(peralg)*100 + Month(peralg)-1
  end if;
  open c_pr_aadeeb;
  pr_aadeeb_loop: loop
    --  loe pearaamatu deebet aasta algjaagi kanne
    fetch next c_pr_aadeeb into ldc_summa,ls_konto;
    if sqlstate = err_notfound then -- kui eof
      leave pr_aadeeb_loop
    end if;
    -- kas kanne ei eksisteeri koondis
    if exists(select 1 from gl_id_konto where gl_id_konto."id"=ll_id and gl_id_konto.konto = ls_konto) then
      update gl_id_konto set summa = summa+ldc_summa where gl_id_konto."id"=ll_id and gl_id_konto.konto = ls_konto
    else
      insert into gl_id_konto( "id",konto,summa) values( ll_id,ls_konto,ldc_summa) 
    end if
  end loop pr_aadeeb_loop;
  close c_pr_aadeeb;
  open c_pr_adeeb;
  pr_adeeb_loop: loop
    --  loe pearaamatu deebet algjaagi kanne
    fetch next c_pr_adeeb into ldc_summa,ls_konto;
    if sqlstate = err_notfound then -- kui eof
      leave pr_adeeb_loop
    end if;
    -- kas kanne ei eksisteeri koondis
    if exists(select 1 from gl_id_konto where gl_id_konto."id"=ll_id and gl_id_konto.konto = ls_konto) then
      update gl_id_konto set summa = summa+ldc_summa where gl_id_konto."id"=ll_id and gl_id_konto.konto = ls_konto
    else
      insert into gl_id_konto( "id",konto,summa) values( ll_id,ls_konto,ldc_summa) 
    end if
  end loop pr_adeeb_loop;
  close c_pr_adeeb;
  open c_pr_aakree;
  pr_aakree_loop: loop
    --  loe pearaamatu kreedit aasta algjaagi kanne
    fetch next c_pr_aakree into ldc_summa,ls_konto;
    if sqlstate = err_notfound then -- kui eof
      leave pr_aakree_loop
    end if;
    -- kas kanne ei eksisteeri koondis
    if exists(select 1 from gl_id_konto where gl_id_konto."id"=ll_id and gl_id_konto.konto = ls_konto) then
      update gl_id_konto set summa = summa-ldc_summa where gl_id_konto."id"=ll_id and gl_id_konto.konto = ls_konto
    else
      insert into gl_id_konto( "id",konto,summa) values( ll_id,ls_konto,-1*ldc_summa) 
    end if
  end loop pr_aakree_loop;
  close c_pr_aakree;
  open c_pr_akree;
  pr_akree_loop: loop
    --  loe pearaamatu kreedit algjaagi kanne
    fetch next c_pr_akree into ldc_summa,ls_konto;
    if sqlstate = err_notfound then -- kui eof
      leave pr_akree_loop
    end if;
    -- kas kanne ei eksisteeri koondis
    if exists(select 1 from gl_id_konto where gl_id_konto."id"=ll_id and gl_id_konto.konto = ls_konto) then
      update gl_id_konto set summa = summa-ldc_summa where gl_id_konto."id"=ll_id and gl_id_konto.konto = ls_konto
    else
      insert into gl_id_konto( "id",konto,summa) values( ll_id,ls_konto,-1*ldc_summa) 
    end if
  end loop pr_akree_loop;
  close c_pr_akree;
  open c_pr_deeb;
  pr_deeb_loop: loop
    --  loe pearaamatu deebet kaibe kanne
    fetch next c_pr_deeb into ll_id,ldc_summa,ls_konto;
    if sqlstate = err_notfound then -- kui eof
      leave pr_deeb_loop
    end if;
    -- kas kanne ei eksisteeri koondis
    if exists(select 1 from gl_id_konto where gl_id_konto."id"=ll_id and gl_id_konto.konto = ls_konto) then
      update gl_id_konto set summa = summa+ldc_summa where gl_id_konto."id"=ll_id and gl_id_konto.konto = ls_konto
    else
      insert into gl_id_konto( "id",konto,summa) values( ll_id,ls_konto,ldc_summa) 
    end if
  end loop pr_deeb_loop;
  close c_pr_deeb;
  open c_pr_kree;
  pr_kree_loop: loop
    --  loe pearaamatu kreedit kaibe kanne
    fetch next c_pr_kree into ll_id,ldc_summa,ls_konto;
    if sqlstate = err_notfound then -- kui eof
      leave pr_kree_loop
    end if;
    -- kas kanne ei eksisteeri koondis
    if exists(select 1 from gl_id_konto where gl_id_konto."id"=ll_id and gl_id_konto.konto = ls_konto) then
      update gl_id_konto set summa = summa-ldc_summa where gl_id_konto."id"=ll_id and gl_id_konto.konto = ls_konto
    else
      insert into gl_id_konto( "id",konto,summa) values( ll_id,ls_konto,-1*ldc_summa) 
    end if
  end loop pr_kree_loop;
  close c_pr_kree;
  -- loppjaagid
  delete from gl_id_konto where summa = 0
end