打印主从

场景描述

打印一个主表及其多个从表的数据

打印效果如下图所示

实现思路

  • 方式一:使用主从打印,需要根据主表刺激从表加载后才能打印从表数据
  • 方式二:不设置主从,通过模板中使用ifCond进行数据循环判断

实现步骤

定义一张主表和两个从表

下面分别说明使用主从打印的方法和不使用主从打印的方法

1 使用主从打印

在页面上添加主表、从表1和从表2数据集组件,设置从表1和从表2的主从选项中的主数据和关联列

添加打印组件,设置打印组件的"打印数据"属性为主表数据集

打印模板文件内容如下

    <html>
        <head>
            <meta charset="UTF-8">
            <title>主页</title>
            <style type="text/css">
                .head{
                }
                .footer {
                }
                .table {
                    border: 1px solid #dddddd;
                }
                .print-item{
                    display: table-row;
                    page-break-inside: avoid;
                }
                .print-item > .print-item-label,
                .print-item > .print-item-value{
                    border: 1px solid #dddddd;
                    padding: 8px;
                    display: table-cell;
                }
                .print-item > .print-item-label{
                    width: 30%;
                    vertical-align: middle;
                    text-align: center;
                }
                .table ,
                .child-table > .print-item-value{
                    padding: 0;
                    border-collapse: collapse;
                    border-spacing: 0;
                    width: 100%;
                    display: table;
                }
                .child-table > .print-item-value{
                    margin: -1px;
                }
                .printer,.print-date{
                    padding-left: 60%;
                }
                .Image > .print-item-value > img{
                    max-width: 100%;
                    height: auto;
                }
            </style>
        </head>
        <body style="margin: 28px;"> 
            <div class="head">
                <h1 class="title">主页</h1>
            </div>
            <div class="table">
                [[#each data ]]
                    <div class='print-item String'>
                        <div class='print-item-label'>编码</div><div class='print-item-value'>[[[fno]]]</div>
                    </div>
                    <div class='print-item Datetime'>
                        <div class='print-item-label'>日期</div><div class='print-item-value'>[[[fdate]]]</div>
                    </div>
                    <div class='print-item child-table'>
                        <div class='print-item-label'>从表1</div>
                        <div class='print-item-value'>
                            <!--从表打印 循环使用从表数据xid-->
                            [[#each restData1]]
                                <div class='print-item String'>
                                    <div class='print-item-label'>名称</div><div class='print-item-value'>[[[fname]]]</div>
                                </div>
                                <div class='print-item Integer'>
                                    <div class='print-item-label'>单价</div><div class='print-item-value'>[[[fprice]]]</div>
                                </div>
                            [[/each]]
                        </div>
                    </div>
                    <div class='print-item child-table'>
                        <div class='print-item-label'>从表1</div>
                        <div class='print-item-value'>
                            [[#each restData2]]
                                <div class='print-item Integer'>
                                    <div class='print-item-label'>数量</div><div class='print-item-value'>[[[fnum]]]</div>
                                </div>
                                <div class='print-item Integer'>
                                    <div class='print-item-label'>金额</div><div class='print-item-value'>[[[fmoney]]]</div>
                                </div>
                            [[/each]]
                        </div>
                    </div>
                [[/each]]
            </div>
            <div class="footer">
                <h4 class="printer">打印人:[[context.printer]]</h4>
                <h4 class="print-date">打印时间:[[context.printDate]]</h4>
            </div>
        </body>
    </html>

打印模板说明

**因文档生成异常,代码中{} 使用[]代替,实际使用以{}为准**
[[#each data]] data是规定写法,指的是打印数据属性对应的数据集,如果是主表,则包括加载到页面上的从表数据,未加载的数据则不能打印
[[#each restData1]] restData1是数据集的xid或id
使用此模板,需要将主表数据对应的从表数据都加载到页面中,才能完整打印

2 不使用主从打印

在页面上添加主表、从表1和从表2数据集组件,清空从表1和从表2的主从选项属性

添加打印组件,设置打印组件的"打印数据"属性为主表数据集,“附加数据”属性选择从表1和从表2

打印模板文件内容如下

    <html>
        <head>
            <meta charset="UTF-8">
            <title>主页</title>
            <style type="text/css">
                .head{
                }
                .footer {
                }
                .table {
                    border: 1px solid #dddddd;
                }
                .print-item{
                    display: table-row;
                    page-break-inside: avoid;
                }
                .print-item > .print-item-label,
                .print-item > .print-item-value{
                    border: 1px solid #dddddd;
                    padding: 8px;
                    display: table-cell;
                }
                .print-item > .print-item-label{
                    width: 30%;
                    vertical-align: middle;
                    text-align: center;
                }
                .table ,
                .child-table > .print-item-value{
                    padding: 0;
                    border-collapse: collapse;
                    border-spacing: 0;
                    width: 100%;
                    display: table;
                }
                .child-table > .print-item-value{
                    margin: -1px;
                }
                .printer,.print-date{
                    padding-left: 60%;
                }
                .Image > .print-item-value > img{
                    max-width: 100%;
                    height: auto;
                }
            </style>
        </head>
        <body style="margin: 28px;"> 
            <div class="head">
                <h1 class="title">主页</h1>
            </div>
            <div class="table">
                [[#each data]]
                <div class='print-item String'>
                    <div class='print-item-label'>编码</div><div class='print-item-value'>[[[fno]]]</div>
                </div>
                <div class='print-item Datetime'>
                    <div class='print-item-label'>日期</div><div class='print-item-value'>[[[fdate]]]</div>
                </div>
                <div class='print-item child-table'>
                    <div class='print-item-label'>从表1</div>
                    <div class='print-item-value'>
                        <!--从表打印 循环使用从表数据xid-->
                        [[#each ../context.datas.restData1]]
                        [[#ifCond zhubiao '==' ../fid]]
                            <div class='print-item String'>
                                <div class='print-item-label'>名称</div><div class='print-item-value'>[[[fname]]]</div>
                            </div>
                            <div class='print-item Integer'>
                                <div class='print-item-label'>单价</div><div class='print-item-value'>[[[fprice]]]</div>
                            </div>
                        [[/ifCond]]    
                        [[/each]]
                    </div>
                </div>
                <div class='print-item child-table'>
                    <div class='print-item-label'>从表2</div>
                    <div class='print-item-value'>
                        [[#each ../context.datas.restData2]]
                        [[#ifCond zhubiao '==' ../fid]]
                            <div class='print-item Integer'>
                                <div class='print-item-label'>数量</div><div class='print-item-value'>[[[fnum]]]</div>
                            </div>
                            <div class='print-item Integer'>
                                <div class='print-item-label'>金额</div><div class='print-item-value'>[[[fmoney]]]</div>
                            </div>
                        [[/ifCond]]    
                        [[/each]]
                    </div>
                </div>
                [[/each]]
            </div>
            <div class="footer">
                <h4 class="printer">打印人:[[context.printer]]</h4>
                <h4 class="print-date">打印时间:[[context.printDate]]</h4>
            </div>
        </body>
    </html>

打印模板说明

**因文档生成异常,代码中{} 使用[]代替,实际使用以{}为准**
    [[#each ../context.datas.restData1]] context.datas.restData1是访问附加数据的写法,restData1是附加数据的xid或id
    [[#ifCond zhubiao '==' ../fid]] 比较主键和外键是否相等。zhubiao是从表的外键列,见上面的数据结构定义。../fid表示主表的主键
    ifCond比较符支持'==','===' ,'!=','!==','>','<','>=','<=','&&','||'
    使用此模板,分别加载主表和从表的数据,为保证加载完整,注意将从表的分页大小设置为-1

results matching ""

    No results matching ""

    results matching ""

      No results matching ""