Внутренний счёт — это персональный денежный баланс покупателя внутри интернет-магазина на 1С-Битрикс. С него оплачивают заказы, на него возвращают средства и зачисляют бонусы. В личном кабинете за счёт отвечает компонент bitrix:sale.personal.account, а деньги хранятся в отдельной таблице модуля sale.
Что такое внутренний счёт и зачем он нужен
Внутренний счёт (внутренний баланс) — механизм модуля Интернет-магазин (sale), который хранит для каждого пользователя сумму денег в разрезе валют. Это не платёжная система в привычном смысле, а «кошелёк» покупателя внутри сайта: клиент кладёт туда деньги заранее и потом расплачивается за заказы без повторного ввода карты.
Типичные сценарии применения:
- Предоплата и депозит — оптовый покупатель пополняет счёт крупной суммой, а дальше оформляет заказы «в одно касание».
- Возвраты — при отмене заказа деньги возвращаются не на карту, а на внутренний счёт, откуда их можно снова пустить в оборот.
- Бонусы и компенсации — зачисление за акции, ошибки логистики, программу лояльности.
Важно не путать внутренний счёт с накопительными скидками и бонусными баллами: счёт — это реальные деньги в валюте магазина, а не процент скидки.
Где хранится баланс: таблицы и API
Баланс лежит в таблице b_sale_user_account. Ключевые поля — USER_ID, CURRENT_BUDGET (текущая сумма) и CURRENCY (валюта). У одного пользователя может быть несколько записей — по одной на валюту, поэтому счёт всегда «привязан» к конкретной валюте магазина.
Для работы с балансом из кода используйте объектный API вместо прямых SQL-запросов:
\Bitrix\Sale\Internals\UserAccountTable— ORM-доступ к записям счёта;CSaleUserAccount::UpdateAccount()и::Pay()— устаревший, но всё ещё рабочий процедурный слой пополнения и списания;- история движений пишется в
b_sale_user_transact(таблица транзакций) — по ней видно, откуда пришли и куда ушли деньги.
b_sale_user_account, и b_sale_user_transact. Прямой UPDATE по таблице оставит счёт без истории и рассинхронизирует данные.Компонент sale.personal.account на странице ЛК
За вывод страницы отвечает компонент bitrix:sale.personal.account. В стандартных решениях (например, «Аспро», типовой eshop) он подключён внутри комплексного компонента bitrix:sale.personal.section на странице вида /personal/account/. Компонент показывает текущий баланс покупателя, список валют и историю транзакций.
Основные параметры при подключении:
| Параметр | Назначение |
|---|---|
PATH_TO_BASKET | Ссылка на корзину для перехода к оформлению |
PATH_TO_ORDER | Страница оформления заказа |
SET_TITLE | Задавать ли заголовок страницы |
CACHE_TYPE / CACHE_TIME | Кэширование вывода компонента |
Шаблон по умолчанию лежит в /bitrix/components/bitrix/sale.personal.account/templates/.default/. Копируйте его в свой шаблон сайта перед правками разметки, чтобы обновления ядра не затирали изменения.
Как пополнить счёт: платёжная система пополнения
Пополнение счёта в Битрикс реализуют не отдельной кнопкой, а через служебный заказ. Схема такая: покупатель создаёт «заказ на пополнение», оплачивает его любой обычной платёжной системой (банковская карта, ЮKassa, СБП), а после успешной оплаты система зачисляет сумму на его внутренний счёт.
- В
Магазин → Настройки → Платёжные системыпроверьте, что нужные ПС включены. - Создаётся заказ-пополнение, привязанный к пользователю; при подтверждении оплаты его сумма уходит в
CURRENT_BUDGET. - Зачисление логируется транзакцией с указанием источника.
inner), которым потом оплачивают заказы. Это две разные сущности: одна кладёт деньги на счёт, вторая — списывает.Оплата заказа со счёта: обработчик inner
Чтобы покупатель мог рассчитаться балансом, в магазине должна быть настроена платёжная система с обработчиком «Внутренний счёт покупателя» (системный код inner). Настройка — в разделе Магазин → Настройки → Платёжные системы, тип обработчика выбирается из списка при создании ПС.
Как это выглядит для клиента:
- на шаге оплаты появляется способ «Оплатить с внутреннего счёта»;
- компонент проверяет достаточность средств в валюте заказа;
- при оплате баланс уменьшается, заказ помечается оплаченным, создаётся расходная транзакция.
Если денег на счёте не хватает, часть решений позволяет доплатить остаток другой ПС — но это уже логика конкретного шаблона оформления заказа, а не самого обработчика inner. По умолчанию оплата возможна только при полном покрытии суммы.
Возвраты и списания на счёт
Внутренний счёт особенно удобен для возвратов. Когда менеджер отменяет оплату заказа в админке, Битрикс предлагает вернуть средства именно на внутренний счёт покупателя — это быстрее и дешевле, чем возврат на карту через эквайринг.
Что учитывать при работе с возвратами:
- возврат создаёт приходную транзакцию в
b_sale_user_transact— сумма и валюта фиксируются; - деньги на счёте покупатель может сразу потратить на новый заказ;
- для «живого» вывода денег со счёта наружу штатного механизма нет — это делается вручную бухгалтерией или кастомной доработкой.
b_sale_user_account с бухгалтерией. Внутренний счёт — это обязательства магазина перед клиентами, и «повисшие» деньги должны быть под контролем.Типичные проблемы и отладка
Что чаще всего ломается на странице внутреннего счёта:
- Не видно способа «Внутренний счёт» на оплате — не создана ПС с обработчиком
innerили она ограничена по типу плательщика/валюте. - Баланс не в той валюте — счёт хранится по валютам, и заказ в другой валюте им не оплатить; проверьте настройки модуля
currency. - Расхождение суммы и истории — почти всегда следствие прямых правок таблицы в обход API.
- Пустая страница ЛК — не подключён компонент или у пользователя нет ни одной записи в
b_sale_user_account(счёт создаётся при первой операции).
Для диагностики включите Отладка → Показывать SQL и логирование ошибок; операции со счётом проверяйте по таблице транзакций, а не по одному лишь текущему балансу.
Итог
Внутренний счёт в 1С-Битрикс — это деньги покупателя в разрезе валют, которые хранятся в b_sale_user_account, движутся через транзакции b_sale_user_transact и выводятся в кабинете компонентом bitrix:sale.personal.account. Пополнение идёт через оплату служебного заказа, списание — через обработчик inner, а возвраты удобно заворачивать обратно на баланс. Ключевое правило — работать только через API и держать баланс в согласии с бухгалтерией.
Если нужно внедрить внутренний счёт «под ключ», связать его с оптовой предоплатой и обменом с учётной системой или починить рассинхронизацию баланса, мы поможем: спроектируем логику, настроим платёжные системы и обеспечим корректный учёт средств.
Частые вопросы
Чем внутренний счёт отличается от бонусных баллов?
Счёт хранит реальные деньги в валюте магазина, которыми оплачивают заказы напрямую. Бонусные баллы — это условная единица программы лояльности с отдельными правилами начисления и списания.
В какой таблице хранится баланс покупателя?
Текущий баланс лежит в b_sale_user_account в поле CURRENT_BUDGET с привязкой к USER_ID и CURRENCY. История движений пишется в b_sale_user_transact.
Как включить оплату заказа со счёта?
В разделе Магазин → Настройки → Платёжные системы создайте платёжную систему с обработчиком «Внутренний счёт покупателя» (inner). После этого способ появится на шаге оплаты.
Можно ли оплатить заказ, если на счёте не хватает денег?
По умолчанию обработчик inner требует полного покрытия суммы заказа. Доплата остатка другой платёжной системой возможна только через кастомную логику оформления заказа.
Как пополнить внутренний счёт?
Покупатель оформляет служебный заказ на пополнение и оплачивает его обычной платёжной системой. После подтверждения оплаты сумма зачисляется на баланс.
Работает ли счёт с несколькими валютами?
Да, баланс хранится по валютам: у пользователя может быть отдельная запись на каждую валюту. Заказ в другой валюте этим счётом оплатить нельзя.
Что делать при расхождении баланса и истории транзакций?
Почти всегда причина — прямые SQL-правки таблицы в обход API. Меняйте баланс только через UserAccountTable или CSaleUserAccount, чтобы транзакции писались корректно.
Можно ли вывести деньги со счёта обратно клиенту?
Штатного механизма вывода наружу нет — счёт рассчитан на траты внутри магазина. Возврат живых денег делается вручную бухгалтерией или отдельной доработкой.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.