Налаштування обміну взаєморозрахунками 1С і 1С-Бітрікс
Взаєморозрахунки в особистому кабінеті клієнта — функціональність, затребувана в B2B інтернет-магазинах і оптових порталах. Покупець має бачити поточний борг перед постачальником, історію платежів, заборгованість за конкретними замовленнями. Всі ці дані зберігаються в 1С — і їх потрібно передавати в 1С-Бітрікс.
Дані взаєморозрахунків: що зберігається в 1С
У 1С (УТ, КА, ERP, БП) взаєморозрахунки з контрагентами зберігаються в регістрі накопичення ВзаєморозрахункиЗКонтрагентами. Ключові дані:
- Поточна дебіторська заборгованість — скільки контрагент винен організації
- Кредиторська заборгованість — якщо організація винна контрагенту (переплата, повернення)
- Прострочена заборгованість — заборгованість понад кредитний ліміт або строк
- Історія платежів — коли і скільки платив
- Документи-підстави — рахунки, замовлення, за якими є заборгованість
Стандартний CommerceML-обмін не передає взаєморозрахунки. Це потрібно реалізовувати окремо.
Архітектура рішення
Для передачі взаєморозрахунків у 1С-Бітрікс використовується один із двох підходів:
Підхід 1: HTTP-сервіс 1С. У 1С створюється HTTP-сервіс, який за запитом повертає взаєморозрахунки по конкретному контрагенту. 1С-Бітрікс викликає цей сервіс при відкритті сторінки «Мій баланс» в особистому кабінеті.
// Запит взаєморозрахунків із 1С-Бітрікс
$response = file_get_contents(
"https://1c.example.com/ut/hs/balance/get?counterparty_id={$guid}&key={$apiKey}"
);
$balance = json_decode($response, true);
Перевага: дані завжди актуальні. Недолік: залежність від доступності сервера 1С.
Підхід 2: Періодична синхронізація. Регламентне завдання в 1С формує файл із даними взаєморозрахунків і передає в 1С-Бітрікс (через FTP, API або прямий запит до скрипту). 1С-Бітрікс зберігає дані у своїй БД і показує клієнту.
Перевага: незалежність від доступності 1С у момент завантаження сторінки. Недолік: дані із затримкою (рівною інтервалу синхронізації, зазвичай 30–60 хвилин).
Реалізація в 1С-Бітрікс: структура даних
Для зберігання взаєморозрахунків у 1С-Бітрікс рекомендую створити HighloadBlock — наприклад, ContractorBalance:
| Поле | Тип | Опис |
|---|---|---|
| UF_CONTRACTOR_XML_ID | Рядок | GUID контрагента в 1С |
| UF_BITRIX_USER_ID | Ціле | ID користувача 1С-Бітрікс |
| UF_DEBT | Decimal | Поточний борг |
| UF_OVERDUE_DEBT | Decimal | Прострочений борг |
| UF_CREDIT_LIMIT | Decimal | Кредитний ліміт |
| UF_LAST_PAYMENT_DATE | Дата | Дата останнього платежу |
| UF_LAST_PAYMENT_SUM | Decimal | Сума останнього платежу |
| UF_UPDATED_AT | Datetime | Час останнього оновлення |
Для історії платежів — окремий HighloadBlock ContractorPayments із записами по кожному платежу.
Прив'язка контрагента до користувача 1С-Бітрікс
Головне технічне завдання: знати, який користувач 1С-Бітрікс відповідає якому контрагенту в 1С. Варіанти:
-
За XML_ID користувача. При реєстрації на сайті створюється контрагент у 1С (через REST API), його GUID зберігається в профілі користувача 1С-Бітрікс (поле
UF_1C_CONTRACTOR_ID). -
За ІПН. Користувач при реєстрації вводить ІПН, система шукає контрагента в 1С за ІПН.
-
Ручне зіставлення. Адміністратор у 1С-Бітрікс вручну прив'язує користувача до контрагента. Підходить для B2B з невеликою кількістю клієнтів.
Кредитний ліміт і заборона замовлення
Популярний сценарій: якщо у контрагента є прострочена заборгованість — забороняти оформлення нових замовлень на сайті. Або: якщо борг перевищує кредитний ліміт — показувати попередження.
Реалізація через подію 1С-Бітрікс OnSaleOrderBeforeSaved:
AddEventHandler('sale', 'OnSaleOrderBeforeSaved', 'checkDebtLimit');
function checkDebtLimit(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$userId = $order->getUserId();
$debt = getContractorDebt($userId);
$limit = getContractorCreditLimit($userId);
if ($debt['overdue'] > 0) {
$result = $event->getParameter('RESULT');
$result->addError(new \Bitrix\Main\Error(
'Оформлення замовлення недоступне: є прострочена заборгованість'
));
}
}
Кейс: оптовий портал будівельних матеріалів
B2B-портал: 300 активних контрагентів, кожен із кредитним лімітом. Завдання: показувати в особистому кабінеті баланс і забороняти замовлення при перевищенні ліміту.
Використали підхід з HTTP-сервісом 1С для отримання поточного боргу в реальному часі. Кешували відповідь на 10 хвилин (Redis). При оформленні замовлення — завжди свіжий запит, без кешу.
Додатково: на сторінці особистого кабінету виводили деталізацію — список відкритих рахунків із сумами та датами оплати. Дані з HighloadBlock, що оновлюється раз на годину.
Результат: менеджери перестали вручну інформувати клієнтів про борги. Клієнти самі бачать заборгованість і самостійно оплачують до оформлення нового замовлення. Кількість дзвінків «чому не можу замовити» скоротилась.







