1. 单据编号的构成
为了避免重复及保持有序性,单据编号通常格式为 “关键字+YYMMDD+n位流水号,当然具体规则会根据业务需 要变化,包括 年月日的显示变化和流水号的位数变化(及编号升序);
例如: YS0812250001, YS200812250001,YS2008120001,YS081225001
2.代码实现关键
生成单据号的关键点归纳为两点:a.确定生成规则;b.查询当天尾数最大的单据号
3.范例
/*
* TODO:(新增时)生成单据编号(编码规则:“YN”+年月(4位)+流水号(4位) 如YN08110001)
* 单据号共10位
*/
public String creatBudPlanNo()
{
// 初始化Plan
Plan plan = new Plan();
List<Plan> planList = new ArrayList<Plan>();
// 生成单据编号的前面部分;YN+YY+MM+(四位流水)
String planNoStr = "YN";
//日期格式化--YYMM
String currentDateStr = DateUtil.getDate(DateUtil.getCurrentDate());// 格式为YYYY-MM-DD
String currentDate = currentDateStr.replaceAll("-", "");// 去掉中间的"-"
currentDate = currentDate.substring(2, 6);// 从第三位开始取4个字符(即去掉前后两位)
// 得到 YN+YY+MM
planNoStr = planNoStr + currentDate;
// 取得流水号,查询数据库与planNoStr进行匹配(可模糊查询)
plan.setBudPlanNo(planNoStr);
// 如果查询到记录,则在最大的送检编号基础上加1生成新的编号,如果没有记录则构建"YN+YY+MM+0001"
planList = findByModel(plan);
if (null != planList && planList.size() > 0)
{
// 循环比较得到最大的ID对应的是那条记录编号t---从而取得最大的送检编号),
int t = 0;
// 用于存储id
long m = 0;
// 用于存储i值对应的id
long n = 0;
for (int i = 0; i < planList.size(); i++)
{
m = planList.get(t).getId();
n = planList.get(i).getId();
// 比较id值,将更大的id值对应的记录号赋给t
if (m < n)
{
t = i;
}
}
// 如果存在,取出最大的编号,取出后四位,转化为Long进行计算
if (!StringUtil.isRealEmpty(planList.get(t).getBudPlanNo()))
{
// 取得编号
String str = planList.get(t).getBudPlanNo();
// TODO 先判断是否是长度为10(单据位数),如果不是则提醒有无效数据
if (10 != str.length())
{
return null;
}
// 取得字符串长度
int k = 0;
k = str.length();
if (4 < k)
{
// 取出最后四位,转换为Long型,自加1;
str = str.substring(k - 4);
long ln = Long.parseLong(str);
if (9999 > ln)
{
ln++;
// 转回string类型,将不足3位处补零,组合得到后三位流水号
str = Long.toString(ln);
String temp = "";
for (int i = 0; i < (4 - str.length()); i++)
{
temp += "0";
}
str = temp + str;
// 得到单据编号
planNoStr = planNoStr + str;
}
else
{
return null;
}
}
}
}
else
{
// 如果没有记录则构建"YN+YY+MM+0001",为编号文本框赋值
planNoStr = planNoStr + "0001";
}
return planNoStr;
}
分享到:
相关推荐
本文将深入探讨“K3单据编号生成代码”的相关知识点。 首先,我们来看`DATE_FORMAT.txt`可能涉及的内容。在K3系统中,单据编号通常会包含日期信息,以确保编号的唯一性并便于追溯。`DATE_FORMAT`可能指的是日期格式...
在金蝶K3 Wise系统中,管理和生成单据编号与单据内码是企业信息化管理中的重要环节。本文将详细解析如何通过SQL语句来实现这一功能,主要涉及的两个核心存储过程是`p_BM_GetBillNo`和`GetICMaxNum`。 一、生成单据...
该项目利用了C#的面向对象特性,通过类和对象来封装编号生成的逻辑。每个编号规则可以被抽象为一个类,包含生成规则的方法和属性。 3. **编号规则定制**: 这个工具允许用户自定义编号格式,可能包括前置固定字符...
1. **资产编号生成**:`assetNumber()`方法结合了时间与三位随机数来生成资产编号。 ```java String t = getStringDate1(); int x = (int) (Math.random() * 90) + 10; String serial = t + x; return serial; ...
在IT行业中,尤其是在Java编程领域,自动生成单据号是一个常见的需求,特别是在财务系统、订单管理系统或者任何需要唯一标识业务实体的地方。这个需求通常涉及到日期处理、字符串格式化以及可能的序列号生成。下面...
系统之间数据交互生成NC单据,那么单据号的生成可以不填也可以通过代码生成,防止跳号
本文将详细解析一个用于生成单据编号的存储过程,深入理解其设计原理与实现细节。 ### 存储过程概述 存储过程是一种在数据库中存储的预编译SQL语句集合,可以接受输入参数,执行一系列数据库操作,并返回结果。...
可以根据自己的需求定义比如 字符+长日期+编号(自增位数)比如:CSDN200812120001 CSDN200812120002 .... 字符+短日期+编号(自增位数)比如: CSDN08121200001 CSDN08121200002
VBA自动生成单据号
Word自动连续编号技术是指使用Word软件来实现自动连续编号的单据制作技术。这种技术可以应用于日常工作中需要打印自动连号的单据,或者给不同的客户发送相同信息的邮件,每封邮件的信息类型相同,但具体内容各不...
* 单据编号 * 单据类型 步骤四:单据动作组管理 在NC57系统中,需要配置单据动作组管理,点击“客户化→二次开发工具→单据管理→单据动作组管理”,配置好提交、审批、弃审等动作管理。 步骤五:动作脚本 在NC...
Oracle生成单据编号存储过程,在做订单类似的系统都可能会存在订单编号不重复,或是流水号按日,按年,按月进行重新编号。 可以参考以下存储过程 CREATE OR REPLACE procedure Pro_GetBillNO(TypeTable in varchar2...
在许多业务系统中,单据编号的自动生成是一项常见的需求。合理的编号规则不仅能够方便管理和追踪,还能体现系统的专业性和规范性。本文将详细介绍如何利用C#语言来实现单据号码的自动增加功能。 #### 知识点概览 1...
在现代的分布式系统中,确保每个实体的唯一标识是非常重要的,这通常涉及到全局唯一ID(Global Unique Identifier,简称GUID)的生成。SpringBoot作为一个轻量级的Java开发框架,广泛应用于微服务架构,而Vesta ID ...
【用友最大单据号工具大全】是一套专为用友软件用户设计的实用工具集,主要用于管理和查询用友系统中的最大单据编号。在企业信息化管理中,单据号作为业务记录的重要标识,对于数据的准确性、连续性和完整性至关重要...
流水号通常用于标识唯一性记录,例如订单编号、文档编号等。该代码通过结合当前日期与递增的序列号来生成唯一的流水号。 #### 二、关键代码分析 ##### 1. **命名空间引入** ```csharp using System; using ...
在网上搜了半天,都没有看到满意的程序。只好参照别人写的例子,自己写了。编号是按照年份和月份+三位序号自动生成的,用的是SQL server数据库,用VS2010编写的。调试已通过。希望给同为新手的各位一个参考。
存储过程是SQL Server等数据库管理系统中的一个重要功能,它是一组预编译的SQL语句集合,用于执行特定任务,如生成自定义序列号或单据编号。本文将深入讨论如何利用存储过程实现小系统单据的自动生成,并分析两种...