⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proc.sql

📁 一个财务程序和相应的数据库脚本
💻 SQL
📖 第 1 页 / 共 4 页
字号:
        set v_i=v_i+1;
    end while;
    delete from session.tmp_mxz_c where pzjf+pzdf = 0   and trim(pzzy) <>'上年结转' and trim(pzzy) <>'上期结转';
    --分页计算
    set v_cjd1='  ';
    set v_nqce1=0;
    set v_i=0;
    open bm_cur;
    loop_bm_cur:
    loop
        fetch bm_cur into v_cpxbm,v_clbbm,v_cjd,v_nqce,v_cpzid,v_dpzrq;
        if sqlcode=100 then
           leave loop_bm_cur;
        end if;
        set v_i = v_i + 1;
        set v_j = (case when v_printort=1 and v_ldfkm=0 and v_lzph=0 then v_printzyhs_zx else v_printzyhs_hx end);
        if mod(v_i,v_j)=v_j-1 then
            insert into session.tmp_mxz_c (pxbm,lbbm,pzzy,jd,ye) values(v_cpxbm,v_clbbm||'01','过次页',v_cjd,v_nqce);
            insert into session.tmp_mxz_c (pxbm,lbbm,pzzy,jd,ye) values(v_cpxbm,v_clbbm||'02','承前页',v_cjd,v_nqce);
            set v_i = 1;
        end if;
        if (ifnull(trim(v_cjd),'')='') and (v_dpzrq is not null) then
            update session.tmp_mxz_c set jd=v_cjd1, ye=v_nqce1 where pzid=v_cpzid ;
        end if;
        set v_cjd1 =v_cjd;
        set v_nqce1=v_nqce;
    end loop;
    close bm_cur;

  else
    select kmjb into v_kmjb from jtpjek a,jtpkmk b where a.kmid=b.kmid and trim(a.kmbm)=trim(v_ckmbm);
    select count(*) into v_cnt from jtpjek a,jtpkmk b
        where a.kmid=b.kmid and a.kmbm like trim(v_ckmbm)||'%'
        and b.kmjb=v_kmjb+1;

    set v_i=1;
    open mx_cur;
    loop_mx_cur:
    loop
        fetch mx_cur into v_cmxkm,v_ckmmc;
        if sqlcode=100 then
           leave loop_mx_cur;
        end if;
        set v_nrets=0;
        set v_nqce=0;
        set v_else=0;
        select qyny,printort,printzyhs_zx,printzyhs_hx into v_qyny,v_printort,v_printzyhs_zx,v_printzyhs_hx from jtpndk;
        select b.yefx,a.kmmc into v_nyefx, v_ckmmc from jtpjek a,jtpkmk b
            where a.kmid=b.kmid and trim(a.kmbm)=trim(v_cmxkm);
        set v_cmc=v_ckmmc;
        while posstr(v_cmc,'/')<>0 do
            set v_cmc=substr(v_cmc,posstr(v_cmc,'/'));
        end while;
        set v_cm0=(case when v_nyefx=1 then '借' else '贷' end);
        set v_cl0=(case when v_nyefx=1 then '贷' else '借' end);
        set v_ckmmc=v_cmc;
        if v_drq1<v_qyny then
            set v_drq1=v_qyny;
        end if;

        set v_date = date(substr(v_drq1,1,4)||'-'||substr(v_drq1,5,2)||'-01')-1 months;
        set v_drq=substr(trim(char(v_date)),1,4)||substr(trim(char(v_date)),6,2);

        set v_np2=2;
        call p_calc(1,2, v_qyny,v_drq1,v_cmxkm,v_lpz,v_ljz,v_nqce  ,v_nrets );	--期初余额
        set v_np2=9;
        call p_calc(1,9, v_drq ,v_drq ,v_cmxkm,v_lpz,v_ljz,v_nqcjf ,v_nrets );	--期初累计借方发生额
        set v_np2=10;
        call p_calc(1,10,v_drq ,v_drq ,v_cmxkm,v_lpz,v_ljz,v_nqcdf ,v_nrets );	--期初累计贷方发生额

        if v_ljz=0 then
            insert into session.tmp_mxz_c (pzrq,gjdbm,pzbm,pzzy,pzjf,pzdf,kmbm,kmmc,zph,pzid,pzywyd,pzlb)
            select pzrq,gjdbm,pzbm,pzzy,pzjf,pzdf,v_cmxkm,v_ckmmc,zph,pzid,pzywyd,pzlb from jtppzk
                    where pzywyd between v_drq1 and v_drq2 and kmbm like trim(v_cmxkm)||'%'  and ifnull(trim(pzjzid),'')<>''
                    order by kmbm,pzrq,pzbm;
        elseif v_lpz=0 then
            insert into session.tmp_mxz_c (pzrq,gjdbm,pzbm,pzzy,pzjf,pzdf,kmbm,kmmc,zph,pzid,pzywyd,pzlb)
            select pzrq,gjdbm,pzbm,pzzy,pzjf,pzdf,v_cmxkm,v_ckmmc,zph,pzid,pzywyd,pzlb from jtppzk
                    where pzywyd between v_drq1 and v_drq2 and kmbm like trim(v_cmxkm)||'%'  and ifnull(trim(pzfhid),'')<>''
                    order by kmbm,pzrq,pzbm;
        else
            insert into session.tmp_mxz_c (pzrq,gjdbm,pzbm,pzzy,pzjf,pzdf,kmbm,kmmc,zph,pzid,pzywyd,pzlb)
            select pzrq,gjdbm,pzbm,pzzy,pzjf,pzdf,v_cmxkm,v_ckmmc,zph,pzid,pzywyd,pzlb from jtppzk
                    where pzywyd between v_drq1 and v_drq2 and kmbm like trim(v_cmxkm)||'%'
                    order by kmbm,pzrq,pzbm ;
        end if;
        set v_drq=v_drq1;
        set v_i=v_i+1;
        while v_drq<=v_drq2 do
            if v_drq=v_drq1 then
                set v_cpxbm=right('00000000'||trim(char(v_i)),8);
                set v_cjd=(case when v_nqce=0 then '平' else v_cm0 end);
                insert into session.tmp_mxz_c (num,pxbm,lbbm,pzrq,pzzy,jd,ye,kmbm,kmmc)
                values(v_i,v_cpxbm,'01',date(substr(v_drq,1,4)||'-'||substr(v_drq,5,2)||'-01'),'    '||case when substr(v_drq,5,2)='01' then '上年结转' else '上期结转' end,
                      v_cjd,v_nqce,v_cmxkm,v_ckmmc);
                set v_i=v_i+1;
            end if;
            open pz_cur1;
            loop_pz_cur1:
            loop
                fetch pz_cur1 into v_gjd,v_cpzbm,v_cpzid,v_npzjf,v_npzdf;
                if sqlcode=100 then
                   leave loop_pz_cur1;
                end if;
                set v_cpzbm=v_gjd||v_cpzbm;
                set v_nqce=v_nqce + (case when v_nyefx=1 then v_npzjf-v_npzdf else v_npzdf-v_npzjf end);
                set v_cjd=(case when v_nqce=0 then '平' else v_cm0 end);
                set v_cpxbm=right('00000000'||trim(char(v_i)),8);
                update session.tmp_mxz_c set num = v_i, jd = v_cjd ,pxbm = v_cpxbm,lbbm='02',ye = v_nqce where pzid = v_cpzid;
                if v_ldfkm=1 then
                    set v_nkmfx = case when v_npzjf>0 then 1 else 2 end;
                    set v_cdfkm =repeat(' ',255);
                    call p_get_dfkm(v_drq, v_cpzbm, v_nkmfx, v_cdfkm);
                    update session.tmp_mxz_c set dfkm = v_cdfkm where pzid = v_cpzid;
                end if;
                set v_i=v_i+1;
             end loop;
             close pz_cur1;
             if v_lrjz = 1  then
                insert into session.tmp_mxz_c (num,pxbm,lbbm,pzrq,pzzy,pzjf,pzdf,jd,ye,kmbm,kmmc,pzid)
                    select 0,max(pxbm),'03',pzrq,'    本日合计',sum(pzjf),sum(pzdf),
                    '  ',v_else,
--                    max(case when pxbm=max(pxbm) then jd else '  '     end),
--                    max(case when pxbm=max(pxbm) then ye else v_else    end),
                    v_cmxkm,v_ckmmc,max(pxbm) from session.tmp_mxz_c
                    where pzywyd=v_drq and trim(kmbm) = trim(v_cmxkm) group by pzrq;
                set v_i=v_i+1;
             end  if;

            if v_nqce=0  then
                set v_cjd='平';
            end if;
            set v_cpxbm=right('00000000'||trim(char(v_i)),8);
            insert into session.tmp_mxz_c (num,pxbm,lbbm,pzrq,pzzy,pzjf,pzdf,jd,ye,kmbm,kmmc)
            select v_i,v_cpxbm,'04',last_day(date(substr(v_drq,1,4)||'-'||substr(v_drq,5,2)||'-01')), '    本月合计',
                    value(sum(pzjf),0),value(sum(pzdf),0),v_cjd,v_nqce,v_cmxkm,v_ckmmc from session.tmp_mxz_c
                    where pzywyd=v_drq and trim(kmbm) = trim(v_cmxkm);
            set v_i=v_i+1;
            set v_cpxbm=right('00000000'||trim(char(v_i)),8);
            if v_ljz=0 then
                insert into session.tmp_mxz_c (num,pxbm,lbbm,pzrq,pzzy,pzjf,pzdf,jd,ye,kmbm,kmmc)
                select v_i,v_cpxbm,'05',last_day(date(substr(v_drq,1,4)||'-'||substr(v_drq,5,2)||'-01')), '    本年累计',
                        v_nqcjf+value(sum(pzjf),0),v_nqcdf+value(sum(pzdf),0),v_cjd,v_nqce,v_cmxkm,v_ckmmc from jtppzk
                where pzywyd>=v_drq1 and pzywyd<=v_drq and kmbm like trim(v_cmxkm)||'%' and ifnull(trim(pzjzid),'')<>'';
            elseif v_lpz = 0 then
                insert into session.tmp_mxz_c (num,pxbm,lbbm,pzrq,pzzy,pzjf,pzdf,jd,ye,kmbm,kmmc)
                select v_i,v_cpxbm,'05',last_day(date(substr(v_drq,1,4)||'-'||substr(v_drq,5,2)||'-01')), '    本年累计',
                        v_nqcjf+value(sum(pzjf),0),v_nqcdf+value(sum(pzdf),0),v_cjd,v_nqce,v_cmxkm,v_ckmmc from jtppzk
                where pzywyd>=v_drq1 and pzywyd<=v_drq and kmbm like trim(v_cmxkm)||'%' and ifnull(trim(pzfhid),'')<>'';
            else
                insert into session.tmp_mxz_c (num,pxbm,lbbm,pzrq,pzzy,pzjf,pzdf,jd,ye,kmbm,kmmc)
                select v_i,v_cpxbm,'05',last_day(date(substr(v_drq,1,4)||'-'||substr(v_drq,5,2)||'-01')), '    本年累计',
                        v_nqcjf+value(sum(pzjf),0),v_nqcdf+value(sum(pzdf),0),v_cjd,v_nqce,v_cmxkm,v_ckmmc from jtppzk
                where pzywyd>=v_drq1 and pzywyd<=v_drq and kmbm like trim(v_cmxkm)||'%' ;
            end if;
            if substr(v_drq,5,2)='12' and v_nqce <> 0 then
                insert into session.tmp_mxz_c (num,pxbm,lbbm,pzrq,pzzy,pzjf,pzdf,jd,ye,kmbm,kmmc)
                values( v_i,v_cpxbm,'06',last_day(date(substr(v_drq,1,4)||'-'||substr(v_drq,5,2)||'-01')), '    结转下年',
                        0,0,v_cjd,v_nqce,v_cmxkm,v_ckmmc );
            end if;
            set v_date = date(substr(v_drq,1,4)||'-'||substr(v_drq,5,2)||'-01')+1 months;
            set v_drq=substr(trim(char(v_date)),1,4)||substr(trim(char(v_date)),6,2);
            set v_i=v_i+1;
        end while;
    end loop;
    close mx_cur;
     delete from session.tmp_mxz_c where pzjf+pzdf = 0   and trim(pzzy) <>'上年结转' and trim(pzzy) <>'上期结转';
    open mx_cur;
    loop_mx_cur1:
    loop
        fetch mx_cur into v_cmxkm,v_ckmmc;
        if sqlcode=100 then
           leave loop_mx_cur1;
        end if;
        set v_cmc=v_ckmmc;
        while posstr(v_cmc,'/')<>0 do
            set v_cmc=substr(v_cmc,posstr(v_cmc,'/'));
        end while;
        set v_ckmmc=v_cmc;
        set v_cjd1='  ';
        set v_nqce1=0;
        set v_i=0;
        open bm_cur1;
        loop_bm_cur1:
        loop
            fetch bm_cur1 into v_cpxbm,v_clbbm,v_cjd,v_nqce,v_cpzid,v_dpzrq;
            if sqlcode=100 then
              leave loop_bm_cur1;
            end if;
            set v_i = v_i + 1;
            set v_j = (case when v_printort=1 and v_ldfkm=0 and v_lzph=0 then v_printzyhs_zx else v_printzyhs_hx end);
            if mod(v_i,v_j)=v_j-1 then
                insert into session.tmp_mxz_c (pxbm,lbbm,pzzy,jd,ye,kmbm,kmmc) values(v_cpxbm,v_clbbm||'01','过次页',v_cjd,v_nqce,v_cmxkm,v_ckmmc);
                insert into session.tmp_mxz_c (pxbm,lbbm,pzzy,jd,ye,kmbm,kmmc) values(v_cpxbm,v_clbbm||'02','承前页',v_cjd,v_nqce,v_cmxkm,v_ckmmc);
                set v_i = 1;
            end if;
            if (ifnull(trim(v_cjd),'')='') and (v_dpzrq is not null) then
                update session.tmp_mxz_c set jd=v_cjd1, ye=v_nqce1 where pzid=v_cpzid ;
            end if;
            set v_cjd1 =v_cjd;
            set v_nqce1=v_nqce;
        end loop;
        close bm_cur1;
    end loop;
    close mx_cur;
  end if;
  set v_pxbm1='00000001';
  open bm_cur2;
  loop_bm_cur2:
  loop
        fetch bm_cur2 into v_pxbm,v_pzzy;
        if sqlcode=100 then
           leave loop_bm_cur2;
        end if;
        if v_lrjz = 1 then
           if trim(v_pzzy)='当日小计' then
               set v_pxbm1=v_pxbm;
           end if;
           if trim(v_pzzy)='过次页' then
              select value(sum(pzjf),0),value(sum(pzdf),0) into v_pzjf,v_pzdf from session.tmp_mxz_c where pxbm>v_pxbm1 and pxbm<=v_pxbm;
              set v_pxbm1=v_pxbm;
              update session.tmp_mxz_c set pzjf=v_pzjf,pzdf=v_pzdf where pxbm=v_pxbm and trim(pzzy)='过次页';
           end if;
        else
           if trim(v_pzzy)='过次页' then
              select value(sum(pzjf),0),value(sum(pzdf),0) into v_pzjf,v_pzdf from session.tmp_mxz_c where pxbm>v_pxbm1 and pxbm<=v_pxbm ;
              set v_pxbm1=v_pxbm;
              update session.tmp_mxz_c set pzjf=v_pzjf,pzdf=v_pzdf where pxbm=v_pxbm and trim(pzzy)='过次页';
           end if;
        end if;
  end loop;
  close bm_cur2;
  
  call p_pz_update_pzlbview(v_lsb);

  commit;
  begin
    declare sel_cur cursor with return to client for select * from session.tmp_mxz_c order by pxbm,lbbm;
    open sel_cur;
  end;
end;
end@

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -