d1d88ab388e110e1d261e071c8bda44ef34a7db1.svn-base
12.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
<HTML>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="../temp1.css" type="text/css">
</head>
<body bgcolor=#ffffff vlink=#0000ff>
<div id="Tag305"/><br><br>
<font style='font-size:15pt'>9.上报汇总模式</font><hr color=#2266ee size=1>
<b>9.1.简单应用</b><br>
Supcan Report报表可以用在一种特殊但是也很常见的场合:报表上报汇总,例如政府机关、有上下级的企业集团,经常会统一下发一些统计报表,让下级单位填报/申报,这些表格是由上级单位设计的,下级单位仅填写数据而已。<br>
Supcan Report的创建参数中有一个WorkMode,如果是UploadDesignTime,就表示上报报表的“设计时”,是UploadRuntime就表示是下级单位的“运行时”(即填报时),在Demo页中有这二种状态的例子。<br>
在上报报表的“设计时”,工具条上会多出一个<img src='prop.bmp'>图标,如果按下该图标,表示在输入时,输入的数字将是该单元格的TabOrder(即录入顺序号),用以限定“填写时”的输入范围及按回车键后的跳转顺序。<br>
此外,还需注意单元格的“别名”,这个别名会出现在填写上报时生成的XML串中,硕正报表的上报不是上传整个报表,而是上传有别名、或有TabOrder的单元格的内容的一段XML,通过调用GetUploadXML()函数可以得到,XML例如:<br>
<pre class='xml'>
<?xml version="1.0" encoding="UTF-8"?">
<WorkSheet name="销售额统计表">
<data name="OrgID" Cell="D6">001</data>
<data name="Target1" Cell="D7">3000</data>
<data name="Target2" Cell="D8">2039.12</data>
</WorkSheet></pre>
里面的name元素就是别名,这样便于后端(服务器端)解析; Cell是单元格名,用处不大。 解析、处理这段XML的后端程序需要自己写,通常就是把这段采集到的数据写到数据库中而已。<br>
<div id="Tag306"/><br><br>
<b>9.2.指标库(1)</b><br>
在设计报表时,输入“别名”这个工作比较麻烦,且容易出错,为此,硕正Report自1.0.60版后增加了"指标库"功能,可以用鼠标拖拽方式直接导入指标,使设计工作既轻松又不易出差错。<br>
指标库需要你自己在后端统一定义,页面的 js 中通过 SetItemLibraryURL( ) 函数将指标库的URL交给Report控件即可。一旦定义了指标库,Report的工具箱中就会出现“指标库”的内容:<br>
<center><img src='report1.png'></center>
<br>
指标被鼠标拖入单元格后,单元格的“别名”就自动设为指标的ID了,并且自动设定了一个TabOrder.<br>
所以采用指标库,本质上仅是能简化设置“别名”和“TabOrder”的过程而已.<br>
指标库的XML格式举例如:
<pre class='xml'>
<?xml version="1.0" encoding="UTF-8"?">
<root>
<project name="业务指标">
<project name="部门(单独)">
<item id="res1" datatype="int">人数</item>
<item id="res2" datatype="int">临时工</item>
</project>
<item id="con1" editType="checkbox">是否盈利</item>
<item id="con33">应收款</item>
</project>
<project name="财务指标">
<item id="KML1">资产负债率</item>
<item id="KML2">存货周转率</item>
<item id="KML3" decimal="4">应收帐款周转率</item>
</project>
</root></pre>
上面的XML中,树的级次可以任意嵌套,Report能原样显示,其中的树叶就是单个指标。树叶的可用属性规定如下:<br>
<table width=98% cellpadding=4 cellspacing=0 border=1 borderColorLight=#999999 borderColorDark=#999999 align="center">
<tr bgcolor=#eaeaea><td>属性名</td><td>含义</td><td>可用值</td><td>默认值</td></tr>
<tr><td>id 或 alias</td><td>唯一的ID,拖入报表中就是“别名”</td><td>串</td><td>无</td></tr>
<tr><td>editType</td><td>输入类型</td><td>edit / checkbox</td><td>edit</td></tr>
<tr><td>dataType</td><td>数据类型</td><td>decimal / int / string / date / datetime</td><td>decimal</td></tr>
<tr><td>decimal</td><td>小数位数</td><td>数字</td><td>2</td></tr>
<tr><td>tip</td><td>帮助说明</td><td>串</td><td>无</td></tr>
<tr><td>max<br>min</td><td>最大值和最小值,用于输入限制<br>注:仅限于数值型和日期型</td><td>值</td><td>无</td></tr>
<tr><td>maxChars<br>maxMBytes</td><td>串的最大长度,用于输入限制<br>注1:仅限于字符型;<br>注2:maxChars以字计,中英文一视同仁; <br>maxMBytes以字节计,中文占2字节;<br>注3:定义其中一个即可,无法同时生效</td><td>数字</td><td>无</td></tr>
<tr><td>text</td><td>指标的中文名称,例如“人数”,也可以写成:<br><item id="res1">人数</item> </td><td>文字</td><td>无</td></tr>
</table>
注:例子中的XML元素名如data、project、item并没有严格规定,您可随意定义。<br>
<div id="Tag307"/><br><br>
<b>9.3.指标库(2)</b><br>
指标往往带有某些附加属性,以“人数”指标为例,它可以有部门属性:财务部、工程部、人事部等;有可以同时有月份属性:1月份、2月份..等。为了既能保持“人数”指标的单一性、又能按某种形式相互区分,我们增加了指标的“属性”。<br>
指标属性是这样声明的:<br>
<pre class='xml'>
<?xml version="1.0" encoding="UTF-8"?">
<root>
<project name="财务指标">
<item id="km101" text="资产负债率">
<attr name="month" text="月份"/>
<attr name="dept" text="部门"/>
</item>
<item id="km103" decimal="4" text="应收帐款周转率">
<attr name="month" text="月份"/>
<attr name="dept" text="部门" value="3"/>
</item>
</project>
</root></pre>
上面的 <font color=red><attr></font>就是属性,其中<b>name</b>是属性名;<b>text</b>是属性的中文说明,用于设计时的帮助;<b>value</b>表示默认值,可选的,当鼠标将指标拖入单元格时,自动赋予该属性的值.<br>
在设计时,当指标被拖入报表单元格后,你既可以通过 SetItemAttr( ) 函数修改指标的属性值,也可以通过工具箱直接修改,下面工具箱中底部深底色的部分表示指标属性:<br>
<center><img src="report6.jpg"></center>
在报表的运行时,含属性的指标被提交,生成的XML包是诸如这样的:<br>
<pre class='xml'>
<?xml version="1.0" encoding="UTF-8"?">
<WorkSheet name="销售额统计表">
<data name="km101" attr="month=2;dept=3" >3003.12</data>
<data name="km103" attr="month=;dept=" >2500</data>
</WorkSheet></pre>
报表的在线演示页中,"38.设计阶段(方法二)"的指标中的 “财务指标” 含有属性,您可以体验一下。<br>
<div id="Tag308"/><br><br>
<b>9.4.指标库(3)</b><br>
上述指标库中的“指标”是单个指标,在实际使用中,经常需要以表格的形式输入一组指标、或者是多行多列的一块数据,为此,硕正套件从1.0.68.0版开始,新增了另一种形式的指标库:内嵌表格。<br>
内嵌表格也是在指标库中定义的,和单个指标相比,它的格式稍复杂:<br>
<pre class='xml'>
<?xml version="1.0" encoding="UTF-8"?">
<root>
<project name="业务指标">
<project name="部门(单独)">
<item id="res1" datatype="int">人数</item>
...
</project>
</project>
<item <font color="red">type="embedTable"</font> id="FiGroup" name="财务指标">
<properties rows="5" addRowAble="true"/>
<cols>
<col id="kmdm" datatype="string" editAble="false" align="center">科目代码</col>
<col id="kmmc" datatype="string" editAble="false">科目名称</col>
<col id="je" decimal="4">金额</col>
</cols>
<Table>
<TR>
<TD>101</TD><TD>现金</TD>
</TR>
<TR>
<TD>102</TD><TD>银行存款</TD>
</TR>
</Table>
</item>
</root></pre>
上图中,第 9 行到第 24 行就是内嵌表格类型的指标,关键是第9行 type="embedTable" 的声明,该指标一旦被鼠标拖入报表中,报表将自动划定一块区域,作为其指标输入区。<br>
内嵌表格的模版也可以在别处定义,用 "ref" 链接,例如:<br>
<pre class='xml'>
<item id="FiGroup" name="财务指标" type="embedTable" <font color="red">ref="../libs/FisGroup.xml"</font>/></pre>
内嵌表格的语法和 "硕正树列表(Treelist)" 的XML规范很相似,它采纳了一部分的Treelist的XML属性,也有自己的特有的一些属性。元素、属性列举如下:<br>
1.<b><Properties></b><br>
<table width=100% cellpadding=4 cellspacing=0 border=1 borderColorLight=#999999 borderColorDark=#999999 align="center">
<tr bgcolor=#f1f1f1><td>类型</td><td>属性名称</td><td>含义</td><td>可用值</td><td>默认值</td></tr>
<tr><td rowspan=2>Treelist<br>属性</td><td>addRowAble</td><td>在上报运行时, 是否允许添加行</td><td>true/false</td><td>false</td></tr>
<tr><td>enter</td><td>在上报运行时, 击回车键后的光标跳转方向</td><td>down/right</td><td>right</td></tr>
<tr><td>自有属性</td><td>rows</td><td>设计时鼠标拖入后,内嵌表格区域所占的行数</td><td>数字</td><td>5</td></tr>
</table>
<br>
2.<b><Cols> \ <Col></b><br>
<table width=100% cellpadding=4 cellspacing=0 border=1 borderColorLight=#999999 borderColorDark=#999999 align="center">
<tr bgcolor=#f1f1f1><td>类型</td><td>属性名称</td><td>含义</td><td>可用值</td><td>默认值</td></tr>
<tr><td rowspan=12>Treelist<br>属性</td><td>id</td><td>列ID</td><td>串,相当于字段名</td><td>(无)</td></tr>
<tr><td>datatype</td><td>数据类型</td><td>sting / double / int / date / datetime</td><td><font color=red>decimal</font></td></tr>
<tr><td>decimal</td><td>小数位数,仅用于 datatype 为 double 时</td><td>-1表示小数位数不确定, 在0和8之间可以任意输入.</td><td>2</td></tr>
<tr><td>EditAble</td><td>是否允许输入</td><td>true/false</td><td>true</td></tr>
<tr><td>maxChars<br>maxMBytes</td><td>长度限制,仅用于 datatype 为 string 时</td><td>maxChars表示限制输入字数,以Unicode计(中英文一视同仁);<br>maxMBytes表示限制输入字节数,以多字节(非Unicode)计(中文2字节、英文1字节).<br>注: 不能同时使用maxChars和maxMBytes</td><td>0</td></tr>
<tr><td>max</td><td>限制输入的最大值</td><td>仅用于int、 double、date、 datetime</td><td>无</td></tr>
<tr><td>min</td><td>限制输入的最小值</td><td>仅用于int、 double、date、 datetime</td><td>无</td></tr>
<tr><td>align</td><td>水平对齐</td><td>left / center / right</td><td>和数据类型有关</td></tr>
<tr><td>valign</td><td>垂直对齐</td><td>top / middle / bottom</td><td>middle</td></tr>
<tr><td>edittype</td><td>输入方式</td><td>edit / checkbox / droplist</td><td>edit</td></tr>
<tr><td>droplistId</td><td>相关联的下拉资源ID,仅用于下拉输入</td><td>该ID须存在于下面的<Droplists>节点中,或者是报表内的字典名</td><td>无</td></tr>
<tr><td>isHide</td><td>是否隐藏列</td><td>true/false<br>在报表中不会生成隐藏列,但其数据能够被传递、上报</td><td>false</td></tr>
<tr><td>自有属性</td><td>updateAble</td><td>本列内容是否需要上报</td><td>true/false</td><td>true</td></tr>
</table>
<br>
3.<b><Table></b><br>
Table是模版的一部分,它不是必需的。作为样式,有时候需要在内嵌表格的左侧、顶部设定好若干固定的文字,Table的作用就在于此。<br>
Table主要内容是初始的数据或样式文字,以 <TR> 作为行,<TD>作为列构成,结构和 HTML 中的Table大致相似,但可用元素不多,如下所示:<br>
<b><Table> \ <TR></b><br>
<table width=100% cellpadding=4 cellspacing=0 border=1 borderColorLight=#999999 borderColorDark=#999999 align="center">
<tr bgcolor=#f1f1f1><td>属性名称</td><td>含义</td><td>可用值</td><td>默认值</td></tr>
<tr><td>editAble</td><td>本行是否可输入</td><td>true/false</td><td>true</td></tr>
<tr><td>updateAble</td><td>本行内容是否可上报<br>注: 如果不上报,本行的单元格数据类型将是字符串</td><td>true/false</td><td>true</td></tr>
<tr><td>bgColor</td><td>本行底色</td><td>颜色串</td><td>无(透明)</td></tr>
<tr><td>textColor</td><td>本行文字色</td><td>颜色串</td><td>#000000</td></tr>
</table>
<b><Table> \ <TR> \ <TD></b><br>
<table width=100% cellpadding=4 cellspacing=0 border=1 borderColorLight=#999999 borderColorDark=#999999 align="center">
<tr bgcolor=#f1f1f1><td>属性名称</td><td>含义</td><td>可用值</td><td>默认值</td></tr>
<tr><td>editAble</td><td>本单元格是否可输入</td><td>true/false</td><td>true</td></tr>
<tr><td>bgColor</td><td>本单元格底色</td><td>颜色串</td><td>无(透明)</td></tr>
<tr><td>textColor</td><td>本单元格文字色</td><td>颜色串</td><td>#000000</td></tr>
<tr><td>rowspan</td><td>单元格垂直合并,含义同html table</td><td>数字</td><td>无</td></tr>
<tr><td>colspan</td><td>单元格水平合并,含义同html table</td><td>数字</td><td>无</td></tr>
<tr><td>align</td><td>水平对齐</td><td>left / center / right</td><td>无</td></tr>
<tr><td>valign</td><td>垂直对齐</td><td>top / middle / bottom</td><td>无</td></tr>
<tr><td>isVerticalText</td><td>文字是否垂直显示</td><td>true/false</td><td>false</td></tr>
</table>
<br>
4.<b><Droplists></b><br>
下拉资源,和"硕正树列表(Treelist)" 的XML规范中的下拉资源相同,请参考相关文档。<br>
<div id="Tag309"/><br><br>
<b>9.5.指标库(4)</b><br>
硕正套件从1.0.72.0版开始,指标库增加了 “内嵌树列表” 类型。 由于树列表(Treelist)输入功能远比报表强,所以在对交互要求高的场合下可以采用树列表。<br>
内嵌树列表的指标库实例如:<br>
<pre class='xml'>
...
<item id="d010" type="treelist" tip="销售单" url="../treelist/t1.xml">销售单</item>
...
</pre>
内嵌树列表的指标库元素规则如下:<br>
<table width=100% cellpadding=4 cellspacing=0 border=1 borderColorLight=#999999 borderColorDark=#999999 align="center">
<tr bgcolor=#f1f1f1><td>属性名称</td><td>含义</td><td>可用值</td><td>默认值</td></tr>
<tr><td>type</td><td>指定为树列表</td><td>必须为 treelist</td><td>treelist</td></tr>
<tr><td>url</td><td>树列表的XML的URL</td><td>相对或绝对URL</td><td> </td></tr>
<tr><td>GetChangedXMLPara</td><td>上报提交时的选项串</td><td>参数串,请参见树列表的GetChangedXML( )函数说明</td><td>level=0;isIgnoreChange=true</td></tr>
</table>
<br><br><br>
<script type='text/javascript' src='nstd.js'></script>
</body></html>