Формулы вывода данных в прайс-листе
Ознакомьтесь с полным списком формул в статье Основные формулы вывода данных из документа.
В прайс-листе нельзя вывести остатки, резервы и ожидания.
Перечисленные ниже формулы вписываются между началом и концом перебора.
<jx:forEach items="${o.positions}" var="row">
// формула по товару
</jx:forEach>Стандартный шаблон отчета выводится с группировкой по категориям товара. В этом случае используется двойной перебор.
<jx:forEach items="${o.positions}" groupBy="category">
${group.item.category}
<jx:forEach items="${group.items}" var="row">
// формула по товару
</jx:forEach>
</jx:forEach>Поля прайс-листа
Основные поля прайс-листа
| Формула | Значение |
| ${o.name} | Название прайс-листа |
| ${formatter.getExcelDate(o.moment)} | Дата прайс-листа |
| ${o.state.name} | Статус |
| ${o.description} | Описание |
| ${formatter.printIf(o.applicable, “Да”)} | Проведено |
Владелец-сотрудник
| Формула | Значение |
| ${o.getOwnerName()} | Владелец-сотрудник |
| ${o.getGroupName()} | Владелец-отдел |
| ${formatter.printIfElse(o.getShared(), “Да”, “Нет”)} | Общий доступ |
Подробные поля из карточки сотрудника, указанного в документе в качестве Владельца-сотрудника:
| Формула | Значение |
| ${formatter.getEmployeeForId(o.getOwnerId()).lastName} | Фамилия |
| ${formatter.getEmployeeForId(o.getOwnerId()).firstName} | Имя |
| ${formatter.getEmployeeForId(o.getOwnerId()).middleName} | Отчество |
| ${formatter.getEmployeeForId(o.getOwnerId()).phone} | Телефон |
| ${formatter.getEmployeeForId(o.getOwnerId()).email} | |
| ${formatter.getEmployeeForId(o.getOwnerId()).position} | Должность |
| ${formatter.getEmployeeForId(o.getOwnerId()).inn} | ИНН |
| ${formatter.getEmployeeForId(o.getOwnerId()).description} | Описание |
Организация из прайс-листа
Формулы вывода данных из карточки юр.лица опубликованы в отдельной статье.
В прайс-листе есть только организация, контрагента нет.
Поля из карточки товара
Основные поля
| Формула | Значение |
| ${row.printName} | Наименование |
| ${row.good.name} | Наименование без учета модификации |
| ${row.good.code} | Код |
| ${row.good.productCode} | Артикул |
| ${row.good.parent.name} | Группа |
| ${row.good.country.name} | Страна |
| ${row.good.uom.name} | Единица измерения наименование |
| ${row.good.uom.code} | Единица измерения код |
| ${row.good.weight} | Вес |
| ${row.good.volume} | Объем |
| ${row.good.vat} | НДС, % |
| ${row.good.minimumBalance} | Неснижаемый остаток |
| ${row.good.supplier.name} | Поставщик |
| ${row.good.description} | Описание |
Модификация товара
| Формула | Значение |
| ${row.consignment.feature.name} | Наименование |
| ${row.consignment.feature.code} | Код |
| ${row.consignment.feature.description} | Описание |
| ${formatter.findAttribute(row.getConsignment(). getFeature(), “Цвет”).value} | Характеристика:цвет |
| ${row.consignment.feature.externalCode} | Внешний код |
| ${row.consignment.feature.id} | Uuid |
Дополнительно
| Формула | Значение |
| ${row.good.externalCode} | Внешний код |
| ${row.good.id} | Uuid |
| ${formatter.printIfElse(row.good.archived==“true”, “Да”, “Нет”)} | Архивный |
Владелец-сотрудник
| Формула | Значение |
| ${row.good.getOwnerName()} | Владелец- сотрудник |
| ${row.good.getGroupName()} | Владелец-отдел |
| ${formatter.printIfElse(row.good.getShared(), “Да”, “Нет”)} | Общий доступ |
Упаковка
| Формула | Значение |
| ${formatter.loadGood(row.good.id).getGoodPacks() .get(0).uom.name} | Наименование упаковки |
| ${formatter.loadGood(row.good.id).getGoodPacks() .get(0).uom.code} | Код упаковки |
| ${formatter.loadGood(row.good.id).getGoodPacks() .get(0).quantity} | Количество ед. в упаковке |
| ${formatter.printIf(!empty(formatter.loadGood(row.good.id).getGoodPacks().get(0).uom.name), formatter.loadGood(row.good.id).getGoodPacks().get(0).defaultBarcode.barcode)} | Штрихкод упаковки |
Изображение
Первое по счету:
| Формула | Значение |
| ${!row.good.isService() ? formatter.printIfElse(row.good.getImages().size()>0, formatter.image(row.good.getImages().get(0)), formatter.getNotFoundPicture()) : formatter.getNotFoundPicture()} | Изображение основного товара по размеру ячейки |
| ${!row.good.isService() ? formatter.printIfElse(row.good.getImages().size()>0, formatter.image(row.good.getImages().get(0), true), formatter.getNotFoundPicture()) : formatter.getNotFoundPicture()} | Изображение основного товара в оригинальном размере |
| ${!row.good.isService() ? formatter.printIfElse(row.consignment.feature.getImages().size()>0, formatter.image(row.consignment.feature.getImages().get(0)), formatter.getNotFoundPicture()) : formatter.getNotFoundPicture()} | Изображение модификации товара по размеру ячейки |
| ${!row.good.isService() ? formatter.printIfElse(row.consignment.feature.getImages().size()>0, formatter.image(row.consignment.feature.getImages().get(0), true), formatter.getNotFoundPicture()) : formatter.getNotFoundPicture()} | Изображение модификации товара в оригинальном размере |
| ${!row.good.isService() ? row.consignment.feature.getImages().size()>0 ? formatter.image(row.consignment.feature.getImages().get(0)) : formatter.printIfElse(row.good.getImages().size()>0, formatter.image(row.good.getImages().get(0)), formatter.getNotFoundPicture()) : formatter.getNotFoundPicture()} | Изображение позиции по размеру ячейки |
| ${!row.good.isService() ? row.consignment.feature.getImages().size()>0 ? formatter.image(row.consignment.feature.getImages().get(0), true) : formatter.printIfElse(row.good.getImages().size()>0, formatter.image(row.good.getImages().get(0), true), formatter.getNotFoundPicture()) : formatter.getNotFoundPicture()} | Изображение позиции в оригинальном размере |
Если необходим вывод второго по счету изображения из перечня, то в формуле изменяется значение get(0) на get(1).
Штрихкод
Цифровой:
| Формула | Значение |
| ${row.good.defaultBarcode.barcode} | Штрихкод товара |
| ${row.consignment.feature.defaultBarcode.barcode} | Штрихкод модификации |
| ${formatter.printIfElse(row.consignment.feature != null, row.consignment.feature.defaultBarcode.barcode, row.good.defaultBarcode.barcode)} | Штрихкод с проверкой на наличие модификации |
| ${formatter.getBarcode(row)} | Штрихкод позиции |
Графический:
| Формула | Значение |
| ${barcode4j.generateCode(row.good.defaultBarcode. barcodeType, row.good.defaultBarcode.barcode ,null, null, “0.3”, “9”, null, null, null, null, null, null)} | Штрихкод товара |
| ${barcode4j.generateCode (row.consignment.feature.defaultBarcode.barcodeType, row.consignment.feature.defaultBarcode.barcode ,null, null, “0.3”, “9”, null, null, null, null, null, null)} | Штрихкод модификации |
| ${formatter.printIfElse(row.consignment.feature != null, barcode4j.generateCode (row.consignment.feature.defaultBarcode.barcodeType, row.consignment.feature.defaultBarcode.barcode ,null, null, “0.3”, “9”, null, null, null, null, null, null), barcode4j.generateCode(row.good.defaultBarcode.barcodeType, row.good.defaultBarcode.barcode ,null, null, “0.3”, “9”, null, null, null, null, null, null))} | Штрихкод с проверкой на наличие модификации |
Цены
Основного товара:
| Формула | Значение |
| ${formatter.loadGood(row.good.id).minPrice / 100} | Минимальная цена |
| ${formatter.loadGood(row.good.id).buyPrice/100} | Закупочная цена |
| ${formatter.loadGood(row.good.id).buyCurrency.name} | Валюта закупочной цены |
| ${formatter.loadGood(row.good.id).salePrice/100} | Цена продажи |
| ${formatter.loadGood(row.good.id).saleCurrency.name} | Валюта цены продажи |
| ${formatter.loadGood(row.good.id).salePrices. findPrice(“Опт”).value / 100} | Дополнительная цена продажи (“Опт”) |
| ${formatter.loadGood(row.good.id) .salePrices.findPrice(“Опт”).currency.name} | Валюта цены продажи (“Опт”) |
С учетом цен модификаций:
| Формула | Значение |
| ${formatter.loadConsignment(row.consignment.id). feature.effectiveMinPrice/100} | Минимальная цена |
| ${formatter.loadConsignment(row.consignment.id). feature.effectiveBuyPriceValue/100} | Закупочная цена |
| ${formatter.loadConsignment(row.consignment.id) .feature.effectiveBuyPriceCurrency.name} | Валюта закупочной цены |
| ${formatter.loadConsignment(row.consignment.id). feature.effectiveSalePrice/100} | Цена продажи |
| ${formatter.loadConsignment(row.consignment.id) .feature.effectiveSalePrices.defaultPrice.currency.name} | Валюта цены продажи |
| ${formatter.loadConsignment(row.consignment.id). feature.effectiveSalePrices.findPrice(“Опт”).priceValue/100} | Дополнительная цена продажи (“Опт”) |
| ${formatter.loadConsignment(row.consignment.id) .feature.effectiveSalePrices.findPrice(“Опт”).currency.name} | Валюта цены продажи (“Опт”) |
Дополнительные поля
Общим правилом оформления формулы вывода дополнительного поля из карточки товара является структура:
${formatter.findAttribute(row.good, “Наименование поля”).value}
Основные параметры:
- row.good — указатель на источник данных — карточка товара.
- “Наименование поля” — точное наименование дополнительного поля в кавычках (с учетом регистра, дополнительных символов и т.д.).
- value — тип, по которому создано пользовательское поле.
| Формула | Тип поля |
| ${formatter.findAttribute(row.good, “Наименование поля”).valueText} | Текст |
| ${formatter.findAttribute(row.good, “Наименование поля”).valueString} | Строка |
| ${formatter.findAttribute(row.good, “Наименование поля”).value} | Ссылка |
| ${formatter.findAttribute(row.good, “Наименование поля”).longValue} | Число целое |
| ${formatter.findAttribute(row.good, “Наименование поля”).doubleValue} | Число дробное |
| ${formatter.findAttribute(row.good, “Наименование поля”).timeValue} | Дата |
| ${formatter.printIfElse(formatter.findAttribute(row.good, “Название поля”).booleanValue==“true”, “Да”, “Нет”)} | Флажок |
| ${formatter.imageAttribute(row.good, “Название поля”, false)} | Файл |
| ${formatter.findAttribute(row.good, “Наименование поля”).entityValue.name} | Наименование из дополнительного справочника |
| ${formatter.findAttribute(row.good, “Наименование поля”).employeeValue.name} | Наименование из справочника сотрудников |
| ${formatter.findAttribute(row.good, “Наименование поля”).agentValue.name} | Наименование из справочника контрагентов |