天天看点

系统单据编号的几种实现方法

系统单据编号介绍:

<1>直接调用系统函数:(模组名,单号,单据日期,单据性质,表名,栏位名……)

CALL s_auto_assign_no("aco",g_cno.cno01,g_cno.cno02,"14","cno_file","cno01","","","")
RETURNING li_result,g_cno.cno01      

<2>简单的一句SQL语句实现编号,主要单别+日期年月日+时间时分秒毫秒

SELECT 'E11-'||TO_CHAR(SYSDATE,'YY')||
(SELECT CASE  MONTH(TO_CHAR(SYSDATE)) 
WHEN 01 THEN '1' WHEN 02 THEN '2' WHEN 03 THEN '3' WHEN 04 THEN '4'
WHEN 05 THEN '5' WHEN 06 THEN '6' WHEN 07 THEN '7' WHEN 08 THEN '8' 
WHEN 09 THEN '9' WHEN 10 THEN 'A' WHEN 11 THEN 'B' WHEN 12 THEN 'C' 
END 
FROM DUAL)||TO_CHAR(SYSDATE,'DDHH24MI')||TO_CHAR(SYSTIMESTAMP,'ssff2') 
FROM DUAL 
      

Systimestamp 函数返回本机数据库上当前系统日期和时间(包括微秒和时区).

你也可以选择使用to_char()函数来转换systimestamp()函数.

例如:
1.SQL> select systimestamp 时间 from dual;
时间
--------------------------------------------------------------------------------
22-9月 -12 09.02.21.389797 上午 -04:00

2.SQL> select to_char(systimestamp,'SSSS.FF') 格式化 from dual;

格式化
--------------
1313.327268

3.SQL> select to_char(systimestamp,'YYYY-MM-DD HH24MISSFF9') 格式化后 from dual;

格式化后
--------------------------
2012-09-22 090815972656000      

<3>单据流水号函数(没加单别)

#单据编号为l_slip
FUNCTION s_auno(p_date)
DEFINE   l_slip     VARCHAR(8),   #单别
          t_slip     VARCHAR(8),   #单号
          p_date     DATE,         #日期参数,根据日期得到年月
          l_date     VARCHAR(6),
         l_yymm     VARCHAR(4),
         l_mxno     VARCHAR(8),
         t_mxno     VARCHAR(4),
         t_s        VARCHAR(4)

WHENEVER ERROR CONTINUE
MESSAGE "单据取号中..."
#--编号前四位(单据年月号)--
#--如果日期没有输入则以当前日期为准
   IF cl_null(p_date) THEN
      LET l_date = g_today USING 'YYYYMM'
   ELSE
      LET l_date = p_date USING 'YYYYMM'
   END IF 
#--截取年月的后四位--
   LET l_yymm = l_date[3,6]
   LET t_slip[1,4] = l_yymm
#--编号后四位(单据流水号)--
   LET t_s = t_slip[1,4]
   SELECT MAX(编号) INTO l_mxno FROM 表
   WHERE  编号[1,4] = t_s
   CASE WHEN l_mxno IS NULL      LET t_slip[5,8] = '0001'
        WHEN l_mxno IS NOT NULL  LET t_slip[5,8] = (t_mxno+1) USING '&&&&'
        OTHERWISE                CALL cl_err('',SQLCA.sqlcode,1)
   END CASE
   LET t_mxno = l_mxno[5,8]
#--编号OK--
   MESSAGE "已经产生单据编号:",t_slip
   LET l_slip = t_slip
   RETURN l_slip
END FUNCTION