DiscountCouponTable
DiscountCouponTable — D7 ORM-класс в Битрикс Sale для создания и получения купонов. Поля, типы купонов TYPE_ONE_ORDER, методы add(), getList(), generateCoupon().
DiscountCouponTable — D7 ORM-класс модуля «Интернет-магазин» (sale) в 1С-Битрикс для создания, получения и управления купонами скидок. Расположен в пространстве имён BitrixSaleInternals. Работает с таблицей базы данных b_sale_discount_coupon.
Ключевые поля таблицы купонов Битрикс
| Поле | Тип | Описание |
|---|---|---|
ID | int | Первичный ключ, автоинкремент |
DISCOUNT_ID | int | ID правила скидки из b_sale_discount |
COUPON | string | Код купона (уникальный) |
TYPE | int | Тип купона: 1 = один заказ, 2 = один пользователь, 3 = многоразовый |
MAX_USE | int | Максимальное количество использований |
USE_COUNT | int | Фактическое количество использований |
USER_ID | int | Привязка к конкретному пользователю (0 — для всех) |
ACTIVE | Y/N | Активен ли купон |
ACTIVE_FROM | DateTime | Дата начала действия |
ACTIVE_TO | DateTime | Дата окончания действия |
DESCRIPTION | string | Произвольный комментарий администратора |
Константы типов купонов DiscountCouponTable
DiscountCouponTable::TYPE_ONE_ORDER(1) — купон применяется только в одном заказе, после чего деактивируется. Наиболее распространённый тип для персональных купонов.DiscountCouponTable::TYPE_ONE_USER(2) — купон может применить только один конкретный пользователь, но неограниченное количество раз.DiscountCouponTable::TYPE_MULTI_USE(3) — купон могут использовать любые пользователи неограниченное количество раз (или до исчерпанияMAX_USE).
Основные методы DiscountCouponTable
DiscountCouponTable::add(array $data) — создаёт новый купон. Возвращает объект BitrixMainORMDataAddResult. Проверяйте успех через $result->isSuccess(), ошибки — через $result->getErrorMessages().
DiscountCouponTable::getList(array $params) — выборка купонов с фильтрацией, сортировкой и ограничением. Параметры аналогичны любому D7 ORM getList: ключи select, filter, order, limit.
DiscountCouponTable::generateCoupon(bool $upper = false) — генерирует уникальный случайный код купона. При true возвращает код в верхнем регистре. Перед вставкой в БД уникальность подтверждается проверкой на существование.
Пример создания одноразового купона ко дню рождения
<?php
use Bitrix\Main\Type\DateTime;
use Bitrix\Sale\Internals\DiscountCouponTable;
$userId = 42;
$discountId = 125;
$birthdayDate = new \DateTimeImmutable('2026-07-01');
$couponCode = DiscountCouponTable::generateCoupon(true);
$activeTo = DateTime::createFromPhp(
\DateTime::createFromImmutable(
$birthdayDate->modify('+5 days')->setTime(23, 59, 59)
)
);
$result = DiscountCouponTable::add([
'DISCOUNT_ID' => $discountId,
'ACTIVE' => 'Y',
'ACTIVE_FROM' => new DateTime(),
'ACTIVE_TO' => $activeTo,
'COUPON' => $couponCode,
'TYPE' => DiscountCouponTable::TYPE_ONE_ORDER,
'MAX_USE' => 1,
'USER_ID' => $userId,
'DESCRIPTION' => 'birthday_coupon:user=' . $userId . ';year=2026',
]);
if ($result->isSuccess()) {
echo 'Купон создан: ' . $couponCode;
} else {
echo 'Ошибка: ' . implode('; ', $result->getErrorMessages());
}
Для использования класса необходимо подключить модуль sale через Loader::includeModule('sale'). Без этого вызова класс DiscountCouponTable будет недоступен и PHP выбросит ошибку класса не найден.