Описанные формулы предназначены для добавления в шаблоны конкретных документов, например Заказ покупателя.
Основным параметром является атрибут o который указывает на обращение к текущему документу.
Формулы вывода полей с типом даты должны размещаться в шаблоне в отдельных ячейках с форматом Дата (форматирование ячеек в Excel).
Основные реквизиты
Формула | Значение |
${o.name} | Номер |
${formatter.getExcelDate(o.moment)} | Дата |
${formatter.printIf(o.applicable, "Да")} | Проведено |
${o.state.name} | Статус |
${o.description} | Комментарий |
${formatter.operationWeight(o)} | Вес |
${formatter.operationVolume(o)} | Объем |
${formatter.getExcelDate(o.deliveryPlannedMoment)} | План. дата отгрузки/приёмки (для заказов покупателей/поставщикам) |
${formatter.getExcelDate(o.paymentPlannedMoment)} | План. дата оплаты (для счетов покупателям/поставщиков) |
${formatter.getExcelDate(o.updated)} | Дата последнего изменения |
${formatter.getExcelDate(o.created)} | Дата создания |
${o.externalCode} | Внешний код |
${o.id} | ID |
Владелец
Формула | Значение |
${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()).description} | Описание |
Организация и Контрагент
Формулы вывода данных из карточки контрагента/юр.лица опубликованы в отдельной статье.
Склад
Во описанных формулах используется атрибут source - это формулы вывода реквизитов склада, с которого отгружается товар (используется в документах раздела Продажи и в документе Перемещение в поле Со склада), измените на атрибут target, если требуется вывести реквизиты склада на который приходуется товар (используется в документах раздела Закупки и в документе Перемещение в поле На склад).
Формула | Значение |
${o.sourceStore.name} | Наименование |
${o.sourceStore.contact.address} | Адрес |
${o.sourceStore.description} | Комментарий |
${o.sourceStore.code} | Код |
Договор
Формула | Значение |
${o.contract.name} | Номер |
${formatter.getExcelDate(o.contract.moment)} | Дата |
${o.contract.sum.sum / 100} | Сумма |
${o.contract.code} | Код |
${o.contract.description} | Комментарий |
${o.contract.state.name} | Статус |
Проект
Формула | Значение |
${o.project.name} | Наименование |
${o.project.code} | Код |
${o.project.description} | Описание |
Валюта
Формула | Значение |
${o.currency.name} | Валюта документа |
${o.rate} | Курс валюты по документу |
${o.currency.rate} | Курс валюты по справочнику |
Сумма
Формула | Значение |
${o.sum.sum / 100} | Сумма в валюте по умолчанию |
${o.sum.sumInCurrency / 100} | Сумма в валюте документа |
${formatter.printAmount(formatter.getCurrency(o), o.sum.sumInCurrency)} | Сумма в валюте документа прописью |
${formatter.calcTotalAmount(formatter.getServices(o)) / 100} | Сумма услуг |
${formatter.calcTotalAmount(formatter.getGoods(o)) / 100} | Сумма товаров |
${o.tail.payedSum / 100} | Оплачено |
${(o.sum.sum - o.tail.payedSum) / 100} | Осталось оплатить |
НДС
Формула | Значение |
${formatter.printIfElse(o.vatIncluded, "с НДС ", "без НДС")} | с НДС или без НДС |
${formatter.calcVat(o.getPositions())} | Сумма НДС |
${formatter.printAmount(formatter.getCurrency(o), formatter.calcVat(o.getPositions())*100)} | Сумма НДС прописью |
Количество
Формула | Значение |
${formatter.calcTotalQuantity(o)} | Количество по всем позициям |
${formatter.countServices(o)} | Количество услуг |
${formatter.calcTotalGoodsQuantity(o)} | Количество товаров |
${o.getPositions().size()} | Количество порядковых записей позиций |
${formatter.printNumber(o.getPositions().size())} | Количество порядковых записей прописью |
${formatter.getGoods(o).size()} | Количество порядковых записей товаров |
${formatter.printNumber(formatter.getGoods(o).size())} | Количество порядковых записей товаров прописью |
${formatter.getServices(o).size()} | Количество порядковых записей услуг |
${formatter.printNumber(formatter.getServices(o).size())} | Количество порядковых записей услуг прописью |
Дополнительные поля
Общим правилом оформления любой формулы дополнительного поля является структура
${formatter.findAttribute(o, "Наименование поля").value}
Основные параметры:
- o - указатель на источник данных - текущий документ.
- "Наименование поля" - точное наименование дополнительного поля в кавычках (с учетом регистра, дополнительных символов и т.д.).
- value - тип, по которому создано пользовательское поле.
Формула | Тип поля |
${formatter.findAttribute(o, "Наименование поля").valueString} | Строка |
${formatter.findAttribute(o, "Наименование поля").valueText} | Текст |
${formatter.findAttribute(o, "Наименование поля").value} | Ссылка |
${formatter.findAttribute(o, "Наименование поля").longValue} | Число целое |
${formatter.findAttribute(o, "Наименование поля").doubleValue} | Число дробное |
${formatter.findAttribute(o, "Наименование поля").timeValue} | Дата |
${formatter.printIfElse(formatter.findAttribute(o, "Наименование поля").booleanValue=="true", "Да", "Нет")} | Флажок |
Для поля по типу Файл используется два варианта вывода изображения, добавленного в поле в форматах *.png или *.jpg:
Формула | Формат вывода изображения |
${formatter.imageAttribute(o, "Наименование поля", true)} | В реальном размере |
${formatter.imageAttribute(o, "Наименование поля", false)} | По границам ячейки |
Для полей, созданных по типу Справочник (дополнительный или стандартный) возможно вывести не только отображаемые в поле наименования, но и другие поля из карточки элемента справочника.
Дополнительный справочник
Формула | Поле в элементе справочника |
${formatter.findAttribute(o, "Наименование поля").entityValue.name} | Наименование |
${formatter.findAttribute(o, "Наименование поля").entityValue.code} | Код |
${formatter.findAttribute(o, "Наименование поля").entityValue.description} | Описание |
Справочник - Контрагенты
Формула | Поле в элементе справочника |
${formatter.findAttribute(o, "Наименование поля").agentValue.name} | Наименование |
${formatter.findAttribute(o, "Наименование поля").agentValue.code} | Код |
${formatter.findAttribute(o, "Наименование поля").agentValue.contact.phones} | Телефон |
${formatter.findAttribute(o, "Наименование поля").agentValue.contact.email} |
По аналогии можно выводить другие поля из карточки контрагента, перечень которых опубликован в отдельной статье.
Справочник - Товары
Формула | Поле в элементе справочника |
${formatter.findAttribute(o, "Наименование поля").goodValue.name} | Наименование |
${formatter.findAttribute(o, "Наименование поля").goodValue.code} | Код |
${formatter.findAttribute(o, "Наименование поля").goodValue.productCode} | Артикул |
По аналогии можно выводить другие поля из карточки товара, перечень которых опубликован в отдельной статье.
Справочник - Склады
Формула | Поле в элементе справочника |
${formatter.findAttribute(o, "Наименование поля").warehouseValue.name} | Наименование |
${formatter.findAttribute(o, "Наименование поля").warehouseValue.contact.address} | Адрес |
${formatter.findAttribute(o, "Наименование поля").warehouseValue.description} | Комментарий |
${formatter.findAttribute(o, "Наименование поля").warehouseValue.code} | Код |
Справочник - Проекты
Формула | Поле в элементе справочника |
${formatter.findAttribute(o, "Наименование поля").projectValue.name} | Наименование |
${formatter.findAttribute(o, "Наименование поля").projectValue.code} | Код |
${formatter.findAttribute(o, "Наименование поля").projectValue.description} | Описание |
Справочник - Договоры
Формула | Поле в элементе справочника |
${formatter.findAttribute(o, "Наименование поля").contractValue.name} | Номер |
${formatter.findAttribute(o, "Наименование поля").contractValue.moment} | Дата |
${formatter.findAttribute(o, "Наименование поля").contractValue.sum.sum / 100} | Сумма |
${formatter.findAttribute(o, "Наименование поля").contractValue.code} | Код |
${formatter.findAttribute(o, "Наименование поля").contractValue.description} | Комментарий |
${formatter.findAttribute(o, "Наименование поля").contractValue.state.name} | Статус |
Справочник - Сотрудники
Формула | Поле в элементе справочника |
${formatter.findAttribute(o, "Наименование поля").employeeValue.name} | ФИО |
${formatter.findAttribute(o, "Наименование поля").employeeValue.lastName} | Фамилия |
${formatter.findAttribute(o, "Наименование поля").employeeValue.firstName} | Имя |
${formatter.findAttribute(o, "Наименование поля").employeeValue.middleName} | Отчество |
${formatter.findAttribute(o, "Наименование поля").employeeValue.phone} | Телефон |
${formatter.findAttribute(o, "Наименование поля").employeeValue.email} | |
${formatter.findAttribute(o, "Наименование поля").employeeValue.description} | Описание |
Позиции
Перечисленные ниже формулы выводятся в теле перебора по позициям.
Формула начала перебора <jx:forEach items="${o.positions}" var="position">
Формула окончания перебора </jx:forEach>
Также позиции могут выводиться перебором по атрибуту shipment - <jx:forEach items="${o.shipments}" var="shipment">, а данном случае в формулах вывода значения по позициям, перечисленных ниже, необходимо заменить атрибут position на атрибут shipment.
Формула | Значение |
${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 || o.getClass().getSimpleName() == "PurchaseReturn" , position.vat + "%", "Без НДС")} | НДС, % |
${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())} | Сер.номера позиции |
Формулы вывода данных из карточки товара/услуги опубликованы в отдельной статье.
Комментарии