Схема работы интернет-магазина и основные объекты
- API модуля
- Основные пространства имен модуля
- Основная схема заказа
- Жизненный цикл заказа
- Коллекции внутри заказа
- Связь с ORM-классами
- Карты ORM-классов
- Схема связей ORM-классов
- Основные поля ORM-классов
- Настройки заказа
- Как работают свойства заказа
- Как работают оплаты
- Как работают отгрузки и службы доставки
- Как работают скидки и купоны
- Связь с каталогом и резервированием
- События и пересчеты при сохранении
Модуль Интернет-магазин sale использует заказ как центральный объект продажи. Заказ объединяет корзину, свойства покупателя, оплаты, отгрузки, скидки, купоны, статусы и историю изменений.
Перед изучением схемы заказа прочитайте Введение и базовые концепции. Для задач с товарами, ценами и остатками используйте статью Схема работы торгового каталога и основные объекты.
Основные блоки:
API модуля
Для изменения заказа используйте объектную модель. Для отчетов и списков подходят ORM-классы. Сервисы модуля возвращают настройки платежных систем, служб доставки и касс.
Подробнее об API модуля читайте в статье Как выбрать API интернет-магазина.
Основные пространства имен модуля
Для работы с заказом используйте классы из пространства имен Bitrix\Sale. Они образуют объектную модель заказа и связанных коллекций.
use Bitrix\Sale\Order; // Заказ
use Bitrix\Sale\Basket; // Корзина
use Bitrix\Sale\BasketItem; // Позиция корзины
use Bitrix\Sale\Fuser; // Покупатель корзины
use Bitrix\Sale\PropertyValueCollection; // Значения свойств заказа
use Bitrix\Sale\PaymentCollection; // Коллекция оплат
use Bitrix\Sale\Payment; // Оплата
use Bitrix\Sale\ShipmentCollection; // Коллекция отгрузок
use Bitrix\Sale\Shipment; // Отгрузка
use Bitrix\Sale\Discount; // Расчет правил работы с корзиной
Для чтения табличных данных используйте ORM-классы из пространства имен Bitrix\Sale\Internals.
use Bitrix\Sale\Internals\OrderTable; // Заказы
use Bitrix\Sale\Internals\BasketTable; // Позиции корзины и заказа
use Bitrix\Sale\Internals\PaymentTable; // Оплаты
use Bitrix\Sale\Internals\PayableItemTable; // Привязка оплаты к позициям или отгрузкам
use Bitrix\Sale\Internals\ShipmentTable; // Отгрузки
use Bitrix\Sale\Internals\ShipmentItemTable; // Позиции отгрузок
use Bitrix\Sale\Internals\OrderPropsTable; // Настройки свойств заказа
use Bitrix\Sale\Internals\OrderPropsValueTable; // Значения свойств заказа
use Bitrix\Sale\Internals\OrderDiscountTable; // Сохраненные скидки заказа
use Bitrix\Sale\Internals\OrderCouponsTable; // Купоны заказа
use Bitrix\Sale\Internals\OrderRulesTable; // Результаты применения правил скидок
Отдельные подсистемы модуля находятся в собственных пространствах имен.
|
Пространство имен |
Что содержит |
|
|
Платежные системы, обработчики оплат и результаты работы платежных систем |
|
|
Службы доставки и менеджер служб доставки |
|
|
Онлайн-кассы, чеки и менеджеры фискальных документов |
|
|
Сервисы резервирования и расчета доступного количества |
|
|
Служебные помощники модуля, в том числе очистка устаревших резервов |
Основная схема заказа
Корзина существует до оформления заказа. После создания заказа корзина становится частью заказа, а остальные данные добавляются через коллекции заказа.
Basket
-> BasketItem
Order
-> Basket
-> PropertyValueCollection
-> PaymentCollection
-> Payment
-> ShipmentCollection
-> Shipment
-> Discount
Объект Order хранит идентификатор сайта, покупателя, тип плательщика, валюту, статус, сумму и связи с дочерними объектами. Коллекции не нужно создавать отдельно от заказа: заказ загружает или создает их через свои методы.
|
Объект |
Роль в модели заказа |
|
|
Объединяет корзину, свойства, оплаты, отгрузки, скидки, статусы и историю продажи |
|
|
Хранит позиции покупателя до оформления и передает их в заказ через |
|
|
Хранит одну позицию корзины: товар, торговое предложение или услугу, количество, цену, валюту и данные поставщика |
|
|
Хранит значения свойств заказа для выбранного типа плательщика |
|
|
Хранит оплаты заказа и создает объекты оплаты |
|
|
Хранит сумму оплаты, валюту, платежную систему и состояние оплаты |
|
|
Хранит отгрузки заказа и создает объекты |
|
|
Хранит службу доставки, стоимость доставки, состав доставляемых позиций и состояние отгрузки |
|
|
Рассчитывает правила работы с корзиной, скидки и купоны для корзины или заказа |
Жизненный цикл заказа
Типовой сценарий начинается с корзины и заканчивается сохранением заказа.
-
Создайте или загрузите корзину через
Basket. -
Добавьте в корзину товары и торговые предложения как позиции
BasketItem. -
Создайте заказ методом
Order::create()и передайте в него корзину методомOrder::setBasket(). -
Задайте в заказе тип плательщика. От типа плательщика зависят свойства заказа, доступные платежные системы и службы доставки.
-
Заполните значения свойств через
PropertyValueCollection. -
Создайте отгрузки через
ShipmentCollection, выберите службу доставки и рассчитайте ее стоимость. Позиции отгрузки связывают отгрузку с позициями корзины. -
Создайте оплату через
PaymentCollection, установите текущую сумму заказа и выберите платежную систему с учетом ограничений. -
Выполните финальный расчет через
Order::doFinalAction(true), чтобы применить скидки, обновить налоги и итоговые суммы. -
Запишите итоговую сумму заказа в оплату и повторно проверьте доступность выбранных служб доставки и платежных систем.
-
Сохраните заказ через
Order::save().
Такой двухэтапный порядок нужен, когда ограничения сервисов зависят от состава и суммы заказа. До финального расчета код отсеивает заведомо недоступные варианты. После расчета он синхронизирует сумму оплаты и проверяет выбранные сервисы по итоговому состоянию заказа. Если сценарий не создает оплату или пользовательскую отгрузку при первом сохранении, пропустите соответствующие шаги.
При сохранении заказ:
-
проверяет данные,
-
вызывает события до и после сохранения,
-
сохраняет дочерние объекты и скидки,
-
обновляет историю,
-
обрабатывает отложенные события.
В реализации Order::save() также вызывается провайдер каталога, который обрабатывает товарные данные заказа.
Коллекции внутри заказа
Коллекции описывают внутреннюю структуру заказа. Заказ хранит ссылки на корзину, свойства, оплаты и отгрузки и управляет их изменениями как единым набором данных. При пересчете и сохранении заказ учитывает добавленные, измененные и удаленные элементы коллекций.
|
Метод заказа |
Что возвращает |
Назначение |
|
|
|
Получает корзину, связанную с заказом |
|
|
|
Передает подготовленную корзину в новый несохраненный заказ В сохраненном заказе изменение корзины требует проверки отгрузок, оплат, скидок и итоговой суммы. |
|
|
|
Возвращает свойства заказа для чтения или заполнения |
|
|
|
Возвращает коллекцию для создания, чтения или изменения оплат заказа |
|
|
|
Возвращает коллекцию для создания, чтения или изменения отгрузок заказа |
Оплата и отгрузка относятся к заказу. Не создавайте их как независимые записи в таблицах при оформлении покупки через объекты заказа.
Связь с ORM-классами
Объектная модель использует таблицы модуля как слой хранения. С ними работают ORM-классы в пространстве имен Bitrix\Sale\Internals.
|
Объект заказа |
Основной ORM-класс |
Что хранит |
|
|
|
Позиции корзины и заказа |
|
|
|
Основные поля заказа: сайт, покупатель, тип плательщика, статус, суммы и служебные признаки |
|
|
|
Оплаты заказа |
|
|
|
Отгрузки заказа |
|
|
|
Настройки свойств заказа |
|
|
|
Значения свойств конкретного заказа |
Используйте ORM-классы для быстрых выборок заказов, оплат, отгрузок и настроек свойств. Например, отчет может читать OrderTable и PaymentTable, не создавая полный объект заказа.
Для изменения заказа используйте объектную модель. Если изменить только OrderTable, система не узнает о связанных изменениях в корзине, оплатах, отгрузках, скидках и истории.
Карты ORM-классов
Каждый ORM-класс содержит метод getMap(). Он возвращает описание структуры таблицы: поля, типы полей, связи с другими объектами, значения по умолчанию, валидаторы и модификаторы данных.
ORM использует карту, чтобы:
-
строить SQL-запросы,
-
преобразовывать данные между PHP и базой данных,
-
проверять типы и обязательность полей,
-
применять значения по умолчанию,
-
подключать связи с другими таблицами.
ORM-классы модуля sale описывают карты в двух форматах. Часть классов описывает поля как массивы с ключами data_type, required, values, validation. Часть классов использует объекты полей, например IntegerField, StringField, BooleanField, EnumField, FloatField, DatetimeField и ReferenceField.
Пример. Фрагмент карты класса OrderTable:
return [
new \Bitrix\Main\Entity\IntegerField(
'USER_ID',
[
'required' => true,
]
),
new \Bitrix\Main\Entity\BooleanField(
'PAYED',
[
'values' => ['N', 'Y'],
'default_value' => 'N',
]
),
new \Bitrix\Main\Entity\ReferenceField(
'PAYMENT',
'Bitrix\Sale\Internals\Payment',
[
'=ref.ORDER_ID' => 'this.ID',
]
),
];
В карте есть разные типы элементов.
|
Тип элемента карты |
Что означает |
Пример |
|
Поле хранения |
Колонка таблицы, которую ORM читает или сохраняет |
|
|
Вычисляемое поле |
Значение, которое ORM вычисляет в SQL-запросе. Оно не является отдельной колонкой хранения |
|
|
Связь |
Описание связи с другой таблицей или объектом ORM |
|
В разделах ниже описаны основные поля хранения. Кроме них, карты ORM содержат вычисляемые поля и связи для выборок: пользователей, статусов, корзины, оплат, отгрузок, свойств, скидок и купонов.
Схема связей ORM-классов
Объект заказа сохраняется в несколько связанных таблиц. Связи строятся от OrderTable: корзина, оплаты, отгрузки, свойства и результаты скидок ссылаются на заказ по ORDER_ID или через связанные идентификаторы.
OrderTable
-> BasketTable
ORDER_ID = OrderTable.ID
-> PaymentTable
ORDER_ID = OrderTable.ID
-> PayableItemTable
PAYMENT_ID = PaymentTable.ID
ENTITY_TYPE = BASKET_ITEM или SHIPMENT
-> ShipmentTable
ORDER_ID = OrderTable.ID
-> ShipmentItemTable
ORDER_DELIVERY_ID = ShipmentTable.ID
BASKET_ID = BasketTable.ID
-> OrderPropsValueTable
ORDER_ID = OrderTable.ID
ORDER_PROPS_ID = OrderPropsTable.ID
-> OrderCouponsTable
ORDER_ID = OrderTable.ID
ORDER_DISCOUNT_ID = OrderDiscountTable.ID
-> OrderDiscountDataTable
ORDER_ID = OrderTable.ID
-> OrderRulesTable
ORDER_ID = OrderTable.ID
ORDER_DISCOUNT_ID = OrderDiscountTable.ID
-> OrderRulesDescrTable
ORDER_ID = OrderTable.ID
ORDER_DISCOUNT_ID = OrderDiscountTable.ID
RULE_ID = OrderRulesTable.ID
OrderDiscountTable
ID используется как ORDER_DISCOUNT_ID в связанных таблицах
Настройки свойств, статусов, платежных систем и служб доставки хранятся отдельно от заказа. Заказ и его дочерние объекты ссылаются на эти настройки по идентификаторам: PERSON_TYPE_ID, STATUS_ID, PAY_SYSTEM_ID, DELIVERY_ID, ORDER_PROPS_ID.
Заказ нельзя корректно изменить одной записью через OrderTable. При сохранении вместе с ним обновляются корзина, оплаты, отгрузки, свойства, скидки, купоны, история и служебные признаки.
Основные поля ORM-классов
Данные заказа распределены между несколькими ORM-классами.
В таблицах обязательные поля отмечены *. Поля-связи ORM и вычисляемые поля используются для выборок, но не являются отдельными колонками хранения.
Заказ
Класс Bitrix\Sale\Internals\OrderTable хранит основные поля заказа: покупателя, сайт, тип плательщика, статус, суммы, признаки оплаты, доставки, отмены и служебные данные обмена.
|
Поле |
Тип данных |
Описание |
|
|
int |
Идентификатор заказа. Первичный ключ записи |
|
|
string |
Идентификатор сайта, на котором создан заказ |
|
|
string(100) |
Номер заказа для отображения и поиска. Может отличаться от числового |
|
|
string |
Трек-номер заказа, если он хранится на уровне заказа. В объектной модели трекинг относится к отгрузке |
|
|
int |
Идентификатор платежной системы на уровне заказа. Поле сохраняют для совместимости. В объектной модели оплаты хранятся в |
|
|
int |
Идентификатор службы доставки на уровне заказа. Поле сохраняют для совместимости. В объектной модели отгрузки хранятся в |
|
|
string |
Идентификатор типа плательщика. Тип плательщика определяет свойства заказа, доступные платежные системы и службы доставки |
|
|
int |
Идентификатор пользователя, для которого создан заказ |
|
|
datetime |
Дата и время создания заказа |
|
|
datetime |
Дата и время последнего изменения заказа |
|
|
string |
Идентификатор статуса заказа. Связан со статусами модуля |
|
|
datetime |
Дата и время последнего изменения статуса заказа |
|
|
int |
Идентификатор пользователя, который изменил статус заказа |
|
|
bool |
Флаг полной оплаты заказа. Возможные значения:
Значение по умолчанию — |
|
|
bool |
Служебный флаг синхронизации с Битрикс24. Возможные значения:
Значение по умолчанию — |
|
|
datetime |
Дата и время оплаты заказа |
|
|
int |
Идентификатор пользователя, который установил оплату заказа |
|
|
bool |
Флаг отгрузки или списания товаров по заказу. Возможные значения:
Значение по умолчанию — |
|
|
datetime |
Дата и время изменения флага |
|
|
int |
Идентификатор пользователя, который изменил флаг |
|
|
string |
Причина отмены отгрузки или списания |
|
|
bool |
Флаг разрешения доставки. Возможные значения:
Значение по умолчанию — |
|
|
datetime |
Дата и время разрешения доставки |
|
|
int |
Идентификатор пользователя, который разрешил доставку |
|
|
bool |
Флаг резервирования товаров заказа. Возможные значения:
Значение по умолчанию — |
|
|
float |
Итоговая сумма заказа. Значение по умолчанию — |
|
|
float |
Стоимость доставки заказа |
|
|
string(3) |
Валюта заказа |
|
|
float |
Сумма скидки, которая хранится на уровне заказа. Значение по умолчанию — |
|
|
float |
Сумма налогов заказа |
|
|
float |
Сумма уже оплаченных платежей по заказу |
|
|
string(2000) |
Комментарий покупателя к заказу |
|
|
string(20) |
Номер платежного документа |
|
|
date |
Дата платежного документа |
|
|
string |
Дополнительная информация по заказу |
|
|
string |
Служебный комментарий к заказу |
|
|
int |
Идентификатор компании, связанной с заказом |
|
|
int |
Идентификатор пользователя, который создал заказ |
|
|
int |
Идентификатор ответственного пользователя |
|
|
string |
Идентификатор статистики, если заказ связан с модулем статистики или аналитическим сценарием |
|
|
date |
Дата, до которой нужно оплатить заказ |
|
|
date |
Дата выставления счета |
|
|
bool |
Флаг регулярного заказа. Возможные значения:
Значение по умолчанию — |
|
|
int |
Идентификатор связанной записи регулярной оплаты или заказа |
|
|
int |
Идентификатор пользователя, который заблокировал заказ для редактирования |
|
|
datetime |
Дата и время блокировки заказа |
|
|
bool |
Флаг отмены заказа. Возможные значения:
Значение по умолчанию — |
|
|
datetime |
Дата и время отмены заказа |
|
|
int |
Идентификатор пользователя, который отменил заказ |
|
|
string |
Причина отмены заказа |
|
|
bool |
Флаг проблемы в заказе. Возможные значения:
Значение по умолчанию — |
|
|
datetime |
Дата и время установки флага |
|
|
int |
Идентификатор пользователя, который установил флаг |
|
|
string |
Причина пометки заказа как проблемного |
|
|
bool |
Флаг необходимости пересчета заказа. Возможные значения:
|
|
|
int |
Идентификатор аффилиата, если заказ связан с партнерской программой |
|
|
string(20) |
Номер документа доставки |
|
|
datetime |
Дата документа доставки |
|
|
bool |
Флаг обновления из 1С. Возможные значения:
|
|
|
string |
Тема заказа. Используется в служебных сценариях и интеграциях |
|
|
string |
Внешний идентификатор заказа |
|
|
string |
Идентификатор заказа в 1С |
|
|
string |
Версия данных заказа из обмена с 1С |
|
|
int |
Внутренняя версия записи заказа |
|
|
bool |
Флаг внешнего заказа. Возможные значения:
|
|
|
int |
Идентификатор склада, если заказ связан со складом |
|
|
string |
Идентификатор посетителя или пользователя в служебных сценариях модуля |
|
|
text |
Текст для поиска по заказу |
|
|
bool |
Служебный флаг обработки заказа. Возможные значения:
Значение по умолчанию — |
Корзина
Класс Bitrix\Sale\Internals\BasketTable хранит позиции до оформления и позиции, которые уже связаны с заказом через поле ORDER_ID.
|
Поле |
Тип данных |
Описание |
|
|
int |
Идентификатор позиции корзины |
|
|
string(2) |
Идентификатор сайта корзины |
|
|
int |
Идентификатор покупателя из |
|
|
int |
Идентификатор заказа. Поле заполнено, когда позиция стала частью заказа |
|
|
int |
Идентификатор товара, торгового предложения или услуги |
|
|
int |
Идентификатор цены товара, если позиция связана с ценой каталога |
|
|
int |
Идентификатор типа цены |
|
|
string |
Название позиции корзины |
|
|
float |
Цена позиции после расчета |
|
|
float |
Базовая цена позиции до скидок |
|
|
string(3) |
Валюта цены позиции |
|
|
float |
Количество товара или услуги в позиции |
|
|
float |
Вес позиции |
|
|
bool |
Флаг включения НДС в цену. Возможные значения:
|
|
|
float |
Ставка НДС в долях единицы. Например, |
|
|
datetime |
Дата и время создания позиции |
|
|
datetime |
Дата и время последнего изменения позиции |
|
|
datetime |
Дата и время последнего обновления позиции |
|
|
bool |
Флаг отложенной позиции. Возможные значения:
|
|
|
bool |
Флаг возможности купить позицию. Возможные значения:
|
|
|
string |
Группа кодов маркировки для позиции корзины |
|
|
string |
Код модуля-поставщика товара. Для товаров каталога обычно используется |
|
|
string |
Класс провайдера товара, который проверяет цену, доступность, остатки и другие товарные данные |
|
|
string |
Служебная пометка позиции, например данные типа цены |
|
|
string |
URL детальной страницы товара |
|
|
float |
Сумма скидки на единицу позиции. Значение по умолчанию — |
|
|
string(255) |
Название примененной скидки |
|
|
string(32) |
Значение скидки в текстовом виде |
|
|
string(32) |
Купон, который применился к позиции |
|
|
string |
Внешний идентификатор каталога |
|
|
string |
Внешний идентификатор товара |
|
|
bool |
Флаг подписки на отсутствующий товар. Возможные значения:
|
|
|
bool |
Флаг резервирования позиции. Возможные значения:
|
|
|
float |
Зарезервированное количество по позиции |
|
|
bool |
Флаг работы с несколькими штрихкодами. Возможные значения:
|
|
|
bool |
Флаг ручной цены. Возможные значения:
|
|
|
string |
Сериализованные габариты товара |
|
|
int |
Тип позиции корзины. Используется для товаров, услуг, комплектов и служебных строк |
|
|
int |
Идентификатор родительской позиции комплекта или набора |
|
|
int |
Код единицы измерения |
|
|
string |
Название единицы измерения |
|
|
string |
Имя функции обратного вызова для обновления данных позиции |
|
|
string |
Имя функции обратного вызова для оформления заказа |
|
|
string |
Имя функции обратного вызова для отмены заказа |
|
|
string |
Имя функции обратного вызова для обработки оплаты |
|
|
string |
Идентификатор рекомендации, по которой товар попал в корзину |
|
|
int |
Сортировка позиции. Значение по умолчанию — |
|
|
string |
Внешний идентификатор позиции |
Оплата
Класс Bitrix\Sale\Internals\PaymentTable хранит оплаты заказа. У одного заказа может быть несколько оплат.
|
Поле |
Тип данных |
Описание |
|
|
int |
Идентификатор оплаты |
|
|
int |
Идентификатор заказа, к которому относится оплата |
|
|
string(100) |
Номер оплаты для отображения и поиска |
|
|
bool |
Флаг оплаты. Возможные значения:
Значение по умолчанию — |
|
|
datetime |
Дата и время оплаты |
|
|
int |
Идентификатор пользователя, который установил оплату |
|
|
int |
Идентификатор платежной системы |
|
|
string(128) |
Название платежной системы, сохраненное в оплате |
|
|
float |
Сумма оплаты. Значение по умолчанию — |
|
|
string(3) |
Валюта оплаты |
|
|
float |
Сумма наложенного платежа, если сценарий ее использует |
|
|
bool |
Статус платежной системы. Возможные значения:
|
|
|
string(255) |
Код статуса, полученный от платежной системы |
|
|
string |
Идентификатор счета или платежа во внешней платежной системе |
|
|
string(512) |
Описание статуса платежной системы |
|
|
string(250) |
Сообщение платежной системы |
|
|
float |
Сумма, которую вернула платежная система |
|
|
string(3) |
Валюта, которую вернула платежная система |
|
|
datetime |
Дата и время ответа платежной системы |
|
|
string(255) |
Токен рекуррентного платежа |
|
|
string(64) |
Маскированный номер карты или другой идентификатор платежного средства |
|
|
string(20) |
Номер платежного документа |
|
|
date |
Дата платежного документа |
|
|
date |
Дата, до которой нужно выполнить оплату |
|
|
datetime |
Дата выставления счета на оплату |
|
|
string(255) |
Внешний идентификатор оплаты |
|
|
int |
Идентификатор ответственного пользователя |
|
|
int |
Идентификатор пользователя, который назначил ответственного |
|
|
datetime |
Дата и время назначения ответственного |
|
|
string |
Комментарий к оплате |
|
|
int |
Идентификатор компании, связанной с оплатой |
|
|
string(20) |
Номер документа возврата оплаты |
|
|
date |
Дата документа возврата оплаты |
|
|
int |
Идентификатор пользователя, который оформил возврат |
|
|
string |
Комментарий к возврату оплаты |
|
|
enum |
Состояние возврата. Возможные значения:
Значение по умолчанию — |
|
|
bool |
Флаг проблемы в оплате. Возможные значения:
Значение по умолчанию — |
|
|
datetime |
Дата и время установки флага |
|
|
int |
Идентификатор пользователя, который установил флаг |
|
|
string(255) |
Причина пометки оплаты как проблемной |
|
|
bool |
Флаг обновления из 1С. Возможные значения:
|
|
|
string |
Идентификатор оплаты в 1С |
|
|
string |
Версия данных оплаты из обмена с 1С |
|
|
enum |
Признак внешней оплаты. Возможные значения:
|
Привязка оплаты к позициям
Класс Bitrix\Sale\Internals\PayableItemTable связывает оплату с оплачиваемой позицией корзины или отгрузкой.
|
Поле |
Тип данных |
Описание |
|
|
int |
Идентификатор записи привязки |
|
|
int |
Идентификатор оплаты из |
|
|
int |
Идентификатор оплачиваемого объекта. Значение зависит от поля |
|
|
enum |
Тип оплачиваемого объекта. Возможные значения:
|
|
|
datetime |
Дата и время создания привязки |
|
|
float |
Количество оплачиваемого товара или услуги |
|
|
string |
Внешний идентификатор записи привязки |
Отгрузка
Класс Bitrix\Sale\Internals\ShipmentTable хранит отгрузки заказа. У одного заказа может быть несколько отгрузок.
|
Поле |
Тип данных |
Описание |
|
|
int |
Идентификатор отгрузки |
|
|
int |
Идентификатор заказа, к которому относится отгрузка |
|
|
string(100) |
Номер отгрузки для отображения и поиска |
|
|
datetime |
Дата и время создания отгрузки |
|
|
datetime |
Дата и время последнего изменения отгрузки |
|
|
string(2) |
Идентификатор статуса отгрузки |
|
|
string(50) |
Код или идентификатор местоположения доставки |
|
|
int |
Идентификатор службы доставки |
|
|
string(255) |
Название службы доставки, сохраненное в отгрузке |
|
|
float |
Базовая стоимость доставки до скидок и ручных изменений |
|
|
float |
Итоговая стоимость доставки |
|
|
bool |
Флаг ручной стоимости доставки. Возможные значения:
Значение по умолчанию — |
|
|
string(3) |
Валюта стоимости доставки |
|
|
float |
Сумма скидки на доставку |
|
|
float |
Вес отгрузки. Значение по умолчанию — |
|
|
bool |
Флаг разрешения доставки. Возможные значения:
Значение по умолчанию — |
|
|
datetime |
Дата и время разрешения доставки |
|
|
int |
Идентификатор пользователя, который разрешил доставку |
|
|
bool |
Флаг списания или отгрузки товаров. Возможные значения:
Значение по умолчанию — |
|
|
datetime |
Дата и время изменения флага |
|
|
int |
Идентификатор пользователя, который изменил флаг |
|
|
string(255) |
Причина отмены списания или отгрузки |
|
|
bool |
Флаг резервирования отгрузки. Возможные значения:
Значение по умолчанию — |
|
|
string(20) |
Номер документа доставки |
|
|
datetime |
Дата документа доставки |
|
|
string(255) |
Трек-номер отправления |
|
|
int |
Статус трекинга |
|
|
string(255) |
Описание статуса трекинга |
|
|
datetime |
Дата и время последней проверки трекинга |
|
|
datetime |
Дата и время последнего изменения трекинга |
|
|
text |
Сериализованные параметры отгрузки |
|
|
bool |
Флаг отмены отгрузки. Возможные значения:
Значение по умолчанию — |
|
|
datetime |
Дата и время отмены отгрузки |
|
|
int |
Идентификатор пользователя, который отменил отгрузку |
|
|
string(255) |
Причина отмены отгрузки |
|
|
bool |
Флаг проблемы в отгрузке. Возможные значения:
Значение по умолчанию — |
|
|
datetime |
Дата и время установки флага |
|
|
int |
Идентификатор пользователя, который установил флаг |
|
|
string(255) |
Причина пометки отгрузки как проблемной |
|
|
bool |
Флаг системной отгрузки. Возможные значения:
Значение по умолчанию — |
|
|
int |
Идентификатор ответственного пользователя |
|
|
string |
Комментарий к отгрузке |
|
|
int |
Идентификатор компании, связанной с отгрузкой |
|
|
bool |
Флаг обновления из 1С. Возможные значения:
|
|
|
string(255) |
Внешний идентификатор отгрузки |
|
|
string |
Идентификатор отгрузки в 1С |
|
|
string |
Версия данных отгрузки из обмена с 1С |
|
|
bool |
Флаг внешней доставки. Возможные значения:
|
Позиции отгрузки
Класс Bitrix\Sale\Internals\ShipmentItemTable связывает отгрузку с позициями корзины и хранит количество товара в конкретной отгрузке.
|
Поле |
Тип данных |
Описание |
|
|
int |
Идентификатор позиции отгрузки |
|
|
int |
Идентификатор отгрузки из |
|
|
int |
Идентификатор позиции корзины из |
|
|
datetime |
Дата и время создания позиции отгрузки |
|
|
float |
Количество позиции корзины, которое входит в отгрузку |
|
|
float |
Зарезервированное количество по позиции отгрузки |
|
|
string |
Внешний идентификатор позиции отгрузки |
Свойства заказа
Класс Bitrix\Sale\Internals\OrderPropsTable хранит настройки свойств заказа и отгрузки. Значения этих свойств для конкретного заказа хранятся отдельно.
|
Поле |
Тип данных |
Описание |
|
|
int |
Идентификатор свойства |
|
|
int |
Идентификатор типа плательщика, для которого доступно свойство |
|
|
string(255) |
Название свойства |
|
|
string(20) |
Тип свойства. Тип определяет формат ввода и хранения значения |
|
|
bool |
Флаг обязательного свойства. Возможные значения:
|
|
|
string |
Значение свойства по умолчанию. Массивы сохраняются в сериализованном виде |
|
|
int |
Сортировка свойства в списках и формах |
|
|
bool |
Флаг сохранения свойства в профиле покупателя. Возможные значения:
|
|
|
bool |
Флаг свойства местоположения. Возможные значения:
|
|
|
int |
Идентификатор группы свойств |
|
|
string(255) |
Описание свойства |
|
|
bool |
Флаг свойства e-mail покупателя. Возможные значения:
|
|
|
bool |
Флаг свойства имени профиля покупателя. Возможные значения:
|
|
|
bool |
Флаг свойства плательщика. Возможные значения:
|
|
|
bool |
Флаг местоположения для расчета налогов. Возможные значения:
|
|
|
bool |
Флаг использования свойства в фильтрах. Возможные значения:
Для множественного свойства система сбрасывает этот флаг в |
|
|
string(50) |
Символьный код свойства. Используется для поиска свойства в коде |
|
|
bool |
Флаг свойства почтового индекса. Возможные значения:
|
|
|
bool |
Флаг свойства телефона. Возможные значения:
|
|
|
bool |
Флаг адресного свойства. Возможные значения:
|
|
|
bool |
Флаг адреса отправления. Возможные значения:
|
|
|
bool |
Флаг адреса получения. Возможные значения:
|
|
|
bool |
Флаг активности свойства. Возможные значения:
|
|
|
bool |
Флаг служебного свойства. Возможные значения:
|
|
|
int |
Идентификатор поля ввода местоположения, если свойство связано с местоположением |
|
|
bool |
Флаг множественного свойства. Возможные значения:
|
|
|
string |
Сериализованные настройки свойства. При чтении ORM преобразует значение в массив |
|
|
string |
Область применения свойства. Для свойств заказа используют |
|
|
string |
Внешний идентификатор свойства |
|
|
enum |
Тип объекта, для которого задано свойство. Возможные значения:
Значение по умолчанию — |
Значения свойств заказа
Класс Bitrix\Sale\Internals\OrderPropsValueTable хранит значения свойств конкретного заказа или отгрузки.
|
Поле |
Тип данных |
Описание |
|
|
int |
Идентификатор значения свойства |
|
|
int |
Идентификатор заказа |
|
|
int |
Идентификатор настройки свойства из |
|
|
string(255) |
Название свойства, сохраненное вместе со значением |
|
|
string |
Значение свойства. Массивы сохраняются в сериализованном виде, а при чтении ORM может преобразовать их обратно |
|
|
string(50) |
Символьный код свойства, сохраненный вместе со значением |
|
|
string |
Внешний идентификатор значения свойства |
|
|
int |
Идентификатор объекта, к которому относится значение. Для заказа обычно совпадает с |
|
|
enum |
Тип объекта, для которого хранится значение. Возможные значения:
|
Настройки заказа
Ниже перечислены восемь ORM-классов для настроек заказа и профилей покупателя. В соответствующих таблицах хранятся типы плательщиков, статусы, группы свойств, варианты значений и сохраненные профили. Эти данные обычно настраивают до оформления заказа, а при создании заказа используют их идентификаторы.
|
ORM-класс |
Что хранит |
|
|
Типы плательщиков. Тип плательщика определяет набор свойств заказа и участвует в выборе доступных платежных систем и служб доставки |
|
|
Коды статусов заказов и отгрузок |
|
|
Названия и описания статусов для языков сайта |
|
|
Группы свойств заказа для типа плательщика |
|
|
Варианты значений для свойств заказа со списком значений |
|
|
Привязки свойств заказа к платежным системам, службам доставки, лендингам и торговым платформам |
|
|
Профили покупателя: сохраненные наборы значений свойств для пользователя и типа плательщика |
|
|
Значения свойств внутри профиля покупателя |
Типы плательщиков
Класс Bitrix\Sale\Internals\PersonTypeTable предоставляет ORM-доступ к типам плательщиков. В заказе связь с типом плательщика хранится в поле PERSON_TYPE_ID. Тип плательщика определяет, какие свойства нужно заполнить для заказа. Например, для физических и юридических лиц обычно используют разные наборы свойств.
|
Поле |
Тип |
Описание |
|
|
integer |
Идентификатор типа плательщика. Первичный ключ, заполняется автоматически |
|
|
string |
Идентификатор сайта. Длина до двух символов |
|
|
string |
Название типа плательщика. Длина до 255 символов |
|
|
string |
Символьный код типа плательщика |
|
|
integer |
Индекс сортировки |
|
|
boolean |
Активность типа плательщика. Возможные значения:
|
|
|
string |
Внешний идентификатор типа плательщика |
|
|
string |
Область применения типа плательщика. Для заказов используют |
Статусы заказов и отгрузок
Класс Bitrix\Sale\Internals\StatusTable хранит статусы заказов и отгрузок. Назначение статуса задает поле TYPE:
-
O— статус заказа, -
D— статус отгрузки.
В заказе текущий статус хранится в OrderTable.STATUS_ID, в отгрузке — в ShipmentTable.STATUS_ID.
|
Поле |
Тип |
Описание |
|
|
string |
Код статуса. Первичный ключ. Допускаются 1 или 2 латинские буквы |
|
|
string |
Тип статуса. Значение по умолчанию —
|
|
|
integer |
Индекс сортировки. Значение по умолчанию — |
|
|
boolean |
Отправлять уведомление при установке статуса. Значение по умолчанию —
|
|
|
string |
Цвет статуса в интерфейсе |
|
|
string |
Внешний идентификатор статуса |
ORM-класс Bitrix\Sale\Internals\StatusLangTable хранит названия статусов.
|
Поле |
Тип |
Описание |
|
|
string |
Код статуса. Часть составного первичного ключа |
|
|
string |
Код языка. Часть составного первичного ключа |
|
|
string |
Название статуса на языке |
|
|
string |
Описание статуса |
Группы, варианты и привязки свойств
Класс Bitrix\Sale\Internals\OrderPropsGroupTable предоставляет ORM-доступ к группам свойств. Свойства заказа можно группировать по типу плательщика. Группа влияет на организацию свойств в интерфейсе и хранит связь с типом плательщика через PERSON_TYPE_ID.
|
Поле |
Тип |
Описание |
|
|
integer |
Идентификатор группы свойств. Первичный ключ, заполняется автоматически |
|
|
integer |
Идентификатор типа плательщика |
|
|
string |
Название группы. Длина от 1 до 255 символов |
|
|
string |
Символьный код группы. Длина до 50 символов |
|
|
integer |
Индекс сортировки |
Если свойство заказа использует фиксированный список значений, варианты хранятся отдельно от настройки свойства.
Класс Bitrix\Sale\Internals\OrderPropsVariantTable хранит варианты значений свойств.
|
Поле |
Тип |
Описание |
|
|
integer |
Идентификатор варианта. Первичный ключ, заполняется автоматически |
|
|
integer |
Идентификатор свойства заказа |
|
|
string |
Название варианта |
|
|
string |
Значение варианта |
|
|
integer |
Индекс сортировки. Значение по умолчанию — |
|
|
string |
Описание варианта |
|
|
string |
Внешний идентификатор |
Класс Bitrix\Sale\Internals\OrderPropsRelationTable хранит привязки свойств к другим настройкам. Класс использует составной первичный ключ из полей PROPERTY_ID, ENTITY_ID и ENTITY_TYPE.
|
Поле |
Тип |
Описание |
|
|
integer |
Идентификатор свойства заказа. Часть составного первичного ключа |
|
|
string |
Идентификатор связанного объекта настройки. Часть составного первичного ключа |
|
|
string |
Тип связанного объекта настройки. Возможные значения:
|
Профили покупателя
Профиль покупателя — сохраненный набор значений свойств заказа для пользователя и типа плательщика. Профили помогают подставлять данные покупателя при следующем оформлении заказа. Текущие значения конкретного заказа при этом хранятся отдельно, в OrderPropsValueTable.
Класс Bitrix\Sale\Internals\UserPropsTable предоставляет ORM-доступ к профилям покупателей.
|
Поле |
Тип |
Описание |
|
|
integer |
Идентификатор профиля покупателя. Первичный ключ, заполняется автоматически |
|
|
string |
Название профиля. Длина от 1 до 255 символов |
|
|
integer |
Идентификатор пользователя |
|
|
integer |
Идентификатор типа плательщика |
|
|
datetime |
Дата изменения профиля |
|
|
string |
Внешний идентификатор |
|
|
string |
Версия данных обмена с 1С |
Класс Bitrix\Sale\Internals\UserPropsValueTable хранит значения свойств профиля покупателя.
|
Поле |
Тип |
Описание |
|
|
integer |
Идентификатор значения профиля. Первичный ключ, заполняется автоматически |
|
|
integer |
Идентификатор профиля покупателя |
|
|
integer |
Идентификатор свойства заказа |
|
|
string |
Название значения профиля. Длина от 1 до 255 символов |
|
|
string |
Значение свойства в профиле |
Как работают свойства заказа
Свойства добавляют к заказу данные, которых нет в основных полях заказа. Например, через свойства хранят e-mail, телефон, адрес, местоположение и реквизиты плательщика.
У свойства есть настройка и значение.
-
Настройка описывает, какое поле доступно в заказе: для какого типа плательщика, с каким типом ввода, в какой группе, обязательно ли его заполнять и какую роль оно выполняет.
-
Значение хранит данные конкретного заказа или отгрузки.
Класс OrderPropsTable хранит настройки свойств. Класс OrderPropsValueTable хранит значения свойств. В объектной модели значения меняют через PropertyValueCollection, которую возвращает Order::getPropertyCollection(). Коллекция сохраняет значения вместе с заказом и учитывает настройки свойств выбранного типа плательщика.
Тип плательщика определяет набор доступных свойств. Перед заполнением PropertyValueCollection задайте тип плательщика в заказе.
Типы свойств
Тип свойства задает формат значения и способ его обработки. Его указывают в поле OrderPropsTable.TYPE.
|
Тип |
Когда использовать |
Особенности хранения |
|
|
Строковое значение: имя, e-mail, комментарий, простой идентификатор |
Значение хранится в |
|
|
Числовое значение |
Значение хранится в |
|
|
Логический выбор |
Значение обычно хранится как |
|
|
Выбор из заранее заданного списка |
Варианты списка хранятся в |
|
|
Загруженный файл |
Для множественного свойства значение может преобразовываться в массив идентификаторов или данных файла |
|
|
Дата |
Значение хранится в |
|
|
Местоположение для доставки или налогов |
Обычно используется вместе с флагами |
|
|
Адрес |
Может использоваться вместе с адресными флагами |
|
|
Пользовательское поле |
Формат значения зависит от настройки пользовательского поля |
Флаги свойств
Флаги уточняют роль свойства в сценариях оформления и обработки заказа. Например, модуль может определить, какое свойство хранит e-mail покупателя, телефон, адрес или местоположение для расчета налогов. Одно свойство может использовать несколько флагов.
|
Флаг |
Что означает |
|
|
Свойство нужно заполнить перед сохранением или оформлением заказа |
|
|
Значение свойства можно сохранять в профиле покупателя |
|
|
Свойство хранит местоположение доставки |
|
|
Свойство хранит местоположение для расчета налогов |
|
|
Свойство хранит e-mail покупателя |
|
|
Свойство хранит название профиля покупателя |
|
|
Свойство хранит имя или название плательщика |
|
|
Свойство хранит почтовый индекс |
|
|
Свойство хранит телефон |
|
|
Свойство хранит адрес |
|
|
Свойство хранит адрес отправления |
|
|
Свойство хранит адрес получения |
|
|
Свойство можно использовать в фильтрах. Для множественного свойства модуль сбрасывает этот флаг в |
|
|
Свойство активно и участвует в сценариях оформления |
|
|
Свойство служебное |
|
|
Свойство может хранить несколько значений |
Свойства заказа и отгрузки
Одни свойства относятся к заказу, другие — к отгрузке. Поле ENTITY_TYPE показывает, где используется свойство.
-
ORDER— свойство заказа, -
SHIPMENT— свойство отгрузки.
В OrderPropsTable поле ENTITY_TYPE задает область применения настройки свойства. В OrderPropsValueTable это же поле показывает, к какому объекту относится сохраненное значение.
Как работают оплаты
Оплата — дочерний объект заказа. Один заказ может содержать одну или несколько оплат. Каждая оплата хранит сумму, валюту, платежную систему, признаки оплаты и служебные данные платежного документа.
Оплаты создают и меняют через коллекцию PaymentCollection, которую возвращает метод заказа Order::getPaymentCollection().
Платежные системы подключаются классом Bitrix\Sale\PaySystem\Manager. Менеджер возвращает настроенный объект Bitrix\Sale\PaySystem\Service с обработчиком.
|
Объект |
Роль |
|
|
Коллекция оплат заказа. Создает оплаты и считает общую сумму оплат через |
|
|
Одна оплата заказа. Хранит сумму, валюту, платежную систему, статус оплаты и идентификаторы платежного документа |
|
|
Возвращает список платежных систем и объект платежной системы по идентификатору. Может учитывать ограничения платежных систем для заказа или оплаты |
|
|
Настроенная платежная система с обработчиком |
|
|
Базовый класс обработчика платежной системы |
|
|
Результат работы платежной системы. Метод |
Для чтения оплат используйте PaymentTable. При изменении оплаты работайте через PaymentCollection и Payment, чтобы заказ сохранил связанные изменения, события и историю.
Оплата может быть связана с оплачиваемыми объектами через PayableItemCollection. Запись привязки указывает, какой объект связан с конкретной оплатой: позиция корзины или отгрузка. Для позиции корзины количество в привязке не должно превышать количество этой позиции в корзине. Для отгрузки количество фиксируется как 1, потому что оплачивается сама отгрузка.
Как работают отгрузки и службы доставки
Отгрузка — дочерний объект заказа, который описывает доставку части или всех позиций корзины. Отгрузка хранит службу доставки, стоимость доставки, статус, признаки разрешения доставки, трекинг и состав отгружаемых позиций.
Отгрузки создают и меняют через коллекцию ShipmentCollection, которую возвращает метод заказа Order::getShipmentCollection().
Службы доставки подключаются классом Bitrix\Sale\Delivery\Services\Manager.
|
Объект |
Роль |
|
|
Коллекция отгрузок заказа. Создает отгрузки и управляет их состоянием |
|
|
Одна отгрузка заказа. Хранит службу доставки, стоимость, статус, трекинг и коллекцию позиций отгрузки |
|
|
Коллекция позиций отгрузки. Связывает отгрузку с позициями корзины |
|
|
Одна позиция отгрузки: ссылка на позицию корзины, количество и резерв |
|
|
Возвращает список служб доставки и объект службы доставки по идентификатору |
|
|
Базовый класс службы доставки |
Для отчетов по отгрузкам используйте ShipmentTable и ShipmentItemTable. При изменении доставки работайте через ShipmentCollection и Shipment, чтобы состав отгрузок и пересчеты остались согласованными с заказом.
В коллекции отгрузок есть системная отгрузка. Если ее нет, ShipmentCollection создает ее автоматически и помечает полем SYSTEM = 'Y'. Такая отгрузка нужна объектной модели для внутреннего распределения позиций. В пользовательских сценариях доставки обычно работают с несистемными отгрузками, у которых задана служба доставки и состав доставляемых позиций.
Как работают скидки и купоны
Объект Bitrix\Sale\Discount рассчитывает скидки в заказе. В типовом сценарии перед сохранением заказа вызывается метод Order::doFinalAction(true). Внутри этого действия заказ получает объект скидок, запускает расчет через Discount::calculate() и применяет результат к заказу.
Перед расчетом Order::doFinalAction() выполняет накопленные действия заказа. После успешного расчета скидок метод применяет результат к корзине и заказу, а затем обновляет налоговые данные. Если в заказе нет значимых изменений, метод завершается без полного пересчета.
Скидки влияют на корзину и итоговую сумму заказа. Правила скидок также могут затрагивать доставку, если такой результат предусмотрен примененными правилами. После расчета скидок заказ пересчитывает налоговые данные. Поэтому скидки нельзя корректно применить прямой записью в хранилище: расчет должен пройти через объект заказа и корзину.
|
Класс |
Что хранит или выполняет |
|
|
Рассчитывает правила работы с корзиной для корзины или заказа |
|
|
Управляет купонами, которые участвуют в расчете скидок |
|
|
Сохраняет результат расчета скидок заказа |
|
|
Сохраненные скидки заказа |
|
|
Купоны, примененные или сохраненные для заказа |
|
|
Модули, участвующие в сохраненных скидках заказа |
|
|
Служебные данные сохраненных скидок заказа |
|
|
Результаты применения правил скидок |
|
|
Описания примененных правил скидок |
Сохраненные скидки заказа нужны для истории и повторного отображения результата. Они не заменяют настройку правил скидок в продукте и не должны использоваться как основной способ пересчитать заказ.
Связь с каталогом и резервированием
Модуль sale оформляет продажу, но товарные данные обычно приходят из модуля catalog: идентификатор товара, цена, валюта, остатки, НДС и провайдер товара. Позиция корзины хранит товарные поля в BasketTable, а при сохранении заказа объектная модель вызывает провайдер каталога для обработки товарных данных.
Если заказ работает с товарами каталога, важно различать три уровня данных.
|
Уровень |
Что хранит |
Где смотреть |
|
Товар каталога |
Товар, торговое предложение, базовые цены, склады и остатки |
Модуль |
|
Позиция корзины |
Товар в корзине или заказе: |
Классы |
|
Позиция отгрузки |
Какое количество позиции корзины входит в конкретную отгрузку и сколько зарезервировано по отгрузке |
|
Резервирование связано с корзиной и отгрузками. В объектной модели для резервов используются классы ReserveQuantity и сервисы из пространства имен Bitrix\Sale\Reservation.
|
Класс |
Роль |
|
|
Объект зарезервированного количества. Сохраняется как часть коллекций заказа |
|
|
Сервис строк резервирования корзины. Добавляет, обновляет и удаляет резерв, а также пишет историю резерва |
|
|
Рассчитывает доступное количество с учетом складских остатков и истории резервирования |
|
|
Пошагово очищает устаревшие резервы |
При изменении количества, отгрузки или резерва работайте через объектную модель заказа. Прямая правка полей RESERVED, RESERVE_QUANTITY или RESERVED_QUANTITY в таблицах не пересчитает связанные коллекции, историю резервов и данные каталога.
События и пересчеты при сохранении
Сохранение заказа не ограничивается записью через OrderTable. Объект заказа выполняет последовательность операций:
-
Вызывает событие перед сохранением заказа.
-
Проверяет данные заказа и дочерних объектов.
-
Передает позиции корзины провайдеру каталога. Провайдер обрабатывает товарные данные, резервы и списание товаров.
-
Добавляет или обновляет запись заказа.
-
Сохраняет дочерние объекты: корзину, свойства, оплаты, отгрузки и связанные коллекции.
-
Сохраняет результат расчета скидок.
-
Генерирует кассовые документы, если они нужны для заказа, и сохраняет признаки проблем у заказа, оплат или отгрузок.
-
Вызывает события после сохранения, обрабатывает отложенные события и обновляет историю.
Изменяйте заказ и связанные объекты через объектную модель, чтобы сохранить согласованность корзины, оплат, отгрузок, скидок и истории. ORM-классы используйте для отчетов и выборок данных.