AppQuicker

快速搭建应用系统教程

  • 首页
  • 教程
  • 疑难解答
  • 关于AppQuicker

#16 单据卡片式联查分析–链接技术&左主格

上一章介绍了实现列表式联查的实现方法,本章承接上一章的思路,继续教你如何实现单据式的联查分析,以合同举例:现在我们要从一张客户合同查询表,联查一张具体的合同单据。

联查效果如下图:

SNAG-0021

本章重点:

Ð 左主格

第一步制作客户合同查询表

打开设计器,新建一张如下格式的报表,保存为contract2.raq 。

SNAG-0022

【配置_ 数据集】,新建一个 SQL 检索 类型的数据集 ds1 ,SQL 语句如下:

SELECTDISTINCT

contract.customerid,contract.contractid,contract.empid,contract.

orderdate,contract.consignmentdate,contract.transmethod,contract.balancetype

FROMcontract

注意到了吗?在SQL语句中使用了distinct语句,这样结果数据集中就避免出现完全重复的记录,如果你以前从没接触过涉及到合同的信息系统,不妨想一下,这里使用distinct的意义吧!

增加一个 SQL 检索 类型数据集cus ,SQL 语句如下:

SELECT customer.customerid,customer.customername FROM customer

增加一个 SQL 检索 类型数据集emp ,SQL 语句如下:

SELECT employee.empid,employee.empname FROM employee

数据集tab页 ,选择数据类型8分组 ,拖动ds1 节点下的customerid 到A2 ,设定分组前按照customerid 顺序排列,修改后表达式如下:

=ds1.Group(customerid,false)

选择数据类型8列表 ,拖动ds1 节点下的contractid 到B2 。

选择数据类型8取值 ,拖动ds1 节点下的empid 到C2 ;orderdate 到D2 ;consignmentdate 到E2 ;transmethod 到F2 ;balancetype 到G2 。

选择A2 ,切换到属性区域â 显示值â 表达式,输入:

cus.select1(customername,customerid==value())

选择B2 ,设置前景色为蓝色,字体带有下划线,

选择C2 ,切换到属性区域â 显示值â 表达式,输入:

emp.select1(empname,empid==value())

选择D2 ,E2 ,切换到属性区域â 显示值â 表达式,输入:

str(value(),”yyyy-MM-dd”)

选择F2 ,切换到属性区域â 显示值â 表达式,输入:

if(value()==”1″,”铁路运输“,”公路运输“)

选择G2 ,切换到属性区域â 显示值â 表达式,输入:

if(value()==”1″,”现金支付“,”银行支票“)

选择B2 ,切换到属性区域â 超链接â 表达式,输入:

“javascript:showContract(”+B2+”)”

第二步制作合同单据表

在设计器中新建一张报表,保存为contract3.raq 格式如下:

SNAG-0023

选择A2 ,切换到属性区域â 左主格â 属性值,输入:B2 ,拖动鼠标选择第三行,第四行,第五行,设定它们的左主格也为B2 ,操作同上,选择B6 ,设定左主格为B2 ,选择A6 ,设定左主格为B6 (这里注意是B6 不是B2 )。

【配置_ 参数】,新建一个整数类型的参数contractid ,允许为空。

【配置_ 数据集】,新建一个 复杂SQL 类型的数据集 contract ,SQL 语句如下:

select * from contract where ? is null or contractid=?

参数为:@contractid 结果类型:默认,@contractid 结果类型:默认

新建一个 SQL 检索 类型的数据集 product ,SQL 语句如下:

SELECT product.productid,product.productname FROM product

新建一个 SQL 检索 类型的数据集 customer ,SQL 语句如下:

SELECT customer.customerid,customer.customername FROM customer

新建一个 SQL 检索 类型的数据集 employee ,SQL 语句如下:

SELECT employee.empid,employee.empname FROM employee

数据集tab页 ,选择数据类型8分组 ,拖动contract 节点下的contractid 到B2 ,设定分组前按照customerid 顺序排列,修改后表达式如下:

=contract.Group(contractid,FALSE)

选择数据类型8取值 ,拖动contract 节点下的orderdate 到E2 ,选择E2 ,修改表达式为:

=str(contract.orderdate,”yyyy-MM-dd”)

插入语这里的str()函数把取得的订购日期字段转换为”yyyy-MM-dd”格式的字符串。

选择数据类型8取值 ,拖动contract 节点下的empid 到G2 ;customerid 到B3 ;balancetype 到B4 ;transmethod 到E4 ;consignmentdate 到G4 。

选择数据类型8列表 ,拖动contract 节点下的productid 到B6 。

选择数据类型8取值 ,拖动contract 节点下的amount 到D6 ;price 到E3 ;money 到F6 。

选择A6 ,在表达式编辑框内输入:=&B6 。

插入语现在,你可以预览一下当前的报表,参数中不要输入任何数值,显示的结果是不是出乎你的意料?能够做出这种排列布局的报表完全是主格设置的功劳。你要重新看一下我们开始时做的左主格设置。我们设定A2,B6,三四五行的左主格为B2,你知道B2中显示的数据是分组后的合同编号,并且它默认是纵向扩展的,也就是说有一个合同编号,就会扩展出一个附属的A2(因为与B2同行的其它单元格【除A2外】随同B2一起扩展(为什么?),这里我不再强调它们的左主格是B2),三四五行中的取数单元格我设置的表达式格式是:数据集.字段,这样它们也不是扩展格,所以有一个B2也就会有一个附属的三四五行(这句说起来太别扭,理解起来费劲就再预览一下报表吧!)。而B6中引入的表达式是:=contract.Select(productid),这是一个可扩展的表达式,它把自身的左主格B2记录合同id下的所有产品编号填写在B6中,我们设定A6的左主格为B6,则A6是B6附属格,有一个B6就会有一个A6。而A6的表达式=&B6返回A6在主格B6所有扩展格中的对应位置。

千万不要只看上面的文字描述,结合预览报表操作,你可以很好的理解左主格的概念。左主格和上主格的不同之处是它们分别针对纵向扩展和横向扩展,理解了主格的作用,你一定可以做出复杂的双向扩展的交叉报表。

第三步编制JSP文件

在C:\Program Files\runqianReportCenter\webapps\reportCenter 目录下,新建一个文本文档,保存为bb1.jsp 。内容如下:

#001 <%@ page contentType=”text/html;charset=GBK” %>

#002 <%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report”%>

#003 <SCRIPT language=”JavaScript” src=”js/Alai_tc.js”></SCRIPT>

#004 <html>

#005 <body leftMargin=0 top =0 rigtMargin=0 bottonMargin=0>

#006 <report:html name=”report1″ reportFileName=”basic/contract2.raq”

#007 funcBarLocation=”"

#008 exceptionPage =”myerror.jsp”

#009 useCache=”no”

#010 />

#011 </body>

#012 </html>

#013 <SCRIPT LANGUAGE=”JavaScript”>

#014 function showContract(c_id)

#015 {

#016 var strurl=”bb2.jsp?params=contractid=”+c_id;

#017 window.open(strurl,”_blank”,”Scrollbars=no,Toolbar=no,Location=no,Direction=no,titlebar=no,

Resizeable=no,Width=490 ,Height=500,top=”+(window.screen.height-500)/2+

“,left=”+(window.screen.width-500)/2);

#018 }

#019 </SCRIPT>

新建jsp 文件bb2.jsp ,内容如下:

#001 <%@ page contentType=”text/html;charset=GBK” %>

#002 <%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report”%>

#003 <SCRIPT language=”JavaScript” src=”js/Alai_tc.js”></SCRIPT>

#004 <html>

#005 <body leftMargin=0 top =0 rigtMargin=0 bottonMargin=0>

#006 <%

#007 String params=request.getParameter(”params”);

#008 %>

#009 <report:html name=”report1″ reportFileName=”basic/contract3.raq”

#010 params=”<%=params%>”

#011 funcBarLocation=”"

#012 exceptionPage =”myerror.jsp”

#013 useCache=”no”

#014 />

#015 </body>

#016 </html>

第四步发布报表

登录数据中心控制台,进入报表发布,在查询分析节点下新建 超链接 类型节点 合同联查示例,选择系统功能链接,在编辑框内输入:/bb1.jsp 。

登录数据中心业务平台,点击节点合同联查示例,你能看到如本章开头展示的报表吗?

现在你知道要如何做出单据式的联查了,结合实际的业务,有时间可以做一个单据的修改功能的练习:从一个合同列表中找到要修改的合同,点击合同编号,在新窗口中打开单据式的合同页面,对合同的数据进行编辑,重新保存。修改保存功能可以参照第13 章的相关内容。

下一章我们将会做出横纵向都扩展的交叉表,这种表格的数据展现能力非常强,同样,它是主格概念的扩展应用,是对主格知识很好的复习。

教程 |2007/11/15
testform test

Comments are closed.


  • 询问问题

  • 关于AppQuicker

    • 认识APPQUICKER
    • AppQuicker适用于哪些企业
    • APPQUICKER的开发模式
    • 为什么可以快速开发
    • 打造企业级系统的优势

AppQuicker © 2007 All Rights Reserved.