ZH/Case-Study-01-Journal-03

From ADempiere
Revision as of 02:02, 10 December 2010 by Peanutblake (Talk) (2010-12-09)

Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.

<返回中文首页>

实施日志-03

2010年12月

2010-12-02

JasperReport父子表问题

JasperReport父子表在客户端(Client)上的布署

  • 今天用ireport建立父子报表,即包含子报表(subreport)的报表。在ireport上可以正常显示,但是在adempiere客户端却无法显示(系统报错代码附在后面)。
  • 第二天把这个问题解决了,发现是iReport的版本问题。
  • ADempiere 3.6.0 LTS 集成的JasperReport版本是3.7.3。而我用的iReport版本是3.7.6。今天重新下载了iReport-3.7.3,父子报表经编译后,在客户端(Client)可以正常显示。

JasperReport父子表在Web服务器上的布署

  • JasperReport父子表在Web服务器上的布署,在官方文档上发现子报表需要额外编译。Problem_with_subreports
  • 看过这篇文档后存在几点疑问:
  1. 这个是以网页访问(WebApp)为例子的,对于客户端(Client)访问是否有效?
  2. 第4步复制编译好的Jasper文件。原文摘录如下:
Step 4: Copy the new subreport compiled file
Now you must copy the new compiled file to the location as you need. In the example we will copy
From: C:\Documents and Settings\Alejandro\Configuración local\Temp\
To  : D:\Adempiere\jboss\server\adempiere\deploy\WebApp.ear\webApp.war\
  • 对于第4步有三点疑问:
    1. Windows操作系统下编译好的文件放置在C:\...\Temp\目录下,Linux操作系统下在什么目录?
    2. 不使用org.compiere.report.ReportStarter,而是使用iReport进行编译,是否可行?
    3. 文件复制的目标目录Adempiere\jboss\server\adempiere\deploy\WebApp.ear\webApp.war\没有找到。我能找到的相类似的目录是/home/media/adempiere/jboss/server/adempiere/deploy/jboss-web.deployer,我应该放在哪个目录下?我是否应当建立目录../WebApp.ear/webApp.war/?

ADempiere执行JasperReport报错代码

  • ADempiere ERP 3.6.0 客户端执行经iReport 3.7.6编译后的父子报表,报错代码如下:
CCache.clear - java.beans.PropertyVetoException: Skip reset for trx entries cache
[INFO] Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 2, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> AdempiereDS, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> org.postgresql.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> z8kfsx8c1axcccl1kdzo6b|277b5f00, idleConnectionTestPeriod -> 1200, initialPoolSize -> 1, jdbcUrl -> jdbc:postgresql://localhost:5432/adempiere?encoding=UNICODE, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 900, maxIdleTimeExcessConnections -> 1200, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 1, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> SELECT Version FROM AD_System, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
Exception in thread "jasper simple-1000069" java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/callsite/CallSiteArray
	at salescontract_1291337525218_186281.$createCallSiteArray(calculator_salescontract_1291337525218_186281)
	at salescontract_1291337525218_186281.$getCallSiteArray(calculator_salescontract_1291337525218_186281)
	at salescontract_1291337525218_186281.<init>(calculator_salescontract_1291337525218_186281)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at java.lang.Class.newInstance0(Class.java:355)
	at java.lang.Class.newInstance(Class.java:308)
	at net.sf.jasperreports.engine.design.JRAbstractJavaCompiler.loadEvaluator(JRAbstractJavaCompiler.java:98)
	at net.sf.jasperreports.engine.design.JRAbstractCompiler.loadEvaluator(JRAbstractCompiler.java:320)
	at net.sf.jasperreports.engine.JasperCompileManager.loadEvaluator(JasperCompileManager.java:240)
	at net.sf.jasperreports.engine.fill.JRFillDataset.createCalculator(JRFillDataset.java:421)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:428)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:76)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:86)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:56)
	at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:142)
	at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:52)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)
	at org.compiere.report.ReportStarter.startProcess(ReportStarter.java:561)
	at org.adempiere.util.ProcessUtil.startJavaProcess(ProcessUtil.java:160)
	at org.adempiere.util.ProcessUtil.startJavaProcess(ProcessUtil.java:105)
	at org.compiere.apps.ProcessCtl.startProcess(ProcessCtl.java:649)
	at org.compiere.apps.ProcessCtl.run(ProcessCtl.java:432)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.runtime.callsite.CallSiteArray
	at java.lang.ClassLoader.findClass(ClassLoader.java:359)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	... 26 more

讨论栏

2010-12-03

JasperReport大写金额的问题

  • 父子表的问题解决了之后,今天用iReport来制作报表还算顺利。只是遇到中文大写金额的问题。
  • 找到一篇文章在JasperReport报表中加入大写金额,不知道能否在ADempiere下实现。有空再试试。

数据格式问题

今天发现几个问题:

1. 用电子表格向数据库导入数据时,要注意电子表格的字段类型的设定,尤其是以数字表示的字符。今天发现有个reference的其中几下拉选项无法选择,查找发现是电子表格的数字“1”导入到数据库后变成了“1.0”,导致ad_ref_list无法以value来匹配。

2. 在数据库新增字符型字段时,要注意区分固定长度字符和非固定长度字符的设定。比如我之前设定“合同编号”(Contract No)时就设定为固定长度:

 ALTER TABLE c_order ADD ContractNo character(12);

结果发现实际输入合同编号不足12位时,数据库会自动补足空格,在报表中很不美观。于是改为:

 ALTER TABLE c_order ALTER ContractNo TYPE character varying(12);

讨论栏

2010-12-09

销售订单窗口优化调整

  • 对销售订单窗口进行了优化:
    • 主要是关闭了不用的选项、设置Field Group、设置默认值。
    • 在Document Type里把不需要的Sales Order Type改为禁用。

销售合同的报表格式调整

  • 已经把销售合同的报表格式调整到位。
  • 主要解决了以下问题:
    • 页码问题。需要设置好Page_Number的有效范围。
    • 文本框随内容自动调整高度问题;
    • sub-report相对路径问题;
    • 金额合计问题。需要新建变量,并设置好生效范围;
    • ADempiere与JasperReports参数传递问题。
    • 避免文本框跨页分断问题。将Band: Detail 1的属性Split Allowed设置为False。
    • 文本框NULL值问题。将文本框属性Blank when Null设置为True。

几点发现

  • 发现用Import Product窗口不但可以导入产品信息,还可以导入产品价格表,非常方便。
  • 发现登录用户名也是大小写敏感的,同时也可以用中文用户名登录。
  • Sales Order当中Sales Representative的设置: 要同时设置User和Business Partner,并关联起来。

Address的Country默认值设置

  • 在Business Partner窗口的Location页签有个Address字段,点击右侧小图标会弹出一个"Add New Location/Address"或"Update Location/Address"窗口,这窗口找不到设置的地方。
  • 我的目的是把Location/Address的Country默认值设置为China。
  • 我尝试过通过"Window, Tab & Field"窗口、"Table & Column"窗口,设置Country字段的Default Logic,均告无效。
  • 后来发现这是系统内建的,这样处理很不方便。
 This window is made manual.
 This is the class for it: VLocationDialog

讨论栏

Organization设置

疑问:Organization设置为Tongji Org与*有什么区别?感觉会影响到Sales Order里的Price List显示。

链接

本系列链接

相关链接