如何在 Netsuite Advanced PDF 中按数量循环或重复行项目?

How do I loop or repeat line items by their quantity count in Netsuite Advanced PDFs?

简短版本:在使用 BFO 和 Freemarker 的 Netsuite Advanced PDF 中,如何重复一个订单项 x 次,其中 x 是项目数量?

代码:

<#if record.item?has_content>
<table class="itemtable" style="width: 100%; margin-top: 10px; 
height:96mm;"><!-- start items --><#list record.item as item>
<tr>
  <td>
    <table style="width: 100%; height:100%;">
        <tr>
        <td width="70%"><#if item.custcol_upccode?length != 0><barcode bar-width="2" codetype="UPCA" showtext="true" height="50" value="${item.custcol_upccode}"/></#if></td>
        <td width="30%" align="right" valign="bottom"><span style="font-weight:bold; vertical-align:bottom;">${item.custcol_item_collection}</span></td>
        </tr>
        <tr height="10">
        <td colspan="2"></td>
        </tr>
        <tr>
        <td><p style="font-size:14pt; line-height:140%; padding:0 12pt 0 12pt;">${item.custcol_displayname}</p></td>
          <td align="right" valign="middle"><span style="font-size:16pt; line-height:140%; font-weight:bold;"><#if record.custbody_container_id?has_content>${record.custbody_container_id}<#else>${record.tranid}</#if></span></td>
        </tr>
        <tr>
        <td align="center" style="text-align:center !important;"><#if item.custcol_moq!=0 && item.custcol_moq!=1><div style="text-align:center !important; width:100%; height:100%; background-color:#000; padding:0 12pt 0 12pt;"><span style="color:#FFF; text-align:center !important; font-weight:bold;">${item.custcol_moq} PER BOX</span></div></#if></td>
          <td align="right"><span style="font-size:14pt; line-height:140%; font-weight:bold;">
            <#setting date_format="yyMM">
            <#setting locale="en_US">
            ${record.custbody_etd}
            </span></td>
        </tr>
        <tr>
        <td colspan="2"><#if item.item?length != 0><barcode bar-width="1" codetype="code128" showtext="false"  height="70" value="${item.item}"/></#if></td>
        </tr>
        <tr>
          <td colspan="2"><span style="font-size:20pt; line-height:140%; font-weight:bold; padding:0 12pt 0 12pt;">${item.item}</span></td>
        </tr>
    </table>
  </td>
</tr>
</#list><!-- end items -->
</table>
</#if>

长版:我想要完成的是这个 - 我正在为接收采购订单制作商品标签。 Netsuite 中的标签记录非常有限,除了这些

,我不会让我提取其他项目记录详细信息

所以我的解决方法是创建一个单独的采购订单交易表格,该表格指向包含上述代码的新采购订单高级 pdf 并将其限制为 6" x 4" 的主体以进行热敏标签打印。每个订单项都成为一个单独的 table 和一个新标签。

包含这 3 件商品的采购订单

创建这些标签

问题:

  1. 为什么只返回 3 个项目中的 2 个?
  2. 以及如何拆分每个订单项以重复 x 次,其中 x 是 item.quantity?

在此示例中,第一个标签应重复 75 次,第二个标签应重复 65 次,第三个标签应出现并重复 60 次。最终目标是能够在 pdf 上按打印并让它为收到的每个项目生成标签。

为此,您需要第二个“<list>”循环,重复次数与行数一样多:

<#list record.item as item>
  <#list 1..item.quantity as i>
     <!-- your label here -->
  </#list>
</#list>

我不确定你为什么没有得到第三个项目。

我还建议不要将整个 pdf 包装在 table 中,您可以只为每个标签设置一个 table,并使用 <pbr/> 标签强制中断页之间

这是完整的代码,以防将来对其他人有所帮助。我 运行 这是一个高级 pdf 采购订单,最终会编写一个显示在采购订单记录上的按钮,然后通过 suitelet 从这个高级 pdf 创建一个 pdf - 同时,仓库可以打印这些编辑采购订单并切换到指向此高级 pdf 模板的自定义表单,然后按打印 - 打印标签。

值得注意的是,当您尝试在 Netsuite 中保存此代码时,它需要一段时间来验证并警告存在意外错误(没有进一步的详细信息),我还是保存了它以进行测试并且它按我想要的方式运行

另外请注意,我在我的项目记录中使用了很多自定义交易行字段来获取容器编号、最小数量等详细信息。您可以随意更改这些字段 ID 和任何格式以适合您的组织.

<?xml version="1.0"?><!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">
<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">
        </macro>
        <macro id="nlfooter">
            <table class="footer" style="width: 100%;"><tr>
            <td align="right"><span style="font-size:8pt; text-align:right;"><pagenumber/>&nbsp;/&nbsp;<totalpages/></span></td>
            </tr></table>
        </macro>
    </macrolist>
    <style type="text/css">
      table {
        <#if .locale == "zh_CN">
            font-family: stsong, sans-serif;
        <#elseif .locale == "zh_TW">
            font-family: msung, sans-serif;
        <#elseif .locale == "ja_JP">
            font-family: heiseimin, sans-serif;
        <#elseif .locale == "ko_KR">
            font-family: hygothic, sans-serif;
        <#elseif .locale == "ru_RU">
            font-family: verdana;
        <#else>
            font-family: sans-serif;
        </#if>
            font-size: 9pt;
            table-layout: fixed;
        }
       table {
            font-size: 12pt;
            margin-top: 10px;
            table-layout: fixed;
       }
  td p { text-align:left }
</style>
</head>
<body header="nlheader" header-height="0" footer="nlfooter" footer-height="16pt" padding="0.125in 0.125in 0.125in 0.125in" width="152.4mm" height="101.6mm">

<#if record.item?has_content>
<#list record.item as item>
<#list 1..item.quantity as i>
<table class="itemtable" style="width: 100%; margin-top: 10px; height:96mm;">
    <tr>
      <td>
    <table style="width: 100%; height:100%;">
            <tr>
            <td width="70%"><#if item.custcol_upccode?length != 0><barcode bar-width="2" codetype="UPCA" showtext="true" height="50" value="${item.custcol_upccode}"/></#if></td>
            <td width="30%" align="right" valign="bottom"><span style="font-weight:bold; vertical-align:bottom;">${item.custcol_item_collection}</span></td>
            </tr>
            <tr height="10">
            <td colspan="2"></td>
            </tr>
            <tr>
            <td><p style="font-size:14pt; line-height:140%; padding:0 12pt 0 12pt;">${item.custcol_displayname}</p></td>
              <td align="right" valign="middle"><span style="font-size:16pt; line-height:140%; font-weight:bold;"><#if record.custbody_container_id?has_content>${record.custbody_container_id}<#else>${record.tranid}</#if></span></td>
            </tr>
            <tr>
            <td align="center" style="text-align:center !important;"><#if item.custcol_moq!=0 && item.custcol_moq!=1><div style="text-align:center !important; width:100%; height:100%; background-color:#000; padding:0 12pt 0 12pt;"><span style="color:#FFF; text-align:center !important; font-weight:bold;">${item.custcol_moq} PER BOX</span></div></#if></td>
              <td align="right"><span style="font-size:14pt; line-height:140%; font-weight:bold;">
                <#setting date_format="yyMM">
                <#setting locale="en_US">
                ${record.custbody_etd}
                </span></td>
            </tr>
            <tr>
            <td colspan="2"><#if item.item?length != 0><barcode bar-width="1" codetype="code128" showtext="false"  height="70" value="${item.item}"/></#if></td>
            </tr>
            <tr>
              <td colspan="2"><span style="font-size:20pt; line-height:140%; font-weight:bold; padding:0 12pt 0 12pt;">${item.item}</span></td>
            </tr>
        </table>
      </td>
 </tr>
  </table><pbr/>
</#list>
</#list>
</#if>
</body>
</pdf>