11.上报汇总模式

11.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的后端程序需要自己写，通常就是把这段采集到的数据写到数据库中而已。

11.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 / checkbox | edit
dataType | 数据类型 | decimal / int / string / date / datetime | decimal
decimal | 小数位数 | 数字 | 2
tip | 帮助说明 | 串 | 无
max min | 最大值和最小值，用于输入限制 注：仅限于数值型和日期型 | 值 | 无
maxChars maxMBytes | 串的最大长度，用于输入限制 注1：仅限于字符型； 注2：maxChars以字计，中英文一视同仁; maxMBytes以字节计，中文占2字节; 注3：定义其中一个即可，无法同时生效 | 数字 | 无
text | 指标的中文名称，例如“人数”，也可以写成: <item id="res1">人数</item> | 文字 | 无

注：例子中的XML元素名如data、project、item并没有严格规定，您可随意定义。

11.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.设计阶段(方法二)"的指标中的 “财务指标” 含有属性，您可以体验一下。

11.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/false | false
自有属性 | rows | 设计时鼠标拖入后，内嵌表格区域所占的行数 | 数字 | 5

2.<Cols> \ <Col>

类型 | 属性名称 | 含义 | 可用值 | 默认值
--- | --- | --- | --- | ---
Treelist 属性 | id | 列ID | 串，相当于字段名 | (无)
datatype | 数据类型 | sting / double / int / date / datetime | decimal
decimal | 小数位数，仅用于 datatype 为 double 时 | -1表示小数位数不确定, 在0和8之间可以任意输入. | 2
EditAble | 是否允许输入 | true/false | true
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 / bottom | middle
edittype | 输入方式 | edit / checkbox / droplist | edit
droplistId | 相关联的下拉资源ID，仅用于下拉输入 | 该ID须存在于下面的<Droplists>节点中，或者是报表内的字典名 | 无
isHide | 是否隐藏列 | true/false 在报表中不会生成隐藏列，但其数据能够被传递、上报 | false
自有属性 | updateAble | 本列内容是否需要上报 | true/false | true

3.<Table>
Table是模版的一部分，它不是必需的。作为样式，有时候需要在内嵌表格的左侧、顶部设定好若干固定的文字，Table的作用就在于此。
Table主要内容是初始的数据或样式文字，以 <TR> 作为行，<TD>作为列构成，结构和 HTML 中的Table大致相似，但可用元素不多，如下所示：
<Table> \ <TR>

属性名称 | 含义 | 可用值 | 默认值
--- | --- | --- | ---
editAble | 本行是否可输入 | true/false | true
updateAble | 本行内容是否可上报 注: 如果不上报，本行的单元格数据类型将是字符串 | true/false | true
bgColor | 本行底色 | 颜色串 | 无(透明)
textColor | 本行文字色 | 颜色串 | #000000

<Table> \ <TR> \ <TD>

属性名称 | 含义 | 可用值 | 默认值
--- | --- | --- | ---
editAble | 本单元格是否可输入 | true/false | true
bgColor | 本单元格底色 | 颜色串 | 无(透明)
textColor | 本单元格文字色 | 颜色串 | #000000
rowspan | 单元格垂直合并，含义同html table | 数字 | 无
colspan | 单元格水平合并，含义同html table | 数字 | 无
align | 水平对齐 | left / center / right | 无
valign | 垂直对齐 | top / middle / bottom | 无
isVerticalText | 文字是否垂直显示 | true/false | false

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

11.5.指标库(4)

硕正套件从1.0.72.0版开始，指标库增加了 “内嵌树列表” 类型。 由于树列表(Treelist)输入功能远比报表强，所以在对交互要求高的场合下可以采用树列表。
内嵌树列表的指标库实例如：

     ...
     <item id="d010" type="treelist" tip="销售单" url="../treelist/t1.xml">销售单</item>
     ...

内嵌树列表的指标库元素规则如下：

属性名称 | 含义 | 可用值 | 默认值
--- | --- | --- | ---
type | 指定为树列表 | 必须为 treelist | treelist
url | 树列表的XML的URL | 相对或绝对URL |
GetChangedXMLPara | 上报提交时的选项串 | 参数串，请参见树列表的GetChangedXML( )函数说明 | level=0;isIgnoreChange=true