Основные формулы вывода данных из документа
Описанные формулы предназначены для добавления в шаблон, который печатается прямо из документа. Т.е. когда в интерфейсе вы открыли непосредственно сам заказ покупателя, сам счет, саму отгрузку и т.д.
Основным параметром является атрибут o, который указывает на обращение к текущему документу.
Формулы вывода полей с типом даты должны размещаться в шаблоне в отдельных ячейках с форматом Дата (форматирование ячеек в Excel).
Скачать шаблон отладки на примере документа Заказ покупателя.
Основные поля
| Формула | Значение |
| ${o.name} | Номер |
| ${formatter.getExcelDate(o.moment)} | Дата |
| ${formatter.printIf(o.applicable, “Да”)} | Проведено |
| ${o.state.name} | Статус |
| ${o.description} | Комментарий |
| ${formatter.operationWeight(o)} | Вес |
| ${formatter.operationVolume(o)} | Объем |
| ${o.addressFull} | Адрес доставки |
| ${formatter.getExcelDate(o.deliveryPlannedMoment)} | План. дата отгрузки или приемки (для заказов покупателей и заказов поставщикам) |
| ${formatter.getExcelDate(o.paymentPlannedMoment)} | План. дата оплаты (для счетов покупателям и счетов поставщиков) |
| ${o.incomingNumber} | Входящий номер (для счетов поставщиков, приемок, счетов-фактур полученных, полученных отчетов комиссионеров и входящих платежей) |
| ${formatter.getExcelDate(o.incomingDate)} | Входящая дата (для счетов поставщиков, приемок, счетов-фактур полученных, полученных отчетов комиссионеров и входящих платежей) |
| ${formatter.getExcelDate(o.updated)} | Дата последнего изменения |
| ${formatter.getExcelDate(o.created)} | Дата создания |
| ${o.externalCode} | Внешний код |
| ${o.id} | ID |
| ${formatter.qrCode(o)} | QR номера документа по размеру ячейки |
| ${formatter.qrCode(o, true)} | QR номера документа фиксированного размера |
Владелец
| Формула | Значение |
| ${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} | Описание |
Адрес доставки
Формулы действуют в Заказах покупателей и Отгрузках.
| Формула | Значение |
| ${o.address.country.name} | Страна |
| ${o.address.region.name} | Регион |
| ${o.address.postalCode} | Индекс |
| ${o.address.city} | Город |
| ${o.address.street} | Улица |
| ${o.address.house} | Дом |
| ${o.address.apartment} | Квартира или офис |
| ${o.address.addInfo} | Другое |
| ${o.address.comment} | Комментарий к адресу |
| ${o.addressFull} | Полный адрес |
Организация и Контрагент
Формулы вывода данных из карточки контрагента/юр.лица опубликованы в отдельной статье.
Склад
Во описанных формулах используется атрибут source - это формулы вывода реквизитов склада, с которого отгружается товар (используется в документах раздела Продажи и в документе Перемещение в поле Со склада), измените на атрибут target, если требуется вывести реквизиты склада на который приходуется товар (используется в документах раздела Закупки и в документе Перемещение в поле На склад).
| Формула | Значение |
| ${o.sourceStore.name} | Наименование |
| ${o.sourceStore.address} | Адрес |
| ${o.sourceStore.description} | Комментарий |
| ${o.sourceStore.code} | Код |
| Адрес раздельно по полям | |
| ${o.sourceStore.detailedAddress.postalCode} | Индекс |
| ${o.sourceStore.detailedAddress.country.name} | Страна |
| ${o.sourceStore.detailedAddress.region.name} | Регион |
| ${o.sourceStore.detailedAddress.city} | Город |
| ${o.sourceStore.detailedAddress.street} | Улица |
| ${o.sourceStore.detailedAddress.house} | Дом |
| ${o.sourceStore.detailedAddress.apartment} | Квартира или офис |
| ${o.sourceStore.detailedAddress.addInfo} | Другое |
| ${o.sourceStore.detailedAddress.comment} | Комментарий к адресу |
Другие поля (в документе Отгрузка)
| Формула | Поле в элементе справочника |
| ${o.extension.consignee.requisite.agent.name} | Грузополучатель |
| ${o.extension.carrier.requisite.agent.name} | Перевозчик |
| ${o.extension.transportFacility} | Транспортное средство |
| ${o.extension.carNumber} | Номер автомобиля |
| ${o.extension.loadName} | Наименование груза |
| ${o.extension.goodPackQuantity} | Всего мест |
| ${o.extension.consignorIndication} | Указания грузоотправителя |
| ${o.idStateContract} | ИД гос. контракта |
Для документа Розничной продажи
| Формула | Значение |
| ${o.sum.sum == o.byCardSum.sum ? “Картой” : (o.sum.sum == o.byQrCodeSum.sum ? “По QR-коду” : (o.sum.sum == o.advancePaymentSum.sum ? “Из аванса” : (o.sum.sum == (o.sum.sum-o.noCashSum.sum-o.prepaymentCashSum.sum-o.prepaymentNoCashSum.sum-o.advancePaymentSum.sum) ? “Наличными” : “Смешанная”)))} | Способ оплаты |
| ${o.retailStore.name} | Наименование точки продаж |
| ${o.retailStore.address} | Адрес точки продаж |
| ${(o.sum.sumInCurrency-o.noCashSum.sumInCurrency-o.prepaymentCashSum.sumInCurrency-o.prepaymentNoCashSum.sumInCurrency-o.advancePaymentSum.sumInCurrency)/ 100} | Сумма наличными |
| ${o.noCashSum.sumInCurrency / 100} | Сумма безналичными |
| ${o.byCardSum.sumInCurrency / 100} | Сумма по карте |
| ${o.byQrCodeSum.sumInCurrency / 100} | Сумма по QR |
| ${o.advancePaymentSum.sumInCurrency / 100} | Из аванса |
| ${o.prepaymentCashSum.sumInCurrency/ 100} | Сумма предоплаты наличными |
| ${o.prepaymentNoCashSum.sumInCurrency/ 100} | Сумма предоплаты б/н |
| ${o.prepaymentByQrCodeSum.sumInCurrency/ 100} | Сумма предоплаты по QR |
Канал продаж
| Формула | Значение |
| ${o.salesChannel.name} | Название |
| ${o.salesChannel.type} | Тип |
| ${o.salesChannel.description} | Описание |
| ${o.salesChannel.ownerName} | Владелец-сотрудник канала |
| ${o.salesChannel.groupName} | Владелец-отдел канала |
Договор
| Формула | Значение |
| ${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.currency.fullName} | Полное наименование валюты документа |
| ${o.currency.code} | Цифровой код валюты документа |
| ${o.currency.letterCode} | Буквенный код валюты документа |
| ${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.printAmount(formatter.getCurrency(o), formatter.servicesAmount(o))} | Сумма услуг прописью |
| ${formatter.calcTotalAmount(formatter.getGoods(o)) / 100} | Сумма товаров |
| ${formatter.printAmount(formatter.getCurrency(o), formatter.goodsAmount(o))} | Сумма товаров прописью |
| ${o.tail.payedSum / 100} | Оплачено |
| ${(o.sum.sum - o.tail.payedSum) / 100} | Осталось оплатить |
| ${formatter.allSum(o)/100} | Сумма без учета скидки |
| ${formatter.allDiscount(o)/100} | Сумма скидки |
| ${o.getPayments().iterator().next().incomingNumber} | Номер связанного платежа |
| ${o.getPayments().iterator().next().incomingDate} | Дата связанного платежа |
НДС
| Формула | Значение |
| ${formatter.printIfElse(o.vatIncluded, “с НДС ”, “без НДС”)} | с НДС или без НДС |
| ${formatter.calcVat(o.getPositions())} | Сумма НДС общая |
| ${formatter.printAmount(formatter.getCurrency(o), formatter.calcVat(o.getPositions())*100)} | Сумма НДС общая (прописью) |
| ${formatter.calcVat(formatter.getGoods(o))} | Сумма НДС Товаров |
| ${formatter.printAmount(formatter.calcVat(formatter.getGoods(o)) * 100)} | Сумма НДС Товаров (прописью) |
| ${formatter.calcVat(formatter.getServices(o))} | Сумма НДС Услуг |
| ${formatter.printAmount(formatter.calcVat(formatter.getServices(o)) * 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.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} | Описание |