Как зациклить или повторить позиции по количеству их в 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 позиции
Создает эти ярлыки
Вопросы:
- Почему он возвращает только 2 из 3 предметов?
- И как мне разделить каждую позицию, чтобы повторять число раз 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/> / <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.