Формулы вывода данных в списке документов
Перечисленные ниже формулы выводятся в рамках перебора:
<jx:forEach items="${rows}" var="row">
// формула вывода поля
</jx:forEach>Формулы подходят для стандартных шаблонов в списках документов — Заказы, Счета, Отгрузки, Приемки, Оприходования, Возвраты, Перемещения, Списания.
Формулы вывода полей с типом даты должны размещаться в шаблоне в отдельных ячейках с форматом Дата (форматирование ячеек в Excel).
Основные поля документа
| Формула | Значение |
| ${row.name} | Номер |
| ${formatter.getExcelDate(row.moment)} | Дата |
| ${formatter.printIf(row.applicable, “Да”)} | Проведено |
| ${row.stateRef.name} | Статус |
| ${row.description} | Комментарий |
| ${formatter.operationWeight(formatter.loadOperation(row.id))} | Вес |
| ${formatter.operationVolume(formatter.loadOperation(row.id))} | Объем |
| ${row.addressFull} | Адрес доставки |
| ${formatter.getExcelDate(row.deliveryPlannedMoment)} | План. дата отгрузки/приёмки (для заказов покупателей/поставщикам) |
| ${formatter.getExcelDate(row.paymentPlannedMoment)} | План. дата оплаты (для счетов покупателям/поставщиков) |
| ${formatter.getExcelDate(row.updated)} | Дата последнего изменения |
| ${formatter.getExcelDate(row.created)} | Дата создания |
| ${formatter.loadOperation(row.id).externalCode} | Внешний код |
| ${row.id} | ID |
| Формула | Значение |
| ${formatter.loadOperation(row.id).incomingNumber} | Входящий номер (для счетов поставщиков, приемок, счет-фактур полученных, полученных отчетов комиссионеров и входящих платежей) |
| ${formatter.getExcelDate(formatter.loadOperation(row.id).incomingDate)} | Входящая дата (для счетов поставщиков, приемок, счет-фактур полученных, полученных отчетов комиссионеров и входящих платежей) |
Владелец - сотрудник
| Формула | Значение |
| ${row.getOwnerName()} | Владелец-сотрудник |
| ${row.getGroupName()} | Владелец-отдел |
| ${formatter.printIfElse(row.getShared(), “Да”, “Нет”)} | Общий доступ |
Подробные поля из карточки сотрудника, указанного в документе в качестве Владельца-сотрудника:
| Формула | Значение |
| ${formatter.getEmployeeForId(row.getOwnerId()).lastName} | Фамилия |
| ${formatter.getEmployeeForId(row.getOwnerId()).firstName} | Имя |
| ${formatter.getEmployeeForId(row.getOwnerId()).middleName} | Отчество |
| ${formatter.getEmployeeForId(row.getOwnerId()).phone} | Телефон |
| ${formatter.getEmployeeForId(row.getOwnerId()).email} | |
| ${formatter.getEmployeeForId(row.getOwnerId()).position} | Должность |
| ${formatter.getEmployeeForId(row.getOwnerId()).inn} | ИНН |
| ${formatter.getEmployeeForId(row.getOwnerId()).description} | Описание |
Адрес доставки
Формулы действуют при печати списка Заказов покупателей и Отгрузок.
| Формула | Значение |
| ${formatter.loadOperation(row.id).address.country.name} | Страна |
| ${formatter.loadOperation(row.id).address.region.name} | Регион |
| ${formatter.loadOperation(row.id).address.postalCode} | Индекс |
| ${formatter.loadOperation(row.id).address.city} | Город |
| ${formatter.loadOperation(row.id).address.street} | Улица |
| ${formatter.loadOperation(row.id).address.house} | Дом |
| ${formatter.loadOperation(row.id).address.apartment} | Квартира или офис |
| ${formatter.loadOperation(row.id).address.addInfo} | Другое |
| ${formatter.loadOperation(row.id).address.comment} | Комментарий к адресу |
| ${row.addressFull} | Полный адрес |
Организация и Контрагент
В качестве примера используется Заказ покупателя. В других документах роли меняются, например, в отгрузке.
Общим правилом оформление любой формулы реквизитов компании является структура
${row.sourceAgentRef.name}
Основные параметры:
- targetAgentRef или sourceAgentRef — указатель на источник данных, это либо карточка контрагента (кто покупает — source), либо информация из закладки Юр. лица (кто — target).
- name — сама переменная, которую требуется вывести на печать.
Во всех формулах используется source — это формулы покупателя в документе, измените на target, если требуется напечатать реквизит получателя в документа.
Основные реквизиты
| Формула | Значение |
| ${row.sourceAgentRef.name} | Наименование |
| ${formatter.loadAgent(row.sourceAgentRef.id).code} | Код |
| ${formatter.loadAgent(row.sourceAgentRef.id).contact.phones} | Телефон |
| ${formatter.loadAgent(row.sourceAgentRef.id).contact.faxes} | Факс |
| ${formatter.loadAgent(row.sourceAgentRef.id).contact.email} | |
| ${formatter.loadAgent(row.sourceAgentRef.id).state.name} | Статус |
| ${formatter.loadAgent(row.sourceAgentRef.id).requisite.actualAddress} | Фактический адрес |
| ${formatter.loadAgent(row.sourceAgentRef.id).description} | Комментарий |
| ${formatter.loadAgent(row.sourceAgentRef.id).tags} | Группы |
| ${formatter.loadAgent(row.sourceAgentRef.id).externalCode} | Внешний код |
Юридические реквизиты
| Формула | Значение |
| ${formatter.loadAgent(row.sourceAgentRef.id).requisite.legalTitle} | Полное наименование |
| ${formatter.loadAgent(row.sourceAgentRef.id).getCompanyType().name} | Тип контрагента |
| ${formatter.loadAgent(row.sourceAgentRef.id).requisite.legalAddress} | Юридический адрес |
| ${formatter.loadAgent(row.sourceAgentRef.id).requisite.INN} | ИНН |
| ${formatter.loadAgent(row.sourceAgentRef.id).requisite.KPP} | КПП |
| ${formatter.loadAgent(row.sourceAgentRef.id).requisite.okpo} | ОКПО |
| ${formatter.loadAgent(row.sourceAgentRef.id).requisite.ogrn} | ОГРН |
| ${formatter.loadAgent(row.sourceAgentRef.id).requisite.ogrnip} | ОГРНИП |
| ${formatter.loadAgent(row.sourceAgentRef.id).requisite.nomerSvidetelstva} | Номер свидетельства |
| ${formatter.loadAgent(row.sourceAgentRef.id).requisite.dataSvidetelstva} | Дата свидетельства |
| ${formatter.loadAgent(row.sourceAgentRef.id).directorPosition} | Должность |
| ${formatter.loadAgent(row.sourceAgentRef.id).director} | ФИО руководителя |
Все формулы вывода данных из карточки контрагента/юр.лица опубликованы в отдельной статье.
Склад
Во описанных формулах используется атрибут sourceStore — это формулы вывода реквизитов склада, с которого отгружается товар (используется в документах раздела Продажи и в документе Перемещение в поле Со склада), измените на атрибут targetStore, если требуется вывести реквизиты склада на который приходуется товар (используется в документах раздела Закупки и в документе Перемещение в поле На склад).
| Формула | Значение |
| ${formatter.loadOperation(row.id).sourceStore.name} | Наименование |
| ${formatter.loadOperation(row.id).sourceStore.contact.address} | Адрес |
| ${formatter.loadOperation(row.id).sourceStore.description} | Комментарий |
| ${formatter.loadOperation(row.id).sourceStore.code} | Код |
Другие поля (в документе Отгрузка)
| Формула | Значение |
| ${formatter.loadOperation(row.id).extension.consignee.requisite.agent.name} | Грузополучатель |
| ${formatter.loadOperation(row.id).extension.carrier.requisite.agent.name} | Перевозчик |
| ${formatter.loadOperation(row.id).extension.transportFacility} | Транспортное средство |
| ${formatter.loadOperation(row.id).extension.carNumber} | Номер автомобиля |
| ${formatter.loadOperation(row.id).extension.loadName} | Наименование груза |
| ${formatter.loadOperation(row.id).extension.goodPackQuantity} | Всего мест |
| ${formatter.loadOperation(row.id).extension.consignorIndication} | Указания грузоотпр-я |
| ${formatter.loadOperation(row.id).idStateContract} | ИД гос. контракта |
Для документа Розничной продажи
| Формула | Значение |
| ${formatter.printIfElse(row.noCashSumTO.sum > 0, formatter.printIfElse(row.sumTO.sum == row.noCashSumTO.sum, “Безналичными”, “Смешанная”), “Наличными”)} | Способ оплаты |
| ${row.retailStoreRef.name} | Наименование точки продаж |
| ${row.retailStoreRef.address} | Адрес точки продаж |
| ${(row.sumTO.sum-row.noCashSumTO.sum-row.prepaymentTotalInCurrency) / 100} | Сумма наличными |
| ${row.byCardSumTO.sum/100} | Сумма по карте |
| ${row.byQrCodeSumTO.sum/100} | Сумма по QR |
Канал продаж
| Формула | Значение |
| ${row.salesChannelRef.name} | Название |
| ${formatter.loadOperation(row.id ).salesChannel.type} | Тип |
| ${formatter.loadOperation(row.id ).salesChannel.description} | Описание |
| ${formatter.loadOperation(row.id ).salesChannel.ownerName} | Владелец-сотрудник канала |
| ${formatter.loadOperation(row.id ).salesChannel.groupName} | Владелец-отдел канала |
Договор
| Формула | Значение |
| ${row.contractRef.name} | Номер |
| ${formatter.getExcelDate(formatter.loadOperation(row.id).contract.moment)} | Дата |
| ${formatter.loadOperation(row.id).contract.sum.sum / 100} | Сумма |
| ${formatter.loadOperation(row.id).contract.code} | Код |
| ${formatter.loadOperation(row.id).contract.description} | Комментарий |
| ${formatter.loadOperation(row.id).contract.state.name} | Статус |
Проект
| Формула | Значение |
| ${row.projectRef.name} | Наименование |
| ${formatter.loadOperation(row.id).project.code} | Код |
| ${formatter.loadOperation(row.id).project.description} | Описание |
Валюта
| Формула | Значение |
| ${row.currencyRef.name} | Краткое наименование валюты документа |
| ${formatter.loadOperation(row.id).currency.fullName} | Полное наименование валюты документа |
| ${formatter.loadOperation(row.id).currency.code} | Цифровой код валюты документа |
| ${formatter.loadOperation(row.id).currency.letterCode} | Буквенный код валюты документа |
| ${row.rate} | Курс валюты по документу |
| ${formatter.loadOperation(row.id).currency.rate} | Курс валюты по справочнику |
Сумма
| Формула | Значение |
| ${row.sumTO.sum / 100} | Сумма в валюте по умолчанию |
| ${formatter.loadOperation(row.id).sum.sumInCurrency / 100} | Сумма в валюте документа |
| ${formatter.printAmount(formatter.getCurrency(row), formatter.loadOperation(row.id).sum.sumInCurrency)} | Сумма в валюте документа прописью |
| ${formatter.calcTotalAmount(formatter.getServices(formatter.loadOperation(row.id))) / 100} | Сумма услуг |
| ${formatter.calcTotalAmount(formatter.getGoods(formatter.loadOperation(row.id))) / 100} | Сумма товаров |
| ${row.payedSum / 100} | Оплачено |
| ${(row.sumTO.sum - row.payedSum) / 100} | Осталось оплатить |
| ${formatter.loadOperation(row.id).getPayments().iterator().next().name} | Номер связанного платежа |
| ${formatter.loadOperation(row.id).getPayments().iterator().next().moment} | Дата связанного платежа |
НДС
| Формула | Значение |
| ${formatter.printIfElse(formatter.calcVat(formatter.loadOperation(row.id).getPositions())>0, “с НДС ”, “без НДС”)} | с НДС или без НДС |
| ${formatter.calcVat(formatter.loadOperation(row.id).getPositions())} | Сумма НДС |
| ${formatter.printAmount(formatter.getCurrency(row), formatter.calcVat(formatter.loadOperation(row.id).getPositions())*100)} | Сумма НДС прописью |
Количество
| Формула | Значение |
| ${formatter.calcTotalQuantity(formatter.loadOperation(row.id))} | Количество по всем позициям |
| ${formatter.countServices(formatter.loadOperation(row.id))} | Количество услуг |
| ${formatter.calcTotalGoodsQuantity(formatter.loadOperation(row.id))} | Количество товаров |
| ${formatter.loadOperation(row.id).getPositions().size()} | Количество порядковых записей позиций |
| ${formatter.printNumber(formatter.loadOperation(row.id).getPositions().size())} | Количество порядковых записей прописью |
| ${formatter.getGoods(formatter.loadOperation(row.id)).size()} | Количество порядковых записей товаров |
| ${formatter.printNumber(formatter.getGoods(formatter.loadOperation(row.id)).size())} | Количество порядковых записей товаров прописью |
| ${formatter.getServices(formatter.loadOperation(row.id)).size()} | Количество порядковых записей услуг |
| ${formatter.printNumber(formatter.getServices(formatter.loadOperation(row.id)).size())} | Количество порядковых записей услуг прописью |
Дополнительные поля
Общим правилом оформления любой формулы дополнительного поля является структура
${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).value}
Основные параметры:
- “Наименование поля” — точное наименование дополнительного поля в кавычках (с учетом регистра, дополнительных символов и т.д.).
- value — тип, по которому создано пользовательское поле.
| Формула | Тип поля |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).valueString} | Строка |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).valueText} | Текст |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).value} | Ссылка |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).longValue} | Число целое |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).doubleValue} | Число дробное |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).timeValue} | Дата |
| ${formatter.printIfElse(formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).booleanValue==“true”, “Да”, “Нет”)} | Флажок |
Для поля по типу Файл используется два варианта вывода изображения, добавленного в поле в форматах *.png или *.jpg:
| Формула | Формат вывода изображения |
| ${formatter.imageAttribute(formatter.loadOperation(row.id), “Наименование поля”, true)} | В реальном размере |
| ${formatter.imageAttribute(formatter.loadOperation(row.id), “Наименование поля”, false)} | По границам ячейки |
Для полей, созданных по типу Справочник (дополнительный или стандартный) возможно вывести не только отображаемые в поле наименования, но и другие поля из карточки элемента справочника.
Дополнительный справочник
| Формула | Поле в элементе справочника |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).entityValue.name} | Наименование |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).entityValue.code} | Код |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).entityValue.description} | Описание |
Справочник — Контрагенты
| Формула | Поле в элементе справочника |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).agentValue.name} | Наименование |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).agentValue.code} | Код |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).agentValue.contact.phones} | Телефон |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).agentValue.contact.email} |
По аналогии можно выводить другие поля из карточки контрагента, перечень которых опубликован в отдельной статье.
Справочник — Товары
| Формула | Поле в элементе справочника |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).goodValue.name} | Наименование |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).goodValue.code} | Код |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).goodValue.productCode} | Артикул |
По аналогии можно выводить другие поля из карточки товара, перечень которых опубликован в отдельной статье.
Справочник — Склады
| Формула | Поле в элементе справочника |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).warehouseValue.name} | Наименование |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).warehouseValue.address} | Адрес |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).warehouseValue.description} | Комментарий |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).warehouseValue.code} | Код |
Справочник — Проекты
| Формула | Поле в элементе справочника |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).projectValue.name} | Наименование |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).projectValue.code} | Код |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).projectValue.description} | Описание |
Справочник — Договоры
| Формула | Поле в элементе справочника |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).contractValue.name} | Номер |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).contractValue.moment} | Дата |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).contractValue.sum.sum / 100} | Сумма |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).contractValue.code} | Код |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).contractValue.description} | Комментарий |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).contractValue.state.name} | Статус |
Справочник — Сотрудники
| Формула | Поле в элементе справочника |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).employeeValue.name} | ФИО |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).employeeValue.lastName} | Фамилия |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).employeeValue.firstName} | Имя |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).employeeValue.middleName} | Отчество |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).employeeValue.phone} | Телефон |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).employeeValue.email} | |
| ${formatter.findAttribute(formatter.loadOperation(row.id), “Наименование поля”).employeeValue.description} | Описание |
Значения из Фильтра
Перечисленные ниже формулы выводят то значение, что было выбрано в Фильтре при формировании списка документов.
| Формула | Значение |
|---|---|
| ${formatter.printIf(!empty(global_periodFilter.parameters[0].value), formatter.format(“%1tm.%1$tY”, formatter.getExcelDate(global_periodFilter.parameters[0].value)))} | Период от |
| ${formatter.printIf(!empty(global_periodFilter.parameters[1].value), formatter.format(“%1tm.%1$tY”, formatter.getExcelDate(global_periodFilter.parameters[1].value)))} | Период до |
| ${formatter.printIf(!empty(global_deliveryPeriodFilter.parameters[0].value), formatter.format(“%1tm.%1$tY”, formatter.getExcelDate(global_deliveryPeriodFilter.parameters[0].value)))} | План. дата отгрузки от |
| ${formatter.printIf(!empty(global_deliveryPeriodFilter.parameters[1].value), formatter.format(“%1tm.%1$tY”, formatter.getExcelDate(global_deliveryPeriodFilter.parameters[1].value)))} | План. дата отгрузки до |
| ${formatter.printIfElse(global_operationApprovalState.parameters[0].printValue==“false”, “Нет”, formatter.printIf(global_operationApprovalState.parameters[0].printValue==“true”, “Да”))} | Проведено |
| ${global_stateFilter.parameters[0].printValue} | Статус |
| ${salesChannelIdFilter.parameters[0].printValue} | Канал продаж |
| ${global_goodIdFilter.parameters[0].printValue} | Товар или группа |
| ${global_storeFilter.parameters[0].printValue} | Склад |
| ${global_contractFilter.parameters[0].printValue} | Договор |
| ${global_projectFilter.parameters[0].printValue} | Проект |
| ${global_agentSourceFilter.parameters[0].printValue} | Контрагент |
| ${global_agentSourceFilter_tag.parameters[0].printValue} | Группа контрагента |
| ${global_agentTargetFilter.parameters[0].printValue} | Организация |
| ${global_ownerFilter.parameters[0].printValue} | Владелец-сотрудник |
| ${global_ownerGroupFilter.parameters[0].printValue} | Владелец-отдел |