BUSSOL · SCORE2

Документация версии 2.2.1

Bussol: Счет заказа в PDF и отправка на почту
Автоматизация PDF-счетов для интернет-магазина: правила формирования, разные шаблоны, email, личный кабинет и архив счетов.
1С-Битрикс 26+PHP 8.2+Малый бизнес+Правила запускаPDF-шаблоныQRЛичный кабинет
Версия 2.2.1 · 26.09.2026 · Copyright by BUSSOL 2026, Alexander Afanasyev, alafanasyev2015@gmail.com
ГОТОВО К РАБОЧЕМУ ЗАПУСКУ

Сборка 2.2.1 прошла контроль качества перед выпуском: проверены структура модуля и PHP-синтаксис всех 240 PHP-файлов, проконтролирована ключевая логика формирования и доставки счета, отдельно проверена локальная генерация QR-кода. Заявленный функционал реализован и готов к штатной эксплуатации при выполнении системных требований и корректной настройке почтовой инфраструктуры Битрикс.

1. Назначение и модель работы

Модуль автоматизирует полный цикл работы со счетом: определяет подходящее правило для конкретной оплаты заказа, формирует PDF, сохраняет его в постоянном архиве, отправляет покупателю, при необходимости направляет копию в бухгалтерию и предоставляет защищенное скачивание из личного кабинета.

Задача Как решает модуль
Разные способы оплаты Для сайта можно создать несколько правил и выбрать в каждом одну или несколько платежных систем.
Разные типы документов Каждому правилу назначается собственный PDF-шаблон.
Условия запуска Учитываются статус заказа, состояние оплаты и диапазон суммы заказа.
Надежная доставка Отправка выполняется после фоновой обработки уже сохраненного состояния заказа.
Постоянный архив Сформированный PDF не удаляется после отправки.
Повторная работа В админке доступны скачивание, переформирование и повторная отправка.
Самообслуживание Покупатель может скачать разрешенный счет из личного кабинета.

Бизнес-эффект

Счет перестает быть ручной операцией: правило, шаблон, реквизиты и канал доставки определяются автоматически, а готовый документ остается доступным для менеджера, бухгалтерии и покупателя.

2. Что нового в 2.2.1

Версия Ключевые изменения
2.2.1 Исправлена автоматическая отправка покупателю после оформления заказа. Письмо покупателю выполняется до бухгалтерской копии; ошибка бухгалтерской копии не отменяет успешный статус клиентского письма. Для мигрированных правил отправка email по умолчанию включена.
2.2.0 Добавлены QR-код, сумма прописью, автоматическая и ручная копия счета в бухгалтерию. Обновлены название и описание модуля.
2.1.0 Добавлены пользовательские PDF-шаблоны, несколько платежных систем и условия запуска, защищенное скачивание счета покупателем из личного кабинета.
2.0.5 Базовый стабильный контур: формирование PDF, архив, email, многосайтовость и журнал счетов.

Контроль версии 2.2.1

Все 240 PHP-файлов сборки проходят php -l. Локальный генератор QR формирует PNG без внешних сервисов. Ключевой сценарий автоматической доставки покупателю в 2.2.1 исправлен и имеет приоритет над опциональной бухгалтерской копией.

Приемочный тест на конкретном магазине все равно рекомендуется: реальные коды свойств заказа, платежные системы, права файловой системы и SMTP-настройки отличаются между проектами.

3. Системные требования, установка и обновление

Компонент Требование
1С-Битрикс Версия 26.0 или выше. Редакция «Малый бизнес» или выше. Должен быть установлен модуль sale.
PHP 8.2 или выше.
Расширения PHP dom и mbstring. Установщик проверяет их наличие.
Файловая система PHP-процессу необходима запись в /upload и штатные каталоги файлов Битрикс.
Почта Должна работать штатная почтовая подсистема Битрикс и фактическая отправка с сервера.
Composer Не требуется: PDF-движок и QR-генератор поставляются внутри модуля.
php -v
php -m | grep -E "^(dom|mbstring)$"

Новая установка

  1. Скопируйте каталог bussol.score2 в /bitrix/modules/.
  2. Установите решение в административной части Битрикс.
  3. Откройте Bussol → Bussol: Счет заказа в PDF и отправка на почту → Настройки.
  4. Для каждого SITE_ID настройте правила, реквизиты, свойства покупателя, PDF и почту.
  5. Выполните тестовый заказ.

Обновление до 2.2.1

Переустановка не требуется: замените каталог /bitrix/modules/bussol.score2/ файлами версии 2.2.1. При первом подключении RuntimeInstaller синхронизирует публичный компонент личного кабинета, страницу управления шаблонами и защищенный tool-файл, а также регистрирует обработчик OnSalePaymentEntitySaved, если он еще не зарегистрирован.

Перед обновлением

Сделайте резервную копию файлов и базы данных. После замены файлов откройте настройки каждого сайта и оформите новый тестовый заказ.

4. Меню, права и многосайтовые настройки

Модуль расположен в отдельном верхнеуровневом разделе Bussol. Общая иконка Bussol сохраняется прежней; у самого модуля используется иконка SCORE2.

Пункт Назначение
Счета Журнал документов, скачивание, переформирование, повторная отправка покупателю и бухгалтерская копия.
Шаблоны PDF Создание, редактирование и удаление пользовательских HTML-шаблонов.
Настройки Правила, реквизиты, состав PDF, QR, email, бухгалтерия и личный кабинет.
Право Доступ
Ниже R Пункты модуля недоступны.
R и выше Просмотр журнала и скачивание PDF.
W Изменение настроек и шаблонов, переформирование, повторная отправка и бухгалтерская копия.

Все настройки сохраняются отдельно для каждого SITE_ID. Интерфейс содержит вкладки: Основные, Правила запуска, Компания, Покупатель, Отображение, QR-код, Письмо, Бухгалтерия, Личный кабинет.

Многосайтовость без компромиссов

Каждый сайт может иметь свои правила, платежные системы, PDF-шаблоны, реквизиты, QR, письма, адреса бухгалтерии и разрешения личного кабинета.

5. Правила запуска

Правила проверяются сверху вниз отдельно для каждой внешней оплаты заказа. Для конкретной оплаты используется первое совпавшее активное правило. Это позволяет описывать приоритетные сценарии без программирования.

Условие / действие Настройка
Активность Правило можно временно отключить, не удаляя его.
Платежные системы Одна или несколько. Пустой список означает любую внешнюю платежную систему.
Статусы заказа Один или несколько. Пустой список означает любой статус.
Состояние оплаты Любое / Не оплачен / Оплачен.
Сумма заказа Минимальная и максимальная граница; пустая граница означает отсутствие ограничения.
PDF-шаблон Стандартный или любой пользовательский шаблон текущего сайта.
Email покупателю Включается отдельно в каждом правиле.
Копия бухгалтерии Разрешение в правиле + глобальный переключатель на вкладке «Бухгалтерия».
Личный кабинет Разрешение выдачи счета покупателю по этому правилу.

Пример правила

«Безналичный счет для юрлиц»: платежные системы «Банковский перевод» и «Счет», заказ в нужном статусе, оплата «Не оплачена», отдельный корпоративный шаблон, email покупателю — да, копия бухгалтерии — да, скачивание в личном кабинете — да.

Для совместимости со старыми установками настройка одной платежной системы используется как базовое правило до первого сохранения нового набора правил. Обработчик изменения оплаты позволяет правилу с условием «Оплачен» сработать позже, когда платежная система изменит состояние платежа.

6. Пользовательские PDF-шаблоны

В разделе Шаблоны PDF можно создавать несколько HTML-шаблонов для каждого сайта. Пользовательский шаблон выбирается в правиле запуска или как шаблон по умолчанию.

Возможность Описание
Стандартный шаблон Всегда доступен как default.
Пользовательские шаблоны Сохраняются в /upload/bussol.score2/templates/<SITE_ID>/ с расширением .tpl.
PHP-код Не исполняется. Используется шаблонный синтаксис переменных, условий и циклов.
Удаление шаблона Если удаляемый шаблон использовался по умолчанию или в правиле, соответствующая настройка переключается на стандартный шаблон.

Синтаксис шаблона

Конструкция Назначение
{{invoice_title}} Экранированное значение.
{{{variable}}} Значение без HTML-экранирования.
{{#condition}}...{{/condition}} Условный блок.
{{^condition}}...{{/condition}} Обратное условие.
{{#items}}...{{/items}} Цикл по товарам или другому списку.
{{@index}} Номер текущей строки цикла, начиная с 1.
{{#items}}
<tr>
  <td>{{@index}}</td>
  <td>{{name}}</td>
  <td>{{quantity}}</td>
  <td>{{price}}</td>
  <td>{{sum}}</td>
</tr>
{{/items}}

{{#show_qr}}{{#qr}}
<img src="{{qr}}" style="width:120px">
{{/qr}}{{/show_qr}}

Перед запуском нового шаблона

Проверьте его на тестовом заказе с длинными названиями товаров, несколькими позициями, QR, логотипом, печатью и подписями.

7. Реквизиты, данные покупателя и состав PDF

Компания

Можно настроить наименование компании / ИП, адрес, ИНН, КПП, банк, БИК, расчетный и корреспондентский счета, телефон, email отправителя, ФИО руководителя и главного бухгалтера, а также изображения логотипа, печати и подписи.

Если email отправителя компании не заполнен, модуль использует email сайта, затем — email из настроек Главного модуля Битрикс.

Покупатель

Назначение Настройка По умолчанию
Организация buyer_name_property COMPANY
ФИО buyer_fio_property FIO
Email buyer_email_property EMAIL
Телефон buyer_phone_property PHONE
ИНН buyer_inn_property INN
КПП buyer_kpp_property KPP
Адрес buyer_address_property ADDRESS
Дополнительные свойства extra_property_codes пусто

Критично для email

Код свойства email должен соответствовать реальному свойству заказа. Если email отсутствует или некорректен, PDF может сохраниться, но отправка завершится ошибкой.

Состав стандартного PDF

Блок Содержимое
Шапка Логотип, продавец, адрес, телефон, email.
Банковские реквизиты ИНН, КПП, р/с, банк, БИК, к/с.
Покупатель Организация/ФИО, email, телефон, адрес, ИНН, КПП.
Товары №, опционально ID, наименование, количество, единица, цена, НДС, сумма.
Итоги Скидка, доставка, НДС, уже оплачено, итоговая сумма, сумма прописью.
Дополнительно Комментарий и выбранные свойства заказа.
QR Платежный или пользовательский QR, если включен.
Подписи Руководитель, главный бухгалтер, подпись и печать.

Денежные значения форматируются штатными средствами Битрикс. HTML-сущности декодируются, поэтому в PDF выводятся реальные пробелы и знак валюты, а не строки вида &nbsp; и &#8381;.

8. QR-код и сумма прописью

QR-код

QR включается на отдельной вкладке и доступен во встроенном и пользовательских шаблонах. Генерация выполняется локально внутри модуля — внешний QR-сервис и интернет-доступ не нужны.

Режим Поведение
Платежный QR Формируется строка ST00012 из наименования получателя, р/с, банка, БИК, к/с, ИНН, при наличии КПП, назначения платежа и суммы заказа в копейках.
Произвольный текст / ссылка Администратор задает строку самостоятельно; поддерживаются макросы заказа.

Для платежного режима необходимы как минимум наименование получателя, расчетный счет и БИК.

Переменная шаблона Содержимое
{{qr}} Data URI PNG-изображения QR.
{{qr_text}} Исходная строка QR.
{{show_qr}} Флаг включения QR.
{{qr_error}} Текст ошибки генерации, если она возникла.

Сумма прописью

Переключатель «Сумма прописью» находится на вкладке Отображение. Для рублей учитываются формы «рубль / рубля / рублей» и «копейка / копейки / копеек».

15 599,00 ₽
→ Пятнадцать тысяч пятьсот девяносто девять рублей 00 копеек

В пользовательском шаблоне используются {{total_words}} и {{show_total_words}}.

Еще удобнее для покупателя

QR сокращает ручной ввод реквизитов, а сумма прописью делает счет привычным для бухгалтерской работы и печатного документооборота.

9. Email покупателю и копия для бухгалтерии

Отправка покупателю

Автоматическая отправка выполняется фоновым заданием Битрикс. После события сохранения заказа или оплаты модуль повторно загружает заказ из базы и работает с уже сохраненным состоянием свойств и оплат.

Параметр Описание
Email Берется из свойства заказа, указанного в buyer_email_property.
Тема Настраивается отдельно для каждого сайта.
HTML-текст Настраивается отдельно для каждого сайта.
Вложение Постоянный PDF временно регистрируется как служебный CFile ID.
После отправки Удаляется только служебная копия CFile; постоянный PDF остается в архиве.

Приоритетный канал — покупатель

В 2.2.1 письмо покупателю выполняется до бухгалтерской копии. Ошибка бухгалтерской копии не отменяет успешную отправку клиенту и не меняет SENT на ошибку.

Копия для бухгалтерии

Настройка Описание
Глобальный переключатель Включается на вкладке «Бухгалтерия».
Адреса Один или несколько email через запятую, точку с запятой или пробел.
Разрешение правила В конкретном правиле должен быть включен флаг отправки копии.
Тема и текст Для бухгалтерии используются отдельные тема и HTML-текст.
Файл Используется тот же сохраненный PDF; второй PDF не создается.
Защита от дубля Успешная автоматическая отправка отмечается в метаданных счета.
Ручная отправка В журнале есть действие Отправить копию в бухгалтерию.

10. Скачивание счета покупателем из личного кабинета

Модуль устанавливает компонент bussol.score2:personal.invoice. Он может показывать счета конкретного заказа или список доступных счетов текущего пользователя.

<?php
$APPLICATION->IncludeComponent(
    "bussol.score2:personal.invoice",
    "",
    [
        "ORDER_ID" => (int)($_REQUEST["ID"] ?? 0),
        "SHOW_TITLE" => "Y",
    ]
);
?>
Параметр Поведение
ORDER_ID > 0 Показываются доступные счета конкретного заказа.
ORDER_ID = 0 Показывается список счетов текущего авторизованного пользователя.
SITE_ID Можно ограничить выдачу текущим сайтом.
Глобальное разрешение Настраивается на вкладке «Личный кабинет».
Разрешение правила Дополнительно контролируется флагом «Разрешить скачивание в личном кабинете».

Файл выдается через /bitrix/tools/bussol.score2_invoice.php по подписанной ссылке. Перед выдачей проверяются авторизация пользователя, принадлежность заказа текущему пользователю, разрешение правила и допустимый путь файла.

Без открытого URL архива

Покупатель не получает прямую ссылку на /upload. Штатная выдача происходит только после проверки владельца заказа и подписи URL.

11. Автоматическая обработка, статусы и защита от дублей

События OnSaleOrderSaved и OnSalePaymentEntitySaved ставят заказ в отложенную обработку. Один и тот же заказ в рамках запроса не ставится в очередь повторно. Фоновая задача загружает заказ заново и передает его в сервис обработки.

Статус Значение
NEW Запись счета создана, обработка началась.
GENERATED PDF сформирован или найден и готов к дальнейшему действию.
READY PDF готов, но правило не требует email покупателю.
SENT Письмо покупателю успешно отправлено; автоматический дубль не отправляется.
ERROR Последняя попытка завершилась ошибкой; текст сохраняется в LAST_ERROR.

Записи NEW, GENERATED и ERROR не блокируют последующую автоматическую попытку. Если PDF уже существует, модуль может использовать сохраненный файл вместо лишней повторной генерации.

Почему используется фоновая обработка

Checkout и платежные callback-и могут несколько раз сохранять заказ и оплаты. Повторная загрузка финального состояния после сохранения уменьшает риск ранней отправки и дублей.

12. Архив счетов и административные действия

Страница Счета выводит до 200 записей журнала с сортировкой по ID, дате создания или дате отправки.

Колонка Описание
Заказ Номер заказа и ID со ссылкой на карточку заказа.
Сайт SITE_ID и название сайта.
Платежная система ID и название платежной системы.
Email Адрес покупателя, использованный при отправке.
PDF Имя сохраненного файла и административная ссылка скачивания.
Статус Создается / PDF сформирован / Готов (без email) / Отправлен / Ошибка.
Создан / Отправлен Даты создания записи и успешной отправки.
Ошибка Последняя ошибка или информация о проблеме бухгалтерской копии.

Действия

Действие Что делает
Скачать PDF Отдает сохраненный документ через защищенную административную страницу.
Переформировать PDF Заново строит документ и заменяет сохраненный файл. Для уже созданного счета используется сохраненная информация о правиле/шаблоне.
Отправить повторно Использует существующий PDF и заново берет актуальный email из заказа.
Отправить копию в бухгалтерию Отправляет сохраненный PDF на адреса бухгалтерии текущего сайта.

Практика

Если клиент просто не получил письмо — используйте «Отправить повторно». Если изменились реквизиты, шаблон или содержимое документа — сначала выполните «Переформировать PDF».

13. Макросы и переменные пользовательского шаблона

Макросы строковых настроек

Область Макросы
Заголовок счета #ORDER_ID#, #ACCOUNT_NUMBER#, #DATE#, #SITE_ID#
Назначение платежа #ORDER_ID#, #ACCOUNT_NUMBER#, #DATE#, #SITE_ID#
Письмо покупателю #ORDER_ID#, #ACCOUNT_NUMBER#, #DATE#, #SITE_ID#
Письмо бухгалтерии #ORDER_ID#, #ACCOUNT_NUMBER#, #DATE#, #SITE_ID#
Имя PDF #ORDER_ID#, #ACCOUNT_NUMBER#, #DATE#, #PAYMENT_ID#
Произвольный QR Макросы заказа заменяются перед генерацией QR.

Основные группы данных PDF-шаблона

Группа Примеры
Заказ order.id, order.account_number, order.date, order.site_id, order.status_id, order.currency
Оплата payment.id, payment.pay_system_id, payment.sum, payment.paid
Продавец seller.name, seller.address, seller.inn, seller.kpp, seller.bank, seller.bik, seller.rs, seller.ks, seller.phone, seller.email
Покупатель buyer.name, buyer.email, buyer.phone, buyer.inn, buyer.kpp, buyer.address
Товары items + product_id, name, quantity, unit, price, vat_label, sum
Итоги discount, delivery, paid, vat_total, total, total_words
Изображения logo, stamp, signature, qr
QR qr_text, qr_error, show_qr
Флаги show_logo, show_bank_details, show_buyer*, show_product_id, show_unit, show_vat, show_discount, show_delivery, show_paid, show_comment, show_extra_properties, show_stamp, show_signature, show_total_words

Недопустимые символы в имени PDF заменяются на _. Если расширение .pdf не указано, оно добавляется автоматически. Для заказа с несколькими внешними оплатами модуль предотвращает конфликт имен файлов, добавляя ID оплаты при необходимости.

14. Хранение данных, безопасность и диагностика

Хранение

Данные Расположение
PDF-счета /upload/bussol.score2/invoices/<SITE_ID>/<YYYY>/<MM>/<имя>.pdf
Пользовательские шаблоны /upload/bussol.score2/templates/<SITE_ID>/...
Метаданные счета /upload/bussol.score2/meta/<INVOICE_ID>.json
Почтовое вложение Временный CFile в bussol.score2/mail; после sendImmediate() удаляется только служебная копия.

Безопасность

Механизм Реализация
Права администратора Просмотр — R, изменения и действия — W.
CSRF Административные действия требуют корректный bitrix_sessid.
Прямой доступ .htaccess закрывает /upload/bussol.score2/ для Apache; для nginx нужен отдельный deny-location.
Личный кабинет Подписанная ссылка, обязательная авторизация и проверка владельца заказа.
Допустимый путь Покупателю выдаются только файлы из /upload/bussol.score2/invoices/.
Удаленные ресурсы PDF Отключены; изображения встраиваются локально.
Email Адреса валидируются перед отправкой.
Шаблоны Пользовательский HTML не исполняется как PHP.

Диагностика

Симптом Что проверить
Счет не создается Включен ли модуль; есть ли активное совпадающее правило; соответствуют ли платежная система, статус, оплата и сумма; заказ не отменен ли; оплата не внутренняя ли.
PDF создан, письмо не пришло Код свойства email, адрес, SMTP/почта Битрикс, STATUS и LAST_ERROR.
Бухгалтерская копия не пришла Глобальный переключатель, адреса бухгалтерии, флаг правила, LAST_ERROR.
QR не виден Включен show_qr; для платежного QR заполнены наименование, р/с и БИК; в пользовательском шаблоне выведен qr.
Сумма прописью не видна Включен переключатель и в пользовательском шаблоне выведен total_words.
Клиент не может скачать PDF Он авторизован и владеет заказом; разрешение включено глобально и в правиле; файл существует.
После изменения реквизитов уходит старый PDF Выполните «Переформировать PDF», затем повторную отправку.
Прямая ссылка на /upload/bussol.score2 возвращает 403 Это ожидаемое поведение защиты архива.

Ошибки фоновой обработки, автоматической отправки и QR передаются в стандартный AddMessage2Log с меткой bussol.score2.

15. Чек-лист запуска

Перед вводом модуля в эксплуатацию пройдите проверку на копии магазина, затем повторите критичные пункты на рабочем сайте.

ГОТОВО К ЭКСПЛУАТАЦИИ

После прохождения чек-листа модуль готов взять на себя ежедневную работу со счетами: сформировать документ по нужному сценарию, сохранить его, доставить покупателю и бухгалтерии и оставить доступным для повторного использования.