Каждый день менеджеры тратят до часа на подготовку одного договора: копируют реквизиты из CRM в Word, сверяют ИНН, вставляют суммы. При активных продажах очередь из 10–15 документов — часы чистой рутины. Ошибки неизбежны: неверный ИНН, просроченная дата, пропущенная сумма. Потеря от одной такой ошибки может достигать 50 000 рублей за срыв сделки.
Разработка кастомной системы шаблонов договоров Битрикс24 решает эту проблему: генерация занимает 1–2 минуты, а данные подставляются из сделки автоматически. Наше решение, основанное на 10+ годах опыта внедрения, поддерживает условную логику, циклы по товарным позициям и интеграцию с электронной подписью — всё в едином интерфейсе CRM. При штате 50 договоров в месяц это высвобождает целую ставку сотрудника и исключает ошибки ручного копирования. Типичная экономия на операционных расходах — свыше 240 000 рублей в год на одного менеджера.
В отличие от встроенного генератора Битрикс24, который умеет только заменять переменные, кастомное решение позволяет настраивать сложные условия и автоматически рассчитывать налоги, скидки и итоговые суммы. Это особенно важно для B2B-компаний с разными типами клиентов (юрлица, физлица, с НДС и без).
Как автоматизировать генерацию договоров с условной логикой?
Глубокая кастомизация шаблонов строится на связке REST API Битрикс24 и библиотеки PhpWord. Мы создаём DOCX-шаблоны с метками-переменными, а затем PHP-скрипт обрабатывает данные сделки и формирует конечный документ. Типовой код генератора:
use PhpOffice\PhpWord\TemplateProcessor;
function generateContract($dealId, $templatePath) {
$deal = CRest::call('crm.deal.get', ['id' => $dealId])['result'];
$contact = CRest::call('crm.contact.get', ['id' => $deal['CONTACT_ID']])['result'];
$company = CRest::call('crm.company.get', ['id' => $deal['COMPANY_ID']])['result'];
$template = new TemplateProcessor($templatePath);
$template->setValue('CONTRACT_NUMBER', generateContractNumber($dealId));
$template->setValue('CONTRACT_DATE', date('d.m.Y'));
$template->setValue('CLIENT_NAME', $company['TITLE']);
$template->setValue('AMOUNT', number_format($deal['OPPORTUNITY'], 2, '.', ' '));
if ($deal['UF_CRM_VAT'] === 'Y') {
$template->setValue('VAT_BLOCK', 'в том числе НДС 20%: ' . number_format($deal['OPPORTUNITY'] * 0.2, 2));
} else {
$template->setValue('VAT_BLOCK', 'НДС не облагается');
}
$outputPath = '/tmp/contract_' . $dealId . '.docx';
$template->saveAs($outputPath);
return $outputPath;
}
Дополнительно реализуем кнопку «Сформировать договор» прямо в карточке сделки через placement-приложение. После генерации файл автоматически прикрепляется к сделке, а в таймлайн пишется активность. Весь процесс занимает секунды.
Какие преимущества даёт интеграция с электронной подписью?
После согласования внутренними бизнес-процессами договор отправляется на подпись клиенту. Мы подключаем сервисы вроде Контур.Подпись или СБИС. Статус подписания синхронизируется с CRM: если клиент отклонил — сделка возвращается на доработку; если подписал — договор архивируется. Это сокращает цикл заключения сделки с недель до 1–2 дней. По данным Bitrix24 Helpdesk, автоматизация документооборота сокращает время обработки договоров на 60%.
Когда внедрение кастомных шаблонов окупается?
Окупаемость наступает менее чем за 3 месяца за счёт исключения ручного труда и ошибок. Для компаний с объёмом от 30 договоров в месяц стоимость внедрения компенсируется уже в первый квартал. Дополнительная выгода — ускорение цикла сделки и повышение точности документов.
Что входит в работу: deliverables
По результатам проекта вы получаете:
- Полностью рабочий генератор договоров на базе ваших шаблонов DOCX.
- Документацию по настройке и поддержке (описание переменных, логики, REST API).
- Доступ к исходному коду в Git-репозитории.
- Обучение менеджеров (2–3 сессии по 1 часу).
- Гарантию на код — 3 месяца бесплатной поддержки после деплоя.
Процесс работы и сроки
Наша работа включает полный цикл:
| Этап |
Длительность |
| Аналитика: изучаем текущие шаблоны, выявляем все типы договоров |
2–3 дня |
| Проектирование: составляем карту переменных и логику ветвлений |
2–3 дня |
| Разработка: создаём шаблоны DOCX с условными блоками и код генератора |
5–10 дней |
| Интеграция: настраиваем placement-кнопки, бизнес-процессы согласования и ЭП |
3–5 дней |
| Тестирование: проверяем на 10–20 сценариях (разные типы сделок, граничные суммы) |
2–3 дня |
| Деплой и обучение: загружаем на боевой сервер, обучаем менеджеров |
1–2 дня |
Сроки: базовый проект с одним шаблоном — от 5 рабочих дней. Комплексная система (5+ шаблонов, ветвления, ЭП) — 3–4 недели. Стоимость рассчитывается индивидуально после аудита ваших процессов.
Сравнение: встроенный генератор vs кастомное решение
| Характеристика |
Встроенный модуль CRM |
Кастомное решение |
| Простые шаблоны с заменой переменных |
Да |
Да |
| Условные блоки (if/else) |
Нет |
Да |
| Циклы по товарам |
Нет |
Да |
| Сложные вычисления |
Нет |
Да |
| Электронная подпись |
Требует доработок |
Встроена |
| Бизнес-процессы согласования |
Вручную |
Автоматически |
Кастомное решение в 5–10 раз функциональнее штатного и полностью избавляет от рутины.
Типичные ошибки при внедрении
- Слишком сложные шаблоны: попытка запихнуть все условия в один файл — лучше разбить на 2–3 специализированных.
- Игнорирование тестирования: не проверенные граничные значения (нулевая сумма, длинные названия) ломают генерацию.
- Отсутствие резервного копирования шаблонов: храните исходники DOCX и код в Git.
Свяжитесь с нами для бесплатной консультации и оценки вашего проекта. Закажите аудит текущих шаблонов — мы подберём оптимальное решение под ключ за 2 недели. Получите коммерческое предложение с точными сроками и составом работ.
Почему вёрстка сайтов на 1С-Битрикс требует профессионализма?
Открываете template.php у предыдущего подрядчика — а там SQL-запросы, бизнес-логика и inline-стили в одном файле. На каждом втором проекте, который берём на поддержку, код шаблонов выглядит как свалка: кэш не работает, добавить новую фичу — переписывай всё. Средняя стоимость исправления такой вёрстки сайтов — 15 000–30 000 рублей только на отладку, а потерянная выручка из-за сломанной корзины в пик сезона может уходить в миллионы. Наша команда с 10-летним опытом строго разделяет: логика — в result_modifier.php или component_epilog.php, представление — в template.php. Никакого CIBlockElement::GetList в шаблоне. Это сокращает время правок на 30–40% и исключает типовые ошибки, которые ломают кэш. Аналогичную проблему исправляли клиенту, который месяц не мог обновить блок «Акции» — после настройки тегированного кэша правки вставали за минуту, а не за день.
Как правильно организовать шаблоны компонентов?
Кастомный шаблон — это не один файл, а структура из пяти-шести файлов:
-
template.php — только HTML и вывод $arResult
-
result_modifier.php — подготовка данных, дополнительные выборки
-
component_epilog.php — код после кэширования (счётчики, динамика)
-
style.css и script.js — подключаются через Asset::getInstance()->addCss() и addJs() (не через <link> — иначе ломается объединение)
-
.parameters.php — параметры визуального редактора
Пример структуры для каталога:
local/templates/your_template/components/bitrix/catalog.section/.default/
├── template.php
├── result_modifier.php
├── component_epilog.php
├── style.css
├── script.js
└── .parameters.php
Типовые шаблоны, которые верстаем под ключ:
| Компонент |
Что делаем |
catalog.section и catalog.element |
Переключение вида (плитка/список/таблица), lazy load для изображений, srcset для ретины |
sale.basket.basket |
AJAX-обновление без перезагрузки, мини-корзина через sale.basket.basket.line |
menu |
Мегаменю с кэшированием по разделам, отложенная загрузка подменю |
search.title |
Автоподсказки с дебаунсом 300 мс, превью товаров в дропдауне |
breadcrumb |
Микроразметка BreadcrumbList по Schema.org |
Кэширование: почему оно ломается и как чиним?
Компонентное кэширование в Битрикс ломается одной ошибкой: вывели имя пользователя внутри кэшированного каталога — все видят одно имя. Решение — component_epilog.php для динамических вставок.
Tagged cache ($this->setResultCacheKeys, CIBlock::clearIblockTagCache) настраиваем обязательно. Изменили товар — очищается кэш только этого товара, а не всего раздела. На проекте с 50 000 товаров это даёт прирост скорости на 40% по сравнению с полным сбросом.
Реальный кейс. Клиент жаловался — на странице каталога у всех одна корзина. Оказалось, предыдущий разработчик вывел $_SESSION['BASKET'] внутри template.php компонента catalog.section. Компонент кэшировался на час — корзина застыла. Перенесли вывод в component_epilog.php, настроили тегированный кэш на sale.basket.basket.line. Страница не потеряла в скорости, корзина стала актуальной. Ущерб от неработающей корзины в пик сезона мог составлять миллионы, а цена исправления — в пределах 15 000 рублей. Другой клиент потерял 200 000 рублей за неделю из-за некорректного кэша формы заказа — мы вернули работоспособность за два дня.
Официальная документация Битрикс рекомендует использовать component_epilog.php для динамических вставок — подробнее в руководстве.
CSS-подходы: BEM, Tailwind или гибрид?
Для больших проектов (30+ шаблонов) используем BEM — .product-card__price, .product-card--featured. Стили изолированы, конфликтов нет. Подробнее о BEM. В Битрикс обёртки с классами bx-component не трогаем — оборачиваем свой BEM-блок внутри.
Для типовых задач (лендинги, админки) берём Tailwind 3+ с PurgeCSS — итоговый CSS 10–30 КБ вместо сотен. Дизайн-токены в tailwind.config.js фиксируют цвета, шрифты, отступы в одном месте.
На большинстве проектов применяем гибрид: BEM для структурных компонентов (каталог, карточка, чекаут), Tailwind для утилитарных вещей (отступы, flex-раскладки). Границу оговариваем с командой заранее.
Как мы достигаем Core Web Vitals?
Critical CSS — выделяем стили первого экрана через пакет critical, инлайним в <head>. Остальное грузится асинхронно через media="print" onload="this.media='all'". LCP на мобильных сокращается на 1–1.5 секунды.
Изображения — главный тормоз. Используем <picture> с WebP и JPEG-фолбэком. loading="lazy" для всего ниже первого экрана. width и height явно прописаны — CLS = 0. Обработчик в urlrewrite.php генерирует WebP на лету.
Минификация и сжатие. CSS и JS через Vite или встроенное объединение Битрикс. Brotli на nginx (brotli_comp_level 6) — на 15–20% эффективнее gzip. Кэширование статики: expires 1y + версионирование через query string.
Хотите получить подобные показатели? Свяжитесь с нами — сделаем аудит вашего проекта и предложим конкретные шаги.
Что входит в услугу вёрстки сайтов на 1С-Битрикс?
После заказа вёрстки шаблона или адаптации готового решения передаём:
- Исходники шаблонов компонентов с разделением на
template.php, result_modifier.php, epilog
- CSS и JS, подключённые через Asset — без инлайн-стилей
- Настроенное кэширование с тегами
- Документацию по структуре и параметрам
- Доступ к Git-репозиторию с историей изменений
- Обучение вашего разработчика: как править шаблон без потери обновляемости
Гарантируем соответствие Core Web Vitals и кроссбраузерность. Закрепляем инженера с опытом 10+ лет — получите консультацию по вашему проекту до начала работ.
Процесс работы:
- Анализ макетов и текущего проекта — выявляем компоненты для переработки
- Проектирование структуры — разбиваем страницу на BEM-блоки
- Реализация — верстаем шаблоны по схеме: template, result_modifier, epilog, CSS, JS
- Тестирование — проверяем кэш, адаптивность, Core Web Vitals, кроссбраузерность
- Деплой — стейджинг, приёмка, продакшен
На каждом этапе вы получаете промежуточный результат и можете внести правки. Свяжитесь с нами — оценим проект за 1–2 дня после получения макетов.
Сроки
| Объём работ |
Срок |
| Лендинг (5–7 экранов) |
3–5 дней |
| Корпоративный сайт (15–20 уникальных страниц) |
2–4 недели |
| Интернет-магазин (30+ шаблонов компонентов) |
4–8 недель |
| Кастомизация готового решения Маркетплейса |
1–3 недели |
| Редизайн существующего проекта |
3–6 недель |
После анализа даём разбивку по компонентам — что переиспользуется, что верстается с нуля. Закажите предварительную консультацию — посчитаем сроки и бюджет индивидуально.