Создание шаблонов печатных форм
Шаблоны печатных форм представляют собой файлы в формате Microsoft Excel. Для создания нового шаблона мы рекомендуем взять за основу один из существующих и изменить его: добавить или убрать поля, прикрепить логотип, изменить внешний вид таблиц или поменять шрифт. Всё это возможно путем простого редактирования файлов Еxcel, которые хранятся в МоемСкладе. Чтобы скачать шаблон перейдите в нужный вам список документов, нажмите меню Печать и выберите пункт Настроить..... Справа появиться окно Настройка шаблонов. Там представлено два раздела Отчет и Документ. К Документу относятся все печатные формы, выводимые из самого документа; к Отчету - шаблоны, печатающиеся из списка документов одного типа, а так же Остатки, Обороты, Прибыльность и другие отчеты. После редактирования или создания новой печатной формы, добавьте её к существующим шаблонам в соответствующем разделе.
Содержание |
Печать из Документа
Создание шапки документа, реквизиты получателя и отправителя
В качестве примера используется Заказ Покупателя.
Общим правилом оформление любой формулы является структура $ {формула}
Основные параметры target - получатель, source - отправитель.
AgentRequisite - указатель на источник данных, это либо карточка контрагента, либо информация из закладки Моя компания.
Поле самих данных
| o.sourceAgentRequisite.agent.name | краткое наименование отправителя |
| o.sourceAgentRequisite.legalTitle | полное наименование отправителя |
| o.sourceAgentRequisite.INN | ИНН отправителя |
| o.sourceAgentRequisite.KPP | КПП отправителя |
| o.sourceAgentRequisite.OKPO | ОКПО отправителя |
| o.sourceAgentRequisite.legalAddress | юридический адрес отправителя |
| o.sourceAgentRequisite.agent.contact.phones | телефон отправителя |
| o.targetAgentRequisite.account.bankName | наименование банка получателя |
| o.targetAgentRequisite.account.bankLocation | местонахождение банка получателя |
| o.targetAgentRequisite.account.BIC | БИК банка получателя |
| o.targetAgentRequisite.account.accountNumbe | расчетный счет получателя |
| o.targetAgentRequisite.account.correspondentAccount | корреспондентский счет получателя |
| o.targetAgentRequisite.discount | скидка контрагента |
| o.targetAgentRequisite.autoDiscount | автоматическая скидка контрагента |
Пример:
| Заказ на покупку у организации: | ${o.targetAgentRequisite.agent.name}
${o.targetAgentRequisite.legalAddress} тел. ${o.targetAgentRequisite.agent.contact.phones} |
| От покупателя: | ${o.sourceAgentRequisite.agent.name}
${o.sourceAgentRequisite.legalAddress} тел. ${o.sourceAgentRequisite.agent.contact.phones} |
Создание цикла. Перебор по позициям
Для вывода списка позиций документа используются формулы цикла (перебора).
Общим правилом создания цикла является наличие функции его начала и описания, а так же функции окончания.
В шаблонах документов существует три варианта циклов: по позиции, по товару, по услугам.
| <jx:forEach items="${o.positions}" var="position">
</jx:forEach> |
перебор данных будет осуществлен по всем позициям
документа |
| <jx:forEach items="${formatter.getGoods(o)}" var="position">
</jx:forEach> |
перебор данных будет осуществлен только по Товарам |
| <jx:forEach items="${formatter.getServices(o)}" var="position">
</jx:forEach> |
перебор данных будет осуществлен только по Услугам |
Основные формулы позиций документа
Общие формулы
| o.name | номер документа |
| o.applicable | проведен |
| o.moment | дата и время документа |
| o.state.name | состояние документа |
| o.sum.sum | сумма по позициям документа, в копейках |
| o.description | комментарий |
| o.sourceStore.name | склад |
Счет, Заказ, Приемка, Отгрузка, Счет-фактура, Списание, Оприходование
| position.good.name | краткое наименование товар |
| position.good.description | описание товара |
| position.good.uom.name | единица измерения |
| position.good.uom.code | код единицы измерения |
| position.basePrice.sum | цена с НДС без скидки, в копейках |
| position.discount | скидка, в процентах |
| position.price.sum | цена с НДС с учетом скидки, в копейках |
| position.quantity | количество единиц товара |
| position.vat | НДС, в процентах |
| position.consignment.name | наименование серии |
| position.consignment.description | описание серии |
| position.goodPack.uom.name | название упаковки (может быть пустым) |
| position.goodPack.quantity | упаковка (может быть пустым) |
| position.good.supplier.name | поставщик |
| position.good.minimumBalance | неснижаемый остаток |
Прайс-лист
| metadata.columns.name | название колонки прайс-листа |
| positions.good.name | краткое наименование товара |
| positions.cells.get("Столбец 1").sum.sum | цена для колонки "Столбец 1", в копейках |
Оператор formatter и варианты его использования
Используется в случае необходимости задать условие вывода информации. Применяется с уточняющим параметром.
| параметр | описание |
|---|---|
| findAttribute | поиск пользовательского поля |
| printIfElse | выводить если верно, иначе… |
| printIf | выводить если верно |
| printAmount | выводить прописью |
| format | выводить в формате |
| round | округлять до 2х знаков |
| calc | сумма по позициям |
findAttribute
используется по схеме ${formatter.findAttribute(указатель на местонахождение поля , "название поля").формат поля}
Несколько примеров местонахождения поля
| o | текущий документ |
| o.sourceAgentRequisite.agent | карточка контрагента |
| position.good | карточка товара |
| position.consignment | карточка серии |
| findAttribute | дополнительное поле |
Примеры формата поля
| valueString | тип "Строка" |
| timeValue | тип "Дата" |
| booleanValue | тип "Флажок" |
| position.vat | НДС, в процентах |
| entityValue.name | тип "Селектор" на Пользовательский справочник |
| employeeValue.name | тип "Селектор" на Стандартный справочник |
| longValue | тип "Целое число" |
| doubleValue | тип "Дробное число" |
Общие примеры
${formatter.findAttribute(o.sourceAgentRequisite.agent, "Регион").valueString}
Отобразит пользовательское, текстовое поле Регион, в карточке контрагента.
${formatter.findAttribute(o, "Менеджер").entityValue.name}
Отобразит пользовательское поле Менеджер, добавленное в документ и выбираемое селектором.
${formatter.findAttribute(formatter.findAttribute(o, "Сотрудник").employeeValue, "Паспорт").valueString}
Отобразит пользовательское поле Паспорт из справочника Сотрудники, если поле Сотрудник дополнительно добавлено в документ.
printIfElse
используется по схеме ${formatter.printIfElse(Условие, То, Иначе )}
Общие примеры
${formatter.printIfElse(o.sourceAgentRequisite.agent.payerVat, position.vat + "%", "Без НДС")}
Если в карточке контрагента Налогоплательщик, то печатаем значение налога +%, иначе печатаем "Без НДС"
${formatter.printIfElse(empty(o.targetAgentRequisite.legalTitle), o.targetAgentRequisite.agent.name, o.targetAgentRequisite.legalTitle)}
Если в карточке контрагента Пустое поле Полное наименование получателя, то печатаем Краткое название, иначе печатаем Полное.
printAmount
используется для вывода печати прописью
${formatter.printAmount(formatter.getCurrency(o), o.sum.sumInCurrency)}
Напечатать прописью (В валюте документа, сумму документа)
calc
используется для вывода суммы по конкретным параметрам документа.
Работает по схеме ${formatter.calcПараметр(местонахождение параметра)}
Примеры параметров
| TotalGoodsQuantity | Количество товаров документа |
| Vat | Сумма НДС документа |
| TotalQuantity | Количество товаров и услуг документа |
| TotalAmount | Сумма денег |
Примеры
${formatter.calcTotalGoodsQuantity(o)}
Выведет сумму всех товаров документа
${formatter.calcTotalAmount(o)}
Выведет сумму денег документа
Пример:
| Наименование | Количество | Цвет |
| <jx:forEach items="${o.positions}"var="position"> | ||
| ${position.good.name} | ${position.quantity} | ${formatter.findAttribute(position.good, "Цвет").entityValue.name} |
| </jx:forEach> |
Данный шаблон переберет все позиции документа построчно, указав для каждой Наименование ( название товара), Колличество и Цвет, который указывается в дополнительном поле карточки товара и выбирается селектором из пользовательского справочника.
Печать из Отчета
Ссылки с суффиксом Ref содержат ссылки на поля:
id - идентификатор
name - имя
code - код
Например: goodRef.name
Остатки
goodRef - товар
productCode - артикул товара
uomName - имя единицы измерения
quantity - доступно
reserve - зарезервировано
stock - на складе
sumTotal - сумма на складе по закупке
saleAmount - сумма на складе по цене продажи (из карточки товара)
category - категория
Резерв
Поля совпадают с полями отчета Остатки
Прибыльность
goodRef - товар
productCode - артикул
uomName - название единицы измерения
out.quantity - количество
out.amount - сумма закупочная
out.sellAmount - сумма продажная (фактическая - из документов отгрузки)
Взаиморасчёты
name - имя контрагента
beginningBalance - количество на начало периода
finalBalance - количествона конец периода
incoming - приход по клиенту
outcoming - расход по клиенту
Обороты по документам
goodRef - товар
productCode - артикул товара
consignmentName - имя партии
consignmentId - идентификатор партии
defaultConsignment - маркер партии по умолчанию
storeName - название склада
storeId - идентификатор склада
uomName - наименование единицы измерения
category - папка в справочнике товаров
type - тип документа
deliveryName - имя документа
agentName - имя контрагента
quantity - количество
amount - сумма
moment - дата документа
Обороты по партиям
goodRef - товар
productCode - артикул товара
consignmentName - имя партии
consignmentId - идентификатор партии
defaultConsignment - маркер партии по умолчанию
storeName - название склада
storeId - идентификатор склада
uomName - наименование единицы измерения
category - папка в справочнике товаров
start.quantity - количество на начало периода
start.amount - сумма на начало периода
in.quantity - количество в приходе
in.amount - сумма в приходе
out.quantity - количество в отгрузке
out.amount - сумма в отгрузке
end.quantity - количество на конец периода
end.amount - сумма на конец периода
Обороты по товарам
goodRef - товар
productCode - артикул товара
uomName - наименование единицы измерения
category - папка в справочнике товаров
start.quantity - количество на начало периода
start.amount - сумма на начало периода
in.quantity - количество в приходе
in.amount - сумма в приходе
out.quantity - количество в отгрузке
out.amount - сумма в отгрузке
end.quantity - количество на конец периода
end.amount - сумма на конец периода
Автоматическое увеличение высоты строки
В ячейке с формулой Наименования товара устанавливается перенос по строкам. В той же строке, за таблицей, добавляется формула ${formatter.adjustRowHeight(workbook, sheet, hssfRow, А, В)}, где А это номер столбца начала ячейки с названием товара, а В количество столбцов в ширину.
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | |
| 1 | ||||||||||||||
| 2 | Наименование | |||||||||||||
| 3 | ${posishion.good} | ${formatter.adjustRowHeight(workbook, sheet, hssfRow, 2, 4)} | ||||||||||||
| 4 | ||||||||||||||
| 5 | ||||||||||||||