Разработка калькулятора рассрочки на 1С-Битрикс
Рассрочка — маркетинговый инструмент, а не финансовый продукт. Принципиальное отличие от кредита: нет процентов для покупателя (они либо отсутствуют, либо компенсируются продавцом банку). Калькулятор рассрочки проще математически, но сложнее логически: нужно отразить разные периоды рассрочки, условия досрочного погашения, возможные комиссии за оформление.
Механика рассрочки
В классической рассрочке без переплаты:
Ежемесячный платёж = Стоимость товара ÷ Количество месяцев
Продавец компенсирует банку разницу за счёт своей маржи или специального договора с банком-партнёром.
В рассрочке «0-0-24» (0% первый взнос, 0% ставка, 24 месяца) — скрытые условия часто включают обязательное страхование или комиссию за ведение счёта. Калькулятор должен показывать реальную итоговую сумму.
PHP-реализация расчёта
namespace MyProject\Services;
class InstallmentCalculator
{
/**
* @param float $amount Стоимость товара/услуги
* @param int $months Срок рассрочки
* @param float $downPayment Первоначальный взнос (0 если нет)
* @param float $bankRate Реальная ставка банка (компенсируется продавцом)
* @param float $commission Единовременная комиссия (0 если нет)
*/
public static function calculate(
float $amount,
int $months,
float $downPayment = 0,
float $bankRate = 0,
float $commission = 0
): array {
$loanAmount = $amount - $downPayment;
$commissionFixed = $amount * ($commission / 100);
if ($bankRate == 0) {
// Классическая беспроцентная рассрочка
$monthlyPayment = $loanAmount / $months;
$totalPayment = $loanAmount + $commissionFixed;
$overpayment = $commissionFixed;
} else {
// Рассрочка с фактической ставкой (оплачивает продавец, не покупатель)
$monthlyRate = $bankRate / 12 / 100;
$monthlyPayment = $loanAmount * $monthlyRate
* pow(1 + $monthlyRate, $months)
/ (pow(1 + $monthlyRate, $months) - 1);
$totalPayment = $monthlyPayment * $months + $commissionFixed;
$overpayment = $totalPayment - $loanAmount;
}
return [
'down_payment' => round($downPayment, 2),
'loan_amount' => round($loanAmount, 2),
'monthly_payment' => round($monthlyPayment, 2),
'commission' => round($commissionFixed, 2),
'total_payment' => round($totalPayment, 2),
'overpayment' => round($overpayment, 2),
'months' => $months,
'is_zero_percent' => ($overpayment == 0 || $overpayment == $commissionFixed),
];
}
}
Конфигурация вариантов рассрочки
Магазины работают с несколькими банками-партнёрами, каждый предлагает разные условия. Хранение в HL-блоке InstallmentPrograms:
| Поле | Описание |
|---|---|
UF_BANK_NAME |
Банк-партнёр |
UF_MONTHS |
Срок рассрочки |
UF_DOWN_PAYMENT_PCT |
Минимальный первый взнос (%) |
UF_COMMISSION_PCT |
Комиссия за оформление (%) |
UF_MIN_AMOUNT |
Минимальная сумма покупки |
UF_MAX_AMOUNT |
Максимальная сумма |
UF_CATEGORIES |
Категории товаров (можно не везде) |
При выборе суммы калькулятор автоматически отображает доступные программы рассрочки.
UX: отображение вариантов
Интерфейс показывает таблицу сравнения вариантов:
function renderInstallmentTable(programs, amount) {
const rows = programs
.filter(p => amount >= p.min_amount && amount <= p.max_amount)
.map(p => {
const calc = calcInstallment(amount, p.months, p.down_pct, p.commission_pct);
return `
<tr>
<td>${p.bank_name}</td>
<td>${p.months} мес.</td>
<td>${formatMoney(calc.down_payment)} (${p.down_pct}%)</td>
<td>${formatMoney(calc.monthly_payment)}/мес.</td>
<td>${calc.overpayment > 0 ? formatMoney(calc.overpayment) : '0 ₽'}</td>
<td><button onclick="selectProgram(${p.id})">Выбрать</button></td>
</tr>
`;
});
document.getElementById('installment-table').innerHTML = rows.join('');
}
Интеграция с корзиной Битрикс
Для интернет-магазинов калькулятор рассрочки встраивается в страницу товара и корзину. Выбранный вариант рассрочки сохраняется в свойствах заказа:
// Сохранение выбранной программы рассрочки в свойство заказа
$order = \Bitrix\Sale\Order::load($orderId);
$propertyCollection = $order->getPropertyCollection();
$installmentProp = $propertyCollection->getItemByOrderPropertyCode('INSTALLMENT_PROGRAM');
if ($installmentProp) {
$installmentProp->setValue(json_encode([
'bank' => $bankName,
'months' => $months,
'payment' => $monthlyPayment,
]));
}
$order->save();
Виджет рассрочки в карточке товара
Минимальный платёж показывается прямо на странице товара — это стандартная практика e-commerce:
// В шаблоне товара
$minMonthlyPayment = InstallmentCalculator::getMinMonthlyPayment(
$arResult['ITEM_PRICES'][0]['PRICE'],
$availablePrograms
);
if ($minMonthlyPayment) {
echo "от {$minMonthlyPayment} ₽/мес. в рассрочку";
}
Сроки
| Задача | Срок |
|---|---|
| Базовый калькулятор рассрочки (1–2 программы, страница товара) | 3–5 дней |
| Калькулятор с несколькими банками, таблицей сравнения, интеграцией в корзину | 1.5–2 недели |
| Полная система рассрочки с онлайн-заявкой в банк через API | 3–6 недель |
Калькулятор рассрочки снижает психологический барьер перед крупными покупками. Вместо «120 000 рублей сразу» клиент видит «5 000 рублей в месяц» — и это разные решения.







