BIEE 11g 使用叙述视图实现复杂中国式表格一例

来源:互联网 发布:双录取很坑人 知乎 编辑:程序博客网 时间:2024/05/17 03:00


今天有朋友问到如何实现如下表格今天有朋友问到如何实现如下表格今天有朋友问到如何实现如下表格



比较简单的方法就是使用叙述视图来自己编写html代码将这个表格画出来,这是第一步。

第二步是如何实现“小计行”和“ERP调节后余额”这两行

我想的办法是使用JS来动态计算表格的值。不过这样一来就要求表格必须在页面上完全显示出来,不能分页。(因为是使用的JS来遍历页面上的内容)


在实现的过程中,有许多小细节需要考虑,比如千分位的显示。文字的竖排等。具体大家可以直接参考我的代码,并在此基础上做出调整


首先新建如下字段的报表



注意,一共有6列


然后新建叙述视图,在前缀中加入如下代码:

  <style>      #cux_data_table001{border-right:1px solid #F00;border-bottom:1px solid #F00}  #cux_data_table001 td{border-left:1px solid #F00;border-top:1px solid #F00}    .one {        width: 20px;        margin: 0 auto;        line-height: 24px;    }  .two {        width: 15px;        margin: 0 auto;        line-height: 24px;        word-wrap: break-word;/*英文的时候需要加上这句,自动换行*/    }    </style>  <script type="text/javascript">    function toThousands(num) {     return (num || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,'); };    var calcTotal=function(table,column){//合计,表格对象,对哪一列进行合计,第一列从0开始        var trs=table.getElementsByTagName('tr');        var end=trs.length-1;//忽略最后合计的一行        var total=0;        for(var i=0;i<end;i++){if("cux_value_rows"!=trs[i].className)    continue;            var td=trs[i].getElementsByTagName('td')[column];            var t=parseFloat(td.innerHTML.replace(',',''));            if(t)total+=t;        }        return total;    };function setValue(tid,value){var td=document.getElementById(tid);td.innerHTML=value;}   </script><table id ="cux_data_table001"><tr>  <td>品种</td>  <td colspan="3">ERP系统出库数量</td>  <td colspan="3">0.0</td> </tr> <tr>  <td rowspan="20"><div class="one">93号汽油</div><div class="two">︵</di><div  class="one">国标</div><div  class="two">︶</div></td>  <td colspan="6">减:ERP系统已出配系统未出</td> </tr> <tr>  <td>日期</td>  <td>数量</td>  <td>系统单号</td>  <td>差异原因</td>  <td>对应盘点表类别</td>  <td>差异处理时间</td> </tr>


在叙述中加入如下代码:

  <tr class="cux_value_rows">  <td>@1</td>  <td>@2</td>  <td>@3</td>  <td>@4</td>  <td>@5</td>  <td>@6</td> </tr>



在后缀中加入如下代码:

 <tr>  <td>小计:</td>  <td id="cux_st_100"><script>setValue('cux_st_100',calcTotal(document.getElementById('cux_data_table001'),1).toFixed(2))</script></td>  <td id="cux_st_101"><script>setValue('cux_st_101',toThousands(calcTotal(document.getElementById('cux_data_table001'),2)))</script></td>  <td id="cux_st_102"><script>setValue('cux_st_102',calcTotal(document.getElementById('cux_data_table001'),3))</script></td>  <td id="cux_st_103"><script>setValue('cux_st_103',calcTotal(document.getElementById('cux_data_table001'),4))</script></td>  <td id="cux_st_104"><script>setValue('cux_st_104',calcTotal(document.getElementById('cux_data_table001'),5))</script></td> </tr> <tr> <td  colspan="3">ERP调节后余额</td> <td id="cux_st_111"><script>setValue('cux_st_111',calcTotal(document.getElementById('cux_data_table001'),3))</script></td>  <td id="cux_st_112"><script>setValue('cux_st_112',calcTotal(document.getElementById('cux_data_table001'),4))</script></td>   <td id="cux_st_113"><script>setValue('cux_st_113',calcTotal(document.getElementById('cux_data_table001'),5))</script></td> </tr></table>



最终效果如下图:


具体格式大家自己回去慢慢调整吧


注:该方案在12c中使用excel导出会有格式问题