Как зациклить или повторить позиции по количеству их в Netsuite Advanced PDFs? - PullRequest
0 голосов
/ 06 декабря 2018

Краткая версия: В документах 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 чрезвычайно ограничена, и я не буду позволять мне вводить дополнительные подробности записи элемента, кроме этих Label record options

Поэтому моя работа заключается в создании отдельной формы транзакции заказа на покупкуэто указывает на новый расширенный pdf-заказ на покупку, содержащий приведенный выше код и ограничивающий его размером 6 x 4 дюйма для термопечати.Каждая позиция становится отдельной таблицей и новой меткой.

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

enter image description here

Создает эти метки

Item Labels from Netsuite Purchase Order

Вопросы:

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

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

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

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

Обратите внимание, что при попытке сохранить этот код в 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>
0 голосов
/ 06 декабря 2018

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

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

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

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

...