按照用友U8的基础设置中的U8单据号生成规则,生成用友单据号

主要涉及的

表:VoucherNumber ,U8的单据规则设置,栏位:CardNumber:单据的编号,可以通过数据库跟踪工具,跟踪新增单据时,表:VoucherHistory在Insert的时候,记录的CarNumber

表:VoucherHistory,U8单据的历史流水号,记录所有单据的流水号

 /// <summary>/// /// </summary>/// <param name="db">U8的数据库对象,通过Linq to SQL Access 生成</param>/// <param name="cardNumber">单据编码 可通过数据库跟踪获得单据编码</param>/// <param name="whCode">仓库编码</param>/// <param name="depCode">部门编码</param>/// <param name="currDate">日期</param>/// <returns></returns>public static string GetVoucherCodeByRuleU812(UAppDataContext db, string cardNumber, string whCode, string depCode, DateTime currDate){var numItem = db.VoucherNumberU812s.SingleOrDefault(t => t.CardNumber == cardNumber);string codeString = "";if (numItem == null)throw new Exception("单据类型编码:[" + cardNumber + "]未设置单据规则");string SeekCodeNumber = "";string SeekCode = "";switch (numItem.Prefix1){case "远程号":{string curCode = GetFlagID(db, numItem.Prefix1Len);codeString = codeString + curCode;break;}case "仓库":{string curCode = GetWareHouseContrapose(db, whCode);codeString = codeString + curCode;break;}case "日期":case "制单日期":case "单据日期":if (numItem.Prefix1Rule == "年"){if (numItem.Prefix1Len == 2)SeekCodeNumber = currDate.ToString("yy");if (numItem.Prefix1Len == 4)SeekCodeNumber = currDate.ToString("yyyy");SeekCode = currDate.ToString("yyyy");codeString = codeString + SeekCodeNumber;}if (numItem.Prefix1Rule == "年月"){if (numItem.Prefix1Len == 2)SeekCodeNumber = currDate.ToString("yy");if (numItem.Prefix1Len == 4)SeekCodeNumber = currDate.ToString("yyMM");if (numItem.Prefix1Len == 6)SeekCodeNumber = currDate.ToString("yyyyMM");SeekCode = currDate.ToString("yyyyMM");codeString = codeString + SeekCodeNumber;}if (numItem.Prefix1Rule == "年月日"){if (numItem.Prefix1Len == 2)SeekCodeNumber = currDate.ToString("yy");if (numItem.Prefix1Len == 4)SeekCodeNumber = currDate.ToString("yyMM");if (numItem.Prefix1Len == 6)SeekCodeNumber = currDate.ToString("yyMMdd");if (numItem.Prefix1Len == 8)SeekCodeNumber = currDate.ToString("yyyyMMdd");SeekCode = currDate.ToString("yyyyMMdd");codeString = codeString + SeekCodeNumber;}break;case "手工输入":{codeString = codeString + numItem.Prefix1Rule;break;}}switch (numItem.Prefix2){case "远程号":codeString = codeString + GetFlagID(db, numItem.Prefix2Len);break;case "仓库":codeString = codeString + GetWareHouseContrapose(db, whCode);break;case "部门":codeString = codeString + GetDepartMentContrapose(db, depCode);break;case "日期":case "制单日期":case "单据日期":if (numItem.Prefix2Rule == "年"){if (numItem.Prefix2Len == 2)SeekCodeNumber = currDate.ToString("yy");if (numItem.Prefix2Len == 4)SeekCodeNumber = currDate.ToString("yyyy");SeekCode = currDate.ToString("yyyy");codeString = codeString + SeekCodeNumber;}if (numItem.Prefix2Rule == "年月"){if (numItem.Prefix2Len == 2)SeekCodeNumber = currDate.ToString("yy");if (numItem.Prefix2Len == 4)SeekCodeNumber = currDate.ToString("yyMM");if (numItem.Prefix2Len == 6)SeekCodeNumber = currDate.ToString("yyyyMM");SeekCode = currDate.ToString("yyyyMM");codeString = codeString + SeekCodeNumber;}if (numItem.Prefix2Rule == "年月日"){if (numItem.Prefix2Len == 2)SeekCodeNumber = currDate.ToString("yy");if (numItem.Prefix2Len == 4)SeekCodeNumber = currDate.ToString("yyMM");if (numItem.Prefix2Len == 6)SeekCodeNumber = currDate.ToString("yyMMdd");if (numItem.Prefix2Len == 8)SeekCodeNumber = currDate.ToString("yyyyMMdd");SeekCode = currDate.ToString("yyyyMMdd");codeString = codeString + SeekCodeNumber;}break;case "手工输入":codeString = codeString + numItem.Prefix1Rule;break;}switch (numItem.Prefix3){case "远程号":codeString = codeString + GetFlagID(db, numItem.Prefix3Len);break;case "仓库":codeString = codeString + GetWareHouseContrapose(db, whCode);break;case "日期":case "制单日期":case "单据日期":if (numItem.Prefix3Rule == "年"){if (numItem.Prefix3Len == 2)SeekCodeNumber = currDate.ToString("yy");if (numItem.Prefix3Len == 4)SeekCodeNumber = currDate.ToString("yyyy");SeekCode = currDate.ToString("yyyy");codeString = codeString + SeekCodeNumber;}if (numItem.Prefix3Rule == "年月"){if (numItem.Prefix3Len == 2)SeekCodeNumber = currDate.ToString("yy");if (numItem.Prefix3Len == 4)SeekCodeNumber = currDate.ToString("yyMM");if (numItem.Prefix3Len == 6)SeekCodeNumber = currDate.ToString("yyyyMM");SeekCode = currDate.ToString("yyyyMM");codeString = codeString + SeekCodeNumber;}if (numItem.Prefix3Rule == "年月日"){if (numItem.Prefix3Len == 2)SeekCodeNumber = currDate.ToString("yy");if (numItem.Prefix3Len == 4)SeekCodeNumber = currDate.ToString("yyMM");if (numItem.Prefix3Len == 6)SeekCodeNumber = currDate.ToString("yyMMdd");if (numItem.Prefix3Len == 8)SeekCodeNumber = currDate.ToString("yyyyMMdd");SeekCode = currDate.ToString("yyyyMMdd");codeString = codeString + SeekCodeNumber;}break;case "手工输入":codeString = codeString + numItem.Prefix1Rule;break;}//流水号string sortNumber = GetVouchNumber(db, cardNumber, numItem.Glide, numItem.GlideRule, SeekCode, numItem.GlideLen, currDate);codeString = codeString + sortNumber;return codeString;}/// <summary>/// 获得用友单据号/// </summary>/// <param name="dbu">用友数据实体</param>/// <param name="cardNumber">单据代号</param>/// <param name="content">单据生产规则[单据日期]</param>/// <param name="rule">流水类型[月/日]</param>/// <returns></returns>public static string GetVouchNumber(UAppDataContext dbu, string cardNumber, string content, string rule, string seed, int serialLen, DateTime currDate){VoucherHistory newItem = new VoucherHistory();var items = dbu.VoucherHistories.Where(t => t.CardNumber == cardNumber&& (t.cContent ?? "") == (content ?? "") && (t.cSeed ?? "") == (seed ?? ""));//string sql = "select * from  dbo.VoucherHistory  with (nolock) where CardNumber ='{0}' and isnull(cContent,'') ='{1}' and isnull(cSeed,'') ='{2}'";//sql = string.Format(sql, cardNumber, content, seed);//DataTable dt = SqlHelper.ExecuteDataset(Config.UFConn, CommandType.Text, sql).Tables[0];int currentNumber = 0;if (items .Count ()== 0){newItem = new VoucherHistory();newItem.bEmpty = false;newItem.CardNumber = cardNumber;newItem.cContent = content;newItem.cContentRule = rule;newItem.cNumber = "1";newItem.cSeed = seed;dbu.VoucherHistories.InsertOnSubmit(newItem);dbu.SubmitChanges();currentNumber = 1;}else{currentNumber = int.Parse(items.First().cNumber) + 1;int autoId = items.First().AutoId;var upItem = dbu.VoucherHistories.SingleOrDefault(t => t.AutoId == autoId);upItem.cNumber = currentNumber.ToString();dbu.SubmitChanges();//int autoId = int.Parse(dt.Rows[0]["AutoId"].ToString());//sql = "update dbo.VoucherHistory set cNumber ='{0}'  where AutoId ='{1}'";//sql = string.Format(sql, currentNumber, autoId);//dbu.ExecuteCommand(sql, "");//dbu.SubmitChanges();}string serialFormat = "";for (int i = 0; i < serialLen - 1; i++){serialFormat += "0";}serialFormat += "#";string usedNumber = "";usedNumber = currentNumber.ToString(serialFormat);return usedNumber;}private static string GetFlagID(UAppDataContext db, int len){string result = "";var aItems = db.AccInformations.Where(t => t.cSysID == "AA" && t.cName == "cID");if (aItems.Count() > 0){if (aItems.First().cValue == null)result = "";elseresult = aItems.First().cValue;}else{result = "";}string empStr = "";for (int i = 0; i < len - result.Length; i++){empStr += "0";}return empStr + result;}// '取得仓库的对照码,用于进行编码private static string GetWareHouseContrapose(UAppDataContext db, string cWhCode){var items = db.VoucherContraposes.Where(t => t.cContent == "WareHouse" && t.cSeed == cWhCode);if (items.Count() > 0){return items.First().cCode;}return "";}private static string GetDepartMentContrapose(UAppDataContext db, string depCode){var items = db.VoucherContraposes.Where(t => t.cContent == "Department" && t.cSeed == depCode);if (items.Count() > 0){return items.First().cCode;}return "";}

用友U8单据号生成源码相关推荐

  1. java wsdl反向生成源码,并使用CXF实现客户端调用代码

    1. 查询对方提供的wsdl链接,通过该链接以及wsdl工具生成源码文件. eg: wsdl地址为:http://sersh.passport.189.cn/UDBAPPInterface/UDBAP ...

  2. c语言远控,远控鼠标!C语言简单编程:整舍友必备+附送实例源码!

    远控鼠标!C语言简单编程:整舍友必备+附送实例源码!-1.jpg (10.71 KB, 下载次数: 0) 2018-10-11 05:24 上传 关注<一碳科技>有更多干货等着你哦! 远控 ...

  3. 傻瓜一键制作html,营销号生成器源码(纯HTML+CSS+JS)

    营销号生成器源码(纯HTML+CSS+JS),最近很火的营销号生成器相信很多人都不陌生,它能帮您生成一段非常标准的小编文案,并且内容废话极多,一般用来调侃使用.本次带来营销号生成器源码资源下载,包含了 ...

  4. 系统单据号生成规则推荐

    对订单类系统而言,单据号是非常重要的东西.一个好的单据号组成往往应该包含丰富的元素,利于问题的调查,业务的扩展. 这里列举几种不好的单据号范例: 单纯的数字递增: 001, 002, 003 //无业 ...

  5. php多用户表白源码,php源码]阿狸表白自动生成源码

    这个源码是本人一直再用的一款源码,刚开始用下载的时候问题也是蛮多的,经过自己的修改也是大大改善了. 这里是使用:传送门 如需修改生成完成的php文件页面管理文件夹请修改 love.php 中的 131 ...

  6. 微信公众号 php 导航,最新PHP微信公众号导航源码

    最新PHP微信公众号导航源码 源码搭建教程 主机必需支持php+mysql+伪静态 源码完整上传至服务器空间(不建议本地环境安装测试),打开帝国备份王http://你的网址/ebak 帝国备份王默认管 ...

  7. 帝国CMS整站|手机号/QQ靓号商城源码|适配移动端

    简介: 基于帝国CMS开发的QQ号码交易网站系统源码,不仅可以用来做QQ靓号交易平台: 源码改一改还可以做手机号码, YY号码等虚拟号码交易平台,号源可以找靓号贩子合作: 就QQ号而言现在拿得出手的好 ...

  8. 最新蓝色网址/公众号导航站源码+Yzmcms内核开发

    正文: 最新蓝色网址/公众号导航站源码+Yzmcms内核开发,用YzmCMS开发的模板,直接服务器打包出来的,上传安装就可以用,详细的安装教程在压缩包内,自己去看吧. 建议后台配置好后,直接在前台注册 ...

  9. PHP图片表情制作生成源码

    PHP图片表情制作微信 QQ斗图生成源码 PHP图片表情制作微信QQ斗图生成源码(自适应手机端) 可以给自己网站吸粉,源码是自适应的手机也可以浏览! 源码集成了搜狗搜索图片接口,可以一键搜索百万图片, ...

最新文章

  1. R语言nchar函数统计字符串中字符个数实战
  2. jQuery 之 serialize() serializeArray()
  3. vim java 注释_centOS7 下的vim java补全
  4. stm32 USB CDC 不接电脑无程序一直在USB中断问题
  5. 系统学习Lambda表达式
  6. TF:基于CNN(2+1)实现MNIST手写数字图片识别准确率提高到99%
  7. zookeeper学习03 使用场景
  8. linux连接svn上代码,代码管理平台介绍、安装svn、客户端上使用svn(linux)、客户端上使用svn(windows)...
  9. PyTorch | 通过torch.arange创建等差数列张量 | torch.arange()如何使用?torch.arange()使用方法 torch.arange()举例说明
  10. python输出今天时间_Python获取并输出当前日期时间
  11. NIO与零拷贝和AIO
  12. ubuntu使用apt-get时出现could not get lock怎么解决
  13. C#部分类与部分方法
  14. BERT模型—6.对抗训练原理与代码实现
  15. 调试sim800L模块
  16. 机器学习分析租房价格的影响因素
  17. UI之苹果各种屏的屏幕大小及分辨率
  18. 解决Gradle‘s dependency cache may be corrupt (this sometimes occurs after a network connection timeout
  19. 微信公众平台开发之微信红包的实现
  20. OpenWrt实现无线客户端之间的隔离

热门文章

  1. 电脑开机密码忘了怎么办。
  2. CSS盒模型--边框设置:border: 1px solid red(像素 样式 颜色 ),border-bottom:1px dotted #ccc
  3. EmpireCMS-此栏目暂无任何新增信息
  4. 我国风险投资体系的构建和相关政策研究
  5. UI、交互、产品设计的自学方法
  6. java jsp羽毛球馆管理系统
  7. 大型HR源代码人力资源管理(源码100%)
  8. 《口吃者的自我治疗》(4. 影响治疗的因素)
  9. 51Testing独家连载:(七)精通QTP——自动化测试技术领航
  10. IP-guard软件管理解决方案,高效管理软件应用