搜索
查看: 80|回复: 0

[技巧] NC5X凭证号补号脚本(包含未结过账的情况)

[复制链接]
 楼主| 发表于 7 天前 | 显示全部楼层 |阅读模式
扫码关注微信公众号

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册账号

x

  1. delete from gl_vouchermaxno;--删除最大号表数据
  2. delete from gl_vouchernosuppl;--删除补号表数据
  3. /*以下语句根据凭证表数据重新插入凭证最大号*/
  4. insert into gl_vouchermaxno
  5.   (select 0,
  6.           max(no),
  7.           a.period,
  8.           a.pk_glorgbook,
  9.           max(a.pk_voucher),
  10.           a.pk_vouchertype,
  11.           max(ts),
  12.           a.year
  13.      from gl_voucher a
  14.     where a.dr = 0
  15.       and (a.year || a.period >
  16.           (select s.settledyear || s.settledperiod
  17.               from gl_syssettled s
  18.              where s.pk_glorgbook = a.pk_glorgbook) or
  19.           (not exists (select s.settledyear || s.settledperiod
  20.                           from gl_syssettled s
  21.                          where s.pk_glorgbook = a.pk_glorgbook
  22.                          and s.settledyear is not null
  23.                          and s.settledperiod is not null)))
  24.     group by a.pk_glorgbook, a.year, a.period, a.pk_vouchertype);
  25. /*创建一个序列,插补号表数据时用*/
  26. create sequence sttt start with 100000000000000;
  27. /*以下语句根据最大号表和凭证表数据查出空号,并将其插入到补号表*/
  28. DECLARE
  29.   v_orgbook VARCHAR2(20);
  30.   v_year char(4);
  31.   v_period char(2);
  32.   v_vouchertype char(20);
  33.   CURSOR v_cursor IS
  34.         SELECT pk_glorgbook,year,period,pk_vouchertype FROM gl_vouchermaxno;
  35.   v_row v_cursor%ROWTYPE;
  36.   BEGIN
  37.      OPEN v_cursor;
  38.    Loop
  39.    
  40.     FETCH v_cursor INTO v_row;
  41.     v_orgbook := v_row.pk_glorgbook;
  42.     v_year := v_row.year;
  43.     v_period :=v_row.period;
  44.     v_vouchertype := v_row.pk_vouchertype;
  45.    
  46.     INSERT INTO gl_vouchernosuppl
  47.      SELECT 2, b.NO,
  48.           (SELECT pk_vouchermaxno
  49.              FROM gl_vouchermaxno
  50.             WHERE pk_glorgbook = v_orgbook
  51.             AND YEAR = v_year
  52.               AND period = v_period
  53.               AND pk_vouchertype = v_vouchertype),
  54.           substr(b.pk_glorgbook,16,20) || sttt.NEXTVAL, ts
  55.      FROM (SELECT a.n AS NO, ts, voucher.pk_voucher,a.pk_glorgbook, nosuppl.pk_vouchermaxno
  56.              FROM (SELECT ROWNUM AS n, ts AS ts, v_orgbook as pk_glorgbook
  57.                      FROM gl_voucher
  58.                     WHERE ROWNUM <=
  59.                              (SELECT maxno
  60.                                 FROM gl_vouchermaxno
  61.                                WHERE pk_glorgbook = v_orgbook
  62.                                  AND YEAR = v_year
  63.                                  AND period = v_period
  64.                                  AND pk_vouchertype = v_vouchertype) and gl_voucher.dr=0) a
  65.                   LEFT OUTER JOIN
  66.                   (SELECT pk_voucher, NO
  67.                      FROM gl_voucher
  68.                     WHERE gl_voucher.pk_glorgbook = v_orgbook
  69.                       AND gl_voucher.YEAR = v_year
  70.                       AND gl_voucher.period = v_period
  71.                       AND gl_voucher.pk_vouchertype = v_vouchertype
  72.                       AND gl_voucher.dr = 0) voucher ON voucher.NO = a.n
  73.                   LEFT OUTER JOIN
  74.                   (SELECT NO, pk_vouchermaxno
  75.                      FROM gl_vouchernosuppl
  76.                     WHERE gl_vouchernosuppl.pk_vouchermaxno =
  77.                              (SELECT pk_vouchermaxno
  78.                                 FROM gl_vouchermaxno
  79.                                WHERE pk_glorgbook = v_orgbook
  80.                                  AND YEAR = v_year
  81.                                  AND period = v_period
  82.                                  AND pk_vouchertype = v_vouchertype)) nosuppl
  83.                   ON a.n = nosuppl.NO
  84.                   ) b
  85.     WHERE b.pk_voucher IS NULL AND pk_vouchermaxno IS NULL;
  86.     EXIT WHEN v_cursor%NOTFOUND;
  87.    
  88.     end Loop;
  89.     close v_cursor;
  90.     end;
  91. /*删除序列*/
  92.     drop sequence sttt      
复制代码


您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

欢迎关注微信公众号

QQ|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号 )川公网安备 51072502110008号

GMT+8, 2021-4-13 06:15 , Processed in 0.014392 second(s), 8 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2005-2020.

快速回复 返回顶部 返回列表