9.上报汇总模式
9.1.简单应用
  Supcan Report报表可以用在一种特殊但是也很常见的场合:报表上报汇总,例如政府机关、有上下级的企业集团,经常会统一下发一些统计报表,让下级单位填报/申报,这些表格是由上级单位设计的,下级单位仅填写数据而已。
  Supcan Report的创建参数中有一个WorkMode,如果是UploadDesignTime,就表示上报报表的“设计时”,是UploadRuntime就表示是下级单位的“运行时”(即填报时),在Demo页中有这二种状态的例子。
  在上报报表的“设计时”,工具条上会多出一个图标,如果按下该图标,表示在输入时,输入的数字将是该单元格的TabOrder(即录入顺序号),用以限定“填写时”的输入范围及按回车键后的跳转顺序。
  此外,还需注意单元格的“别名”,这个别名会出现在填写上报时生成的XML串中,硕正报表的上报不是上传整个报表,而是上传有别名、或有TabOrder的单元格的内容的一段XML,通过调用GetUploadXML()函数可以得到,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>
  里面的name元素就是别名,这样便于后端(服务器端)解析; Cell是单元格名,用处不大。 解析、处理这段XML的后端程序需要自己写,通常就是把这段采集到的数据写到数据库中而已。


9.2.指标库(1)
  在设计报表时,输入“别名”这个工作比较麻烦,且容易出错,为此,硕正Report自1.0.60版后增加了"指标库"功能,可以用鼠标拖拽方式直接导入指标,使设计工作既轻松又不易出差错。
  指标库需要你自己在后端统一定义,页面的 js 中通过 SetItemLibraryURL( ) 函数将指标库的URL交给Report控件即可。一旦定义了指标库,Report的工具箱中就会出现“指标库”的内容:

  指标被鼠标拖入单元格后,单元格的“别名”就自动设为指标的ID了,并且自动设定了一个TabOrder.
  所以采用指标库,本质上仅是能简化设置“别名”和“TabOrder”的过程而已.
  指标库的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>
  上面的XML中,树的级次可以任意嵌套,Report能原样显示,其中的树叶就是单个指标。树叶的可用属性规定如下:
属性名含义可用值默认值
id 或 alias唯一的ID,拖入报表中就是“别名”
editType输入类型edit / checkboxedit
dataType数据类型decimal / int / string / date / datetimedecimal
decimal小数位数数字2
tip帮助说明
max
min
最大值和最小值,用于输入限制
注:仅限于数值型和日期型
maxChars
maxMBytes
串的最大长度,用于输入限制
注1:仅限于字符型;
注2:maxChars以字计,中英文一视同仁;
maxMBytes以字节计,中文占2字节;
注3:定义其中一个即可,无法同时生效
数字
text指标的中文名称,例如“人数”,也可以写成:
<item id="res1">人数</item>
文字
注:例子中的XML元素名如data、project、item并没有严格规定,您可随意定义。


9.3.指标库(2)
  指标往往带有某些附加属性,以“人数”指标为例,它可以有部门属性:财务部、工程部、人事部等;有可以同时有月份属性:1月份、2月份..等。为了既能保持“人数”指标的单一性、又能按某种形式相互区分,我们增加了指标的“属性”。
  指标属性是这样声明的:
<?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>
  上面的 <attr>就是属性,其中name是属性名;text是属性的中文说明,用于设计时的帮助;value表示默认值,可选的,当鼠标将指标拖入单元格时,自动赋予该属性的值.
  在设计时,当指标被拖入报表单元格后,你既可以通过 SetItemAttr( ) 函数修改指标的属性值,也可以通过工具箱直接修改,下面工具箱中底部深底色的部分表示指标属性:
  在报表的运行时,含属性的指标被提交,生成的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>
  报表的在线演示页中,"38.设计阶段(方法二)"的指标中的 “财务指标” 含有属性,您可以体验一下。


9.4.指标库(3)
  上述指标库中的“指标”是单个指标,在实际使用中,经常需要以表格的形式输入一组指标、或者是多行多列的一块数据,为此,硕正套件从1.0.68.0版开始,新增了另一种形式的指标库:内嵌表格。
  内嵌表格也是在指标库中定义的,和单个指标相比,它的格式稍复杂:
<?xml version="1.0" encoding="UTF-8"?">
<root>
 <project name="业务指标">
  <project name="部门(单独)">
   <item id="res1" datatype="int">人数</item>
   ...
  </project>
 </project>
 <item type="embedTable" 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>
  上图中,第 9 行到第 24 行就是内嵌表格类型的指标,关键是第9行 type="embedTable" 的声明,该指标一旦被鼠标拖入报表中,报表将自动划定一块区域,作为其指标输入区。
  内嵌表格的模版也可以在别处定义,用 "ref" 链接,例如:
<item id="FiGroup" name="财务指标" type="embedTable" ref="../libs/FisGroup.xml"/>
  内嵌表格的语法和 "硕正树列表(Treelist)" 的XML规范很相似,它采纳了一部分的Treelist的XML属性,也有自己的特有的一些属性。元素、属性列举如下:
1.<Properties>
类型属性名称含义可用值默认值
Treelist
属性
addRowAble在上报运行时, 是否允许添加行true/falsefalse
enter在上报运行时, 击回车键后的光标跳转方向down/rightright
自有属性rows设计时鼠标拖入后,内嵌表格区域所占的行数数字5

2.<Cols> \ <Col>
类型属性名称含义可用值默认值
Treelist
属性
id列ID串,相当于字段名(无)
datatype数据类型sting / double / int / date / datetimedecimal
decimal小数位数,仅用于 datatype 为 double 时-1表示小数位数不确定, 在0和8之间可以任意输入.2
EditAble是否允许输入true/falsetrue
maxChars
maxMBytes
长度限制,仅用于 datatype 为 string 时maxChars表示限制输入字数,以Unicode计(中英文一视同仁);
maxMBytes表示限制输入字节数,以多字节(非Unicode)计(中文2字节、英文1字节).
注: 不能同时使用maxChars和maxMBytes
0
max限制输入的最大值仅用于int、 double、date、 datetime
min限制输入的最小值仅用于int、 double、date、 datetime
align水平对齐left / center / right和数据类型有关
valign垂直对齐top / middle / bottommiddle
edittype输入方式edit / checkbox / droplistedit
droplistId相关联的下拉资源ID,仅用于下拉输入该ID须存在于下面的<Droplists>节点中,或者是报表内的字典名
isHide是否隐藏列true/false
在报表中不会生成隐藏列,但其数据能够被传递、上报
false
自有属性updateAble本列内容是否需要上报true/falsetrue

3.<Table>
  Table是模版的一部分,它不是必需的。作为样式,有时候需要在内嵌表格的左侧、顶部设定好若干固定的文字,Table的作用就在于此。
  Table主要内容是初始的数据或样式文字,以 <TR> 作为行,<TD>作为列构成,结构和 HTML 中的Table大致相似,但可用元素不多,如下所示:
<Table> \ <TR>
属性名称含义可用值默认值
editAble本行是否可输入true/falsetrue
updateAble本行内容是否可上报
注: 如果不上报,本行的单元格数据类型将是字符串
true/falsetrue
bgColor本行底色颜色串无(透明)
textColor本行文字色颜色串#000000
<Table> \ <TR> \ <TD>
属性名称含义可用值默认值
editAble本单元格是否可输入true/falsetrue
bgColor本单元格底色颜色串无(透明)
textColor本单元格文字色颜色串#000000
rowspan单元格垂直合并,含义同html table数字
colspan单元格水平合并,含义同html table数字
align水平对齐left / center / right
valign垂直对齐top / middle / bottom
isVerticalText文字是否垂直显示true/falsefalse

4.<Droplists>
  下拉资源,和"硕正树列表(Treelist)" 的XML规范中的下拉资源相同,请参考相关文档。


9.5.指标库(4)
  硕正套件从1.0.72.0版开始,指标库增加了 “内嵌树列表” 类型。 由于树列表(Treelist)输入功能远比报表强,所以在对交互要求高的场合下可以采用树列表。
  内嵌树列表的指标库实例如:
 ...
 <item id="d010" type="treelist" tip="销售单" url="../treelist/t1.xml">销售单</item>
 ...
  内嵌树列表的指标库元素规则如下:
属性名称含义可用值默认值
type指定为树列表必须为 treelisttreelist
url树列表的XML的URL相对或绝对URL 
GetChangedXMLPara上报提交时的选项串参数串,请参见树列表的GetChangedXML( )函数说明level=0;isIgnoreChange=true