使用“高级 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;"> </td>
<td style="width: 72px;"> </td>
<td style="width: 47px;"> </td>
<td style="width: 120px;"> </td>
<td style="width: 79px;"> </td>
<td style="width: 68px;"> </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 : $result.itemid</td>
<td style="width: 97px;"> </td>
<td style="width: 133px;"> </td>
<td style="width: 72px;"> </td>
<td style="width: 47px;"> </td>
<td style="width: 120px;">
<hr />subtotalEC</td>
<td style="width: 79px;">
<hr />subtotalLB</td>
<td style="width: 68px;">
<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;"> </td>
<td style="width: 72px;"> </td>
<td style="width: 47px;"> </td>
<td style="width: 120px;"> </td>
<td style="width: 79px;"> </td>
<td style="width: 68px;"> </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 : $result.itemid</td>
<td style="width: 97px;"> </td>
<td style="width: 133px;"> </td>
<td style="width: 72px;"> </td>
<td style="width: 47px;"> </td>
<td style="width: 120px;">
<hr />subtotalEC</td>
<td style="width: 79px;">
<hr />subtotalLB</td>
<td style="width: 68px;">
<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 模板中,无论如何都可以限制字符串中的字符