Как зациклить или повторить позиции по количеству их в Netsuite Advanced PDFs?

Краткая версия: Как в Netsuite Advanced PDF с использованием BFO и Freemarker повторить позицию 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" для термопечати. Каждая позиция становится отдельной таблицей и новой меткой.

Заказ на покупку, содержащий эти 3 позиции

Создает эти ярлыки

Вопросы:

  1. Почему он возвращает только 2 из 3 предметов?
  2. И как мне разделить каждую позицию, чтобы повторять число раз x, где x это item.quantity?

В этом примере первая метка должна повторяться 75 раз, вторая метка должна повторяться 65 раз, а третья метка должна появляться и повторяться 60 раз. Конечная цель заключается в том, чтобы иметь возможность печатать в формате PDF и заставлять его производить этикетку для каждого полученного элемента.

3 ответа

Решение

Для этого вам понадобится секунда<list>"цикл, который повторяется столько раз, сколько количество строк:

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

Я не уверен, почему вы не получаете третий пункт в вашей попытке.

Я бы также предложил вместо того, чтобы оборачивать весь ваш PDF-файл в таблицу, вы можете просто иметь таблицу для каждой метки и использовать <pbr/> тег, чтобы вызвать разрыв между страницами

Вот полный код, на случай, если он поможет кому-то еще в будущем. Я запускаю его как расширенный PDF-файл для заказа на покупку и в конечном итоге создаю сценарий для кнопки, которая отображается в записях заказа на покупку, а затем создает PDF-файл из этого расширенного PDF-файла через пакет. и переключение на пользовательскую форму, которая указывает на этот расширенный шаблон PDF, затем нажмите печать, а не печать этикеток.

Следует отметить, что когда вы пытаетесь сохранить этот код в Netsuite, требуется некоторое время для проверки и предупреждения о непредвиденной ошибке (без дополнительных подробностей), я все равно сохранил ее для тестирования и она работает так, как я хочу.

Также следует отметить, что я использую множество настраиваемых полей строки транзакции в своей записи товара для таких деталей, как номер контейнера, минимальное количество и т. Д. Не стесняйтесь изменять эти идентификаторы полей и любое форматирование для работы в вашей организации.

<?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>

Приведенное выше общее решение подходит на 100%, но когда вы сохраняете макет в пользовательском интерфейсе (браузере), он переходит в бесконечный цикл сохранения, но сохраняется при загрузке через SDF.

Другие вопросы по тегам