使用“高级 PDF/模板”编辑器从保存的搜索构建自定义报告

Posted

技术标签:

【中文标题】使用“高级 PDF/模板”编辑器从保存的搜索构建自定义报告【英文标题】:Building a Custom Report from a saved search using the "Advanced PDF/Template" Editor 【发布时间】:2019-10-26 09:02:36 【问题描述】:

我正在根据保存的搜索构建一个可打印的报告,以对多个批次和库存详细信息进行分组和小计,并将其列在每个项目下,并在每组项目下方显示小计。

我可以正确地格式化代码以使用它一次显示 1 个项目

    <#if results?has_content>
<table class="itemtable" dir="ltr" style="width:100%;"><!-- start items --><#list results as result><tr>
    <td style="width: 43px;"><span style="font-size:10px;">**</span></td>
    <td colspan="2" rowspan="1" style="width: 70px;"><span style="font-size:10px;">$result.itemid</span></td>
    <td colspan="2" rowspan="1" style="width: 94px; white-space: nowrap;"><span style="font-size:10px;">$result.displayname</span></td>
    <td style="width: 133px;">&nbsp;</td>
    <td style="width: 72px;">&nbsp;</td>
    <td style="width: 47px;">&nbsp;</td>
    <td style="width: 120px;">&nbsp;</td>
    <td style="width: 79px;">&nbsp;</td>
    <td style="width: 68px;">&nbsp;</td>
    </tr>
    <tr>
    <td style="width: 43px;"><span style="font-size:10px;">$result.custitempacksize</span></td>
    <td style="width: 70px;"><span style="font-size:10px;">$result.custcol_lottextitemlinelevel</span></td>
    <td style="width: 48px;"><span style="font-size:10px;">$result.custitem_brand</span></td>
    <td style="width: 94px;">$result.expirationdate</td>
    <td style="width: 97px;"><span style="font-size:10px;">$result.serialnumbers</span></td>
    <td style="width: 133px;"><span style="font-size:10px;">$result.location</span></td>
    <td style="width: 72px;"><span style="font-size:10px;">$result.custbodyestimatedarrivaldate</span></td>
    <td style="width: 47px;"><span style="font-size:10px;">$result.rate</span></td>
    <td style="width: 120px;"><span style="font-size:10px;">$result.formulacurrency</span></td>
    <td style="width: 79px;"><span style="font-size:10px;">$result.quantityavailable</span></td>
    <td style="width: 68px;"><span style="font-size:10px;">$result.formulanumeric</span></td>
    </tr>
    <tr>
    <td style="width: 43px;">**</td>
    <td colspan="3" rowspan="1" style="width: 70px;">Subtotal for :&nbsp;$result.itemid</td>
    <td style="width: 97px;">&nbsp;</td>
    <td style="width: 133px;">&nbsp;</td>
    <td style="width: 72px;">&nbsp;</td>
    <td style="width: 47px;">&nbsp;</td>
    <td style="width: 120px;">&nbsp;
    <hr />subtotalEC</td>
    <td style="width: 79px;">&nbsp;
    <hr />subtotalLB</td>
    <td style="width: 68px;">&nbsp;
    <hr />subtotalCS</td>
    </tr>
    </#list><!-- end items --></table>
</#if>
</body>
</pdf>

我正在正确的轨道上获得我想要的 PDF 中的结果,但是当我尝试添加 和 标记来对项目进行分组时,它会保存,但是当我生成一个意外错误时尝试打印它。

<pdf>
<head>
    <link name="NotoSans" type="font" subtype="truetype" src="$nsfont.NotoSans_Regular" src-bold="$nsfont.NotoSans_Bold" src-italic="$nsfont.NotoSans_Italic" src-bolditalic="$nsfont.NotoSans_BoldItalic" bytes="2" />
    <#if .locale == "zh_CN">
        <link name="NotoSansCJKsc" type="font" subtype="opentype" src="$nsfont.NotoSansCJKsc_Regular" src-bold="$nsfont.NotoSansCJKsc_Bold" bytes="2" />
    <#elseif .locale == "zh_TW">
        <link name="NotoSansCJKtc" type="font" subtype="opentype" src="$nsfont.NotoSansCJKtc_Regular" src-bold="$nsfont.NotoSansCJKtc_Bold" bytes="2" />
    <#elseif .locale == "ja_JP">
        <link name="NotoSansCJKjp" type="font" subtype="opentype" src="$nsfont.NotoSansCJKjp_Regular" src-bold="$nsfont.NotoSansCJKjp_Bold" bytes="2" />
    <#elseif .locale == "ko_KR">
        <link name="NotoSansCJKkr" type="font" subtype="opentype" src="$nsfont.NotoSansCJKkr_Regular" src-bold="$nsfont.NotoSansCJKkr_Bold" bytes="2" />
    <#elseif .locale == "th_TH">
        <link name="NotoSansThai" type="font" subtype="opentype" src="$nsfont.NotoSansThai_Regular" src-bold="$nsfont.NotoSansThai_Bold" bytes="2" />
    </#if>
    <macrolist>
        <macro id="nlheader">
            $preferences.formlandscape
<table class="header" style="width:100%;"><tr>
    <td colspan="3" style="text-align: left; vertical-align: top; white-space: nowrap; height: 40px; width: 178px;"><span style="font-size:12px;"><strong>Date:</strong></span></td>
    <td colspan="5" style="text-align: center; vertical-align: middle; white-space: nowrap; height: 40px; width: 400px;"><span style="font-size:12px;"><strong>Hofseth North America<br />In Stock Inventory Report sorted by Item<br />For All Items Available All Locations</strong></span></td>
    <td colspan="3" style="text-align: right; vertical-align: top; white-space: nowrap; height: 40px;"><span style="font-size:12px;"><strong>Page:<pagenumber/> of <totalpages/></strong></span></td>
    </tr></table>

<table boarder="1" class="header" style="width:100%;">
<thead>
    <tr>
    <th style="width: 40px;"><span style="font-size:12px;">Pack Size</span></th>
    <th style="width: 55px;"><span style="font-size:12px;">Load #</span></th>
    <th style="width: 75px;"><span style="font-size:12px;">Brand</span></th>
    <th style="width: 50px;"><span style="font-size:12px;">Exp. Date</span></th>
    <th style="width: 90px;"><span style="font-size:12px;">Lot #</span></th>
    <th style="width: 100px;"><span style="font-size:12px;">Location</span></th>
    <th style="width: 65px;"><span style="font-size:12px;">Arrival<br />Date</span></th>
    <th style="width: 69px;"><span style="font-size:12px;">Unit<br />Cost</span></th>
    <th style="width: 110px;"><span style="font-size:12px;">Extended<br />Cost</span></th>
    <th style="width: 70px;"><span style="font-size:12px;">Qty<br />Available</span></th>
    <th style="width: 64px;"><span style="font-size:12px;">Units<br />Available</span></th>
    </tr>
</thead>
</table>
        </macro>
    </macrolist>
    <style type="text/css">* 
                        <#if .locale == "zh_CN">
                            font-family: NotoSans, NotoSansCJKsc, sans-serif;
                        <#elseif .locale == "zh_TW">
                            font-family: NotoSans, NotoSansCJKtc, sans-serif;
                        <#elseif .locale == "ja_JP">
                            font-family: NotoSans, NotoSansCJKjp, sans-serif;
                        <#elseif .locale == "ko_KR">
                            font-family: NotoSans, NotoSansCJKkr, sans-serif;
                        <#elseif .locale == "th_TH">
                            font-family: NotoSans, NotoSansThai, sans-serif;
                        <#else>
                            font-family: NotoSans, sans-serif;
                        </#if>

        table 
            font-size: 9pt;
        
        th 
            font-weight: bold;
            font-size: 8pt;
            vertical-align: middle;
            padding: 5px 6px 3px;
            background-color: #e3e3e3;
            color: #333333;
        
        td 
            padding: 4px 6px;
        
        td p  align:left 
</style>
</head> 
    <body header="nlheader" header- padding="0.2in 0.2in 0.2in 0.2in" size="Letter-LANDSCAPE">
    <#if results?has_content><#assign subtotalEC = 0 subtotalLB = 0 subtotalCS = 0>
<table class="itemtable" style="width:100%;"><!-- start items --><#list results as result><#list result.itemid as items>
    <tr>
    <td style="width: 43px;"><span style="font-size:10px;">**</span></td>
    <td colspan="2" rowspan="1" style="width: 70px;"><span style="font-size:10px;">$result.itemid</span></td>
    <td colspan="2" rowspan="1" style="width: 94px; white-space: nowrap;"><span style="font-size:10px;">$result.displayname</span></td>
    <td style="width: 133px;">&nbsp;</td>
    <td style="width: 72px;">&nbsp;</td>
    <td style="width: 47px;">&nbsp;</td>
    <td style="width: 120px;">&nbsp;</td>
    <td style="width: 79px;">&nbsp;</td>
    <td style="width: 68px;">&nbsp;</td>
    </tr>
<#elseif><tr>
    <td style="width: 43px;"><span style="font-size:10px;">$result.custitempacksize</span></td>
    <td style="width: 70px;"><span style="font-size:10px;">$result.custcol_lottextitemlinelevel</span></td>
    <td style="width: 48px;"><span style="font-size:10px;">$result.custitem_brand</span></td>
    <td style="width: 94px;">$result.expirationdate</td>
    <td style="width: 97px;"><span style="font-size:10px;">$result.serialnumbers</span></td>
    <td style="width: 133px;"><span style="font-size:10px;">$result.location</span></td>
    <td style="width: 72px;"><span style="font-size:10px;">$result.custbodyestimatedarrivaldate</span></td>
    <td style="width: 47px;"><span style="font-size:10px;">$result.rate</span></td>
    <td style="width: 120px;"><span style="font-size:10px;">$result.formulacurrency</span></td>
    <td style="width: 79px;"><span style="font-size:10px;">$result.quantityavailable</span></td>
    <td style="width: 68px;"><span style="font-size:10px;">$result.formulanumeric</span></td>
    </tr>
    </#elseif></#list>
    <#else><tr>
    <td style="width: 43px;">**</td>
    <td colspan="3" rowspan="1" style="width: 70px;">Subtotal for :&nbsp;$result.itemid</td>
    <td style="width: 97px;">&nbsp;</td>
    <td style="width: 133px;">&nbsp;</td>
    <td style="width: 72px;">&nbsp;</td>
    <td style="width: 47px;">&nbsp;</td>
    <td style="width: 120px;">&nbsp;
    <hr />subtotalEC</td>
    <td style="width: 79px;">&nbsp;
    <hr />subtotalLB</td>
    <td style="width: 68px;">&nbsp;
    <hr />subtotalCS</td>
    </tr>
    </#else></#list><!-- end items --></table>
</#if>
</body>
</pdf>

我无法使用 freemarker 标签创建我想要的列表。 我提供的代码保存没有错误 但是在尝试打印时会产生未知错误 或从 UI 将其显示为 PDF。

我希望发生以下情况。

将报表分组并列出所有项目。 在每个项目列表下,从该项目的搜索中包含的行级详细信息。 每个项目下的 Grouped Info 中的小计 3 个字段,并将其显示在最后一行 Grouped Information 下。 然后对搜索中包含的所有项目重复

【问题讨论】:

【参考方案1】:

你的 if-else 结构可能很挑剔。 您正在关闭 else-ifs 和 else 的标签,它可能不喜欢那样。 这是来自 freemarker 网站的示例:

x 是 1 x 是 2 x 是 3 x 是 4 x 不是 1 也不是 2 也不是 3 也不是 4#if>

值得一试!

【讨论】:

以上是关于使用“高级 PDF/模板”编辑器从保存的搜索构建自定义报告的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NetSuite 的高级 PDF 模板中插入自定义字段?

我的 NetSuite 高级 PDF 模板无法对交易表单数据进行分组

NetSuite 高级 PDF 模板 - Freemarker 语法

在 netsuite 高级 pdf 模板中,无论如何都可以限制字符串中的字符

CSS 在 Netsuite 高级 PDF 模板中为部分表头添加额外的字母间距

通过 freemarker/高级 pdf 模板打印记录时,NetSuite 是不是会加载自定义子列表?