Переменные шаблонов
Переменные позволяют подставлять данные из SNABZHENETS+ в печатные формы. Синтаксис переменной: {{path.to.value}}. Список берётся из общего каталога переменных, который также доступен через Variable API.
Модификатор добавляется через |: {{document.date|date}}. Значение по умолчанию задаётся так: {{document.subject|default:поставка товаров}}.
Основные группы
| Группа | Что содержит | Примеры |
|---|---|---|
| Документ | Номер, дата, сумма, валюта, тема, условия, модель расчёта КП | {{document.number}}, {{document.totalAmount|money}}, {{document.pricingMode}} |
| Нумерация | Текущий формат номера шаблона | {{numbering.preview}}, {{numbering.prefix}} |
| Моя компания | Наименование и реквизиты продавца | {{seller.fullName}}, {{seller.inn}} |
| Банк | Банковские реквизиты моей компании | {{bank.bankName}}, {{bank.checkingAccount}} |
| Контрагент | Данные покупателя и его основные реквизиты | {{buyer.fullName}}, {{buyer.legalAddress}} |
| Контакт контрагента | Контактное лицо покупателя | {{buyerContact.fullName}}, {{buyerContact.email}} |
| Контакт поставщика | Контактное лицо поставщика в запросе, КП или счёте | {{supplierDocument.supplierContact.fullName}}, {{supplierDocument.supplierContact.email}} |
| Заявка | Связанная заявка, если документ создан из неё | {{request.number}}, {{request.projectRef}} |
| Заявка/сделка | Связанная заявка или сделка | {{procurement.number}}, {{procurement.stage.name}}, {{procurement.customerContact.fullName}}, {{procurement.responsible.email}} |
| Объект логистики | Адрес, координаты, контакт и код точки доставки или приёмки | {{logisticsObject.name}}, {{logisticsObject.latitude}} |
| Маршрут доставки | Упорядоченные пункты, координаты, перевозчик, водитель и транспорт | {{deliveryRoute.name}}, {{deliveryRoute.stops[].address}} |
| Партия поставки | Номер партии, статус и строки отгрузки | {{deliveryBatch.number}}, {{deliveryBatch.items[].name}} |
| Водитель | ФИО, телефон, водительское удостоверение и закреплённые ТС | {{logisticsDriver.fullName}}, {{logisticsDriver.licenseNumber}} |
| Транспортное средство | Госномер, марка, модель, тип, прицеп и водитель по умолчанию | {{logisticsVehicle.plateNumber}}, {{logisticsVehicle.defaultDriver.fullName}} |
| Документ поставки | Вид, этап, scope и реквизиты перевозчика/доверенного лица | {{generatedDocument.stage}}, {{generatedDocument.attorneyName}} |
| Контур.Диадок | Статус ЭДО, статус подписи и идентификаторы сообщения | {{diadoc.statusText}}, {{diadoc.messageId}} |
| СБИС / SABY | Статус ЭДО, статус подписи и идентификаторы документа | {{saby.statusText}}, {{saby.documentId}} |
| Калуга Астрал | Статус ЭДО, статус подписи и идентификаторы документооборота | {{astral.statusText}}, {{astral.docflowId}} |
| Связанные документы | Номера КП, счёта или договора | {{related.proposalNumber}}, {{related.contractNumber}} |
| Позиции | Строки документа, закупочные цены, комиссии и табличные блоки | {{items.count}}, {{items.table}}, {{items.rows[].unitCost}} |
| Пользователи | Создатель и ответственный | {{users.createdBy.name}}, {{users.assignedTo.email}} |
| Системные | Текущая дата и название продукта | {{system.today|date}}, {{system.productName}} |
В документных контекстах дополнительно доступны расширенные поля: document.status, document.series, document.subtotalAmount, document.discountTotalAmount, document.taxTotalAmount, document.paidAmount, document.outstandingAmount, даты жизненного цикла, служебные коды пользователей, а также items.rows[].sku, items.rows[].description, items.rows[].discountAmount, items.rows[].vatAmount.
Для исходящих счетов доступны массивы оплат клиента: document.payments[].date, document.payments[].amount, document.payments[].source, document.payments[].externalSource, document.payments[].externalPaymentId, document.payments[].paymentMethod, document.payments[].paymentReference и document.payments[].note.
Для карточки контрагента доступны основной банк и счета: counterparty.bankName, counterparty.bik, counterparty.checkingAccount, counterparty.correspondentAccount. Если нужно вывести все сохранённые счета, используйте массивы counterparty.paymentRequisites[].label, counterparty.paymentRequisites[].bankName, counterparty.paymentRequisites[].bik, counterparty.paymentRequisites[].checkingAccount, counterparty.paymentRequisites[].correspondentAccount и counterparty.paymentRequisites[].isPrimary.
Для коммерческих предложений доступны безопасные поля расчёта: document.pricingMode, document.proposalModel, document.commissionMode, document.commissionPercent, document.commissionFixedAmount, document.materialsAmount, document.servicesAmount, document.expenseTotalAmount, document.allocatedExpenseAmount, document.commissionAmount. По строкам можно вывести items.rows[].lineType, items.rows[].supplierName, items.rows[].groupLabel, items.rows[].unitCost, items.rows[].markupPercent, items.rows[].allocatedExpenseAmount, items.rows[].commissionAmount, items.rows[].lineCostAmount, items.rows[].grossProfitAmount, items.rows[].grossMarginPercent.
Для документов поставки доступны безопасные поля logisticsObject.*, deliveryRoute.*, deliveryBatch.*, logisticsDriver.*, logisticsVehicle.* и generatedDocument.*: адреса, координаты, активность маршрута или партии, пункты маршрута, номер партии, строки партии, перевозчик, водитель, ТС, доверенное лицо, получатель, адрес доставки, этап и способ генерации. Служебные ссылки хранения, audit payload и внутренние JSON-поля в шаблоны не передаются.
Если документ отправлен через Контур.Диадок, в шаблонах доступны diadoc.status, diadoc.signatureStatus, diadoc.statusText, diadoc.senderBoxId, diadoc.recipientBoxId, diadoc.messageId, diadoc.attachmentEntityId, diadoc.documentId, diadoc.sentAt, diadoc.syncedAt и diadoc.signedAt. OAuth-токены, настройки интеграции, raw-ответы и файловые хэши в шаблоны не передаются.
Если документ отправлен через СБИС / SABY ЭДО, в шаблонах доступны saby.status, saby.signatureStatus, saby.statusText, saby.statusDetails, saby.documentId, saby.revisionId, saby.attachmentId, saby.counterpartyParticipantId, saby.counterpartyName, saby.counterpartyInn, saby.counterpartyKpp, saby.lastEventId, saby.lastEventName, saby.sentAt, saby.syncedAt и saby.signedAt. Пароль, настройки интеграции, raw-ответы и файловые хэши в шаблоны не передаются.
Если документ отправлен через Калуга Астрал ЭДО, в шаблонах доступны astral.status, astral.signatureStatus, astral.statusText, astral.statusDetails, astral.direction, astral.senderAbonentId, astral.recipientId, astral.draftId, astral.docflowId, astral.documentId, astral.signingRequestId, astral.counterpartyName, astral.counterpartyInn, astral.counterpartyKpp, astral.lastEventId, astral.lastEventName, astral.sentAt, astral.syncedAt и astral.signedAt. API-токен, настройки интеграции, raw-ответы и файловые хэши в шаблоны не передаются.
Таблицы позиций
Для строк документа доступны готовые табличные переменные:
| Переменная | Что выводит |
|---|---|
{{items.table}} | Стандартная таблица: номер, наименование, количество, единица, цена, НДС, сумма |
{{items.table.compact}} | Компактная таблица: номер, наименование, количество, сумма |
{{items.table.withVat}} | Таблица с явным акцентом на сумму с НДС |
{{items.table.noPrices}} | Таблица без цен: подходит для договоров и приложений |
{{items.table.openCommission}} | Таблица для открытой комиссии: закупочная цена, расходы, комиссия и сумма |
{{items.table.supplierDetail}} | Таблица с детализацией поставщиков и закупочной суммы |
{{items.table.costAppendix}} | Приложение «закупочные цены + комиссия» |
Табличную переменную лучше ставить отдельной строкой в поле Условия / текст шаблона.
Если нужно вывести отдельные значения строк, используйте array-paths, например {{items.rows[].sku}} или {{items.rows[].description}}. В шаблоне такие значения выводятся списком через запятую.
Дополнительные переменные
Дополнительные поля портала появляются в Variable API как custom.<key>, если они заведены для нужного типа сущности. Например поле с ключом vendorCode будет доступно как custom.vendorCode в контексте этой сущности. amoCRM-интеграция автоматически заводит для PR поля custom.amocrmLeadId, custom.amocrmProcurementNumber, custom.amocrmActualTotal, custom.amocrmSelectedSupplier, custom.amocrmExportFile и другие поля обмена. Документный контекст также поддерживает namespace custom, когда значение передано в контекст генерации.
Дополнительные поля номенклатуры, заполненные в товарах или через импорт PR, доступны в строках документов как items.rows[].custom.<key>. Например поле товара colorCode можно вывести через {{items.rows[].custom.colorCode}}.
Для пользовательских шаблонов важно: новое бизнес-поле или дополнительное поле должно быть добавлено в настройках портала. Тогда оно будет одинаково работать в документах, API и будущих интеграциях.
Переменные КП не раскрывают служебные JSON-данные, токены, webhook payload, внутренние конфиги или секреты. В шаблоны попадают только бизнес-поля расчёта и сохранённые снимки поставщиков/групп строк.
Модификаторы
| Модификатор | Назначение | Пример |
|---|---|---|
date | Форматирует дату | {{document.date|date}} |
datetime | Форматирует дату и время | {{system.now|datetime}} |
money | Форматирует сумму с валютой документа | {{document.totalAmount|money}} |
number | Форматирует число | {{items.count|number}} |
uppercase | Переводит текст в верхний регистр | {{buyer.fullName|uppercase}} |
lowercase | Переводит текст в нижний регистр | {{buyer.email|lowercase}} |
initials | Сокращает ФИО до инициалов | {{buyerContact.fullName|initials}} |
default:текст | Подставляет резервный текст, если данных нет | {{document.subject|default:без темы}} |
Модификаторы можно комбинировать. Например: {{document.validUntil|date|default:не указан}}.
Пустые значения
Если документ связан с PR, buyerContact.* берётся из выбранного контакта заказчика в PR. Если он не выбран, система использует основной контакт компании заказчика. Для документов поставщика доступны supplierDocument.supplierContact.*: система берёт контакт, сохранённый в запросе, ответе поставщика или входящем счёте. Если документ не связан с заявкой, закупкой или контактом, соответствующие переменные будут пустыми. В предпросмотре такие поля выводятся в предупреждении, чтобы администратор мог заменить переменную или добавить default:.
Для рабочих файлов пустые значения не ломают генерацию: система оставляет место пустым и продолжает формировать документ.