Ознакомьтесь с полным списком формул в статье Основные формулы вывода данных из документа.
Для вывода списка позиций документа используются формулы цикла (перебора). Общим правилом создания цикла является наличие функции его начала, описания и окончания.
В шаблонах документов существует три варианта циклов: по позиции, по товару, по услугам.
<jx:forEach items="${o.positions}" var="position"> </jx:forEach> |
по всем позициям документа |
<jx:forEach items="${formatter.getGoods(o)}" var="position"> </jx:forEach> |
только по Товарам |
<jx:forEach items="${formatter.getServices(o)}" var="position"> </jx:forEach> |
только по Услугам |
Следующие формулы вписываются между началом и концом цикла.
- Основные поля из карточки товара
- Поля позиций по документу
- Владелец-сотрудник
- Изображение
- Упаковка
- Модификация товара
- Штрихкод
- Цены
- Дополнительные поля
- Региональные поля (Узбекистан)
Основные поля из карточки товара
Формула | Значение |
${position.good.name} | Наименование |
${position.good.code} | Код |
${position.good.productCode} | Артикул |
${position.good.parent.name} | Группа |
${position.good.country.name} | Страна |
${position.good.uom.name} | Единица измерения, наименование |
${position.good.uom.code} | Единица измерения, код |
${position.good.weight} | Вес |
${position.good.volume} | Объем |
${position.good.vat} | НДС, % |
${position.good.minimumBalance} | Неснижаемый остаток |
${position.good.supplier.name} | Поставщик |
${position.good.description} | Описание |
${position.good.externalCode} | Внешний код |
${position.good.id} | Uuid |
${position.good.archived} | Архивный |
${position.good.updated} | время последнего обновления |
${position.good.updatedBy} | инициатор последнего обновления |
Поля позиций по документу
Формула | Значение |
${position.printName} | Наименование |
${position.consignment.modificationCode} | Код |
${position.quantity} | Количество |
${position.good.uom.name} | Ед. измерения |
${position.goodPack.uom.name} | Упаковка товара |
${position.goodPack.quantity} | Количество в одной упаковке |
${formatter.printIf(position.goodPack.quantity > 0, position.quantity / position.goodPack.quantity)} | Количество упаковок товара |
${position.reserve} | Резерв/Ожидание по документу (в заказах покупателя/поставщику) |
${formatter.shipped(position)} | Отгружено/Принято (в заказах покупателя/поставщику) |
${position.good.weight * position.quantity} | Вес позиции |
${position.good.volume * position.quantity} | Объем позиции |
${position.price.sumInCurrency / 100} | Цена с учетом скидки |
${formatter.round(position.price.sumInCurrency * position.quantity) / 100.0} | Сумма с учетом скидки |
${position.basePrice.sumInCurrency / 100} | Цена без учета скидки |
${formatter.round(position.basePrice.sumInCurrency * position.quantity) / 100.0} | Сумма без учета скидки |
${position.discount} | Скидка, % |
${(position.basePrice.sumInCurrency * position.quantity) / 100 - (position.price.sumInCurrency * position.quantity) / 100} | Сумма скидки позиции |
${formatter.printIfElse(o.sourceAgentRequisite.agent.payerVat && position.nullableVat != null, position.nullableVat + "%", "Без НДС")} | НДС, % |
${formatter.roundToCents(position.price.sumInCurrency * position.quantity / 100 - position.price.sumInCurrency * position.quantity / (100 + position.vat))} | Сумма НДС позиции |
${formatter.cost(position) / position.quantity} | Себестоимость ед. (в документах, изменяющих остаток) |
${formatter.cost(position)} | Себестоимость (в документах, изменяющих остаток) |
${formatter.printNameList(position.getThings())} | Сер.номера товаров |
${formatter.printNameList(position.getCrptEnrolls())} | Коды маркировки товаров |
${formatter.printIfElse(position.good.type=="Kit", "Комплект", formatter.printIfElse(position.good.type=="Service", "Услуга", formatter.printIfElse(empty(position.consignment.feature.name),"Товар","Модификация")))} | Тип позиции |
Владелец-сотрудник
Формула | Значение |
${position.good.getOwnerName()} | ФИО |
${position.good.getGroupName()} | Владелец-отдел |
${formatter.printIfElse(position.good.getShared(), "Да", "Нет")} | Общий доступ |
Изображение
Формула | Значение |
${!position.good.isService() ? formatter.printIfElse(position.good.getImages().size()>0, formatter.image(position.good.getImages().get(0)), formatter.getNotFoundPicture()) : formatter.getNotFoundPicture()} | Изображение основного товара по размеру ячейки |
${!position.good.isService() ? formatter.printIfElse(position.good.getImages().size()>0, formatter.image(position.good.getImages().get(0), true), formatter.getNotFoundPicture()) : formatter.getNotFoundPicture()} | Изображение основного товара в оригинальном размере |
${!position.good.isService() ? formatter.printIfElse(position.consignment.feature.getImages().size()>0, formatter.image(position.consignment.feature.getImages().get(0)), formatter.getNotFoundPicture()) : formatter.getNotFoundPicture()} | Изображение модификации товара по размеру ячейки |
${!position.good.isService() ? formatter.printIfElse(position.consignment.feature.getImages().size()>0, formatter.image(position.consignment.feature.getImages().get(0), true), formatter.getNotFoundPicture()) : formatter.getNotFoundPicture()} | Изображение модификации товара в оригинальном размере |
${!position.good.isService() ? position.consignment.feature.getImages().size()>0 ? formatter.image(position.consignment.feature.getImages().get(0)) : formatter.printIfElse(position.good.getImages().size()>0, formatter.image(position.good.getImages().get(0)), formatter.getNotFoundPicture()) : formatter.getNotFoundPicture()} | Изображение позиции по размеру ячейки |
${!position.good.isService() ? position.consignment.feature.getImages().size()>0 ? formatter.image(position.consignment.feature.getImages().get(0), true) : formatter.printIfElse(position.good.getImages().size()>0, formatter.image(position.good.getImages().get(0), true), formatter.getNotFoundPicture()) : formatter.getNotFoundPicture()} | Изображение позиции в оригинальном размере |
Если необходим вывод второго по счету изображения из перечня, то в формуле изменяется значение get(0) на get(1), а >0 на >1. Для последующих изображений в формуле указывается значение get(n-1) и >n-1, где n — порядковый номер изображения.
Упаковка
Формула | Значение |
${formatter.loadGood(position.good.id).getGoodPacks() .get(0).uom.name} | Наименование упаковки |
${formatter.loadGood(position.good.id).getGoodPacks() .get(0).uom.code} | Код упаковки |
${formatter.loadGood(position.good.id).getGoodPacks() .get(0).quantity} | Количество ед. в упаковке |
${formatter.printIf(!empty(formatter.loadGood(position.good.id).getGoodPacks().get(0).uom.name), formatter.loadGood(position.good.id).getGoodPacks().get(0).defaultBarcode.barcode)} | Штрихкод упаковки |
Модификация товара
Формула | Значение |
${position.consignment.feature.name} | Наименование |
${position.consignment.feature.code} | Код |
${position.consignment.feature.description} | Описание |
${formatter.findAttribute(position.getConsignment(). getFeature(), "цвет").value} | Характеристика:цвет |
${position.consignment.feature.externalCode} | Внешний код |
${position.consignment.feature.id} | Uuid |
Штрихкод
Цифровой:
Формула | Значение |
${position.good.defaultBarcode.barcode} | Штрихкод товара |
${position.consignment.feature.defaultBarcode.barcode} | Штрихкод модификации |
${formatter.printIfElse(position.consignment.feature != null, position.consignment.feature.defaultBarcode.barcode, position.good.defaultBarcode.barcode)} | Штрихкод с проверкой на наличие модификации |
${position.consignment.defaultBarcode.barcode} | Штрихкод серии |
${formatter.getBarcode(position)} |
Штрихкод позиции |
${formatter.findBarcode(position)} |
Поиск штрихкода с учетом товаров/модификаций: |
Графический:
Формула | Значение |
${barcode4j.generateCode(position.good.defaultBarcode. barcodeType, position.good.defaultBarcode.barcode ,null, null, "0.3", "9", null, null, null, null, null, null)} | Штрихкод товара |
${barcode4j.generateCode (position.consignment.feature.defaultBarcode.barcodeType, position.consignment.feature.defaultBarcode.barcode ,null, null, "0.3", "9", null, null, null, null, null, null)} | Штрихкод модификации |
${formatter.printIfElse(position.consignment.feature != null, barcode4j.generateCode (position.consignment.feature.defaultBarcode.barcodeType, position.consignment.feature.defaultBarcode.barcode ,null, null, "0.3", "9", null, null, null, null, null, null), barcode4j.generateCode(position.good.defaultBarcode.barcodeType, position.good.defaultBarcode.barcode ,null, null, "0.3", "9", null, null, null, null, null, null))} | Штрихкод с проверкой на наличие модификации |
${barcode4j.generateCode(position.consignment.defaultBarcode .barcodeType, position.consignment.defaultBarcode.barcode ,null, null, "0.3", "9", null, null, null, null, null, null)} | Штрихкод серии |
${barcode4j.generateCode(formatter.loadConsignment (position.consignment.id). feature.defaultBarcode.barcodeType, formatter.loadConsignment(position.consignment.id) .feature.defaultBarcode.barcode ,null, null, "0.3", "9", null, null, null, null, null, null)} | Штрихкод позиции |
Цены
Основного товара:
Формула | Значение |
${formatter.loadGood(position.good.id).minPrice / 100} | Минимальная цена |
${formatter.loadGood(position.good.id).buyPrice/100} | Закупочная цена |
${formatter.loadGood(position.good.id).buyCurrency.name} | Валюта закупочной цены |
${formatter.loadGood(position.good.id).salePrice/100} | Цена продажи |
${formatter.loadGood(position.good.id).saleCurrency.name} | Валюта цены продажи |
${formatter.loadGood(position.good.id).salePrices. findPrice("Оптовая").value / 100} | Дополнительная цена продажи ("Оптовая") |
${formatter.loadGood(position.good.id) .salePrices.findPrice("Оптовая").currency.name} | Валюта цены продажи ("Оптовая") |
Дополнительная цена выводится по ее наименованию. Наименование цены необходимо вписать в кавычки — "Оптовая".
С учетом цен модификаций:
Формула | Значение |
${formatter.loadConsignment(position.consignment.id). feature.effectiveMinPrice/100} | Минимальная цена |
${formatter.loadConsignment(position.consignment.id). feature.effectiveBuyPriceValue/100} | Закупочная цена |
${formatter.loadConsignment(position.consignment.id) .feature.effectiveBuyPriceCurrency.name} | Валюта закупочной цены |
${formatter.loadConsignment(position.consignment.id). feature.effectiveSalePrice/100} | Цена продажи |
${formatter.loadConsignment(position.consignment.id) .feature.effectiveSalePrices.defaultPrice.currency.name} | Валюта цены продажи |
${formatter.loadConsignment(position.consignment.id). feature.effectiveSalePrices.findPrice("Оптовая").priceValue/100} | Дополнительная цена продажи ("Оптовая") |
${formatter.loadConsignment(position.consignment.id) .feature.effectiveSalePrices.findPrice("Оптовая").currency.name} | Валюта цены продажи ("Оптовая") |
Дополнительная цена выводится по ее наименованию. Наименование цены необходимо вписать в кавычки — "Оптовая".
Дополнительные поля
Общим правилом написания формулы является структура:
${formatter.findAttribute(position.good, "Наименование поля").value}
Основные параметры:
- position.good — указатель на источник данных - карточка товара.
- "Наименование поля" — точное наименование дополнительного поля в кавычках (с учетом регистра, дополнительных символов и т.д.).
- value — тип, по которому создано пользовательское поле.
Формула | Тип поля |
${formatter.findAttribute(position.good, "Наименование поля").valueText} | Текст |
${formatter.findAttribute(position.good, "Наименование поля").valueString} | Строка |
${formatter.findAttribute(position.good, "Наименование поля").value} | Ссылка |
${formatter.findAttribute(position.good, "Наименование поля").longValue} | Число целое |
${formatter.findAttribute(position.good, "Наименование поля").doubleValue} | Число дробное |
${formatter.findAttribute(position.good, "Наименование поля").timeValue} | Дата |
${formatter.imageAttribute(position.good, "Название поля", false)} | Файл |
${formatter.printIfElse(formatter.findAttribute(position.good, "Название поля").booleanValue=="true", "Да", "Нет")} | Флажок |
${formatter.findAttribute(position.good, "Наименование поля").entityValue.name} | Наименование из дополнительного справочника |
${formatter.findAttribute(position.good, "Наименование поля").employeeValue.name} | Наименование из справочника сотрудников |
${formatter.findAttribute(position.good, "Наименование поля").agentValue.name} | Наименование из справочника контрагентов |
Региональные поля (Узбекистан)
Формулы для товаров, комплектов и услуг:
Формула | Тип поля |
${position.good.ikpu} | ИКПУ |
${position.good.uomCode} | Код упаковки ТАСНИФ |
${position.good.barcodeTasnif} | Штрихкод ТАСНИФ |
Формулы для модификаций:
Формула | Тип поля |
${position.consignment.feature.ikpu} | ИКПУ |
${position.consignment.feature.uomCode} | Код упаковки ТАСНИФ |
${position.consignment.feature.barcodeTasnif} | Штрихкод ТАСНИФ |