Формулы вывода данных из карточки товара в документе
Ознакомьтесь с полным списком формул в статье Основные формулы вывода данных из документа.
Для вывода списка позиций документа используются формулы цикла (перебора). Общим правилом создания цикла является наличие функции его начала, описания и окончания.
В шаблонах документов существует три варианта циклов: по позиции, по товару, по услугам.
<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 — порядковый номер изображения.
Маркировка
| Формула | Значение |
| ${position.consignment.getTnvedCode()} | ТН ВЭД |
| ${formatter.getTargetGender(position.good)} | Целевой пол |
Упаковка
| Формула | Значение |
| ${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} | Штрихкод ТАСНИФ |