自动生成业务单据流水号方案

       我们在开发管理软件的时候,常常遇到流水号(单据号、登记号)自动生成、控制和管理的问题。由于流水号
具有唯一性和连续性的特点,在实际开发过程中若处理不好,会产生流水号重复及断号的问题。特别是多个并发用
户同时保存一张同样的业务单据时,系统会返回多个相同的流水号。笔者以前在开发企业ERP系统的时候,就曾出
现多个并发用户同时保存同类型的业务单据时,系统返回相同的流水号。导致业务单据出现重复。经过多方研究,
最终笔者找到了解决方案,该方案无需对数据库加锁,高效又简单,在实际应用中取得了良好的效果!现把该方案写出来,
供同行参考批评。
      客户要求自动生成销售单据流水号,格式为:XS-年月-该年该月的流水号。具体格式如下:XS-1702-00003,表
示2017年2月开具第3单销售单,最大单据号为99999。根据客户的需求,我们按以下步骤编写流水号自动生成代码:

一.建立业务单据总表

CREATE TABLE [dbo].[YWDJZB] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [CKDH] [varchar] (30) NOT NULL ,
    [ZD1] [varchar] (20) NULL
    [ZD2] [varchar] (20) NULL
    [ZD3] [varchar] (20) NULL
) ON [PRIMARY]
GO

YWDJZB为业务单据总表 ,CKDH为流水号,具有唯一性和连续性的特点,所以设置为主键,防止重复。ZD1,ZD2,ZD3为
单据总表其他字段,可根据实际业务修改。

二.建立流水号生成存取过程(SQL SERVER数据库)
CREATE PROCEDURE  GETCKDH
 @getckdh       VARCHAR(50),--流水号类型
 @dwmc       VARCHAR(500),--@dwmc为要保存的单据记录,用户可根据实际需要传递[YWDJZB]表的记录,
 @RETURNDA   VARCHAR(150)  OUTPUT
   AS
   declare
   @DWGQ        VARCHAR(50),--生成的单据流水号变量
   @SQLSTR         NVARCHAR(1000)--SQL语句

  select   @DWGQ=MaxValue from  ( Select Max(Cast(RIGHT(CKDH,5) as Int))+1 as MaxValue  from
  YWDJZB where CKDH  like @getckdh+'%') AS TEMPDATA     --自动生成最新的单据流水号变量

   if len(@DWGQ)<>0  
        begin
          while len(@DWGQ)<5  
                    begin
                         set @DWGQ='0'+@DWGQ
                    End
          set @DWGQ=@getckdh+@DWGQ
       end
    else
   begin       
       set @DWGQ=@getckdh+'00001'
    end

select    @SQLSTR='insert     into YWDJZB (ckdh,ZD1,ZD2,ZD3)  values('+''''+@DWGQ+''''+@dwmc   

--根据最新的流水号保存单据记录


exec sp_executesql    @SQLSTR
if   EXISTS (select * from YWDJZB  where CKDH=@DWGQ)  
begin
    set  @RETURNDA=@DWGQ
end
else
  begin
  set  @RETURNDA='error'
end
         return
GO



三.管理软件调用,笔者采用DELPHI开发管理软件,具体代码如下:

     ........

    SQL.Add(' EXECUTE GETCKDH :getckdh, :dwmc, :RETURNDA   Output ') ;
    Parameters.Items[0].Value := getckdh;
    dwmc:=','''+ZD1BL+''','''+ZD2BL+''','''+ZD3BL+''');//用户可根据实际需要传递[YWDJZB]表的记录
    Parameters.Items[1].Value := dwmc;//
    Prepared;
    ExecSQL;
     result:=Parameters.Items[2].Value;
     ........

若SQL SERVER数据库成功生成流水号并保存以下记录:
into YWDJZB (ckdh,ZD1,ZD2,ZD3)  values(''流水号'',''字段1'',,''字段2'',,''字段3''),并自动返回自动生
成的流水号给后台软件,若处理失败,就返回"error"提示,后台软件可根据返回信息提醒软件操作员。

转载于:https://www.cnblogs.com/lzmbk/p/8456029.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA快捷键的使用成就手速之旅(要想手速变得快,快捷练习必须刚)

IDEA快捷键的使用 &#xff08;持续更新&#xff09; 1.必备合集 a.Ctrl CtrlF 文本代码查找神器呀简直CrtlR 文本代码替换CtrlZ 撤销&#xff08;基操基操&#xff09;CtrlY 删除当前行或者选中行 b.Shirt c.CtrlShirt d.Ctrlalt e.altShirt f.CtrlShirtalt 2.慢慢积…

一个项目部署多个节点会导致锁失效么_Redis分布式锁

分布式锁在很多场景中是非常有用的原语&#xff0c; 不同的进程必须以独占资源的方式实现资源共享就是一个典型的例子。有很多分布式锁的库和描述怎么实现分布式锁管理器(DLM)的博客,但是每个库的实现方式都不太一样&#xff0c;很多库的实现方式为了简单降低了可靠性&#xff…

GIT_服务器与本地环境构建

linux安装git包 很多yum源上自动安装的git版本为1.7&#xff0c;这里手动编译重新安装1&#xff1a;安装依赖包yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker2&#xff1a;删除已有的gityum remove git3&#xff1a…

Maven项目的基本创建步骤

先来个自己笔记的图片备忘一下&#xff0c;如果以后有时间再慢慢更新详细。

visualvm远程监控jvm_大型企业JVM实战:优化及面试热点分析

本次课程的笔记非常多&#xff0c;而且内容已经整理了好几个小时了&#xff0c;接着下来内容也会更多&#xff0c;也是大型企业JVM性能调优实战的最后一节&#xff0c;希望对你有帮助&#xff01;04&#xff1a;JVM性能监控与故障处理工具 大型企业JVM性能调优实战之总结17&…

Markdown图片路径的改变方法

Markdown图片路径的改变方法 Markdown用时一时爽&#xff0c;路径一改火葬场 Markdown在占用内存少的优点的同时&#xff0c;也注定了图片的存储不会是占用内存&#xff0c;而是根据路径和链接链到md文件里的。 相信有不少人会像我一样在做完一个Markdown笔记后&#xff0c;在…

SROP

title: SROP date: 2018-02-21 19:58:12 categories: 栈溢出 tags: - CTF - PWN - 栈溢出 SROP全称为 Sigreturn Oriented Programming &#xff0c;表明利用sigreturn这个函数实现ROP的技术。 参考资料 http://www.freebuf.com/articles/network/87447.htmlhttp://bobao.360.c…

python字符串的方法和列表的方法_Python学习笔记字符串操作之join()和split()方法,列表转字符串,字符串转列表...

随笔记录方便自己和同路人查阅。#------------------------------------------------我是可耻的分割线-------------------------------------------如果有一个字符串列表&#xff0c;需要将它们连接起来&#xff0c;成为一个单独的字符串&#xff0c;join()方法就很有用。join…

变量的比较之equals 与 == 的区别

Java的数据类型分为两种 1.基本数据类型&#xff0c;byte,short,char,int,long,float,double,boolean&#xff0c;只要使用运算符就可以了&#xff0c;进行比较只是简单进行比较其中的字节组合。 两个引用变量是否引用到堆上的同一个对象&#xff0c;也可以使用。 2.复杂的对象…

scheduledthreadpoolexecutor使用_ScheduledThreadPoolExecutor详解

本文主要分为两个部分&#xff0c;第一部分首先会对ScheduledThreadPoolExecutor进行简单的介绍&#xff0c;并且会介绍其主要API的使用方式&#xff0c;然后介绍了其使用时的注意点&#xff0c;第二部分则主要对ScheduledThreadPoolExecutor的实现细节进行介绍。1. 使用简介Sc…

SpringContextHolder 静态持有SpringContext的引用

SpringContextHolder 静态持有SpringContext的引用 package com.test.quartz;import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware;/**** 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何…

canvas绘制图像image

canvas绘制图像image 1.image的三个script的基本语法 准备工作:1.定义画布长度&#xff0c;获取2D绘图环境 ​ 2.建立对面对象&#xff0c;设置图片路径 ​ 3.载入图片&#xff0c;开始绘制 a.简单的画布上根据坐标绘制 ctx.drawImage(img,x,y) img为要绘制的图像&#…

根据时间戳生成编号_分布式系统的唯一ID生成算法对比

在复杂分布式系统中&#xff0c;往往需要对大量的数据和消息进行唯一标识。那么如何实现全局唯一id呢&#xff1f;有以下几种方案。(1)方案一&#xff1a;独立数据库自增id这个方案就是说你的系统每次要生成一个id&#xff0c;都是往一个独立库的一个独立表里插入一条没什么业务…

Ubuntu上安装Samba服务器实现家庭共享

如何在Ubuntu上安装Samba服务器 大多数Linux发行版都包含Samba。 要在Ubuntu上安装Samba&#xff0c;只需运行&#xff1a; sudo apt install samba 要检查您的Samba版本&#xff0c;请运行 sudo smbstatus 或者 sudo smbd --version 输出格式如下&#xff1a; Samba version …

解决使用Servlet输出乱码问题(一行代码解决一切)

使用servlet接收表单数据后&#xff0c;输出出现了乱码&#xff0c;如下: 解决方法: 将下面这行代码粘到你重写的doGet或者doPost方法里就可以了。 response.setContentType("text/html;charsetutf-8");

利用一维数组求菲波那契数列前40项的和并输出结果。_[W2D2]斐波那契数列

题目链接&#xff1a;斐波那契数列 - 题目 - 青藤 OJ题目来源&#xff1a;经典题题目大意输入 &#xff0c;输出 0&#xff0c;1 开头的斐波那契数列的第 n 项。这里我们不讨论递推方法&#xff0c;我们采用这道简单的题目简单说一下记忆化搜索相关内容。解法首先&#xff0c;基…

Python网络编程(1)-socket

我会在近期尽快更新好之前写的博客&#xff0c;会添加新的知识点和注意问题&#xff0c;排版和内容都会较之前有很大的改观&#xff0c;感谢大家一直的支持&#xff01; 1、 客户端/服务器架构 客户端/服务器架构也称主从式架构&#xff0c;简称C/S架构&#xff0c;它是一种网络…

Canvas之进度条的制作(矩形,圆环)

Canvas之进度条的绘制 基本进度条的绘制 1.矩形进度条 关键语法 获取画笔 var ctxdocument.getElementById(“id”).getContext(“2d”); 填充颜色 ctx.fillStytle“color”; setInternal()和clearInternal()的使用 代码(两种类型): <!DOCTYPE html> <html>…

该文件没有与之关联的程序来执行该操作_Liunx tty子系统分析之三 tty字符设备文件操作接口说明...

本章主要介绍tty字符设备文件对应的操作接口&#xff0c;从而说明tty设备的数据打开、关闭、读、写等接口的实现等内容。tyy file_operations定义tty字符设备文件操作接口的定义如下&#xff0c;主要包括tty_fops、console_fops、hung_up_tty_fops&#xff0c;其中console_fops…

jboss安装

找到压缩包 打开eclipse help 倒数第三个 找到hibernate.tools 转载于:https://www.cnblogs.com/xusongfeng/p/8473311.html