Ознакомьтесь с полным списком формул в статье Основные формулы вывода данных из документа.
В прайс-листе нельзя вывести остатки, резервы и ожидания.
Перечисленные ниже формулы вписываются между началом и концом перебора.
<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} | Наименование из справочника контрагентов |