Коммерческое предложение из CRM: Quotation, шаблон PDF и согласование скидок в длинной B2B-сделке
Коммерческое предложение в CRM — это документ Quotation в ERPNext: он собирается из Lead или Opportunity, берёт позиции и остатки из справочника, печатается в PDF и проходит согласование скидки. Ниже: сборка КП, шаблон PDF, Workflow для скидок, версии и переход в заказ.
Коммерческое предложение в CRM: что такое Quotation и чем оно лучше файла в Word
Quotation в ERPNext — это отправляемый документ, где записаны товары, количества, цены, налоги и условия предложения, адресованные Lead или Customer. После согласия клиента из него одной кнопкой создаётся Sales Order. Разница с файлом в Word в том, что позиции берутся из справочника, цена и остаток подтягиваются сами, а история предложений лежит в карточке клиента, а не в чьей-то папке. Как мы внедряем ERPNext, описано на странице ERPNext под ключ.
Для длинной B2B-сделки это важно по простой причине. Предложение переписывают по пять-семь раз: меняется состав, цена, срок, условия оплаты. Если версии лежат в почте, через два месяца никто не скажет, какая из них последняя и кто согласовал скидку. В Quotation каждая версия — документ со статусом, автором и датой, а скидка проходит через согласование.
Статусы по документации: Draft (редактируется), Open (отправлено и ожидает решения), Ordered (оформлен заказ), Lost (клиент отказался, указана причина), Expired (истёк срок в поле Valid Till) и Cancelled. В коде v15 есть ещё два промежуточных: Replied (клиент ответил) и Partially Ordered (заказана часть позиций). Эти статусы питают отчёты по потерянным сделкам, а не просто красят строку в списке.
Об ограничениях сразу. ИИ-генерация текста КП — отдельная тема, она разобрана в нашей статье про ИИ для коммерческих предложений. Здесь мы говорим о КП как о документе учёта: структура, печатная форма, скидка, версия.
Как собрать КП из Lead и Opportunity: позиции, наличие, альтернативы
Клиента создавать заранее не обязательно: в поле Quotation To можно выбрать Lead, и предложение выставляется прямо на лид. Если же у вас уже есть Opportunity, используйте Get Items From > Opportunity: подтянутся контрагент и запрошенные позиции. Менеджеру остаётся проставить цены и условия. Это экономит ручной ввод и убирает расхождения между тем, что обсуждали, и тем, что предложили.
В строках таблицы позиций виден индикатор наличия: зелёный, если товар есть на складе, красный, если нет. Для поставщика оборудования с длинными сроками это основной рабочий сигнал: менеджер не обещает отгрузку из наличия, когда на складе пусто. Альтернативные позиции помечаются флагом Is Alternative, и такие строки не входят в общую сумму. Так в одном документе можно показать клиенту основной лифт и его аналог другого производителя.
Условия оплаты задаются через Payment Terms Template. Шаблоном может быть «30 дней», аванс плюс остаток или этапы, и сумма долей должна быть 100 %. Для лифтов типична схема «аванс при заказе, платёж перед отгрузкой, остаток после монтажа»; её собирают один раз как шаблон и подставляют в предложения. Для базиса поставки есть отдельное поле Incoterms.
Срок действия фиксируется в поле Valid Till. Когда дата проходит, предложение переходит в Expired. Я советую выставлять срок осознанно: если цена привязана к курсу или цене завода, ставьте две-три недели, а не «до конца года». Иначе менеджер будет продавать по цене прошлого квартала.
Как выглядит этот путь на схеме: Lead, Opportunity, Quotation в статусе Draft, согласование скидки, отправка PDF клиенту (Open), затем Sales Order или Lost, либо Expired. Данные схемы продублированы в тексте выше, чтобы вы могли использовать их как чек-лист.
Шаблон PDF: что настраивается без программиста, а где нужен Jinja
Без программиста решается многое. По документации, формат печати можно собрать несколькими способами: формой Print Format, конструктором Print Format Builder (перетаскиванием), настройкой стилей (шрифты, выравнивание подписей, заголовки разделов) и скрытием полей через Customize Form с флагом Print Hide. Например, из печатной формы КП можно убрать код позиции, оставив только наименование. Заголовок документа меняется полем Print Heading: «Коммерческое предложение» или Proforma Invoice, без смены типа документа.
Где конструктор упирается: строгие геометрические бланки с точными отступами, сложные таблицы, фирменные блоки с подписью и печатью. Конструктор перетаскиванием не даёт точной геометрии, и для такого бланка пишут Print Format на HTML, CSS и Jinja. Это уже работа разработчика: после неё вы сами редактировать вёрстку не будете, и менять её лучше только по согласованию, чтобы не сломать выдачу. Пример фрагмента Jinja для печати суммы и позиций (имена полей сверьте со своей версией):
{% for row in doc.items %}
<tr><td>{{ row.item_name }}</td><td>{{ row.qty }}</td>
<td>{{ row.get_formatted("rate", doc) }}</td></tr>
{% endfor %}
<p>Итого: {{ doc.get_formatted("grand_total") }}</p>Про безопасность. Поля Print Format исполняют HTML и скрипты, поэтому доступ к их правке должен быть только у роли System Manager. Не назначайте это право менеджерам: ошибка в шаблоне ломает печать для всех, а чужой скрипт в шаблоне — риск уже иного рода.
В итоге схема такая: простой бланк делаете настройками, сложный заказываете один раз и закрепляете. Если ваша форма регламентирована отраслевым стандартом, учтите, что нормативных форм в коробке нет, а печатные формы КС-2 и подобные делаются на тех же шаблонах HTML и Jinja.
Скидки и согласование: Workflow для КП выше порога
Согласование скидки в ERPNext строится на Workflow для Quotation: состояния (например, «Черновик», «На согласовании у руководителя», «Согласовано», «Отклонено») и переходы между ними с ролями. Условие перехода можно привязать к полю, то есть направлять документы на согласование только если скидка выше порога. Это настраивается без программирования: поле Condition у перехода принимает выражение на Python, так что условие можно поставить и по сумме документа.
Для «Подъём Групп» порог был такой: до 5 % менеджер решает сам, от 5 до 10 % подтверждает руководитель отдела, свыше 10 % — директор. Это иллюстративные значения, они задаются в Workflow и меняются без разработки. Пример условия на переход (имя поля скидки проверьте в своей версии): doc.additional_discount_percentage > 5.
Подводные камни перечисляю прямо. Первое: самосогласование. Если инициатор имеет роль согласующего, в стандартной настройке он может согласовать собственный документ: у перехода Workflow флажок Allow Self Approval по умолчанию включён. Снимите его на переходах «Согласовать» и проверьте на тестовом КП до запуска. Второе: параллельное согласование (юрист и финансист одновременно) и динамический согласующий (руководитель конкретного менеджера) из коробки не работают, для них нужны Server Script. Третье: отмена. Чтобы Workflow позволял отменить документ, нужно состояние с docstatus 2 и переход в него, иначе кнопка Cancel недоступна.
Какие роли нужны: менеджер создаёт и отправляет на согласование, руководитель отдела согласует, директор согласует высокие скидки. Роли с русскими названиями создаются вами и не системные, поэтому матрицу прав под них вы настраиваете сами. Подробности про согласование документов у нас есть в материале про маршруты согласования договоров.
- До 5 %: менеджер, без согласования.
- От 5 до 10 %: руководитель отдела.
- Свыше 10 %: директор.
- Пороги условные и меняются в Workflow.
«Подъём Групп»: лифтовое оборудование и цикл сделки в несколько месяцев
Условный пример, цифры вымышленные. «Подъём Групп» поставляет лифтовое оборудование застройщикам и управляющим компаниям. В штате 29 человек: 6 менеджеров по продажам, 3 технолога, остальные снабжение, склад, монтаж и бухгалтерия. Цикл сделки от запроса до заказа три-пять месяцев, КП переписывают в среднем шесть раз. Раньше предложения жили в файлах и почте, версия «финал_3_новая» была нормой.
Мы перевели КП в Quotation. Менеджер заводит Lead после первого содержательного контакта, затем Opportunity с позициями, потом Quotation. Альтернативные позиции помечены Is Alternative: основной лифт и аналог показываются в одном КП, но в итог входит только основной. Условия оплаты собрали в три шаблона. Печатную форму сделали на HTML и Jinja один раз, с реквизитами и условиями.
Согласование скидок вынесли в Workflow. Для примера: КП на 480 000 ₽ со скидкой 8 % — это скидка 38 400 ₽, итог 441 600 ₽. Скидка попадает в диапазон 5–10 %, документ уходит руководителю отдела. После согласования менеджер отправляет PDF клиенту, статус Open. Результат для примера: за квартал всего три предложения ушли без согласования из-за нестандартной формы скидки, и их разобрали вручную. Это условный пример, и ни экономии, ни роста продаж я не обещаю.
Что пришлось решать отдельно: почту. Встроенная CRM слабее профильных в работе с письмами, поэтому для «Подъём Групп» договорились отправлять PDF из самого Quotation (кнопка отправки письма в документе), чтобы письмо легло в таймлайн документа, а не в личный ящик менеджера. Как письмо отображается в карточке лида, проверьте на своей версии до запуска.
Версии КП и статусы: что делать при пересогласовании
Версия предложения — это не файл с суффиксом, а правило работы с документом. Пока Quotation в статусе Draft, меняйте его в той же редакции: цены, количество, условия. После отправки (Open) документ уже проведён, и правка требует Cancel и Amend: ERPNext создаёт новую версию с суффиксом «-1», сохраняя историю. Старая версия остаётся отменённой, клиенту уходит новая.
Продление срока — отдельный сценарий. Когда предложение истекло (Expired), новое КП создают на основе старого, а не оживляют прежнее. Если клиент отказался, документ закрывается как Lost с указанием причины. Эти причины потом складываются в отчёт, и по ним видно, на чём вы чаще проигрываете: цена, срок, условия оплаты или конкурент.
Таблица действий: | Что изменилось | Документ | Что видит клиент | Что проверить | |---|---|---|---| | Цена в той же редакции (Draft) | правка Quotation | ничего, пока не отправлено | скидка в пределах порога | | Состав позиций после отправки | Cancel + Amend, новая версия «-1» | новое КП | связи с Opportunity | | Продление срока | Expired, новое КП | новое предложение | цена и курс | | Отказ клиента | Set as Lost | ничего | причина проигрыша |
Связи с Opportunity и Sales Order после Amend проверьте на своём стенде: поведение зависит от версии и от того, что уже создано на основании КП. Если Sales Order уже оформлен, пересогласование идёт в нём, а не в Quotation.
Когда КП становится заказом: Quotation, Sales Order и ограничения
После согласия клиента из Quotation создают Sales Order кнопкой Create > Sales Order, статус КП меняется на Ordered. Позиции, цены и условия оплаты переходят в заказ без переноса вручную. Дальше цепочка продолжается закупкой, отгрузкой и счётом, и всё в той же базе. Этот переход — главное, за что стоит держать КП в ERPNext, а не в текстовом редакторе.
Теперь про границы. Встроенная CRM слабее профильных в работе с почтой и чатами, и в Quotation нет ИИ-генерации текста. Печатные формы сложной геометрии требуют разработки. Согласование без параллельных веток и динамических согласующих не работает из коробки. Если ваша B2B-сделка требует юридической экспертизы договора и тендерной документации, предложение будет лишь частью процесса, а не всем процессом.
С чего начать. Сделайте в тестовой базе три КП: простое, с альтернативной позицией и со скидкой выше порога. Пройдите весь путь от Lead до Sales Order и посмотрите, что видит согласующий. Затем соберите печатную форму и отправьте PDF себе. Живой демостенд покажу по запросу.
Что ещё почитать: как выглядят другие open-source CRM в этой связке — Odoo CRM Community и EspoCRM; если нужна CRM с ИИ-продавцом, смотрите CRM и AI-отдел продаж.
Частые вопросы
Как сделать коммерческое предложение в ERPNext?
Создайте Quotation на Lead или Customer (поле Quotation To), подтяните позиции из Opportunity через Get Items From, задайте условия оплаты через Payment Terms Template и напечатайте PDF. Создавать Customer заранее не обязательно, предложение можно выставить прямо на лид.
Можно ли в КП показать наличие товара на складе?
Да. В таблице позиций виден индикатор наличия: зелёный означает, что товар есть, красный — что нет. Альтернативные позиции помечаются флагом Is Alternative и в общую сумму не входят, поэтому в одном КП можно показать основной вариант и аналог без искажения итога.
Как согласовывать скидки в коммерческих предложениях?
Через Workflow на Quotation: состояния и переходы с ролями, условие перехода привязывают к полю скидки или к сумме. Самосогласование отключается флажком Allow Self Approval на переходе, а параллельные ветки из коробки не поддерживаются и требуют Server Script. Порог опишите в регламенте и проверьте на тестовом КП.
Можно ли изменить заголовок печатной формы КП?
Да, поле Print Heading меняет заголовок, например на Proforma Invoice, без смены типа документа. Простые изменения (шрифты, скрытие полей через Print Hide) делаются настройками. Бланки со строгой геометрией делают как Print Format на HTML, CSS и Jinja, и это работа разработчика.
Что значат статусы Quotation: Open, Ordered, Lost, Expired?
Open — предложение отправлено и ждёт решения. Ordered — по нему оформлен заказ. Lost — клиент отказался, указана причина. Expired — истёк срок в поле Valid Till. Есть ещё Draft и Cancelled. Статусы питают воронку и отчёты по потерянным сделкам.
Чем КП в CRM лучше шаблона в Word?
Позиции берутся из справочника, цена и остатки подтягиваются сами, версии и согласования хранятся в карточке клиента, а из принятого КП одной кнопкой создаётся Sales Order. ИИ-генерация текста КП в этот набор не входит, она описана отдельно.
Источники
- ERPNext Docs: Quotation — Quotation To, Valid Till, Payment Terms Template, Print Heading, Is Alternative, Get Items From, статусы, индикатор наличия, Cancel и Amend; проверено 01.10.2026: https://docs.frappe.io/erpnext/quotation
- ERPNext Docs: Payment Terms — Payment Terms Template, доли счёта в сумме 100 %, применение в Quotation; проверено 01.10.2026: https://docs.frappe.io/erpnext/payment-terms
- ERPNext Docs: Print Format — Print Format Builder, Jinja, Print Hide через Customize Form, стили; проверено 01.10.2026: https://docs.frappe.io/erpnext/print-format
- Глава базы знаний ITfresh 04 и 06 — Workflow по сумме, самосогласование, docstatus 2 для отмены, параллельное согласование через Server Script; страница документации Workflow при проверке отдала только обзор, поэтому детали помечены «проверьте в своей версии»



