随笔 - 21  文章 - 12  trackbacks - 0
<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(4)

随笔档案

文章档案

新闻档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

前面讲到我在做2BizBox ERP开发的时候,遇到导入数据的需求,然后我用JXL对Excel进行了一些操作。

但我们不能让用户输入“1,2”这种坐标吧,如客户编号坐标;用户肯定喜欢用Excel的坐标,A1,B1等来表示。来个图看看:


所以就要求程序把A1,B1等转换成JXL认识的坐标。

第一步:校验数据,看是否符合Excel坐标表示法,我用的是正则

第二步:把字母转化成数字

代码供参考

publicstaticint[] splitExcelCell(String coordinate) {

      coordinate = coordinate.trim().toUpperCase();

      int[] colAndRow =newint[2];

     

      if (coordinate.matches("[A-Z]{1,2}[0-9]+")) {

        

         StringBuffer tmpS = new StringBuffer();

        

         for (int i = 0; i < coordinate.length(); i++) {

            char c =coordinate.charAt(i);

           

            if (c >= 48 && c <= 57) {

                colAndRow[0] = Integer.parseInt(coordinate.substring(i));

                break;

            }

           

            tmpS.append(c);

         }

        

         colAndRow[1] = splitExcelCol(tmpS.toString());

      }

     

      return colAndRow;

   }

  

 

   publicstaticint splitExcelCol(String coordinate) {

      coordinate = coordinate.trim().toUpperCase();

      int colNumber = 0;

     

      if (coordinate.matches("[A-Z]{1,2}")) {

         if (coordinate.length() == 1) {

            int k = coordinate.charAt(0) - 64;

            colNumber = k;

         }

         elseif (coordinate.length() == 2) {

            int i = coordinate.charAt(0) - 64;

            int j = coordinate.charAt(1) - 64;

           

            colNumber = i * 26 + j;

         }

      }

     

      return colNumber;

   }

当然程序也要做一些判断,如果用户输入有误的话,报一些错误提示。

posted @ 2012-06-19 09:54 zhangchuanzheng 阅读(198) | 评论 (0)编辑 收藏

 

大家知道TWaver Java总的TList继承自Swing的JList,所以我们可以很容易控制其选择,例如单选、多选等。但是本文介绍如何控制按指定数量进行选择。

人生就是一个不停选择的过程。所以,我们必须要谨慎的控制好你的选择,无论是TList的SelectionModel,还是人生之路。

在实际项目中,我们经常需要对list进行不能超过限定数量的多重选择控制。本文用到的技巧可能是本站最简单的一次了:利用DataBox的SelectionModel,当选择总数超过限定,就将最早的选择删除。

其中max我们可以指定。乳沟max=1则变成了单选。

通过这个思路,本文写了一个很简单的例子:通过控制多选数量,制作一个简单的点菜选择。相信你的系统中也经常会有类似的场景:通过list让用户选择指定数量的数据。



 

posted @ 2012-05-29 17:14 zhangchuanzheng 阅读(165) | 评论 (0)编辑 收藏

Java很早就推出了Java Web Start(简称JWS)技术。这一技术的初衷很好:希望将桌面程序和Web页面之间搭起一个无缝的桥梁。虽然Applet技术已经存在了十多年,但是它日趋老迈衰落,所以JWS也就应运而生了。

但是JWS并未顺利实现它的初衷。从Java的几次大改版都可以看到,JWS的bug多多,漏洞频频,Sun和Oracle不得不频繁的进行打补丁 修复。可以看看Java 5和6每次大小版本升级变化中,有多少是和Java Web Start有关的。难怪很多人都这样感叹:“哥再也不用Java Web Start部署应用了!”其实也未必,随着Java的不断完善,我们只要了解更多的技巧,就可以有效的消除一些JWS潜在的问题,并顺利的应用在企业应用 中。

以2BizBox ERP项目为例,本文介绍如何在企业应用中利用动态生成JNLP文件的技术来实现应用的快速部署。

大家知道,2BizBox ERP作为一个免费的高质量ERP软件,有成千上万的用户。就我们开发团队负责维护的服务器,就有近千台。每台服务器都是一家企业,每家企业又有几十上百 的客户端。如果采用下载客户端安装程序进行安装的方式来维护诸多的客户端,无疑是巨大的工作量,用户和我们开发团队都不会轻松方便。为了解决这一问题,采 用JWS无疑是必然的选择。

为了让客户端自动启动下载和安装程序,我们在企业的2BizBox ERP服务器上部署以下JNLP文件内容:

上面的JNLP文件定义了2BizBox ERP客户端启动所需要的jar包以及下载位置、jre版本等。

在实际应用中,效果良好。但是由于JNLP和JWS本身的bug,在某些情况下,后台jar程序更新升级后,用户侧启动jnlp并不能获得更新,需 要强行清空JWS缓存才行,这肯定不是一般用户懂得的。还有一种情况,就是由于ERP本身的jar包发生了变化(例如发生了增减),此时相当于jnlp文 件的内容发生了变化。这时候,要求用户一侧机器必须意识到jnlp的变化并先将jnlp进行更新。在很多java版本中(例如jre6的早期版本——例如 jre6 update20之前),由于潜在的一些bug等原因,都不能顺利的进行更新,导致程序启动失败。

如何解决这一情况呢?采用动态jnlp是一个有效的方法。

动态jnlp的思路是:在服务器的后端,通过jsp或servlet来动态的生成一个jnlp文件,而不是放置一个静态的固定不变的jnlp文件。这样,jnlp文件内容就可以通过后台应用的逻辑进行动态生成创建:需要什么jar包、需要什么jre版本等等。

以jsp为例。在这个jsp中,首先要注意的几个技术点是:要设置本页面不要被浏览器缓存,放置jnlp内容变化无法及时被更新;其次要设置 mime类型让浏览器认为它是一个jnlp文件,以便下载执行而不是直接在浏览器中显示出来。通过设置response即可达到这些目的:

其中,禁止浏览器和webstart缓存jnlp内容,通过设置:response.setHeader(“Pragma”, “no-cache”);和response.setHeader(“Expires”, “0″);
设置文件类型,并给定一个动态的文件名。这个通过这个进行:response.setHeader(“Content-Disposition”, “filename=\”bb.jnlp\”;”);response.setContentType(“application/x-java-jnlp-file”);

一个需要注意的问题是,在动态生成jnlp文件时,要注意jnlp文件中的href标签不要进行设置。为什么呢?看一下jnlp的格式文档是这样说的:
http://lopica.sourceforge.net/ref.html#jnlp



The jnlp file's one and only root.

Attributes
spec=version , optional
Specifies what versions of the jnlp spec a jnlp file works with. The default value is 1.0+. Thus, you can typically leave it out.
version=version , optional
Specifies the version of the application as well as the version of the jnlp file itself.
codebase=url , optional
Specifies the codebase for the application. Codebase is also used as base URL for all relative URLs in href attributes.
href=url , optional
Contains the location of the jnlp file as a URL. If you leave out the href attribute, Web Start will disable the update check on your JNLP file, and Web Start will not treat each new JNLP file as an application update - only updated jar files will. Leaving out href usually makes only sense if your jnlp file is created dynamically (that is, throug a cgi-script, for example) and if your jnlp file's arguments or properties change from request to request (user to user).
Note, that Java Web Start needs href to list your app in the Web Start Application Manager.

可见在动态生成jnlp时候就不要设置href了,这样就可以保证每次浏览器会重新下载jnlp文件内容,否则可能会被缓存,无法及时更新程序。

另外一个技巧是:jnlp文件中的jar包,可以进行动态检查文件jar包并动态生成。这样,如果以后程序的jar文件有增减,就不必修改jnlp文件了。方法也很简单:检查当前web在服务器的绝对路径,并list所有的jar文件,然后在jnlp生成时候输出即可:

然后在jar的部分这样列出:

最后,如果需要在jnlp中指定当前服务器的ip地址或主机地址,也可以通过动态生成。例如jnlp文件中的codebase,就是如此。另 外,2BizBox ERP还需要在主函数中给出当前服务器的ip地址。而对于上千家的2BizBox服务器,每个jnlp要手工维护ip地址,是不可想象的。这里通过动态生 成,就永远的解决了这个问题:

然后在jnlp中:

这样,通过jsp动态生成jnlp的方案就完成了。它在2BizBox ERP中应用良好,方便的让上千家2BizBox ERP的云主机用户快速得到程序更新,而简化了程序的维护方式。

posted @ 2012-05-23 10:31 zhangchuanzheng 阅读(390) | 评论 (2)编辑 收藏
又免费,又免费,ERP免费,现在进销存也免费了...2BizBox-A2正式发布
转个贴给大家看看哈
用户们盼望已久的2BizBox-A2正式发布了。 :P

总有人抱怨2BizBox ERP还是太复杂难用。现在好了,A2提供了一个简化版的2BizBox,它类似一个“进销存”版本的2BizBox。
A2对2BizBox ERP的模块进行了精心的简化和优化,业务只涵盖了采购、销售、库存和财务,而去掉了工单和生产环节,是一个典型的“进销存+财务”的业务系统。

A2特别 适合没有生产、或不想实施生产业务的企业。

A2可以平滑升级到2BizBox ERP。

主要特点
• 2BizBox ERP精简版:包括进销存+财务,去掉了工单和生产环节
• 简单易用,业务精简,适合不含生产业务的中小企业,或暂不对生产进行管理的企业
• 可平滑无缝升级到2BizBox ERP
• 界面风格和2BizBox ERP完全保持一致

主要功能
• 基础数据模块、采购、销售、库存、财务
• 实现一体化进销存+财务业务
• 简化ERP流程,可直实现无订单直接收发料
附件:
2bizbox-109.png
2bizbox-109.png [ 28.66 KiB | 被浏览 8 次 ]

附件:
2bizbox-117.png
2bizbox-117.png [ 139.31 KiB | 被浏览 8 次 ]

下载地址:http://www.2bizbox.cn/product/download
posted @ 2012-04-28 18:25 zhangchuanzheng 阅读(358) | 评论 (0)编辑 收藏
转发一下,确实很强大啊...
关键是还免费...
 2BizBox最新版本 v3.5.0版本正式发布
为了让大家能够度过一个愉快、祥和的5.1假期,2BizBox团队不辞辛苦、全体发力,最新版本 v3.5.0版本正式发布…

新增功能:
1. 在控制面板中添加了“发料时必须指定领料人”的开关,启用后每次发料时必须填写领料人,防止漏填;
2. 工单收料单列表添加“操作员”一列;
3. 在“物料清单零件使用统计”、“零件短缺”界面中添加“项备注”一列;
4. “工单工作簿”添加一个“全不选”的按钮;
5. 工单排产时,用特殊颜色标记有替换件的零件项;
6. 公司设置中“零件号最大长度”后面加以标识“最大值为50”;
7. 回收单收料单和退货单发货单支持项的拆分;
8. 销售单增加“以含税价作为销售单项计算标准”的功能;
9. 零件的选择界面改进,增加按型号、产品编码、商品编码等参数寻找零件的功能;
10. 增加开关控制“是否显示数字尾零功能”,可隐藏数量小数点后的尾零,价格默认保留两位小数;
11. 改进付款周期;改进付款周期界面的选择以及添加功能;增加初始化付款周期老数据的功能;
12. 销售单和工单增加“取消”按钮;
13. 工艺上增加“备注“字段;
14. 改进上传零件文档功能,不限制上传文档名;
15. 改进了零件界面零件单位、采购单位以及采购单位转换率的显示方式;
16. 改进采购单项上零件单位,采购单位以及采购单位转换率的显示方式;


修复功能:
1. 修复采购单,收料单,应付账款及工单零件明细四舍五入造成的金额差异的问题;
http://www.2bizbox.cn/forum/viewtopic.php?f=29&t=4450
2. 修复导入客户和供应商,如若其编号含有小写字母,导入后,客户以及供应商的联系人添加后无法保存的问题;
3. 修复“按物料查看销售单X物料清单”报表中“标准成本”和“平均成本”位置颠倒的问题;
4. 修复“应付账款”无法对员工付款的问题;
http://www.2bizbox.cn/forum/viewtopic.php?f=6&t=3096
5. 修复因采购单“项目”数据太长造成的无法收料问题;
http://www.2bizbox.cn/forum/viewtopic.php?f=4&t=4348
6. 修复“搜索检验单”报表无法搜索出全部检验单的问题;
http://www.2bizbox.cn/forum/viewtopic.php?f=4&t=4308
7. 修复分库后,导入工具库存信息报错的问题;
8. 修复创建工单后,无法带入零件单位的问题;
9. 修复发货需要查看地址权限的问题;
http://www.2bizbox.cn/forum/viewtopic.php?f=4&t=4115
10. 修复繁体发送通知无法选择收信人的问题;
11. 修复“从盘存表中搜索需要调整库存的零件”无数据的问题;
http://www.2bizbox.cn/forum/viewtopic.php?f=4&t=3853
12. 修复“搜索员工”无法搜索出批量导入的员工问题;
http://www.2bizbox.cn/forum/viewtopic.php?f=29&t=3827
13. 修复邮件服务器不支持“-”等符号的问题;
http://www.2bizbox.cn/forum/viewtopic.php?f=3&t=1359
14. 修复工单排产时候,如果“替换件”数量过大,替换不成功的问题;
http://www.2bizbox.cn/forum/viewtopic.php?f=2&t=3724


下载地址:

http://www.2bizbox.cn/product/download
posted @ 2012-04-28 18:15 zhangchuanzheng 阅读(455) | 评论 (0)编辑 收藏


作为供应商,可能会在一个月内接到同一客户的多次采购请求,会建立多个销售单。但对每个销售单每次都开相应金额发票又略显繁琐。在2BizBox里,您可针对此种情况,做批量应收账款建立。

在财务模块->应收账款->按发货单项添加应收账款,选择要建立应收账款的客户,同时选择币种,点击确定,出现如下图1:
附件:
batch AR.png
batch AR.png [ 87.72 KiB | 被浏览 11 次 ] 


勾选希望应收账款合并建立到一起的发货单,点击确定后,出现合并到一起的应收账款页面,如下图2:
附件:
one AR.png

随后,财务相关人员即可进行收款等操作事宜。
posted @ 2011-10-25 09:33 zhangchuanzheng 阅读(226) | 评论 (0)编辑 收藏

posted @ 2011-10-24 09:53 zhangchuanzheng 阅读(1469) | 评论 (2)编辑 收藏