Розробка калькулятора розстрочки на 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 гривень на місяць» — і це різні рішення.







